2#include "prism/internal/line_offset_list.h"
3#include "prism/internal/arena.h"
13 list->
offsets = (uint32_t *) pm_arena_alloc(arena, capacity *
sizeof(uint32_t),
PRISM_ALIGNOF(uint32_t));
34 size_t new_capacity = (list->
capacity * 3) / 2;
35 uint32_t *new_offsets = (uint32_t *) pm_arena_alloc(arena, new_capacity *
sizeof(uint32_t),
PRISM_ALIGNOF(uint32_t));
37 memcpy(new_offsets, list->
offsets, list->
size *
sizeof(uint32_t));
53 size_t right = list->
size - 1;
55 while (left <= right) {
56 size_t mid = left + (right - left) / 2;
58 if (list->
offsets[mid] == cursor) {
59 return ((int32_t) mid) + start_line;
62 if (list->
offsets[mid] < cursor) {
69 return ((int32_t) left) + start_line - 1;
80 size_t right = list->
size - 1;
82 while (left <= right) {
83 size_t mid = left + (right - left) / 2;
85 if (list->
offsets[mid] == cursor) {
89 if (list->
offsets[mid] < cursor) {
97 .line = ((int32_t) left) + start_line - 1,
98 .column = cursor - list->
offsets[left - 1]
#define PRISM_ALIGNOF
Get the alignment requirement of a type.
A line and column in a string.
A list of offsets of the start of lines in a string.
uint32_t * offsets
The list of offsets.
size_t size
The number of offsets in the list.
size_t capacity
The capacity of the list that has been allocated.