Ruby 4.1.0dev (2026-10-27 revision ee55edef0d1f32704d7dfd37c935f9d2c8a55bb1)
stringy.c
1#include "prism/internal/stringy.h"
2
3#include <assert.h>
4#include <string.h>
5
9void
10pm_string_shared_init(pm_string_t *string, const uint8_t *start, const uint8_t *end) {
11 assert(start <= end);
12
13 *string = (pm_string_t) {
14 .source = start,
15 .length = (size_t) (end - start)
16 };
17}
18
22void
23pm_string_init(pm_string_t *string, const uint8_t *source, size_t length) {
24 *string = (pm_string_t) { .source = source, .length = length };
25}
26
33int
34pm_string_compare(const pm_string_t *left, const pm_string_t *right) {
35 size_t left_length = pm_string_length(left);
36 size_t right_length = pm_string_length(right);
37
38 if (left_length < right_length) {
39 return -1;
40 } else if (left_length > right_length) {
41 return 1;
42 }
43
44 return memcmp(pm_string_source(left), pm_string_source(right), left_length);
45}
46
50size_t
51pm_string_length(const pm_string_t *string) {
52 return string->length;
53}
54
58const uint8_t *
59pm_string_source(const pm_string_t *string) {
60 return string->source;
61}
A view of a sequence of bytes.
Definition stringy.h:23