Exemplo n.º 1
0
        private static OccuranceBucket GetBucket(OccuranceIntermediate inter)
        {
            int countTotal = 0;

            foreach (var entry in inter.Items)
            {
                countTotal += entry.Second.Length;
            }

            return(new OccuranceBucket(inter.Low, inter.High, inter.Items.Count, countTotal));
        }
Exemplo n.º 2
0
        public static IList <OccuranceBucket> RecursiveAnalyze(IList <Pair <long, EventBean[]> > occurances,
                                                               long[] granularities,
                                                               int level,
                                                               long start,
                                                               long end)
        {
            // form buckets
            long granularity = granularities[level];
            IDictionary <int, OccuranceIntermediate> intermediates = new LinkedHashMap <int, OccuranceIntermediate>();
            int countBucket = 0;

            for (long offset = start; offset < end; offset += granularity)
            {
                var intermediate = new OccuranceIntermediate(offset, offset + granularity - 1);
                intermediates.Put(countBucket, intermediate);
                countBucket++;
            }

            // sort into bucket
            foreach (var entry in occurances)
            {
                long time   = entry.First;
                long delta  = time - start;
                var  bucket = (int)(delta / granularity);
                OccuranceIntermediate intermediate = intermediates.Get(bucket);
                intermediate.Items.Add(entry);
            }

            // report each bucket6
            IList <OccuranceBucket> buckets = new List <OccuranceBucket>();

            foreach (var pair in intermediates)
            {
                OccuranceIntermediate inter  = pair.Value;
                OccuranceBucket       bucket = GetBucket(inter);
                buckets.Add(bucket);

                // for buckets within buckets
                if ((level < (granularities.Length - 1) && (inter.Items.IsNotEmpty())))
                {
                    bucket.InnerBuckets = RecursiveAnalyze(inter.Items, granularities, level + 1, inter.Low, inter.High);
                }
            }

            return(buckets);
        }