internal void RunSetMatchUpdates(ParallelGroupData groupData)
        {
            var time = MarsTime.Time;

            foreach (var i in groupData.UpdatingIndices)
            {
                var lastTime = groupData.LastUpdateCheckTime[i];
                var interval = groupData.UpdateMatchInterval[i];
                if (time - lastTime < interval)
                {
                    continue;
                }

                SetPipelineMatchUpdate(i,
                                       groupData.QueryMatchIds,
                                       groupData.SetMatchData,
                                       groupData.Relations,
                                       groupData.QueryResults,
                                       groupData.ReAcquireOnLoss,
                                       groupData.LastUpdateCheckTime,
                                       groupData.SetMatchData,
                                       groupData.UpdateHandlers,
                                       groupData.LossHandlers);

                groupData.LastUpdateCheckTime[i] = time;
            }
        }
Beispiel #2
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();
        }
Beispiel #3
0
        public void MapGlobalToLocalMemberIndices()
        {
            var globalIndices       = new [] { 2, 3, 4 };
            var globalRelationPairs = new []
            {
                new RelationDataPair(2, 3), new RelationDataPair(4, 2), new RelationDataPair(3, 4),
            };
            var expectedLocalPairs = new []
            {
                new RelationDataPair(0, 1), new RelationDataPair(2, 0), new RelationDataPair(1, 2),
            };

            const int pairCount        = 3;
            var       actualLocalPairs = new RelationDataPair[pairCount];

            ParallelGroupData.MapGlobalToLocalRelationPairs(globalIndices, globalRelationPairs, actualLocalPairs);

            for (var i = 0; i < pairCount; i++)
            {
                Assert.AreEqual(expectedLocalPairs[i], actualLocalPairs[i]);
            }
        }
Beispiel #4
0
        public void Setup()
        {
            const int initialCapacity = 8;

            m_Data = new ParallelGroupData(initialCapacity);
        }