Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Copyright (C) 2011 The Guava Authors
   *
   * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
   * in compliance with the License. You may obtain a copy of the License at
   *
   * http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software distributed under the License
  * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
  * or implied. See the License for the specific language governing permissions and limitations under
  * the License.
  */
 
 package com.google.common.hash;
 
 import static com.google.common.base.Preconditions.checkArgument;
 import static com.google.common.base.Preconditions.checkNotNull;
 import static com.google.common.base.Preconditions.checkState;
 
 
Static factories for creating HashCode instances; most users should never have to use this. All returned instances are java.io.Serializable.

Author(s):
Dimitris Andreou
Since:
12.0
 
 public final class HashCodes {
   private HashCodes() {}

  
Creates a 32-bit HashCode, of which the bytes will form the passed int, interpreted in little endian order.
 
   public static HashCode fromInt(int hash) {
     return new IntHashCode(hash);
   }
   
   private static final class IntHashCode extends HashCode implements Serializable {
     final int hash;
     
     IntHashCode(int hash) {
       this. = hash;
     }
 
     @Override public int bits() {
       return 32;
     }
 
     @Override public byte[] asBytes() {
       return new byte[] {
           (byte,
           (byte) ( >> 8),
           (byte) ( >> 16),
           (byte) ( >> 24)};
     }
     
     @Override public int asInt() {
       return ;
     }
 
     @Override public long asLong() {
       throw new IllegalStateException("this HashCode only has 32 bits; cannot create a long");
     }
 
     @Override
     public long padToLong() {
       return UnsignedInts.toLong();
     }
 
     private static final long serialVersionUID = 0;
   }
  
  
Creates a 64-bit HashCode, of which the bytes will form the passed long, interpreted in little endian order.
 
   public static HashCode fromLong(long hash) {
     return new LongHashCode(hash);
   }
   
   private static final class LongHashCode extends HashCode implements Serializable {
     final long hash;
     
     LongHashCode(long hash) {
       this. = hash;
     }
 
     @Override public int bits() {
       return 64;
     }
 
     @Override public byte[] asBytes() {
      return new byte[] {
          (byte,
          (byte) ( >> 8),
          (byte) ( >> 16),
          (byte) ( >> 24),
          (byte) ( >> 32),
          (byte) ( >> 40),
          (byte) ( >> 48),
          (byte) ( >> 56)};
    }
    @Override public int asInt() {
      return (int;
    }
    @Override public long asLong() {
      return ;
    }
    @Override
    public long padToLong() {
      return ;
    }
    private static final long serialVersionUID = 0;
  }

  
Creates a HashCode from a byte array. The array is defensively copied to preserve the immutability contract of HashCode. The array cannot be empty.
  public static HashCode fromBytes(byte[] bytes) {
    checkArgument(bytes.length >= 1, "A HashCode must contain at least 1 byte.");
    return fromBytesNoCopy(bytes.clone());
  }

  
Creates a HashCode from a byte array. The array is not copied defensively, so it must be handed-off so as to preserve the immutability contract of HashCode.
  static HashCode fromBytesNoCopy(byte[] bytes) {
    return new BytesHashCode(bytes);
  }
  
  private static final class BytesHashCode extends HashCode implements Serializable {
    final byte[] bytes;
    
    BytesHashCode(byte[] bytes) {
      this. = checkNotNull(bytes);
    }
    @Override public int bits() {
      return . * 8;
    }
    @Override public byte[] asBytes() {
      return .clone();
    }
    @Override public int asInt() {
      checkState(. >= 4,
          "HashCode#asInt() requires >= 4 bytes (it only has %s bytes).".);
      return ([0] & 0xFF)
          | (([1] & 0xFF) << 8)
          | (([2] & 0xFF) << 16)
          | (([3] & 0xFF) << 24);
    }
    @Override public long asLong() {
      checkState(. >= 8,
          "HashCode#asLong() requires >= 8 bytes (it only has %s bytes).".);
      return ([0] & 0xFFL)
          | (([1] & 0xFFL) << 8)
          | (([2] & 0xFFL) << 16)
          | (([3] & 0xFFL) << 24)
          | (([4] & 0xFFL) << 32)
          | (([5] & 0xFFL) << 40)
          | (([6] & 0xFFL) << 48)
          | (([7] & 0xFFL) << 56);
    }
    @Override
    public long padToLong() {
      return (. < 8) ? UnsignedInts.toLong(asInt()) : asLong();
    }
    @Override
    public int hashCode() {
      if (. >= 4) {
        return asInt();
      } else {
        int val = ([0] & 0xFF);
        for (int i = 1; i < .i++) {
          val |= (([i] & 0xFF) << (i * 8));
        }
        return val;
      }
    }
    private static final long serialVersionUID = 0;
  }
New to GrepCode? Check out our FAQ X