source: proiecte/HadoopJUnit/hadoop-0.20.1/src/core/org/apache/hadoop/record/compiler/JType.java @ 120

Last change on this file since 120 was 120, checked in by (none), 14 years ago

Added the mail files for the Hadoop JUNit Project

  • Property svn:executable set to *
File size: 6.1 KB
Line 
1/**
2 * Licensed to the Apache Software Foundation (ASF) under one
3 * or more contributor license agreements.  See the NOTICE file
4 * distributed with this work for additional information
5 * regarding copyright ownership.  The ASF licenses this file
6 * to you under the Apache License, Version 2.0 (the
7 * "License"); you may not use this file except in compliance
8 * with the License.  You may obtain a copy of the License at
9 *
10 *     http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
17 */
18
19package org.apache.hadoop.record.compiler;
20
21import java.util.Map;
22
23
24/**
25 * Abstract Base class for all types supported by Hadoop Record I/O.
26 */
27abstract public class JType {
28 
29  static String toCamelCase(String name) {
30    char firstChar = name.charAt(0);
31    if (Character.isLowerCase(firstChar)) {
32      return ""+Character.toUpperCase(firstChar) + name.substring(1);
33    }
34    return name;
35  }
36 
37  JavaType javaType;
38  CppType cppType;
39  CType cType;
40 
41  abstract class JavaType {
42    private String name;
43    private String methodSuffix;
44    private String wrapper;
45    private String typeIDByteString; // points to TypeID.RIOType
46   
47    JavaType(String javaname,
48        String suffix,
49        String wrapper, 
50        String typeIDByteString) { 
51      this.name = javaname;
52      this.methodSuffix = suffix;
53      this.wrapper = wrapper;
54      this.typeIDByteString = typeIDByteString;
55    }
56
57    void genDecl(CodeBuffer cb, String fname) {
58      cb.append("private "+name+" "+fname+";\n");
59    }
60   
61    void genStaticTypeInfo(CodeBuffer cb, String fname) {
62      cb.append(Consts.RTI_VAR + ".addField(\"" + fname + "\", " +
63          getTypeIDObjectString() + ");\n");
64    }
65   
66    abstract String getTypeIDObjectString();
67   
68    void genSetRTIFilter(CodeBuffer cb, Map<String, Integer> nestedStructMap) {
69      // do nothing by default
70      return;
71    }
72
73    /*void genRtiFieldCondition(CodeBuffer cb, String fname, int ct) {
74      cb.append("if ((tInfo.fieldID.equals(\"" + fname + "\")) && (typeVal ==" +
75          " org.apache.hadoop.record.meta." + getTypeIDByteString() + ")) {\n");
76      cb.append("rtiFilterFields[i] = " + ct + ";\n");
77      cb.append("}\n");
78    }
79
80    void genRtiNestedFieldCondition(CodeBuffer cb, String varName, int ct) {
81      cb.append("if (" + varName + ".getElementTypeID().getTypeVal() == " +
82          "org.apache.hadoop.record.meta." + getTypeIDByteString() +
83          ") {\n");
84      cb.append("rtiFilterFields[i] = " + ct + ";\n");
85      cb.append("}\n"); 
86    }*/
87
88    void genConstructorParam(CodeBuffer cb, String fname) {
89      cb.append("final "+name+" "+fname);
90    }
91   
92    void genGetSet(CodeBuffer cb, String fname) {
93      cb.append("public "+name+" get"+toCamelCase(fname)+"() {\n");
94      cb.append("return "+fname+";\n");
95      cb.append("}\n");
96      cb.append("public void set"+toCamelCase(fname)+"(final "+name+" "+fname+") {\n");
97      cb.append("this."+fname+"="+fname+";\n");
98      cb.append("}\n");
99    }
100   
101    String getType() {
102      return name;
103    }
104   
105    String getWrapperType() {
106      return wrapper;
107    }
108   
109    String getMethodSuffix() {
110      return methodSuffix;
111    }
112   
113    String getTypeIDByteString() {
114      return typeIDByteString;
115    }
116   
117    void genWriteMethod(CodeBuffer cb, String fname, String tag) {
118      cb.append(Consts.RECORD_OUTPUT + ".write"+methodSuffix + 
119          "("+fname+",\""+tag+"\");\n");
120    }
121   
122    void genReadMethod(CodeBuffer cb, String fname, String tag, boolean decl) {
123      if (decl) {
124        cb.append(name+" "+fname+";\n");
125      }
126      cb.append(fname+"=" + Consts.RECORD_INPUT + ".read" + 
127          methodSuffix+"(\""+tag+"\");\n");
128    }
129   
130    void genCompareTo(CodeBuffer cb, String fname, String other) {
131      cb.append(Consts.RIO_PREFIX + "ret = ("+fname+" == "+other+")? 0 :(("+
132          fname+"<"+other+")?-1:1);\n");
133    }
134   
135    abstract void genCompareBytes(CodeBuffer cb);
136   
137    abstract void genSlurpBytes(CodeBuffer cb, String b, String s, String l);
138   
139    void genEquals(CodeBuffer cb, String fname, String peer) {
140      cb.append(Consts.RIO_PREFIX + "ret = ("+fname+"=="+peer+");\n");
141    }
142   
143    void genHashCode(CodeBuffer cb, String fname) {
144      cb.append(Consts.RIO_PREFIX + "ret = (int)"+fname+";\n");
145    }
146   
147    void genConstructorSet(CodeBuffer cb, String fname) {
148      cb.append("this."+fname+" = "+fname+";\n");
149    }
150   
151    void genClone(CodeBuffer cb, String fname) {
152      cb.append(Consts.RIO_PREFIX + "other."+fname+" = this."+fname+";\n");
153    }
154  }
155 
156  abstract class CppType {
157    private String name;
158   
159    CppType(String cppname) {
160      name = cppname;
161    }
162   
163    void genDecl(CodeBuffer cb, String fname) {
164      cb.append(name+" "+fname+";\n");
165    }
166   
167    void genStaticTypeInfo(CodeBuffer cb, String fname) {
168      cb.append("p->addField(new ::std::string(\"" + 
169          fname + "\"), " + getTypeIDObjectString() + ");\n");
170    }
171   
172    void genGetSet(CodeBuffer cb, String fname) {
173      cb.append("virtual "+name+" get"+toCamelCase(fname)+"() const {\n");
174      cb.append("return "+fname+";\n");
175      cb.append("}\n");
176      cb.append("virtual void set"+toCamelCase(fname)+"("+name+" m_) {\n");
177      cb.append(fname+"=m_;\n");
178      cb.append("}\n");
179    }
180   
181    abstract String getTypeIDObjectString();
182
183    void genSetRTIFilter(CodeBuffer cb) {
184      // do nothing by default
185      return;
186    }
187
188    String getType() {
189      return name;
190    }
191  }
192 
193  class CType {
194   
195  }
196 
197  abstract String getSignature();
198 
199  void setJavaType(JavaType jType) {
200    this.javaType = jType;
201  }
202 
203  JavaType getJavaType() {
204    return javaType;
205  }
206 
207  void setCppType(CppType cppType) {
208    this.cppType = cppType;
209  }
210 
211  CppType getCppType() {
212    return cppType;
213  }
214 
215  void setCType(CType cType) {
216    this.cType = cType;
217  }
218 
219  CType getCType() {
220    return cType;
221  }
222}
Note: See TracBrowser for help on using the repository browser.