content: /*******************************************************************************
   * Copyright 2014 Trevor Robinson
   * 
   * 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.scurrilous.circe;
  
  import java.nio.ByteBuffer;
  
  /**
   * Interface implemented by stateless hash functions with an output length of 4
   * bytes or less.
   */
  public interface StatelessIntHash extends StatelessHash {
  
      /**
       * Returns a new instance of stateful version of this hash function.
       * 
       * @return the stateful version of this hash function
       */
      @Override
      StatefulIntHash createStateful();
  
      /**
       * Evaluates this hash function for the entire given input array.
       * 
       * @param input the input array
       * @return the output of the hash function
       */
      int calculate(byte[] input);
  
      /**
       * Evaluates this hash function for the given range of the given input
       * array.
       * 
       * @param input the input array
       * @param index the starting index of the first input byte
       * @param length the length of the input range
       * @return the output of the hash function
       * @throws IndexOutOfBoundsException if index is negative or
       *             {@code index + length} is greater than the array length
       */
      int calculate(byte[] input, int index, int length);
  
      /**
       * Evaluates this hash function with the remaining contents of the given
       * input buffer. This method leaves the buffer position at the limit.
       * 
       * @param input the input buffer
       * @return the output of the hash function
       */
      int calculate(ByteBuffer input);
  
      /**
       * Evaluates this hash function for the memory with the given address and
       * length. The arguments are generally not checked in any way and will
       * likely lead to a VM crash or undefined results if invalid.
       * 
       * @param address the base address of the input
       * @param length the length of the input
       * @return the output of the hash function
       * @throws UnsupportedOperationException if this function does not support
       *             unsafe memory access
       * @see #supportsUnsafe()
       */
      int calculate(long address, long length);
  }
  