Ruby  3.4.0dev (2024-11-05 revision e440268d51fe02b303e3817a7a733a0dac1c5091)
pm_newline_list.h
Go to the documentation of this file.
1 
14 #ifndef PRISM_NEWLINE_LIST_H
15 #define PRISM_NEWLINE_LIST_H
16 
17 #include "prism/defines.h"
18 
19 #include <assert.h>
20 #include <stdbool.h>
21 #include <stddef.h>
22 #include <stdlib.h>
23 
28 typedef struct {
30  const uint8_t *start;
31 
33  size_t size;
34 
36  size_t capacity;
37 
39  size_t *offsets;
41 
45 typedef struct {
47  int32_t line;
48 
50  uint32_t column;
52 
62 bool pm_newline_list_init(pm_newline_list_t *list, const uint8_t *start, size_t capacity);
63 
69 void
71 
81 bool pm_newline_list_append(pm_newline_list_t *list, const uint8_t *cursor);
82 
92 int32_t pm_newline_list_line(const pm_newline_list_t *list, const uint8_t *cursor, int32_t start_line);
93 
104 pm_line_column_t pm_newline_list_line_column(const pm_newline_list_t *list, const uint8_t *cursor, int32_t start_line);
105 
112 
113 #endif
pm_line_column_t pm_newline_list_line_column(const pm_newline_list_t *list, const uint8_t *cursor, int32_t start_line)
Returns the line and column of the given offset.
void pm_newline_list_free(pm_newline_list_t *list)
Free the internal memory allocated for the newline list.
int32_t pm_newline_list_line(const pm_newline_list_t *list, const uint8_t *cursor, int32_t start_line)
Returns the line of the given offset.
bool pm_newline_list_init(pm_newline_list_t *list, const uint8_t *start, size_t capacity)
Initialize a new newline list with the given capacity.
bool pm_newline_list_append(pm_newline_list_t *list, const uint8_t *cursor)
Append a new offset to the newline list.
void pm_newline_list_clear(pm_newline_list_t *list)
Clear out the newlines that have been appended to the list.
Macro definitions used throughout the prism library.
C99 shim for <stdbool.h>
A line and column in a string.
uint32_t column
The column number.
int32_t line
The line number.
A list of offsets of newlines in a string.
const uint8_t * start
A pointer to the start of the source string.
size_t capacity
The capacity of the list that has been allocated.
size_t * offsets
The list of offsets.
size_t size
The number of offsets in the list.