コード例 #1
0
        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();
        }
コード例 #2
0
        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;
        }
コード例 #3
0
        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);
        }