public void matchHash(NgramMatch match,List<Instruction> instResult,List<CodeBlock> blockResult) {
		Block block = match.block;
		for(int index=match.startindex;index<=match.endindex;++index) {	// For every instruction involved in this n-gram
			InstructHash curInstruct = block.instList[index];
			instResult.add(curInstruct.instruction);			// Store match explicitly
			matchedInstructionCount += 1;
			curInstruct.isMatched = true;						// Mark record as matched
			removeInstructionNGrams(curInstruct);
			curInstruct.nGrams = null;			// Free up memory we won't use anymore
		}
		if (block.isMatched) return;				// Is this the first time we matched this block
		matchedBlockCount += 1;						// Count our block match
		block.setMatched(matchedBlockCount);
		blockResult.add(block.origBlock);			// Store match explicitly
		for(int i=0;i<block.instList.length;++i) {
			InstructHash curInstruct = block.instList[i];
			if (curInstruct.isMatched) continue;		// For each remaining unknown instruction
			for(int j=0;j<curInstruct.nGrams.length;++j) {
				Hash curHash = curInstruct.nGrams[j];
				if (curHash == null) continue;
				HashEntry curEntry = curInstruct.hashEntries.get(curHash);
				if (curEntry == null) continue;				// For each hash still in the pool
				removeNGram(curInstruct,curHash);		// Remove from the store
				int newValue = curHash.value ^ block.getMatchHash();		// Update hash to reflect matched block
				curHash = new Hash(newValue,curHash.size);
				curInstruct.nGrams[j] = curHash;
				insertNGram(curHash,curInstruct);			// Reinsert the hash
			}
		}
	}
Mark a particular n-gram hash and instruction as having a match.
Set of instructions covered by n-gram are removed, and data structures are updated
@param match	is the n-gram being declared as a match
@param instResult	collects the explicit set of Instructions matched
@param blockResult   collects the explicit set of CodeBlocks matched
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/correlate/HashStore.java