/*
* This file is part of Unicorn Sparkle Basic and is released under
* CC0 1.0 Universal License. See LICENSE.txt file or
* https://creativecommons.org/publicdomain/zero/1.0/ for full license
* text.
*/
#include "lines.h"
void lines_insert(struct node_tag ***lines, struct node_tag *line) {
size_t low = 0, high = vector_size(*lines);
while (low < high) {
size_t mid = low + (high - low) / 2;
if ((*lines)[mid]->data.line.linum < line->data.line.linum) {
low = mid + 1;
} else {
high = mid;
}
}
vector_insert(lines, low, line);
}
size_t lines_find_idx(struct node_tag **lines, double linum) {
if (vector_size(lines) == 0) return SIZE_MAX;
size_t low = 0, high = vector_size(lines);
while (low < high) {
size_t mid = low + (high - low) / 2;
if (lines[mid]->data.line.linum < linum) {
low = mid + 1;
} else {
high = mid;
}
}
return lines[low]->data.line.linum == linum ? low : SIZE_MAX;
}
void lines_print(struct node_tag **lines) {
printf("Size = %zu\n", vector_size(lines));
for (size_t i = 0; i < vector_size(lines); i++) {
printf("Line %g\n", lines[i]->data.line.linum);
}
}