001    /**
002     * Licensed to the Apache Software Foundation (ASF) under one
003     * or more contributor license agreements.  See the NOTICE file
004     * distributed with this work for additional information
005     * regarding copyright ownership.  The ASF licenses this file
006     * to you under the Apache License, Version 2.0 (the
007     * "License"); you may not use this file except in compliance
008     * with the License.  You may obtain a copy of the License at
009     *
010     *     http://www.apache.org/licenses/LICENSE-2.0
011     *
012     * Unless required by applicable law or agreed to in writing, software
013     * distributed under the License is distributed on an "AS IS" BASIS,
014     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
015     * See the License for the specific language governing permissions and
016     * limitations under the License.
017     */
018    
019    package org.apache.hadoop.record.meta;
020    
021    import java.io.IOException;
022    
023    import org.apache.hadoop.classification.InterfaceAudience;
024    import org.apache.hadoop.classification.InterfaceStability;
025    import org.apache.hadoop.record.RecordOutput;
026    
027    /** 
028     * Represents typeID for basic types.
029     *  
030     * @deprecated Replaced by <a href="https://hadoop.apache.org/avro/">Avro</a>.
031     */
032    @Deprecated
033    @InterfaceAudience.Public
034    @InterfaceStability.Stable
035    public class TypeID {
036    
037      /**
038       * constants representing the IDL types we support
039       */
040      public static final class RIOType {
041        public static final byte BOOL   = 1;
042        public static final byte BUFFER = 2;
043        public static final byte BYTE   = 3;
044        public static final byte DOUBLE = 4;
045        public static final byte FLOAT  = 5;
046        public static final byte INT    = 6;
047        public static final byte LONG   = 7;
048        public static final byte MAP    = 8;
049        public static final byte STRING = 9;
050        public static final byte STRUCT = 10;
051        public static final byte VECTOR = 11;
052      }
053    
054      /**
055       * Constant classes for the basic types, so we can share them.
056       */
057      public static final TypeID BoolTypeID = new TypeID(RIOType.BOOL);
058      public static final TypeID BufferTypeID = new TypeID(RIOType.BUFFER);
059      public static final TypeID ByteTypeID = new TypeID(RIOType.BYTE);
060      public static final TypeID DoubleTypeID = new TypeID(RIOType.DOUBLE);
061      public static final TypeID FloatTypeID = new TypeID(RIOType.FLOAT);
062      public static final TypeID IntTypeID = new TypeID(RIOType.INT);
063      public static final TypeID LongTypeID = new TypeID(RIOType.LONG);
064      public static final TypeID StringTypeID = new TypeID(RIOType.STRING);
065      
066      protected byte typeVal;
067    
068      /**
069       * Create a TypeID object 
070       */
071      TypeID(byte typeVal) {
072        this.typeVal = typeVal;
073      }
074    
075      /**
076       * Get the type value. One of the constants in RIOType.
077       */
078      public byte getTypeVal() {
079        return typeVal;
080      }
081    
082      /**
083       * Serialize the TypeID object
084       */
085      void write(RecordOutput rout, String tag) throws IOException {
086        rout.writeByte(typeVal, tag);
087      }
088      
089      /**
090       * Two base typeIDs are equal if they refer to the same type
091       */
092      @Override
093      public boolean equals(Object o) {
094        if (this == o) 
095          return true;
096    
097        if (o == null)
098          return false;
099    
100        if (this.getClass() != o.getClass())
101          return false;
102    
103        TypeID oTypeID = (TypeID) o;
104        return (this.typeVal == oTypeID.typeVal);
105      }
106      
107      /**
108       * We use a basic hashcode implementation, since this class will likely not
109       * be used as a hashmap key 
110       */
111      @Override
112      public int hashCode() {
113        // See 'Effectve Java' by Joshua Bloch
114        return 37*17+(int)typeVal;
115      }
116    }
117