Beispiel #1
0
        public void WriteIntoMemory(
            SystemLevelRuleNativeData dataArray,
            SymbolSeriesMatcherNativeDataWriter dataWriter)
        {
            var replacementSymbolSpace = new JaggedIndexing
            {
                index  = dataWriter.indexInReplacementSymbolsMemory,
                length = (ushort)replacementSymbols.Length
            };

            for (int i = 0; i < replacementSymbols.Length; i++)
            {
                var blittableReplacement = replacementSymbols[i].WriteOpsIntoMemory(dataArray, dataWriter);
                dataArray.replacementsSymbolMemorySpace[i + replacementSymbolSpace.index] = blittableReplacement;
            }
            dataWriter.indexInReplacementSymbolsMemory += replacementSymbolSpace.length;

            blittable = new Blittable
            {
                probability               = probability,
                replacementSymbolSize     = (ushort)replacementSymbols.Length,
                replacementParameterCount = replacementParameterCount,
                replacementSymbols        = replacementSymbolSpace
            };
        }
        public Blittable WriteOpsIntoMemory(
            SystemLevelRuleNativeData dataArray,
            SymbolSeriesMatcherNativeDataWriter dataWriter)
        {
            var structExpressionsSpace = new JaggedIndexing
            {
                index  = dataWriter.indexInStructExpressionMemory,
                length = (ushort)evaluators.Length
            };

            var totalOperations = 0;

            for (int i = 0; i < evaluators.Length; i++)
            {
                var opSize = evaluators[i].OperatorSpaceNeeded;
                dataArray.structExpressionMemorySpace[i + structExpressionsSpace.index] = evaluators[i].WriteIntoOpDataArray(
                    dataArray.dynamicOperatorMemory,
                    new JaggedIndexing
                {
                    index  = dataWriter.indexInOperatorMemory + totalOperations,
                    length = opSize
                });
                totalOperations += opSize;
            }
            dataWriter.indexInOperatorMemory += totalOperations;

            dataWriter.indexInStructExpressionMemory += structExpressionsSpace.length;

            return(blittable = new Blittable
            {
                structExpressionSpace = structExpressionsSpace,
                replacementSymbol = targetSymbol
            });
        }
        public SymbolSeriesSuffixMatcher BuildIntoManagedMemory(
            SystemLevelRuleNativeData nativeData,
            SymbolSeriesMatcherNativeDataWriter dataWriter,
            Allocator allocator = Allocator.Persistent)
        {
            var matcher = new SymbolSeriesSuffixMatcher();

            matcher.graphNodeMemSpace = new JaggedIndexing
            {
                index  = dataWriter.indexInSuffixNodes,
                length = (ushort)RequiredGraphNodeMemSpace
            };

            dataWriter.indexInSuffixNodes += RequiredGraphNodeMemSpace;
            for (int i = 0; i < nodes.Count; i++)
            {
                var sourceNode = nodes[i];
                nativeData.suffixMatcherGraphNodeData[i + matcher.graphNodeMemSpace.index] = new SymbolMatcherGraphNode
                {
                    parentIndex             = sourceNode.parentIndex,
                    myIndexInParentChildren = sourceNode.myIndexInParentChildren,
                    mySymbol = targetSymbolSeries[i].AsBlittable()
                };
            }

            matcher.childrenOfRoot = new JaggedIndexing
            {
                index  = dataWriter.indexInSuffixChildren,
                length = (ushort)rootChildren.Count
            };

            var childrenAsArray    = nodes.Select(x => x.childrenIndexes.ToArray()).ToArray();
            var tmpIndexInChildren = 0;

            foreach (var rootChild in rootChildren)
            {
                nativeData.suffixMatcherChildrenDataArray[tmpIndexInChildren + dataWriter.indexInSuffixChildren] = rootChild;
                tmpIndexInChildren++;
            }
            JaggedNativeArray <int> .WriteJaggedIndexing(
                (indexInJagged, jaggedIndexing) =>
            {
                var node = nativeData.suffixMatcherGraphNodeData[indexInJagged + matcher.graphNodeMemSpace.index];
                node.childrenIndexing = jaggedIndexing;
                nativeData.suffixMatcherGraphNodeData[indexInJagged + matcher.graphNodeMemSpace.index] = node;
            },
                childrenAsArray,
                nativeData.suffixMatcherChildrenDataArray,
                dataWriter.indexInSuffixChildren + tmpIndexInChildren
                );

            dataWriter.indexInSuffixChildren += RequiredChildrenMemSpace;

            matcher.HasGraphIndexes = true;
            matcher.IsCreated       = true;

            return(matcher);
        }
        public SymbolSeriesPrefixMatcher BuildIntoManagedMemory(
            SystemLevelRuleNativeData nativeData,
            SymbolSeriesMatcherNativeDataWriter dataWriter)
        {
            var matcher = new SymbolSeriesPrefixMatcher();

            matcher.graphNodeMemSpace = new JaggedIndexing
            {
                index  = dataWriter.indexInPrefixNodes,
                length = (ushort)RequiredNodeMemorySpace
            };
            dataWriter.indexInPrefixNodes += RequiredNodeMemorySpace;

            for (int i = 0; i < targetSymbolSeries.Length; i++)
            {
                var symbol = targetSymbolSeries[i].AsBlittable();
                nativeData.prefixMatcherSymbols[i + matcher.graphNodeMemSpace.index] = symbol;
            }

            matcher.IsValid = targetSymbolSeries.Length > 0;

            return(matcher);
        }
Beispiel #5
0
        public void WriteDataIntoMemory(
            SystemLevelRuleNativeData dataArray,
            SymbolSeriesMatcherNativeDataWriter dataWriter)
        {
            ContextSuffix = forwardsMatchBuilder.BuildIntoManagedMemory(dataArray, dataWriter);
            ContextPrefix = backwardsMatchBuilder.BuildIntoManagedMemory(dataArray, dataWriter);

            foreach (var outcome in possibleOutcomes)
            {
                outcome.WriteIntoMemory(dataArray, dataWriter);
            }

            possibleOutcomeIndexing = new JaggedIndexing
            {
                index  = dataWriter.indexInRuleOutcomes,
                length = (ushort)possibleOutcomes.Length
            };
            for (int i = 0; i < possibleOutcomeIndexing.length; i++)
            {
                var possibleOutcome = possibleOutcomes[i];
                dataArray.ruleOutcomeMemorySpace[i + dataWriter.indexInRuleOutcomes] = possibleOutcome.AsBlittable();
            }
            dataWriter.indexInRuleOutcomes += possibleOutcomeIndexing.length;
            if (conditionalChecker != null)
            {
                var opSize = conditionalChecker.OperatorSpaceNeeded;
                conditionalCheckerBlittable = conditionalChecker.WriteIntoOpDataArray(
                    dataArray.dynamicOperatorMemory,
                    new JaggedIndexing
                {
                    index  = dataWriter.indexInOperatorMemory,
                    length = opSize
                });
                dataWriter.indexInOperatorMemory += opSize;
            }
        }