void WireAvailabilityCheckStage(DataAvailabilityCheckStage stage)
        {
            var transform = stage.Transformation;

            transform.Input4 = Data.QueryMatchIds;
            transform.Input5 = Data.Exclusivities;
            transform.Output = Data.ConditionMatchSets;
        }
        internal void SetupData()
        {
            configuration  = QueryPipelineConfiguration.instance;
            Data           = new ParallelQueryData(MARSMemoryOptions.instance.QueryDataCapacity);
            Data.OnResize += WireStages;

            CacheTraitReferencesStage = SetupTraitCacheStage();
            ConditionRatingStage      = SetupMatchRating();
            FindMatchProposalsStage   = SetupMatchIntersection();
            DataAvailabilityStage     = SetupAvailabilityCheckStage();
            TraitFilterStage          = SetupTraitFilterStage();
            MatchReductionStage       = SetupMatchReduction();
            BestStandaloneMatchStage  = SetupBestStandaloneMatchStage();
            ResultFillStage           = SetupQueryResultFill();
            MarkUsedStage             = SetupMarkUsedStage();
            AcquireHandlingStage      = SetupAcquireHandlingStage();
        }
        internal DataAvailabilityCheckStage SetupAvailabilityCheckStage()
        {
            var dataTransform = new DataAvailabilityTransform()
            {
                WorkingIndices = Data.PotentialMatchAcquiringIndices,
                Input1         = m_Database.DataUsedByQueries,
                Input2         = m_Database.ReservedData,
                Input3         = m_Database.SharedDataUsersCounter,
                Input4         = Data.QueryMatchIds,
                Input5         = Data.Exclusivities,
                Output         = Data.ConditionMatchSets
            };

            var stage = new DataAvailabilityCheckStage(dataTransform);

            WireAvailabilityCheckStage(stage);
            return(stage);
        }