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.checkPositionIndexes;
 import static com.google.common.base.Preconditions.checkState;
 
 
HashFunction adapter for java.security.MessageDigests.

Author(s):
Kevin Bourrillion
Dimitris Andreou
 
   private final String algorithmName;
   private final int bits;
 
   MessageDigestHashFunction(String algorithmName) {
     this. = algorithmName;
     this. = getMessageDigest(algorithmName).getDigestLength() * 8;
   }
 
   public int bits() {
     return ;
   }
 
   private static MessageDigest getMessageDigest(String algorithmName) {
     try {
       return MessageDigest.getInstance(algorithmName);
     } catch (NoSuchAlgorithmException e) {
       throw new AssertionError(e);
     }
   }
 
   @Override public Hasher newHasher() {
   }
 
   private static class MessageDigestHasher implements Hasher {
     private final MessageDigest digest;
     private final ByteBuffer scratch// lazy convenience
     private boolean done;
 
     private MessageDigestHasher(MessageDigest digest) {
       this. = digest;
       this. = ByteBuffer.allocate(8).order(.);
     }
 
     @Override public Hasher putByte(byte b) {
       checkNotDone();
       .update(b);
       return this;
     }
 
     @Override public Hasher putBytes(byte[] bytes) {
       checkNotDone();
       .update(bytes);
       return this;
     }
 
     @Override public Hasher putBytes(byte[] bytesint offint len) {
       checkNotDone();
       checkPositionIndexes(offoff + lenbytes.length);
       .update(bytesofflen);
       return this;
     }
 
     @Override public Hasher putShort(short s) {
       checkNotDone();
       .putShort(s);
       .update(.array(), 0, .);
       .clear();
       return this;
     }
 
     @Override public Hasher putInt(int i) {
      checkNotDone();
      .putInt(i);
      .update(.array(), 0, .);
      .clear();
      return this;
    }
    @Override public Hasher putLong(long l) {
      checkNotDone();
      .putLong(l);
      .update(.array(), 0, .);
      .clear();
      return this;
    }
    @Override public Hasher putFloat(float f) {
      checkNotDone();
      .putFloat(f);
      .update(.array(), 0, 4);
      .clear();
      return this;
    }
    @Override public Hasher putDouble(double d) {
      checkNotDone();
      .putDouble(d);
      .update(.array(), 0, 8);
      .clear();
      return this;
    }
    @Override public Hasher putBoolean(boolean b) {
      return putByte(b ? (byte) 1 : (byte) 0);
    }
    @Override public Hasher putChar(char c) {
      checkNotDone();
      .putChar(c);
      .update(.array(), 0, .);
      .clear();
      return this;
    }
    @Override public Hasher putString(CharSequence charSequence) {
      for (int i = 0; i < charSequence.length(); i++) {
        putChar(charSequence.charAt(i));
      }
      return this;
    }
    @Override public Hasher putString(CharSequence charSequenceCharset charset) {
      return putBytes(charSequence.toString().getBytes(charset));
    }
    @Override public <T> Hasher putObject(T instanceFunnel<? super T> funnel) {
      checkNotDone();
      funnel.funnel(instancethis);
      return this;
    }
    private void checkNotDone() {
      checkState(!"Cannot use Hasher after calling #hash() on it");
    }
    public HashCode hash() {
       = true;
      return HashCodes.fromBytesNoCopy(.digest());
    }
  }
New to GrepCode? Check out our FAQ X