public NodeResultInfo SumMetaDataB(int index) { NodeResultInfo result = new NodeResultInfo(); int metaDataSum = 0; int nodeLength = 2; var numNodes = nodeInfo[index]; var metaDataCount = nodeInfo[index + 1]; var nodeOffset = 0; var childNodes = new List <NodeResultInfo>(); if (numNodes > 0) { for (int numIndex = 0; numIndex <= numNodes - 1; numIndex++) { var nodeResult = SumMetaDataB(index + nodeLength + nodeOffset); nodeOffset += nodeResult.NodeLength; childNodes.Add(nodeResult); } for (int metaIndex = 0; metaIndex <= metaDataCount - 1; metaIndex++) { var childNodeIndex = nodeInfo[index + 2 + nodeOffset + metaIndex]; if (childNodes.Count >= childNodeIndex) { metaDataSum += childNodes[childNodeIndex - 1].MetaDataSum; } } } else { for (int metaIndex = 0; metaIndex <= metaDataCount - 1; metaIndex++) { metaDataSum += nodeInfo[index + 2 + nodeOffset + metaIndex]; } } result.NodeLength = nodeLength + nodeOffset + metaDataCount; result.MetaDataSum = metaDataSum; return(result); }
public NodeResultInfo SumMetaData(int index) { NodeResultInfo result = new NodeResultInfo(); int metaDataSum = 0; int nodeLength = 2; var numNodes = nodeInfo[index]; var metaDataCount = nodeInfo[index + 1]; var nodeOffset = 0; for (int numIndex = 0; numIndex <= numNodes - 1; numIndex++) { var nodeResult = SumMetaData(index + nodeLength + nodeOffset); nodeOffset += nodeResult.NodeLength; metaDataSum += nodeResult.MetaDataSum; } for (int metaIndex = 0; metaIndex <= metaDataCount - 1; metaIndex++) { metaDataSum += nodeInfo[index + 2 + nodeOffset + metaIndex]; } result.NodeLength = nodeLength + nodeOffset + metaDataCount; result.MetaDataSum = metaDataSum; return(result); }