package com.jsoniter; public class Slice { private byte[] data; private int head; private int tail; private int hash; public Slice(byte[] data, int head, int tail) { this.data = data; this.head = head; this.tail = tail; } public void reset(byte[] data, int head, int tail) { this.data = data; this.head = head; this.tail = tail; this.hash = 0; } public final byte at(int pos) { return data[head + pos]; } public final int len() { return tail - head; } public final byte[] data() { return data; } public final int head() { return head; } public final int tail() { return tail; } public static Slice make(String str) { byte[] data = str.getBytes(); return new Slice(data, 0, data.length); } @Override public final boolean equals(Object o) { Slice slice = (Slice) o; if ((tail - head) != (slice.tail - slice.head)) return false; for (int i = head, j = slice.head; i < tail; i++, j++) if (data[i] != slice.data[j]) return false; return true; } @Override public final int hashCode() { if (hash == 0 && tail - head > 0) { for (int i = head; i < tail; i++) { hash = 31 * hash + data[i]; } } return hash; } @Override public String toString() { return new String(data, head, tail - head); } }