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