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

网格计算

开发平台:

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.meta;
  19. import java.io.IOException;
  20. import org.apache.hadoop.record.RecordOutput;
  21. /** 
  22.  * Represents typeID for basic types. 
  23.  */
  24. public class TypeID {
  25.   /**
  26.    * constants representing the IDL types we support
  27.    */
  28.   public static final class RIOType {
  29.     public static final byte BOOL   = 1;
  30.     public static final byte BUFFER = 2;
  31.     public static final byte BYTE   = 3;
  32.     public static final byte DOUBLE = 4;
  33.     public static final byte FLOAT  = 5;
  34.     public static final byte INT    = 6;
  35.     public static final byte LONG   = 7;
  36.     public static final byte MAP    = 8;
  37.     public static final byte STRING = 9;
  38.     public static final byte STRUCT = 10;
  39.     public static final byte VECTOR = 11;
  40.   }
  41.   /**
  42.    * Constant classes for the basic types, so we can share them.
  43.    */
  44.   public static final TypeID BoolTypeID = new TypeID(RIOType.BOOL);
  45.   public static final TypeID BufferTypeID = new TypeID(RIOType.BUFFER);
  46.   public static final TypeID ByteTypeID = new TypeID(RIOType.BYTE);
  47.   public static final TypeID DoubleTypeID = new TypeID(RIOType.DOUBLE);
  48.   public static final TypeID FloatTypeID = new TypeID(RIOType.FLOAT);
  49.   public static final TypeID IntTypeID = new TypeID(RIOType.INT);
  50.   public static final TypeID LongTypeID = new TypeID(RIOType.LONG);
  51.   public static final TypeID StringTypeID = new TypeID(RIOType.STRING);
  52.   
  53.   protected byte typeVal;
  54.   /**
  55.    * Create a TypeID object 
  56.    */
  57.   TypeID(byte typeVal) {
  58.     this.typeVal = typeVal;
  59.   }
  60.   /**
  61.    * Get the type value. One of the constants in RIOType.
  62.    */
  63.   public byte getTypeVal() {
  64.     return typeVal;
  65.   }
  66.   /**
  67.    * Serialize the TypeID object
  68.    */
  69.   void write(RecordOutput rout, String tag) throws IOException {
  70.     rout.writeByte(typeVal, tag);
  71.   }
  72.   
  73.   /**
  74.    * Two base typeIDs are equal if they refer to the same type
  75.    */
  76.   public boolean equals(Object o) {
  77.     if (this == o) 
  78.       return true;
  79.     if (o == null)
  80.       return false;
  81.     if (this.getClass() != o.getClass())
  82.       return false;
  83.     TypeID oTypeID = (TypeID) o;
  84.     return (this.typeVal == oTypeID.typeVal);
  85.   }
  86.   
  87.   /**
  88.    * We use a basic hashcode implementation, since this class will likely not
  89.    * be used as a hashmap key 
  90.    */
  91.   public int hashCode() {
  92.     // See 'Effectve Java' by Joshua Bloch
  93.     return 37*17+(int)typeVal;
  94.   }
  95. }