110 size_t search_start_pos)
112 size_t num_pos_ext = cover->num_pos_ext;
113 struct Xt_pos_ext *restrict covered_pos_ext = cover->pos_ext;
114 size_t lb = search_start_pos, ub = num_pos_ext;
115 size_t result = SIZE_MAX;
117 size_t guess = lb+(ub-lb)/2;
118 if (query.
start >= (covered_pos_ext[guess].start
119 + covered_pos_ext[guess].size))
121 else if (query.
end < covered_pos_ext[guess].start) {
123 || query.
start >= (covered_pos_ext[guess-1].start
124 + covered_pos_ext[guess-1].size)) {
130 while (guess && query.
start < (covered_pos_ext[guess-1].start
131 + covered_pos_ext[guess-1].size))
144 size_t num_pos_ext = cover->num_pos_ext;
145 struct Xt_pos_ext *restrict cover_pos_ext = cover->pos_ext;
147 && (cover_pos_ext[num_pos_ext - 1].
start
148 + cover_pos_ext[num_pos_ext - 1].
size
150 cover_pos_ext[num_pos_ext - 1].
size += range.
size;
153 cover->pos_ext = cover_pos_ext;
154 cover_pos_ext[num_pos_ext] = range;
155 ++cover->num_pos_ext;
163 size_t search_start_pos)
166 struct Xt_pos_ext *restrict cover_pos_ext = cover->pos_ext;
167 if (insert_pos != SIZE_MAX) {
168 if ((range.
start < (cover_pos_ext[insert_pos].start
169 + cover_pos_ext[insert_pos].size))
170 & (range.
end >= cover_pos_ext[insert_pos].start))
175 else if (range.
end + 1 < cover_pos_ext[insert_pos].start)
181 && (cover_pos_ext[insert_pos - 1].
start
182 + cover_pos_ext[insert_pos - 1].
size == range.
start))
183 cover_pos_ext[insert_pos - 1].
size += range.
end - range.
start + 1;
186 size_t num_pos_ext = cover->num_pos_ext;
190 cover->pos_ext = cover_pos_ext;
191 memmove(cover_pos_ext + insert_pos + 1, cover_pos_ext + insert_pos,
192 sizeof (*cover_pos_ext)
193 * (num_pos_ext - insert_pos));
194 cover_pos_ext[insert_pos]
196 .size = range.
end - range.
start + 1};
197 cover->num_pos_ext = ++num_pos_ext;
199 insert_pos = SIZE_MAX;
201 else if (range.
end + 1 == cover_pos_ext[insert_pos].start)
203 cover_pos_ext[insert_pos].start = range.
start;
204 cover_pos_ext[insert_pos].size += range.
end - range.
start + 1;
206 && (cover_pos_ext[insert_pos].start
207 == (cover_pos_ext[insert_pos - 1].start
208 + cover_pos_ext[insert_pos - 1].size)))
210 cover_pos_ext[insert_pos - 1].size
211 += cover_pos_ext[insert_pos].size;
212 memmove(cover_pos_ext + insert_pos, cover_pos_ext + insert_pos + 1,
213 (--cover->num_pos_ext - insert_pos)
214 * sizeof (*cover_pos_ext));
216 insert_pos = SIZE_MAX;
221 .size = range.
end - range.
start + 1});