41 uint64_t interval_min;
42 uint64_t interval_values;
43 uint64_t interval_max;
46 void replace(uint64_t start, uint64_t val, uint64_t incr)
50 interval_max= (val == UINT64_MAX) ? val : start + val * incr;
53 interval_min(start), interval_values(val),
54 interval_max((val == UINT64_MAX) ? val : start + val * incr),
58 interval_min(0), interval_values(0),
59 interval_max(0), next(NULL)
61 uint64_t minimum()
const {
return interval_min; }
62 uint64_t values()
const {
return interval_values; }
63 uint64_t maximum()
const {
return interval_max; }
69 bool merge_if_contiguous(uint64_t start, uint64_t val, uint64_t incr)
71 if (interval_max == start)
73 if (val == UINT64_MAX)
75 interval_values= interval_max= val;
79 interval_values+= val;
80 interval_max= start + val * incr;
115 head(NULL), tail(NULL),
116 current(NULL), elements(0) {}
118 head(NULL), tail(NULL),
119 current(NULL), elements(0)
149 current= current->next;
153 uint64_t minimum()
const {
return (head ? head->minimum() : 0); }
154 uint64_t maximum()
const {
return (head ? tail->maximum() : 0); }
155 uint32_t nb_elements()
const {
return elements; }
157 bool append(uint64_t start, uint64_t val, uint64_t incr)
160 if ((head == NULL) || tail->merge_if_contiguous(start, val, incr))
164 return(append(new_interval));
171 if (unlikely(new_interval == NULL))
174 head= current= new_interval;
176 tail->next= new_interval;