Exemplo n.º 1
0
        private static IPosMappingScanNode CreateNode(PosMapper2 posMapper, IList <IDScanItem> leftBorderItems,
                                                      IList <IDScanItem> rightBorderItems)
        {
            var itemsAtNode = rightBorderItems.Without(leftBorderItems).ToList();
            var moonGroups  = PosMappingUtils.GetMoonGroups(itemsAtNode);

            if (IsCluster(moonGroups))
            {
                var moonGroup = moonGroups.First().First();

                return(new MoonClusterNode(posMapper, PosMappingUtils.GetLowerBoundInKm(moonGroup.Distance),
                                           PosMappingUtils.GetUpperBoundInKm(moonGroup.Distance), leftBorderItems,
                                           rightBorderItems));
            }

            return(new DefaultPosMappingScanNode(posMapper, moonGroups, leftBorderItems, rightBorderItems));
        }
Exemplo n.º 2
0
        private void InitialScan(IList <IDScanItem> obj)
        {
            CheckForOfflineTowers(obj);

            _currentNodeToScan = new DefaultPosMappingScanNode(this, PosMappingUtils.GetMoonGroups(obj),
                                                               new IDScanItem[0], obj);
            if (_currentNodeToScan.IsLeaf)
            {
                var moonItems = _currentNodeToScan.GetMoonItems();
                if (moonItems.Any())
                {
                    OnMoonsScanned(moonItems);
                }
                OnScanDone();
                return;
            }

            OnNextScanRequest(_currentNodeToScan.PivotalScanRangeInKm);
        }