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.io;
020    
021    import java.io.DataInput;
022    import java.io.DataOutput;
023    import java.io.IOException;
024    
025    import org.apache.hadoop.classification.InterfaceAudience;
026    import org.apache.hadoop.classification.InterfaceStability;
027    
028    /** A WritableComparable for shorts. */
029    @InterfaceAudience.Public
030    @InterfaceStability.Stable
031    public class ShortWritable implements WritableComparable<ShortWritable> {
032      private short value;
033    
034      public ShortWritable() {
035      }
036    
037      public ShortWritable(short value) {
038        set(value);
039      }
040    
041      /** Set the value of this ShortWritable. */
042      public void set(short value) {
043        this.value = value;
044      }
045    
046      /** Return the value of this ShortWritable. */
047      public short get() {
048        return value;
049      }
050    
051      /** read the short value */
052      @Override
053      public void readFields(DataInput in) throws IOException {
054        value = in.readShort();
055      }
056    
057      /** write short value */
058      @Override
059      public void write(DataOutput out) throws IOException {
060        out.writeShort(value);
061      }
062    
063      /** Returns true iff <code>o</code> is a ShortWritable with the same value. */
064      @Override
065      public boolean equals(Object o) {
066        if (!(o instanceof ShortWritable))
067          return false;
068        ShortWritable other = (ShortWritable) o;
069        return this.value == other.value;
070      }
071    
072      /** hash code */
073      @Override
074      public int hashCode() {
075        return value;
076      }
077    
078      /** Compares two ShortWritable. */
079      @Override
080      public int compareTo(ShortWritable o) {
081        short thisValue = this.value;
082        short thatValue = (o).value;
083        return (thisValue < thatValue ? -1 : (thisValue == thatValue ? 0 : 1));
084      }
085    
086      /** Short values in string format */
087      @Override
088      public String toString() {
089        return Short.toString(value);
090      }
091    
092      /** A Comparator optimized for ShortWritable. */
093      public static class Comparator extends WritableComparator {
094    
095        public Comparator() {
096          super(ShortWritable.class);
097        }
098        
099        @Override
100        public int compare(byte[] b1, int s1, int l1, byte[] b2, int s2, int l2) {
101          short thisValue = (short) readUnsignedShort(b1, s1);
102          short thatValue = (short) readUnsignedShort(b2, s2);
103          return (thisValue < thatValue ? -1 : (thisValue == thatValue ? 0 : 1));
104        }
105      }
106    
107      static { // register this comparator
108        WritableComparator.define(ShortWritable.class, new Comparator());
109      }
110    
111    }