# Class: com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.opt.AbstractCElementOptimizer

Specialized base optimizer for C elements. Each element contained in the AST method is provided to [#optimizeElement(ICElement, ICElement)](#optimizeElement(ICElement, ICElement)) 

 **Implementation note:** the elements in the AST method tree are processed in a post\-visit fashion.

## Constructor: AbstractCElementOptimizer

Description: Same as [this\(false\)](#AbstractCElementOptimizer(boolean)).

## Constructor: AbstractCElementOptimizer
- parameter: `innerReplacement`, type: `boolean`

Description: Create an element optimizer.
parameter: innerReplacement: if false, `parent.replaceSubElement(elt, new_elt)` will be            called after a successful optimization            \([#optimizeElement(ICElement, ICElement)](#optimizeElement(ICElement, ICElement)) returned non\-null\)

## Protected Method: optimizeBlock
- parameter: `b`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICBlock`
- return type: `int`

Description: Process the block. Sub\-classes should not override the default implementation.
parameter: b: a block of statements
return: the number of optimizations done

## Protected Method: optimizeElement
- parameter: `e`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICElement`
- parameter: `parent`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICElement`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICElement`

Description: Optimize an element. Sub\-classes must implement this method
parameter: e: input element to be optimized
parameter: parent: the parent of the input element
return: non\-null if the element was optimized; null means it was not optimized \(if         `innerReplacement=true` was provided to the constructor, this return value, if         non\-null, must be the input element itself\)

