# Interface: com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICOperation
- Super interfaces: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICLeftExpression`

C AST interface to represent arithmetic and logical expressions.  

  An expression consists of one or two members \(the left and right members\) and an operator. The  left member is optional, and should be null for unary operators.  

  A third member may be specified for [ternary expressions](COperatorType#COND).  

  Examples:    

```

 a + 1
 a * ((int)b - foo())
 !x
 x ^ y | z
 c ? a: b
 
```

## Default Method: checkOperatorType
- parameter: `optype`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.COperatorType`
- return type: `boolean`


## Abstract Method: duplicate
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICOperation`


## Abstract Method: getCountOfOperands
- return type: `int`


## Abstract Method: getExtraOperands
- return type: `java.util.List<com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICExpression>`

Description: 
return: 

## Abstract Method: getFirstOperand
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICExpression`

Description: Get the first operand, never null.

## Abstract Method: getOperands
- return type: `java.util.List<com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICExpression>`


## Abstract Method: getOperator
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICOperator`


## Default Method: getOperatorType
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.COperatorType`


## Abstract Method: getSecondOperand
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICExpression`

Description: Get the second operand, might be null.

## Abstract Method: getThirdOperand
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICExpression`

Description: Get the third operand, might be null.

## Abstract Method: mirror
- parameter: `of`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICOperatorFactory`
- return type: `boolean`

Description: Mirror the operation order, whenever possible. The object is modified.
parameter: of: 
return: true if mirroring was possible, false otherwise

## Abstract Method: reverse
- parameter: `of`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICOperatorFactory`
- return type: `boolean`

Description: Logical negation of the operation, whenever possible. The object is modified.
parameter: of: 
return: true if reversing was possible, false otherwise

## Abstract Method: setExtraOperands
- parameter: `l`, type: `java.util.List<com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICExpression>`

Description: 
parameter: l: 

## Abstract Method: setFirstOperand
- parameter: `e`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICExpression`

Description: 
parameter: e: 

## Abstract Method: setOperator
- parameter: `operator`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICOperator`

Description: Set the operator for the expression. Dangerous method\! the operator type is not checked, it  is the caller's responsibility to do so.
parameter: operator: operator, cannot be null

## Abstract Method: setSecondOperand
- parameter: `e`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICExpression`

Description: 
parameter: e: 

## Abstract Method: setThirdOperand
- parameter: `e`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICExpression`

Description: 
parameter: e: 

