package sharpen.xobotos.api.interop.marshal;
import org.eclipse.jdt.core.dom.ITypeBinding;
import sharpen.core.csharp.ast.*;
import sharpen.xobotos.api.interop.Signature.Flags;
import sharpen.xobotos.api.interop.Signature.Mode;
import sharpen.xobotos.api.interop.glue.AbstractTypeReference;
import sharpen.xobotos.api.interop.glue.TypeReference;
public class MarshalAsBoolean extends MarshalInfo {
public MarshalAsBoolean(ITypeBinding type) {
super(type);
}
@Override
public boolean isPrimitiveType() {
return true;
}
@Override
public CSTypeReferenceExpression getManagedType(Mode mode, Flags flags) {
if (flags == Flags.ELEMENT)
return new CSTypeReference("int");
else
return new CSTypeReference("bool");
}
@Override
public AbstractTypeReference getNativeType(Mode mode, Flags flags) {
if (flags == Flags.ELEMENT)
return new TypeReference("int");
else
return new TypeReference("bool");
}
@Override
public CSExpression marshalIn(CSExpression expr, Mode mode, Flags flags) {
if (flags != Flags.ELEMENT)
return expr;
return new CSConditionalExpression(expr, new CSNumberLiteralExpression("1"),
new CSNumberLiteralExpression("0"));
}
public CSExpression marshalOut(CSExpression expr, Mode mode, Flags flags) {
if (flags != Flags.ELEMENT)
return expr;
return new CSConditionalExpression(expr, new CSBoolLiteralExpression(true),
new CSBoolLiteralExpression(false));
}
}