write binding code
This commit is contained in:
57
CodeGen/BMapBindings/VariableType.java
Normal file
57
CodeGen/BMapBindings/VariableType.java
Normal file
@ -0,0 +1,57 @@
|
||||
import java.util.Collections;
|
||||
|
||||
public class VariableType {
|
||||
/**
|
||||
* The base type of this variable which remove all ending stars.
|
||||
*/
|
||||
private String mBaseType;
|
||||
/**
|
||||
* The pointer level of this type. It is equal with the count of stars.
|
||||
*/
|
||||
private int mPointerLevel;
|
||||
|
||||
public VariableType(String ctype) {
|
||||
fromCType(ctype);
|
||||
}
|
||||
|
||||
private VariableType(String base_type, int pointer_level) {
|
||||
mBaseType = base_type;
|
||||
mPointerLevel = pointer_level;
|
||||
}
|
||||
|
||||
public void fromCType(String ctype) {
|
||||
if (ctype.isEmpty())
|
||||
throw new IllegalArgumentException("empty string can not be parsed.");
|
||||
|
||||
int len = ctype.length();
|
||||
int star_pos = ctype.indexOf('*');
|
||||
if (star_pos == -1) {
|
||||
// no star
|
||||
mBaseType = ctype;
|
||||
mPointerLevel = 0;
|
||||
} else {
|
||||
// has star
|
||||
if (star_pos == 0)
|
||||
throw new IllegalArgumentException("base type not found.");
|
||||
mBaseType = ctype.substring(0, star_pos);
|
||||
mPointerLevel = len - star_pos;
|
||||
}
|
||||
}
|
||||
|
||||
public String toCType() {
|
||||
return mBaseType + String.join("", Collections.nCopies(mPointerLevel, "*"));
|
||||
}
|
||||
|
||||
public String getBaseType() {
|
||||
return mBaseType;
|
||||
}
|
||||
|
||||
public boolean isPointer() {
|
||||
return mPointerLevel != 0;
|
||||
}
|
||||
|
||||
public VariableType getPointerOfThis() {
|
||||
return new VariableType(mBaseType, mPointerLevel);
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user