@Override
    public long getValueHashCode(final ValueStoreHashAlgorithm valueStoreHashAlgorithm) {
        // Lazily compute the hash and hold for future use these values can be quite big.
        // This will mostly be used during a load which is single threaded so no need to
        // avoid a synch at the risk of getting the same hash value twice.

        if (fastInfosetValueHash == null) {
            fastInfosetValueHash = valueStoreHashAlgorithm.hash(fastInfosetByteBuffer);
            this.valueStoreHashAlgorithm = valueStoreHashAlgorithm;
            return fastInfosetValueHash;
        } else if (valueStoreHashAlgorithm != null
                && !Objects.equals(this.valueStoreHashAlgorithm, valueStoreHashAlgorithm)) {
            // If hash algo doesn't match then compute with the provided one
            return valueStoreHashAlgorithm.hash(fastInfosetByteBuffer);
        } else {
            return fastInfosetValueHash;
        }
    }
MUST not change this else it is stored in the ref store. MUST be unique over all
{@link RefDataValue} impls.
stroom-pipeline/src/main/java/stroom/pipeline/refdata/store/FastInfosetValue.java