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

网格计算

开发平台:

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. #ifndef TYPEIDS_HH_
  19. #define TYPEIDS_HH_
  20. #include "recordio.hh"
  21. #include "fieldTypeInfo.hh"
  22. namespace hadoop {
  23. class FieldTypeInfo;
  24. /* 
  25.  * enum of types. We define assign values to individual bytes, rather
  26.  * than use enums because we want to make teh values consistent with
  27.  * Java code, so we need to control the values.
  28.  */
  29. const int8_t RIOTYPE_BOOL   = 1;
  30. const int8_t RIOTYPE_BUFFER = 2;
  31. const int8_t RIOTYPE_BYTE   = 3;
  32. const int8_t RIOTYPE_DOUBLE = 4;
  33. const int8_t RIOTYPE_FLOAT  = 5;
  34. const int8_t RIOTYPE_INT    = 6;
  35. const int8_t RIOTYPE_LONG   = 7;
  36. const int8_t RIOTYPE_MAP    = 8;
  37. const int8_t RIOTYPE_STRING = 9;
  38. const int8_t RIOTYPE_STRUCT = 10;
  39. const int8_t RIOTYPE_VECTOR = 11;
  40. /* 
  41.  * Represents typeID for basic types. 
  42.  * Serializes just the single int8_t.
  43.  */
  44. class TypeID {
  45. public: 
  46.   TypeID(int8_t typeVal) {this->typeVal = typeVal;}
  47.   TypeID(const TypeID& t) {this->typeVal = t.typeVal;}
  48.   virtual ~TypeID() {}
  49.   int8_t getTypeVal() const {return typeVal;}
  50.   virtual void serialize(::hadoop::OArchive& a_, const char* tag) const;
  51.   virtual bool operator==(const TypeID& peer_) const;
  52.   virtual TypeID* clone() const {return new TypeID(*this);}
  53.   virtual void print(int space=0) const;
  54.   
  55. protected: 
  56.   int8_t typeVal;
  57. };
  58. /* 
  59.  * no predefined TypeID objects, since memory management becomes difficult. 
  60.  * If some TypeID objects are consts and others are new-ed, becomes hard to 
  61.  * destroy const objects without reference counting. 
  62.  */
  63. /*const TypeID TID_BoolTypeID(RIOTYPE_BOOL);
  64. const TypeID TID_BufferTypeID(RIOTYPE_BUFFER);
  65. const TypeID TID_ByteTypeID(RIOTYPE_BYTE);
  66. const TypeID TID_DoubleTypeID(RIOTYPE_DOUBLE);
  67. const TypeID TID_FloatTypeID(RIOTYPE_FLOAT);
  68. const TypeID TID_IntTypeID(RIOTYPE_INT);
  69. const TypeID TID_LongTypeID(RIOTYPE_LONG);
  70. const TypeID TID_StringTypeID(RIOTYPE_STRING);*/
  71. /* 
  72.  * TypeID for structures
  73.  */
  74. class StructTypeID : public TypeID {
  75. private: 
  76.   // note: we own the memory mgmt of TypeInfo objects stored in the vector
  77.   std::vector<FieldTypeInfo*> typeInfos;
  78.   FieldTypeInfo* genericReadTypeInfo(::hadoop::IArchive& a_, const char* tag);
  79.   TypeID* genericReadTypeID(::hadoop::IArchive& a_, const char* tag);
  80. public: 
  81.   /*StructTypeID(const char* p);
  82.   StructTypeID(std::string* p);
  83.   StructTypeID(const StructTypeID& ti);*/
  84.   StructTypeID(): TypeID(RIOTYPE_STRUCT) {};
  85.   StructTypeID(const std::vector<FieldTypeInfo*>& vec);
  86.   virtual ~StructTypeID();
  87.   void add(FieldTypeInfo *pti);
  88.   std::vector<FieldTypeInfo*>& getFieldTypeInfos() {return typeInfos;}
  89.   StructTypeID* findStruct(const char *pStructName);
  90.   void serialize(::hadoop::OArchive& a_, const char* tag) const;
  91.   void serializeRest(::hadoop::OArchive& a_, const char* tag) const;
  92.   void deserialize(::hadoop::IArchive& a_, const char* tag);
  93.   virtual TypeID* clone() const {return new StructTypeID(*this);}
  94.   virtual void print(int space=0) const;
  95. };
  96. /* 
  97.  * TypeID for vectors
  98.  */
  99. class VectorTypeID : public TypeID {
  100. private: 
  101.   // ptiElement's memory mgmt is owned by class
  102.   TypeID* ptiElement;
  103. public: 
  104.   VectorTypeID(TypeID* ptiElement): TypeID(RIOTYPE_VECTOR), ptiElement(ptiElement) {}
  105.   VectorTypeID(const VectorTypeID& ti);
  106.   virtual ~VectorTypeID();
  107.   const TypeID* getElementTypeID() {return ptiElement;}
  108.   virtual TypeID* clone() const {return new VectorTypeID(*this);}
  109.   void serialize(::hadoop::OArchive& a_, const char* tag) const;
  110.   virtual bool operator==(const TypeID& peer_) const;
  111.   
  112.   virtual void print(int space=0) const;
  113. };
  114. /* 
  115.  * TypeID for maps
  116.  */
  117. class MapTypeID : public TypeID {
  118. private: 
  119.   // ptiKay and ptiValue's memory mgmt is owned by class
  120.   TypeID* ptiKey;
  121.   TypeID* ptiValue;
  122. public: 
  123.   MapTypeID(TypeID* ptiKey, TypeID* ptiValue): 
  124.     TypeID(RIOTYPE_MAP), ptiKey(ptiKey), ptiValue(ptiValue) {}
  125.   MapTypeID(const MapTypeID& ti);
  126.   virtual ~MapTypeID();
  127.   const TypeID* getKeyTypeID() {return ptiKey;}
  128.   const TypeID* getValueTypeID() {return ptiValue;}
  129.   virtual TypeID* clone() const {return new MapTypeID(*this);}
  130.   void serialize(::hadoop::OArchive& a_, const char* tag) const;
  131.   virtual bool operator==(const TypeID& peer_) const;
  132.   
  133.   virtual void print(int space=0) const;
  134. };
  135. }
  136. #endif // TYPEIDS_HH_