Пример #1
0
        private async Task <List <XRefSpec> > GetXRefSpecAsync(ClassEntry entry)
        {
            var      result   = new List <XRefSpec>(entry.Items.Count);
            var      type     = entry.Items.Find(item => item.Uid == entry.EntryName);
            XRefSpec typeSpec = null;

            if (type != null)
            {
                typeSpec = await GetXRefSpecAsync(type);

                if (typeSpec != null)
                {
                    result.Add(typeSpec);
                }
            }
            int size = 0;

            foreach (var specsTask in
                     from block in
                     (from item in entry.Items
                      where item != type
                      select item).BlockBuffer(() => size = size * 2 + 1)
                     select Task.WhenAll(from item in block select GetXRefSpecAsync(item)))
            {
                result.AddRange(from s in await specsTask where s != null select s);
            }
            result.AddRange(await GetOverloadXRefSpecAsync(result));
            if (typeSpec != null && typeSpec.Href != null)
            {
                // handle enum field, or other one-page-member
                foreach (var item in result)
                {
                    if (item.Href == null)
                    {
                        item.Href = typeSpec.Href;
                    }
                }
            }
            else
            {
                result.RemoveAll(item => item.Href == null);
            }
            result.Sort(XRefSpecUidComparer.Instance);
            return(result);
        }
Пример #2
0
        private async Task <List <ReferenceViewModel> > GetReferenceVMAsync(ClassEntry entry)
        {
            List <ReferenceViewModel> result = new List <ReferenceViewModel>(entry.Items.Count);
            var type = entry.Items.Find(item => item.Uid == entry.EntryName);
            ReferenceViewModel typeVM = null;

            if (type != null)
            {
                typeVM = await GetViewModelItemAsync(type);

                result.Add(typeVM);
            }
            int size = 0;

            foreach (var vmsTask in
                     from block in
                     (from item in entry.Items
                      where item != type
                      select item).BlockBuffer(() => size = size * 2 + 1)
                     select Task.WhenAll(from item in block select GetViewModelItemAsync(item)))
            {
                result.AddRange(await vmsTask);
            }
            if (typeVM != null && typeVM.Href != null)
            {
                // handle enum field, or other one-page-member
                foreach (var item in result)
                {
                    if (item.Href == null)
                    {
                        item.Href = typeVM.Href;
                    }
                }
            }
            else
            {
                result.RemoveAll(item => item.Href == null);
            }
            return(result);
        }
Пример #3
0
        private async Task<List<ReferenceViewModel>> GetReferenceVMAsync(ClassEntry entry)
        {
            List<ReferenceViewModel> result = new List<ReferenceViewModel>(entry.Items.Count);
            var type = entry.Items.Find(item => item.Uid == entry.EntryName);
            ReferenceViewModel typeVM = null;
            if (type != null)
            {
                typeVM = await GetViewModelItemAsync(type);
                result.Add(typeVM);
            }
            int size = 0;

            foreach (var vmsTask in
                from block in
                    (from item in entry.Items
                     where item != type
                     select item).BlockBuffer(() => size = size * 2 + 1)
                select Task.WhenAll(from item in block select GetViewModelItemAsync(item)))
            {
                result.AddRange(await vmsTask);
            }
            if (typeVM != null && typeVM.Href != null)
            {
                // handle enum field, or other one-page-member
                foreach (var item in result)
                {
                    if (item.Href == null)
                    {
                        item.Href = typeVM.Href;
                    }
                }
            }
            else
            {
                result.RemoveAll(item => item.Href == null);
            }
            return result;
        }
Пример #4
0
 private async Task<List<XRefSpec>> GetXRefSpecAsync(ClassEntry entry)
 {
     var result = new List<XRefSpec>(entry.Items.Count);
     var type = entry.Items.Find(item => item.Uid == entry.EntryName);
     XRefSpec typeSpec = null;
     if (type != null)
     {
         typeSpec = await GetXRefSpecAsync(type);
         if (typeSpec != null)
         {
             result.Add(typeSpec);
         }
     }
     int size = 0;
     foreach (var specsTask in
         from block in
             (from item in entry.Items
              where item != type
              select item).BlockBuffer(() => size = size * 2 + 1)
         select Task.WhenAll(from item in block select GetXRefSpecAsync(item)))
     {
         result.AddRange(from s in await specsTask where s != null select s);
     }
     result.AddRange(await GetOverloadXRefSpecAsync(result));
     if (typeSpec != null && typeSpec.Href != null)
     {
         // handle enum field, or other one-page-member
         foreach (var item in result)
         {
             if (item.Href == null)
             {
                 item.Href = typeSpec.Href;
             }
         }
     }
     else
     {
         result.RemoveAll(item => item.Href == null);
     }
     result.Sort(XRefSpecUidComparer.Instance);
     return result;
 }