OSDN Git Service

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