func newTermsHash(spi TermsHashImplSPI,
	docWriter *DocumentsWriterPerThread,
	trackAllocations bool, nextTermsHash TermsHash) *TermsHashImpl {

	ans := &TermsHashImpl{
		spi:              spi,
		docState:         docWriter.docState,
		trackAllocations: trackAllocations,
		nextTermsHash:    nextTermsHash,
		intPool:          util.NewIntBlockPool(docWriter.intBlockAllocator),
		bytePool:         util.NewByteBlockPool(docWriter.byteBlockAllocator),
	}
	if trackAllocations {
		ans.bytesUsed = docWriter._bytesUsed
	} else {
		ans.bytesUsed = util.NewCounter()
	}
	if nextTermsHash != nil {
		ans.termBytePool = ans.bytePool
		nextTermsHash.setTermBytePool(ans.bytePool)
	}
	return ans
}
func newTermsHash(docWriter *DocumentsWriterPerThread,
	consumer TermsHashConsumer, trackAllocations bool,
	nextTermsHash *TermsHash) *TermsHash {

	ans := &TermsHash{
		docState:         docWriter.docState,
		consumer:         consumer,
		trackAllocations: trackAllocations,
		nextTermsHash:    nextTermsHash,
		intPool:          util.NewIntBlockPool(docWriter.intBlockAllocator),
		bytePool:         util.NewByteBlockPool(docWriter.byteBlockAllocator),
	}
	if trackAllocations {
		ans.bytesUsed = docWriter._bytesUsed
	} else {
		ans.bytesUsed = util.NewCounter()
	}
	ans.primary = nextTermsHash != nil
	if ans.primary {
		ans.termBytePool = ans.bytePool
		nextTermsHash.termBytePool = ans.bytePool
	}
	return ans
}