JType.java
上传用户:quxuerui
上传日期:2018-01-08
资源大小:41811k
文件大小:6k
源码类别:

网格计算

开发平台:

Java

  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. package org.apache.hadoop.record.compiler;
  19. import java.util.Map;
  20. /**
  21.  * Abstract Base class for all types supported by Hadoop Record I/O.
  22.  */
  23. abstract public class JType {
  24.   
  25.   static String toCamelCase(String name) {
  26.     char firstChar = name.charAt(0);
  27.     if (Character.isLowerCase(firstChar)) {
  28.       return ""+Character.toUpperCase(firstChar) + name.substring(1);
  29.     }
  30.     return name;
  31.   }
  32.   
  33.   JavaType javaType;
  34.   CppType cppType;
  35.   CType cType;
  36.   
  37.   abstract class JavaType {
  38.     private String name;
  39.     private String methodSuffix;
  40.     private String wrapper;
  41.     private String typeIDByteString; // points to TypeID.RIOType 
  42.     
  43.     JavaType(String javaname,
  44.         String suffix,
  45.         String wrapper, 
  46.         String typeIDByteString) { 
  47.       this.name = javaname;
  48.       this.methodSuffix = suffix;
  49.       this.wrapper = wrapper;
  50.       this.typeIDByteString = typeIDByteString;
  51.     }
  52.     void genDecl(CodeBuffer cb, String fname) {
  53.       cb.append("private "+name+" "+fname+";n");
  54.     }
  55.     
  56.     void genStaticTypeInfo(CodeBuffer cb, String fname) {
  57.       cb.append(Consts.RTI_VAR + ".addField("" + fname + "", " +
  58.           getTypeIDObjectString() + ");n");
  59.     }
  60.     
  61.     abstract String getTypeIDObjectString();
  62.     
  63.     void genSetRTIFilter(CodeBuffer cb, Map<String, Integer> nestedStructMap) {
  64.       // do nothing by default
  65.       return;
  66.     }
  67.     /*void genRtiFieldCondition(CodeBuffer cb, String fname, int ct) {
  68.       cb.append("if ((tInfo.fieldID.equals("" + fname + "")) && (typeVal ==" +
  69.           " org.apache.hadoop.record.meta." + getTypeIDByteString() + ")) {n");
  70.       cb.append("rtiFilterFields[i] = " + ct + ";n");
  71.       cb.append("}n");
  72.     }
  73.     void genRtiNestedFieldCondition(CodeBuffer cb, String varName, int ct) {
  74.       cb.append("if (" + varName + ".getElementTypeID().getTypeVal() == " +
  75.           "org.apache.hadoop.record.meta." + getTypeIDByteString() + 
  76.           ") {n");
  77.       cb.append("rtiFilterFields[i] = " + ct + ";n");
  78.       cb.append("}n");  
  79.     }*/
  80.     void genConstructorParam(CodeBuffer cb, String fname) {
  81.       cb.append("final "+name+" "+fname);
  82.     }
  83.     
  84.     void genGetSet(CodeBuffer cb, String fname) {
  85.       cb.append("public "+name+" get"+toCamelCase(fname)+"() {n");
  86.       cb.append("return "+fname+";n");
  87.       cb.append("}n");
  88.       cb.append("public void set"+toCamelCase(fname)+"(final "+name+" "+fname+") {n");
  89.       cb.append("this."+fname+"="+fname+";n");
  90.       cb.append("}n");
  91.     }
  92.     
  93.     String getType() {
  94.       return name;
  95.     }
  96.     
  97.     String getWrapperType() {
  98.       return wrapper;
  99.     }
  100.     
  101.     String getMethodSuffix() {
  102.       return methodSuffix;
  103.     }
  104.     
  105.     String getTypeIDByteString() {
  106.       return typeIDByteString;
  107.     }
  108.     
  109.     void genWriteMethod(CodeBuffer cb, String fname, String tag) {
  110.       cb.append(Consts.RECORD_OUTPUT + ".write"+methodSuffix + 
  111.           "("+fname+",""+tag+"");n");
  112.     }
  113.     
  114.     void genReadMethod(CodeBuffer cb, String fname, String tag, boolean decl) {
  115.       if (decl) {
  116.         cb.append(name+" "+fname+";n");
  117.       }
  118.       cb.append(fname+"=" + Consts.RECORD_INPUT + ".read" + 
  119.           methodSuffix+"(""+tag+"");n");
  120.     }
  121.     
  122.     void genCompareTo(CodeBuffer cb, String fname, String other) {
  123.       cb.append(Consts.RIO_PREFIX + "ret = ("+fname+" == "+other+")? 0 :(("+
  124.           fname+"<"+other+")?-1:1);n");
  125.     }
  126.     
  127.     abstract void genCompareBytes(CodeBuffer cb);
  128.     
  129.     abstract void genSlurpBytes(CodeBuffer cb, String b, String s, String l);
  130.     
  131.     void genEquals(CodeBuffer cb, String fname, String peer) {
  132.       cb.append(Consts.RIO_PREFIX + "ret = ("+fname+"=="+peer+");n");
  133.     }
  134.     
  135.     void genHashCode(CodeBuffer cb, String fname) {
  136.       cb.append(Consts.RIO_PREFIX + "ret = (int)"+fname+";n");
  137.     }
  138.     
  139.     void genConstructorSet(CodeBuffer cb, String fname) {
  140.       cb.append("this."+fname+" = "+fname+";n");
  141.     }
  142.     
  143.     void genClone(CodeBuffer cb, String fname) {
  144.       cb.append(Consts.RIO_PREFIX + "other."+fname+" = this."+fname+";n");
  145.     }
  146.   }
  147.   
  148.   abstract class CppType {
  149.     private String name;
  150.     
  151.     CppType(String cppname) {
  152.       name = cppname;
  153.     }
  154.     
  155.     void genDecl(CodeBuffer cb, String fname) {
  156.       cb.append(name+" "+fname+";n");
  157.     }
  158.     
  159.     void genStaticTypeInfo(CodeBuffer cb, String fname) {
  160.       cb.append("p->addField(new ::std::string("" + 
  161.           fname + ""), " + getTypeIDObjectString() + ");n");
  162.     }
  163.     
  164.     void genGetSet(CodeBuffer cb, String fname) {
  165.       cb.append("virtual "+name+" get"+toCamelCase(fname)+"() const {n");
  166.       cb.append("return "+fname+";n");
  167.       cb.append("}n");
  168.       cb.append("virtual void set"+toCamelCase(fname)+"("+name+" m_) {n");
  169.       cb.append(fname+"=m_;n");
  170.       cb.append("}n");
  171.     }
  172.     
  173.     abstract String getTypeIDObjectString();
  174.     void genSetRTIFilter(CodeBuffer cb) {
  175.       // do nothing by default
  176.       return;
  177.     }
  178.     String getType() {
  179.       return name;
  180.     }
  181.   }
  182.   
  183.   class CType {
  184.     
  185.   }
  186.   
  187.   abstract String getSignature();
  188.   
  189.   void setJavaType(JavaType jType) {
  190.     this.javaType = jType;
  191.   }
  192.   
  193.   JavaType getJavaType() {
  194.     return javaType;
  195.   }
  196.   
  197.   void setCppType(CppType cppType) {
  198.     this.cppType = cppType;
  199.   }
  200.   
  201.   CppType getCppType() {
  202.     return cppType;
  203.   }
  204.   
  205.   void setCType(CType cType) {
  206.     this.cType = cType;
  207.   }
  208.   
  209.   CType getCType() {
  210.     return cType;
  211.   }
  212. }