chunkedseq
container library for large in-memory data sets
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
segment.hpp
Go to the documentation of this file.
1 
13 #ifndef _PASL_DATA_SEGMENT_H_
14 #define _PASL_DATA_SEGMENT_H_
15 
16 namespace pasl {
17 namespace data {
18 
19 /***********************************************************************/
20 
21 /*---------------------------------------------------------------------*/
32 template <class Pointer>
34 class segment {
35 public:
36 
37  using pointer_type = Pointer;
38 
39  // points to the first cell of the interval
41  // points to a cell contained in the interval
43  // points to the cell that is one cell past the last cell of interval
45 
47  : begin(nullptr), middle(nullptr), end(nullptr) { }
48 
50  : begin(begin), middle(middle), end(end) { }
51 
52 };
54 
55 /*---------------------------------------------------------------------*/
56 
65 template <class Pointer>
66 segment<Pointer> segment_of_ringbuffer(Pointer p, Pointer fr, Pointer bk, Pointer a, int capacity) {
67  segment<Pointer> seg;
68  assert(p >= a);
69  assert(p < a + capacity);
70  seg.middle = p;
71  if (fr <= bk) { // no wraparound
72  seg.begin = fr;
73  seg.end = bk + 1;
74  } else if (p >= fr) { // p points into first segment
75  seg.begin = fr;
76  seg.end = a + capacity;
77  } else { // p points into second segment
78  assert(p <= bk);
79  seg.begin = a;
80  seg.end = bk + 1;
81  }
82  assert(seg.begin <= p);
83  assert(seg.middle == p);
84  assert(p < seg.end);
85  return seg;
86 }
87 
88 template <class Item>
91  res.begin = seg.begin;
92  res.middle = seg.middle;
93  res.end = seg.end;
94  return res;
95 }
96 
97 /***********************************************************************/
98 
99 } // end namespace
100 } // end namespace
101 
102 #endif
pointer_type end
Definition: segment.hpp:44
Pointer pointer_type
Definition: segment.hpp:37
Segment descriptor.
Definition: segment.hpp:34
segment< Pointer > segment_of_ringbuffer(Pointer p, Pointer fr, Pointer bk, Pointer a, int capacity)
[segment]
Definition: segment.hpp:66
Definition: algebra.hpp:18
segment< const Item * > make_const_segment(segment< Item * > seg)
Definition: segment.hpp:89
result_t res
Definition: bench.cpp:51
segment(pointer_type begin, pointer_type middle, pointer_type end)
Definition: segment.hpp:49
pointer_type middle
Definition: segment.hpp:42
pointer_type begin
Definition: segment.hpp:40