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;
 
 
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");
     }
     
     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 ;
    }
    
    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 must be at least of length 4.
  public static HashCode fromBytes(byte[] bytes) {
    checkArgument(bytes.length >= 4, "A HashCode must contain at least 4 bytes.");
    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. The array must be at least of length 4 (not checked).
  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. = bytes;
    }
    @Override public int bits() {
      return . * 8;
    }
    @Override public byte[] asBytes() {
      return .clone();
    }
    @Override public int asInt() {
      return ([0] & 0xFF)
          | (([1] & 0xFF) << 8)
          | (([2] & 0xFF) << 16)
          | (([3] & 0xFF) << 24);
    }
    @Override public long asLong() {
      if (. < 8) {
        // Checking this to throw the correct type of exception
        throw new IllegalStateException("Not enough 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);
    }
    
    private static final long serialVersionUID = 0;
  }
New to GrepCode? Check out our FAQ X