internal bool TryGetNewSortTarget(string scopeName, out Microsoft.ReportingServices.ReportIntermediateFormat.ISortFilterScope target)
 {
     target = null;
     return(m_reportScopes.TryGetValue(scopeName, out target));
 }
 internal bool PopulateRuntimeSortFilterEventInfo(OnDemandProcessingContext odpContext, Microsoft.ReportingServices.ReportIntermediateFormat.DataSet myDataSet)
 {
     if (odpContext.TopLevelContext.UserSortFilterInfo == null || odpContext.TopLevelContext.UserSortFilterInfo.OdpSortInfo == null || odpContext.TopLevelContext.OldSortFilterEventInfo == null)
     {
         return(false);
     }
     if (-1 != m_dataSetGlobalID)
     {
         return(false);
     }
     m_runtimeSortFilterInfo = null;
     EventInformation.OdpSortEventInfo odpSortInfo = odpContext.TopLevelContext.UserSortFilterInfo.OdpSortInfo;
     for (int i = 0; i < odpSortInfo.Count; i++)
     {
         string uniqueNameAt = odpSortInfo.GetUniqueNameAt(i);
         Microsoft.ReportingServices.ReportIntermediateFormat.SortFilterEventInfo sortFilterEventInfo = odpContext.TopLevelContext.OldSortFilterEventInfo[uniqueNameAt];
         if (sortFilterEventInfo == null || sortFilterEventInfo.EventSource.UserSort == null)
         {
             continue;
         }
         int num = sortFilterEventInfo.EventSource.UserSort.SubReportDataSetGlobalId;
         if (-1 == num)
         {
             num = sortFilterEventInfo.EventSource.UserSort.DataSet.GlobalID;
         }
         if (num == myDataSet.GlobalID)
         {
             if (m_runtimeSortFilterInfo == null)
             {
                 m_runtimeSortFilterInfo = new List <IReference <RuntimeSortFilterEventInfo> >();
             }
             RuntimeSortFilterEventInfo runtimeSortFilterEventInfo = new RuntimeSortFilterEventInfo(sortFilterEventInfo.EventSource, uniqueNameAt, odpSortInfo.GetSortDirectionAt(i), sortFilterEventInfo.EventSourceScopeInfo, odpContext, (m_currentContainingScope == null) ? 1 : m_currentContainingScope.Value().Depth);
             runtimeSortFilterEventInfo.SelfReference.UnPinValue();
             m_runtimeSortFilterInfo.Add(runtimeSortFilterEventInfo.SelfReference);
         }
     }
     if (m_runtimeSortFilterInfo != null)
     {
         int count = m_runtimeSortFilterInfo.Count;
         for (int j = 0; j < count; j++)
         {
             IReference <RuntimeSortFilterEventInfo> reference = m_runtimeSortFilterInfo[j];
             using (reference.PinValue())
             {
                 RuntimeSortFilterEventInfo runtimeSortFilterEventInfo2 = reference.Value();
                 IInScopeEventSource        eventSource = runtimeSortFilterEventInfo2.EventSource;
                 Microsoft.ReportingServices.ReportIntermediateFormat.ISortFilterScope sortExpressionScope = eventSource.UserSort.SortExpressionScope;
                 if (sortExpressionScope != null)
                 {
                     sortExpressionScope.IsSortFilterExpressionScope = SetSortFilterInfo(sortExpressionScope.IsSortFilterExpressionScope, count, j);
                 }
                 Microsoft.ReportingServices.ReportIntermediateFormat.ISortFilterScope sortTarget = eventSource.UserSort.SortTarget;
                 if (sortTarget != null)
                 {
                     sortTarget.IsSortFilterTarget = SetSortFilterInfo(sortTarget.IsSortFilterTarget, count, j);
                 }
                 if (eventSource.ContainingScopes != null && 0 < eventSource.ContainingScopes.Count)
                 {
                     int num2 = 0;
                     int num3 = 0;
                     for (int k = 0; k < eventSource.ContainingScopes.Count; k++)
                     {
                         Microsoft.ReportingServices.ReportIntermediateFormat.Grouping grouping = eventSource.ContainingScopes[k];
                         if (grouping != null && grouping.IsDetail)
                         {
                             continue;
                         }
                         List <object> list = runtimeSortFilterEventInfo2.SortSourceScopeInfo[num2];
                         if (grouping != null)
                         {
                             if (grouping.SortFilterScopeInfo == null)
                             {
                                 grouping.SortFilterScopeInfo = new List <object> [count];
                                 for (int l = 0; l < count; l++)
                                 {
                                     grouping.SortFilterScopeInfo[l] = null;
                                 }
                                 grouping.SortFilterScopeIndex = new int[count];
                                 for (int m = 0; m < count; m++)
                                 {
                                     grouping.SortFilterScopeIndex[m] = -1;
                                 }
                             }
                             grouping.SortFilterScopeInfo[j]  = list;
                             grouping.SortFilterScopeIndex[j] = num2;
                         }
                         else
                         {
                             List <Microsoft.ReportingServices.ReportIntermediateFormat.SubReport> detailScopeSubReports = eventSource.UserSort.DetailScopeSubReports;
                             Microsoft.ReportingServices.ReportIntermediateFormat.ReportItem       reportItem            = (detailScopeSubReports == null || num3 >= detailScopeSubReports.Count) ? eventSource.Parent : detailScopeSubReports[num3++].Parent;
                             while (reportItem != null && !reportItem.IsDataRegion)
                             {
                                 reportItem = reportItem.Parent;
                             }
                             Global.Tracer.Assert(reportItem.IsDataRegion, "(parent.IsDataRegion)");
                             Microsoft.ReportingServices.ReportIntermediateFormat.DataRegion dataRegion = (Microsoft.ReportingServices.ReportIntermediateFormat.DataRegion)reportItem;
                             if (dataRegion.SortFilterSourceDetailScopeInfo == null)
                             {
                                 dataRegion.SortFilterSourceDetailScopeInfo = new int[count];
                                 for (int n = 0; n < count; n++)
                                 {
                                     dataRegion.SortFilterSourceDetailScopeInfo[n] = -1;
                                 }
                             }
                             Global.Tracer.Assert(list != null && 1 == list.Count, "(null != scopeValues && 1 == scopeValues.Count)");
                             dataRegion.SortFilterSourceDetailScopeInfo[j] = (int)list[0];
                         }
                         num2++;
                     }
                 }
                 Microsoft.ReportingServices.ReportIntermediateFormat.GroupingList groupsInSortTarget = eventSource.UserSort.GroupsInSortTarget;
                 if (groupsInSortTarget != null)
                 {
                     for (int num4 = 0; num4 < groupsInSortTarget.Count; num4++)
                     {
                         groupsInSortTarget[num4].NeedScopeInfoForSortFilterExpression = SetSortFilterInfo(groupsInSortTarget[num4].NeedScopeInfoForSortFilterExpression, count, j);
                     }
                 }
                 List <int> peerSortFilters = eventSource.GetPeerSortFilters(create: false);
                 if (peerSortFilters == null || peerSortFilters.Count == 0)
                 {
                     continue;
                 }
                 if (runtimeSortFilterEventInfo2.PeerSortFilters == null)
                 {
                     runtimeSortFilterEventInfo2.PeerSortFilters = new Hashtable();
                 }
                 for (int num5 = 0; num5 < peerSortFilters.Count; num5++)
                 {
                     if (eventSource.ID != peerSortFilters[num5])
                     {
                         runtimeSortFilterEventInfo2.PeerSortFilters.Add(peerSortFilters[num5], null);
                     }
                 }
             }
         }
     }
     return(true);
 }
 internal void AddSortTarget(string scopeName, Microsoft.ReportingServices.ReportIntermediateFormat.ISortFilterScope target)
 {
     Global.Tracer.Assert(!m_reportScopes.ContainsKey(scopeName), "(!m_reportScopes.ContainsKey(scopeName))");
     m_reportScopes.Add(scopeName, target);
 }