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)); }
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); }