The Android Open Source Project | edbf3b6 | 2009-03-03 19:31:44 -0800 | [diff] [blame] | 1 |
|
| 2 | import java.util.ArrayList;
|
| 3 | import java.util.List;
|
| 4 |
|
| 5 | public class JFunc {
|
| 6 |
|
| 7 | String className = "com.google.android.gles_jni.GL11Impl";
|
| 8 |
|
| 9 | CFunc cfunc;
|
| 10 | JType ftype;
|
| 11 | String fname;
|
| 12 |
|
| 13 | List<String> argNames = new ArrayList<String>();
|
| 14 | List<JType> argTypes = new ArrayList<JType>();
|
| 15 | List<Integer> argCIndices = new ArrayList<Integer>();
|
| 16 |
|
| 17 | boolean hasBufferArg = false;
|
| 18 | boolean hasTypedBufferArg = false;
|
| 19 | ArrayList<String> bufferArgNames = new ArrayList<String>();
|
| 20 |
|
| 21 | public JFunc(CFunc cfunc) {
|
| 22 | this.cfunc = cfunc;
|
| 23 | }
|
| 24 |
|
| 25 | public CFunc getCFunc() {
|
| 26 | return cfunc;
|
| 27 | }
|
| 28 |
|
| 29 | public void setName(String fname) {
|
| 30 | this.fname = fname;
|
| 31 | }
|
| 32 |
|
| 33 | public String getName() {
|
| 34 | return fname;
|
| 35 | }
|
| 36 |
|
| 37 | public void setType(JType ftype) {
|
| 38 | this.ftype = ftype;
|
| 39 | }
|
| 40 |
|
| 41 | public JType getType() {
|
| 42 | return ftype;
|
| 43 | }
|
| 44 |
|
| 45 | public void setClassName(String className) {
|
| 46 | this.className = className;
|
| 47 | }
|
| 48 |
|
| 49 | public String getClassName() {
|
| 50 | return className;
|
| 51 | }
|
| 52 |
|
| 53 | public boolean hasBufferArg() {
|
| 54 | return hasBufferArg;
|
| 55 | }
|
| 56 |
|
| 57 | public boolean hasTypedBufferArg() {
|
| 58 | return hasTypedBufferArg;
|
| 59 | }
|
| 60 |
|
| 61 | public String getBufferArgName(int index) {
|
| 62 | return bufferArgNames.get(index);
|
| 63 | }
|
| 64 |
|
| 65 | public void addArgument(String argName, JType argType, int cindex) {
|
| 66 | argNames.add(argName);
|
| 67 | argTypes.add(argType);
|
| 68 | argCIndices.add(new Integer(cindex));
|
| 69 |
|
| 70 | if (argType.isBuffer()) {
|
| 71 | hasBufferArg = true;
|
| 72 | bufferArgNames.add(argName);
|
| 73 | }
|
| 74 | if (argType.isTypedBuffer()) {
|
| 75 | hasTypedBufferArg = true;
|
| 76 | bufferArgNames.add(argName);
|
| 77 | }
|
| 78 | }
|
| 79 |
|
| 80 | public int getNumArgs() {
|
| 81 | return argNames.size();
|
| 82 | }
|
| 83 |
|
| 84 | public int getArgIndex(String name) {
|
| 85 | int len = argNames.size();
|
| 86 | for (int i = 0; i < len; i++) {
|
| 87 | if (name.equals(argNames.get(i))) {
|
| 88 | return i;
|
| 89 | }
|
| 90 | }
|
| 91 | return -1;
|
| 92 | }
|
| 93 |
|
| 94 | public String getArgName(int index) {
|
| 95 | return argNames.get(index);
|
| 96 | }
|
| 97 |
|
| 98 | public JType getArgType(int index) {
|
| 99 | return argTypes.get(index);
|
| 100 | }
|
| 101 |
|
| 102 | public int getArgCIndex(int index) {
|
| 103 | return argCIndices.get(index).intValue();
|
| 104 | }
|
| 105 |
|
| 106 | public static JFunc convert(CFunc cfunc, boolean useArray) {
|
| 107 | JFunc jfunc = new JFunc(cfunc);
|
| 108 | jfunc.setName(cfunc.getName());
|
| 109 | jfunc.setType(JType.convert(cfunc.getType(), false));
|
| 110 |
|
| 111 | int numArgs = cfunc.getNumArgs();
|
| 112 | int numOffsets = 0;
|
| 113 | for (int i = 0; i < numArgs; i++) {
|
| 114 | CType cArgType = cfunc.getArgType(i);
|
| 115 | if (cArgType.isTypedPointer() && useArray) {
|
| 116 | ++numOffsets;
|
| 117 | }
|
| 118 | }
|
| 119 |
|
| 120 | for (int i = 0; i < numArgs; i++) {
|
| 121 | String cArgName = cfunc.getArgName(i);
|
| 122 | CType cArgType = cfunc.getArgType(i);
|
| 123 |
|
| 124 | jfunc.addArgument(cArgName, JType.convert(cArgType, useArray), i);
|
| 125 | if (cArgType.isTypedPointer() && useArray) {
|
| 126 | if (numOffsets > 1) {
|
| 127 | jfunc.addArgument(cArgName + "Offset", new JType("int"), i);
|
| 128 | } else {
|
| 129 | jfunc.addArgument("offset", new JType("int"), i);
|
| 130 | }
|
| 131 | }
|
| 132 | }
|
| 133 |
|
| 134 | return jfunc;
|
| 135 | }
|
| 136 |
|
| 137 | public String toString() {
|
| 138 | String s = "Function " + fname + " returns " + ftype + ": ";
|
| 139 | for (int i = 0; i < argNames.size(); i++) {
|
| 140 | if (i > 0) {
|
| 141 | s += ", ";
|
| 142 | }
|
| 143 | s += argTypes.get(i) + " " + argNames.get(i);
|
| 144 | }
|
| 145 | return s;
|
| 146 | }
|
| 147 |
|
| 148 | }
|