Пример #1
0
        public void Process(ResultItems resultItems, ITask task)
        {
            var resultItemsAll = resultItems.GetAll();

            foreach (var item in resultItemsAll)
            {
                if (item.Value is IMultiPageModel multiPageModel)
                {
                    pageMap.Put(multiPageModel.GetPageKey(),
                                multiPageModel.GetPage(), false);
                    lock (this)
                    {
                        pageMap.Put(multiPageModel.GetPageKey(),
                                    multiPageModel.GetPage(), true);
                        var otherPages = multiPageModel.GetOtherPages();
                        if (otherPages?.Count > 0)
                        {
                            foreach (var otherPage in otherPages)
                            {
                                if (pageMap.Get(multiPageModel.GetPageKey(),
                                                otherPage) == false)
                                {
                                    pageMap.Put(multiPageModel.GetPageKey(), otherPage, false);
                                }
                            }
                        }
                        var booleanMap = pageMap.Get(multiPageModel.GetPageKey());
                        objectMap.Put(multiPageModel.GetPageKey(),
                                      multiPageModel.GetPage(), multiPageModel);
                        if (booleanMap == null)
                        {
                            return;
                        }
                        foreach (var stringBooleanEntry in booleanMap)
                        {
                            if (!stringBooleanEntry.Value)
                            {
                                booleanMap.Remove(stringBooleanEntry.Key);
                                return;
                            }
                        }
                        var range     = objectMap.Get(multiPageModel.GetPageKey());
                        var entryList = range.ToList();
                        if (entryList.Count > 0)
                        {
                            //entryList.Sort();
                            //pai xu sort
                            var value = entryList[0].Value;
                            for (int i = 1; i < entryList.Count; i++)
                            {
                                value = value.Combine(entryList[i].Value);
                            }
                            resultItemsAll[item.Key] = value;
                        }
                    }
                }
            }
        }
Пример #2
0
        private void HandleObject(DictionaryEntry iterator, out bool needDelete)
        {
            needDelete = false;
            object o     = iterator.Value;
            var    model = o as IMultiPageModel;

            if (model != null)
            {
                IMultiPageModel multiPageModel = model;
                _pageMap.Put(multiPageModel.GetPageKey(), multiPageModel.GetPage(), true);
                if (multiPageModel.GetOtherPages() != null)
                {
                    foreach (string otherPage in multiPageModel.GetOtherPages())
                    {
                        bool aBoolean = _pageMap.Get(multiPageModel.GetPageKey(), otherPage);
                        if (!aBoolean)
                        {
                            _pageMap.Put(multiPageModel.GetPageKey(), otherPage, false);
                        }
                    }
                }
                //check if all pages are processed
                Dictionary <string, bool> booleanMap = _pageMap.Get(multiPageModel.GetPageKey());
                _objectMap.Put(multiPageModel.GetPageKey(), multiPageModel.GetPage(), multiPageModel);
                if (booleanMap == null)
                {
                    return;
                }

                if (booleanMap.Any(stringBooleanEntry => !stringBooleanEntry.Value))
                {
                    needDelete = true;
                    return;
                }
                List <EntryObject> entryList = _objectMap.Get(multiPageModel.GetPageKey()).Select(entry => new EntryObject()
                {
                    Entry = entry
                }).ToList();

                if (entryList.Count != 0)
                {
                    entryList.Sort();

                    IMultiPageModel value = entryList[0].Entry.Value;
                    for (int i = 1; i < entryList.Count; i++)
                    {
                        value = value.Combine(entryList[i].Entry.Value);
                    }
                    iterator.Value = value;
                }
            }
        }
Пример #3
0
 /// <summary>
 /// Adds a function if it does not currently
 /// exist in the registry, or replaces the existing one
 /// with the same signature.
 /// </summary>
 /// <param name="func">A function</param>
 public void Add(IGeometryFunction func)
 {
     _functions.Add(func);
     _sortedFunctions.Add(func.Name, func);
     _categorizedFunctions.Put(func.Category, func.Name, func);
     if (HasGeometryResult(func))
     {
         _categorizedGeometryFunctions.Put(func.Category, func.Name, func);
     }
 }
Пример #4
0
        public void Process(ResultItems resultItems, ITask task)
        {
            var resultItemsAll = resultItems.GetAll();

            foreach (var item in resultItemsAll)
            {
                var o = item.Value;
                if (o is IMultiPageModel multiPageModel)
                {
                    pageMap.Put(multiPageModel.GetPageKey(), multiPageModel.GetPage(), false);
                    //每个key单独加锁
                    lock (pageMap.Get(multiPageModel.GetPageKey()))
                    {
                        pageMap.Put(multiPageModel.GetPageKey(), multiPageModel.GetPage(), true);
                        //其他需要拼凑的部分
                        if (multiPageModel.GetOtherPages() != null)
                        {
                            foreach (var otherPage in multiPageModel.GetOtherPages())
                            {
                                var aBoolean = pageMap.Get(multiPageModel.GetPageKey(), otherPage);
                                pageMap.Put(multiPageModel.GetPageKey(), otherPage, false);
                            }
                        }
                        //check if all pages are processed
                        var booleanMap = pageMap.Get(multiPageModel.GetPageKey());
                        objectMap.Put(multiPageModel.GetPageKey(), multiPageModel.GetPage(), multiPageModel);
                        if (booleanMap == null)
                        {
                            return;
                        }
                        // /过滤,这次完成的page item中,还未拼凑完整的item,不进入下一个pipeline
                        foreach (var stringBooleanEntry in booleanMap)
                        {
                            if (!stringBooleanEntry.Value)
                            {
                                //item.remove();
                                return;
                            }
                        }
                        var entryList = new List <KeyValuePair <String, IMultiPageModel> >();
                        entryList.AddRange(objectMap.Get(multiPageModel.GetPageKey()));
                        if (entryList.Count != 0)
                        {
                            var comparison = new Comparison <KeyValuePair <string, IMultiPageModel> >
                                                 ((KeyValuePair <string, IMultiPageModel> d1, KeyValuePair <string, IMultiPageModel> d2) =>
                            {
                                try
                                {
                                    int i1 = int.Parse(d1.Key);
                                    int i2 = int.Parse(d2.Key);
                                    return(i1 - i2);
                                }
                                catch
                                {
                                    return(d1.Key.CompareTo(d2.Key));
                                }
                            });
                            entryList.Sort(comparison);
                        }
                        // 合并
                        var value = entryList[0].Value;
                        for (int i = 1; i < entryList.Count; i++)
                        {
                            value = value.Combine(entryList[i].Value);
                        }
                    }
                }
            }
        }