IDisposable IMemberHierarchy.AddMemberInstance(DataRegionMemberInstance instance, int indexInCollection, IScalabilityCache cache, out int instanceIndex)
        {
            List <ScalableList <DataRegionMemberInstance> > list = instance.MemberDef.IsColumn ? m_columnMembers : m_rowMembers;
            bool flag = false;

            if (list == null)
            {
                flag = true;
                list = new List <ScalableList <DataRegionMemberInstance> >();
                if (instance.MemberDef.IsColumn)
                {
                    m_columnMembers = list;
                }
                else
                {
                    m_rowMembers = list;
                }
            }
            ListUtils.AdjustLength(list, indexInCollection);
            ScalableList <DataRegionMemberInstance> scalableList = list[indexInCollection];

            if (flag || scalableList == null)
            {
                scalableList = (list[indexInCollection] = new ScalableList <DataRegionMemberInstance>(0, cache, 100, 5));
            }
            instanceIndex = scalableList.Count;
            return(scalableList.AddAndPin(instance));
        }
        internal virtual void AddChildScope(IReference <ScopeInstance> childRef, int indexInCollection)
        {
            switch (childRef.Value().ObjectType)
            {
            case Microsoft.ReportingServices.ReportIntermediateFormat.Persistence.ObjectType.DataRegionInstance:
                if (m_dataRegionInstances == null)
                {
                    m_dataRegionInstances = new List <IReference <DataRegionInstance> >();
                }
                ListUtils.AdjustLength(m_dataRegionInstances, indexInCollection);
                Global.Tracer.Assert(m_dataRegionInstances[indexInCollection] == null, "(null == m_dataRegionInstances[indexInCollection])");
                m_dataRegionInstances[indexInCollection] = (childRef as IReference <DataRegionInstance>);
                break;

            case Microsoft.ReportingServices.ReportIntermediateFormat.Persistence.ObjectType.SubReportInstance:
                if (m_subReportInstances == null)
                {
                    m_subReportInstances = new List <IReference <SubReportInstance> >();
                }
                ListUtils.AdjustLength(m_subReportInstances, indexInCollection);
                Global.Tracer.Assert(m_subReportInstances[indexInCollection] == null, "(null == m_subReportInstances[indexInCollection])");
                m_subReportInstances[indexInCollection] = (childRef as IReference <SubReportInstance>);
                break;

            default:
                Global.Tracer.Assert(condition: false, childRef.Value().ToString());
                break;
            }
        }
        private void AddDataRegion(RuntimeDataTablixObj dataRegion, AspNetCore.ReportingServices.ReportIntermediateFormat.DataRegion dataRegionDef)
        {
            RuntimeDataTablixObjReference runtimeDataTablixObjReference = (RuntimeDataTablixObjReference)dataRegion.SelfReference;

            runtimeDataTablixObjReference.UnPinValue();
            int indexInCollection = dataRegionDef.IndexInCollection;

            ListUtils.AdjustLength(this.m_dataRegionObjs, indexInCollection);
            this.m_dataRegionObjs[indexInCollection] = runtimeDataTablixObjReference;
        }
        internal static IDisposable AddCellInstance(ScalableList <DataCellInstanceList> cells, int columnMemberSequenceId, int cellIndexInCollection, DataCellInstance cellInstance, IScalabilityCache cache)
        {
            ScopeInstance.AdjustLength(cells, columnMemberSequenceId);
            DataCellInstanceList item;
            IDisposable          andPin = cells.GetAndPin(columnMemberSequenceId, out item);

            if (item == null)
            {
                item = (cells[columnMemberSequenceId] = new DataCellInstanceList());
            }
            ListUtils.AdjustLength(item, cellIndexInCollection);
            item[cellIndexInCollection] = cellInstance;
            return(andPin);
        }
        public static IDisposable AddCellInstance(ScalableList <DataCellInstanceList> cells, int columnMemberSequenceId, int cellIndexInCollection, DataCellInstance cellInstance, IScalabilityCache cache)
        {
            ScopeInstance.AdjustLength(cells, columnMemberSequenceId);
            DataCellInstanceList dataCellInstanceList = default(DataCellInstanceList);
            IDisposable          andPin = cells.GetAndPin(columnMemberSequenceId, out dataCellInstanceList);

            if (dataCellInstanceList == null)
            {
                dataCellInstanceList = (cells[columnMemberSequenceId] = new DataCellInstanceList());
            }
            ListUtils.AdjustLength(dataCellInstanceList, cellIndexInCollection);
            ((List <DataCellInstance>)dataCellInstanceList)[cellIndexInCollection] = cellInstance;
            return(andPin);
        }
        IDisposable IMemberHierarchy.AddMemberInstance(DataRegionMemberInstance instance, int indexInCollection, IScalabilityCache cache, out int instanceIndex)
        {
            bool flag = false;

            if (m_children == null)
            {
                m_children = new List <ScalableList <DataRegionMemberInstance> >();
                flag       = true;
            }
            ListUtils.AdjustLength(m_children, indexInCollection);
            ScalableList <DataRegionMemberInstance> scalableList = m_children[indexInCollection];

            if (flag || scalableList == null)
            {
                scalableList = new ScalableList <DataRegionMemberInstance>(0, cache, 100, 5);
                m_children[indexInCollection] = scalableList;
            }
            instanceIndex = scalableList.Count;
            return(scalableList.AddAndPin(instance));
        }
        public virtual void Serialize(IntermediateFormatWriter writer)
        {
            writer.RegisterDeclaration(m_Declaration);
            while (writer.NextMember())
            {
                switch (writer.CurrentMember.MemberName)
                {
                case MemberName.FirstRowIndex:
                    writer.Write(m_firstRowOffset);
                    break;

                case MemberName.DataRegionInstances:
                {
                    if (m_serializationDataRegionIndexInCollection < 0 || m_dataRegionInstances == null)
                    {
                        writer.Write(m_dataRegionInstances);
                        break;
                    }
                    List <IReference <DataRegionInstance> > list = new List <IReference <DataRegionInstance> >(m_dataRegionInstances.Count);
                    ListUtils.AdjustLength(list, m_dataRegionInstances.Count - 1);
                    list[m_serializationDataRegionIndexInCollection] = m_dataRegionInstances[m_serializationDataRegionIndexInCollection];
                    writer.Write(list);
                    break;
                }

                case MemberName.SubReportInstances:
                    writer.Write(m_subReportInstances);
                    break;

                case MemberName.AggregateValues:
                    writer.Write(m_aggregateValues);
                    break;

                default:
                    Global.Tracer.Assert(condition: false);
                    break;
                }
            }
        }