public Hash64 updateBytes()

in spectator-api/src/main/java/com/netflix/spectator/impl/Hash64.java [155:189]


  public Hash64 updateBytes(byte[] values, int offset, int length) {
    if (UnsafeUtils.supported() && length >= 8) {
      final int bytesInStripe = (Long.SIZE - bitPos) / Byte.SIZE;
      final int s = offset + bytesInStripe;
      final int e = s + (length - bytesInStripe) / Long.BYTES * Long.BYTES;

      // Complete current stripe
      for (int i = offset; i < s; ++i) {
        updateByteImpl(values[i]);
      }
      if (++stripePos == stripe.length) {
        processStripe();
      }
      bitPos = 0;

      // Write long values
      for (int i = s; i < e; i += Long.BYTES) {
        stripe[stripePos] = UnsafeUtils.getLong(values, i);
        if (++stripePos == stripe.length) {
          processStripe();
        }
      }

      // Write remaining bytes
      stripe[stripePos] = 0L;
      for (int i = e; i < offset + length; ++i) {
        updateByteImpl(values[i]);
      }
    } else {
      for (int i = offset; i < offset + length; ++i) {
        updateByte(values[i]);
      }
    }
    return this;
  }