internal void SetupData() { Configuration = QueryPipelineConfiguration.instance; var memoryOptions = MARSMemoryOptions.instance; Data = new ParallelGroupData(memoryOptions.QueryDataCapacity); // make sure that we refresh references to arrays when they have been resized behind the scenes Data.OnResize += WireStages; var memberCapacityMultiplier = memoryOptions.SetMemberCapacityMultiplier; MemberData = new ParallelGroupMemberData(memoryOptions.QueryDataCapacity * memberCapacityMultiplier); MemberData.OnResize += WireStages; // insert a blank stage to represent the idle part of the cycle Stages.Add(null); MemberTraitCacheStage = SetupMemberTraitCacheStage(); RelationTraitCacheStage = SetupRelationTraitCacheStage(); MemberConditionRatingStage = SetupMemberMatchRating(); IncompleteGroupFilterStage = SetupIncompleteGroupFilter(); MemberMatchIntersectionStage = SetupMatchIntersection(); MemberTraitRequirementStage = SetupTraitFilterStage(); MemberDataAvailabilityStage = SetupAvailabilityCheckStage(); MemberMatchReductionStage = SetupMatchReduction(); GroupRelationRatingStage = SetupRelationRatingStage(); FilterRelationMembersStage = SetupFilterRelationMembersStage(); MatchSearchStage = SetupMatchSearchStage(); MarkDataUsedStage = SetupMarkUsedStage(); MemberResultFillStage = SetupQueryResultFill(); GroupResultFillStage = SetupSetQueryResultFill(); AcquireHandlingStage = SetupAcquireHandlingStage(); }
void WireMarkUsedStage(MarkSetUsedStage stage) { var markUsedTransform = stage.Transformation1; markUsedTransform.Input1 = Data.MemberIndices; markUsedTransform.Input2 = Data.QueryMatchIds; markUsedTransform.Input3 = Data.UsedByMatch; markUsedTransform.Input4 = Data.SetMatchData; markUsedTransform.Input5 = MemberData.BestMatchDataIds; markUsedTransform.Input6 = MemberData.ObjectReferences; markUsedTransform.Output = MemberData.Exclusivities; var setMembersTransform = stage.Transformation2; setMembersTransform.Input1 = Data.MemberIndices; }
internal MarkSetUsedStage SetupMarkUsedStage() { var markUsed = new MarkGroupDataUsedTransform { Process = m_Database.MarkGroupDataUsedAction, WorkingIndices = Data.DefiniteMatchAcquireIndices, }; var updateWorkingMembers = new SetWorkingMembersTransform() { WorkingIndices = Data.DefiniteMatchAcquireIndices, Output = MemberData.DefiniteMatchAcquireIndices }; var stage = new MarkSetUsedStage(markUsed, updateWorkingMembers); WireMarkUsedStage(stage); Stages.Add(stage); return(stage); }