/// <summary>
        /// gets distribution of the value arrays. When predefined ranges are available, this returns distribution by predefined ranges.
        /// </summary>
        /// <returns></returns>
        public virtual BigSegmentedArray GetCountDistribution()
        {
            BigSegmentedArray dist = null;

            if (_predefinedRangeIndexes != null)
            {
                dist = new LazyBigIntArray(_predefinedRangeIndexes.Length);
                int n = 0;
                foreach (int[] range in _predefinedRangeIndexes)
                {
                    int start = range[0];
                    int end   = range[1];

                    int sum = 0;
                    for (int i = start; i < end; ++i)
                    {
                        sum += _count.Get(i);
                    }
                    dist.Add(n++, sum);
                }
            }
            else
            {
                dist = _count;
            }

            return(dist);
        }
 public virtual BigSegmentedArray GetCountDistribution()
 {
     BigSegmentedArray dist = null;
     if (_predefinedRanges != null)
     {
         dist = new LazyBigIntArray(_predefinedRanges.Count);
         int distIdx = 0;
         for (int i = 0; i < _count.Size(); i++)
         {
             int count = _count.Get(i);
             dist.Add(distIdx++, count);
         }
     }
     return dist;
 }
        public virtual FacetIterator Iterator()
        {
            // each range is of the form <lat, lon, radius>
            LazyBigIntArray rangeCounts = new LazyBigIntArray(_latPredefinedRangeIndexes.Length);

            for (int i = 0; i < _latCount.Length; ++i)
            {
                if (_latCount[i] > 0)
                {
                    for (int k = 0; k < _latPredefinedRangeIndexes.Length; ++k)
                    {
                        if (i >= _latPredefinedRangeIndexes[k][0] && i <= _latPredefinedRangeIndexes[k][1])
                        {
                            rangeCounts.Add(k, rangeCounts.Get(k) + _latCount[i]);
                        }
                    }
                }
            }
            return(new DefaultFacetIterator(_predefinedRanges, rangeCounts, rangeCounts.Size(), true));
        }
 public virtual FacetIterator Iterator()
 {
     if (_predefinedRanges != null)
     {
         BigSegmentedArray rangeCounts = new LazyBigIntArray(_predefinedRangeIndexes.Length);
         for (int k = 0; k < _predefinedRangeIndexes.Length; ++k)
         {
             int count = 0;
             int idx   = _predefinedRangeIndexes[k][0];
             int end   = _predefinedRangeIndexes[k][1];
             while (idx <= end)
             {
                 count += _count.Get(idx++);
             }
             rangeCounts.Add(k, rangeCounts.Get(k) + count);
         }
         return(new DefaultFacetIterator(_predefinedRanges, rangeCounts, rangeCounts.Size(), true));
     }
     return(null);
 }
        /// <summary>
        /// (non-Javadoc)
        /// see com.browseengine.bobo.facets.FacetCountCollector#getCountDistribution()
        /// </summary>
        /// <returns></returns>
        public virtual BigSegmentedArray GetCountDistribution()
        {
            BigSegmentedArray dist = null;

            if (_latPredefinedRangeIndexes != null)
            {
                dist = new LazyBigIntArray(_latPredefinedRangeIndexes.Length);
                int n = 0;
                int start;
                int end;
                foreach (int[] range in _latPredefinedRangeIndexes)
                {
                    start = range[0];
                    end   = range[1];
                    int sum = 0;
                    for (int i = start; i < end; i++)
                    {
                        sum += _latCount[i];
                    }
                    dist.Add(n++, sum);
                }
            }
            return(dist);
        }
        public virtual List <BrowseFacet> GetFacetsNew()
        {
            if (_ospec != null)
            {
                if (_predefinedRangeIndexes != null)
                {
                    int minCount       = _ospec.MinHitCount;
                    int maxNumOfFacets = _ospec.MaxCount;
                    if (maxNumOfFacets <= 0 || maxNumOfFacets > _predefinedRangeIndexes.Length)
                    {
                        maxNumOfFacets = _predefinedRangeIndexes.Length;
                    }

                    BigSegmentedArray rangeCount = new LazyBigIntArray(_predefinedRangeIndexes.Length);

                    for (int k = 0; k < _predefinedRangeIndexes.Length; ++k)
                    {
                        int count = 0;
                        int idx   = _predefinedRangeIndexes[k][0];
                        int end   = _predefinedRangeIndexes[k][1];
                        while (idx <= end)
                        {
                            count += _count.Get(idx++);
                        }
                        rangeCount.Add(k, count);
                    }

                    List <BrowseFacet>      facetColl;
                    FacetSpec.FacetSortSpec sortspec = _ospec.OrderBy;
                    if (sortspec == FacetSpec.FacetSortSpec.OrderValueAsc)
                    {
                        facetColl = new List <BrowseFacet>(maxNumOfFacets);
                        for (int k = 0; k < _predefinedRangeIndexes.Length; ++k)
                        {
                            if (rangeCount.Get(k) >= minCount)
                            {
                                BrowseFacet choice = new BrowseFacet(_predefinedRanges.Get(k), rangeCount.Get(k));
                                facetColl.Add(choice);
                            }
                            if (facetColl.Count >= maxNumOfFacets)
                            {
                                break;
                            }
                        }
                    }
                    else //if (sortspec == FacetSortSpec.OrderHitsDesc)
                    {
                        IComparatorFactory comparatorFactory;
                        if (sortspec == FacetSpec.FacetSortSpec.OrderHitsDesc)
                        {
                            comparatorFactory = new FacetHitcountComparatorFactory();
                        }
                        else
                        {
                            comparatorFactory = _ospec.CustomComparatorFactory;
                        }

                        if (comparatorFactory == null)
                        {
                            throw new ArgumentException("facet comparator factory not specified");
                        }

                        IComparer <int> comparator = comparatorFactory.NewComparator(new RangeFacetCountCollectorFieldAccessor(_predefinedRanges), rangeCount);

                        int forbidden = -1;
                        IntBoundedPriorityQueue pq = new IntBoundedPriorityQueue(comparator, maxNumOfFacets, forbidden);
                        for (int i = 0; i < _predefinedRangeIndexes.Length; ++i)
                        {
                            if (rangeCount.Get(i) >= minCount)
                            {
                                pq.Offer(i);
                            }
                        }

                        int val;
                        facetColl = new List <BrowseFacet>();
                        while ((val = pq.Poll()) != forbidden)
                        {
                            BrowseFacet facet = new BrowseFacet(_predefinedRanges.ElementAt(val), rangeCount.Get(val));
                            facetColl.Insert(0, facet);
                        }
                    }
                    return(facetColl);
                }
                else
                {
                    return(FacetCountCollector_Fields.EMPTY_FACET_LIST);
                }
            }
            else
            {
                return(FacetCountCollector_Fields.EMPTY_FACET_LIST);
            }
        }