/// <summary> /// Checks to see if <paramref name="currentSymbolInTarget"/> matches the symbol at <paramref name="currentIndexInMatch"/> in the <paramref name="seriesMatch"/> string. /// And also if the parent at <paramref name="currentParentIndexInTarget"/> maps to the parent of <paramref name="currentIndexInMatch"/> /// </summary> /// <param name="seriesMatch"></param> /// <param name="targetIndexesToMatchIndexes"></param> /// <param name="currentParentIndexInTarget"></param> /// <param name="currentSymbolInTarget"></param> /// <param name="currentIndexInMatch"></param> /// <returns></returns> private bool TargetSymbolMatchesAndParentMatches( SymbolSeriesSuffixMatcher seriesMatch, NativeHashMap <int, int> targetIndexesToMatchIndexes, int currentParentIndexInTarget, int currentIndexInTarget, int currentIndexInMatch, SymbolString <float> symbolString ) { var symbolInMatch = nativeRuleData.suffixMatcherGraphNodeData[currentIndexInMatch + seriesMatch.graphNodeMemSpace.index].mySymbol; if ( symbolInMatch.targetSymbol == symbolString[currentIndexInTarget] && symbolInMatch.parameterLength == symbolString.ParameterSize(currentIndexInTarget)) { var parentIndexInMatch = nativeRuleData.suffixMatcherGraphNodeData[currentIndexInMatch + seriesMatch.graphNodeMemSpace.index].parentIndex; if (parentIndexInMatch == -1) { // if the parent is the origin, always match. return(true); } var parentIndexInTarget = currentParentIndexInTarget; var indexInMatchOfTargetParentMapped = targetIndexesToMatchIndexes[parentIndexInTarget]; // check to ensure the parent of this node in the target graph // is already mapped to the parent of the node in the if (parentIndexInMatch == indexInMatchOfTargetParentMapped) { return(true); } } return(false); }