bare-buffer 2.5.9 → 2.5.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/CMakeLists.txt +4 -11
  2. package/package.json +3 -8
  3. package/prebuilds/android-arm/bare-buffer.bare +0 -0
  4. package/prebuilds/android-arm64/bare-buffer.bare +0 -0
  5. package/prebuilds/android-ia32/bare-buffer.bare +0 -0
  6. package/prebuilds/android-x64/bare-buffer.bare +0 -0
  7. package/prebuilds/darwin-arm64/bare-buffer.bare +0 -0
  8. package/prebuilds/darwin-x64/bare-buffer.bare +0 -0
  9. package/prebuilds/ios-arm64/bare-buffer.bare +0 -0
  10. package/prebuilds/ios-arm64-simulator/bare-buffer.bare +0 -0
  11. package/prebuilds/ios-x64-simulator/bare-buffer.bare +0 -0
  12. package/prebuilds/linux-arm64/bare-buffer.bare +0 -0
  13. package/prebuilds/linux-x64/bare-buffer.bare +0 -0
  14. package/prebuilds/win32-arm64/bare-buffer.bare +0 -0
  15. package/prebuilds/win32-x64/bare-buffer.bare +0 -0
  16. package/vendor/libbase64/CMakeLists.txt +0 -70
  17. package/vendor/libbase64/include/base64.h +0 -22
  18. package/vendor/libbase64/src/base64.c +0 -107
  19. package/vendor/libhex/CMakeLists.txt +0 -71
  20. package/vendor/libhex/include/hex.h +0 -22
  21. package/vendor/libhex/src/hex.c +0 -67
  22. package/vendor/libutf/CMakeLists.txt +0 -93
  23. package/vendor/libutf/include/utf/string.h +0 -786
  24. package/vendor/libutf/include/utf.h +0 -132
  25. package/vendor/libutf/src/ascii/validate.c +0 -47
  26. package/vendor/libutf/src/endianness.c +0 -19
  27. package/vendor/libutf/src/endianness.h +0 -54
  28. package/vendor/libutf/src/latin1/convert-to-utf16.c +0 -37
  29. package/vendor/libutf/src/latin1/convert-to-utf32.c +0 -34
  30. package/vendor/libutf/src/latin1/convert-to-utf8.c +0 -58
  31. package/vendor/libutf/src/latin1/length-from-utf16.c +0 -26
  32. package/vendor/libutf/src/latin1/length-from-utf32.c +0 -26
  33. package/vendor/libutf/src/latin1/length-from-utf8.c +0 -34
  34. package/vendor/libutf/src/utf16/convert-to-latin1.c +0 -41
  35. package/vendor/libutf/src/utf16/convert-to-utf32.c +0 -56
  36. package/vendor/libutf/src/utf16/convert-to-utf8.c +0 -75
  37. package/vendor/libutf/src/utf16/length-from-latin1.c +0 -26
  38. package/vendor/libutf/src/utf16/length-from-utf32.c +0 -33
  39. package/vendor/libutf/src/utf16/length-from-utf8.c +0 -38
  40. package/vendor/libutf/src/utf16/validate.c +0 -53
  41. package/vendor/libutf/src/utf32/convert-to-latin1.c +0 -40
  42. package/vendor/libutf/src/utf32/convert-to-utf16.c +0 -56
  43. package/vendor/libutf/src/utf32/convert-to-utf8.c +0 -71
  44. package/vendor/libutf/src/utf32/length-from-latin1.c +0 -26
  45. package/vendor/libutf/src/utf32/length-from-utf16.c +0 -35
  46. package/vendor/libutf/src/utf32/length-from-utf8.c +0 -35
  47. package/vendor/libutf/src/utf32/validate.c +0 -39
  48. package/vendor/libutf/src/utf8/convert-to-latin1.c +0 -70
  49. package/vendor/libutf/src/utf8/convert-to-utf16.c +0 -95
  50. package/vendor/libutf/src/utf8/convert-to-utf32.c +0 -110
  51. package/vendor/libutf/src/utf8/length-from-latin1.c +0 -32
  52. package/vendor/libutf/src/utf8/length-from-utf16.c +0 -44
  53. package/vendor/libutf/src/utf8/length-from-utf32.c +0 -35
  54. package/vendor/libutf/src/utf8/string.c +0 -149
  55. package/vendor/libutf/src/utf8/validate.c +0 -107
@@ -1,786 +0,0 @@
1
- #ifndef UTF_STRING_H
2
- #define UTF_STRING_H
3
-
4
- #ifdef __cplusplus
5
- extern "C" {
6
- #endif
7
-
8
- #include <assert.h>
9
- #include <stdbool.h>
10
- #include <stddef.h>
11
- #include <stdio.h>
12
- #include <stdlib.h>
13
- #include <string.h>
14
-
15
- #include "../utf.h"
16
-
17
- /**
18
- * UTF-8
19
- */
20
-
21
- typedef struct utf8_string_s utf8_string_t;
22
- typedef struct utf8_string_view_s utf8_string_view_t;
23
-
24
- struct utf8_string_s {
25
- utf8_t *data;
26
- size_t len;
27
- union {
28
- size_t cap;
29
- utf8_t buf[8];
30
- };
31
- };
32
-
33
- struct utf8_string_view_s {
34
- const utf8_t *data;
35
- size_t len;
36
- };
37
-
38
- inline void
39
- utf8_string_init (utf8_string_t *string) {
40
- string->data = string->buf;
41
- string->len = 0;
42
- }
43
-
44
- inline utf8_string_view_t
45
- utf8_string_view_init (const utf8_t *data, size_t len) {
46
- utf8_string_view_t view = {data, len};
47
- return view;
48
- }
49
-
50
- inline void
51
- utf8_string_destroy (utf8_string_t *string) {
52
- if (string->data != string->buf) free(string->data);
53
- }
54
-
55
- inline int
56
- utf8_string_reserve (utf8_string_t *string, size_t len) {
57
- size_t cap = string->data == string->buf ? sizeof(string->buf) : string->cap;
58
-
59
- if (len <= cap) return 0;
60
-
61
- // https://graphics.stanford.edu/~seander/bithacks.html#RoundUpPowerOf2
62
- len--;
63
- len |= len >> 1;
64
- len |= len >> 2;
65
- len |= len >> 4;
66
- len |= len >> 8;
67
- len |= len >> 16;
68
- if (sizeof(len) == 8) len |= len >> 32;
69
- len++;
70
-
71
- cap = len;
72
-
73
- utf8_t *data;
74
-
75
- if (string->data == string->buf) {
76
- data = (utf8_t *) malloc(cap);
77
-
78
- memcpy(data, string->data, string->len);
79
- } else {
80
- data = (utf8_t *) realloc(string->data, cap);
81
- }
82
-
83
- if (data == NULL) return -1;
84
-
85
- string->data = data;
86
- string->cap = cap;
87
-
88
- return 0;
89
- }
90
-
91
- inline int
92
- utf8_string_shrink_to_fit (utf8_string_t *string) {
93
- if (string->data == string->buf) return 0;
94
-
95
- size_t cap = string->len;
96
-
97
- if (cap <= sizeof(string->buf)) {
98
- memcpy(string->buf, string->data, cap);
99
-
100
- free(string->data);
101
-
102
- string->data = string->buf;
103
- } else {
104
- utf8_t *data = (utf8_t *) realloc(string->data, cap);
105
-
106
- if (data == NULL) return -1;
107
-
108
- string->data = data;
109
- string->cap = cap;
110
- }
111
-
112
- return 0;
113
- }
114
-
115
- inline utf8_string_view_t
116
- utf8_string_view (const utf8_string_t *string) {
117
- return utf8_string_view_init(string->data, string->len);
118
- }
119
-
120
- inline void
121
- utf8_string_clear (utf8_string_t *string) {
122
- string->len = 0;
123
- }
124
-
125
- inline bool
126
- utf8_string_empty (const utf8_string_t *string) {
127
- return string->len == 0;
128
- }
129
-
130
- inline bool
131
- utf8_string_view_empty (const utf8_string_view_t view) {
132
- return view.len == 0;
133
- }
134
-
135
- inline int
136
- utf8_string_copy (const utf8_string_t *string, utf8_string_t *result) {
137
- int err;
138
-
139
- err = utf8_string_reserve(result, string->len);
140
- if (err < 0) return err;
141
-
142
- memcpy(result->data, string->data, string->len);
143
-
144
- result->len = string->len;
145
-
146
- return 0;
147
- }
148
-
149
- inline int
150
- utf8_string_view_copy (const utf8_string_view_t view, utf8_string_t *result) {
151
- int err;
152
-
153
- err = utf8_string_reserve(result, view.len);
154
- if (err < 0) return err;
155
-
156
- memcpy(result->data, view.data, view.len);
157
-
158
- result->len = view.len;
159
-
160
- return 0;
161
- }
162
-
163
- inline int
164
- utf8_string_append (utf8_string_t *string, const utf8_string_t *other) {
165
- int err;
166
-
167
- err = utf8_string_reserve(string, string->len + other->len);
168
- if (err < 0) return -1;
169
-
170
- memcpy(&string->data[string->len], other->data, other->len);
171
-
172
- string->len += other->len;
173
-
174
- return 0;
175
- }
176
-
177
- inline int
178
- utf8_string_append_view (utf8_string_t *string, const utf8_string_view_t view) {
179
- int err;
180
-
181
- err = utf8_string_reserve(string, string->len + view.len);
182
- if (err < 0) return -1;
183
-
184
- memcpy(&string->data[string->len], view.data, view.len);
185
-
186
- string->len += view.len;
187
-
188
- return 0;
189
- }
190
-
191
- inline int
192
- utf8_string_append_character (utf8_string_t *string, utf8_t c) {
193
- int err;
194
-
195
- err = utf8_string_reserve(string, string->len + 1);
196
- if (err < 0) return -1;
197
-
198
- string->data[string->len] = c;
199
-
200
- string->len += 1;
201
-
202
- return 0;
203
- }
204
-
205
- inline int
206
- utf8_string_append_literal (utf8_string_t *string, const utf8_t *literal, size_t n) {
207
- int err;
208
-
209
- if (n == (size_t) -1) n = strlen((const char *) literal);
210
-
211
- err = utf8_string_reserve(string, string->len + n);
212
- if (err < 0) return -1;
213
-
214
- memcpy(&string->data[string->len], literal, n);
215
-
216
- string->len += n;
217
-
218
- return 0;
219
- }
220
-
221
- inline int
222
- utf8_string_prepend (utf8_string_t *string, const utf8_string_t *other) {
223
- int err;
224
-
225
- err = utf8_string_reserve(string, string->len + other->len);
226
- if (err < 0) return -1;
227
-
228
- memmove(&string->data[other->len], string->data, string->len);
229
-
230
- memcpy(string->data, other->data, other->len);
231
-
232
- string->len += other->len;
233
-
234
- return 0;
235
- }
236
-
237
- inline int
238
- utf8_string_prepend_view (utf8_string_t *string, const utf8_string_view_t view) {
239
- int err;
240
-
241
- err = utf8_string_reserve(string, string->len + view.len);
242
- if (err < 0) return -1;
243
-
244
- memmove(&string->data[view.len], string->data, string->len);
245
-
246
- memcpy(string->data, view.data, view.len);
247
-
248
- string->len += view.len;
249
-
250
- return 0;
251
- }
252
-
253
- inline int
254
- utf8_string_prepend_character (utf8_string_t *string, utf8_t c) {
255
- int err;
256
-
257
- err = utf8_string_reserve(string, string->len + 1);
258
- if (err < 0) return -1;
259
-
260
- memmove(&string->data[1], string->data, string->len);
261
-
262
- string->data[0] = c;
263
-
264
- string->len += 1;
265
-
266
- return 0;
267
- }
268
-
269
- inline int
270
- utf8_string_prepend_literal (utf8_string_t *string, const utf8_t *literal, size_t n) {
271
- int err;
272
-
273
- if (n == (size_t) -1) n = strlen((const char *) literal);
274
-
275
- err = utf8_string_reserve(string, string->len + n);
276
- if (err < 0) return -1;
277
-
278
- memmove(&string->data[n], string->data, string->len);
279
-
280
- memcpy(string->data, literal, n);
281
-
282
- string->len += n;
283
-
284
- return 0;
285
- }
286
-
287
- inline int
288
- utf8_string_insert (utf8_string_t *string, size_t pos, const utf8_string_t *other) {
289
- int err;
290
-
291
- if (pos > string->len) return -1;
292
-
293
- size_t inserted_len = string->len + other->len;
294
-
295
- err = utf8_string_reserve(string, inserted_len);
296
- if (err < 0) return err;
297
-
298
- memmove(&string->data[pos + other->len], &string->data[pos], string->len - pos);
299
-
300
- memcpy(&string->data[pos], other->data, other->len);
301
-
302
- string->len = inserted_len;
303
-
304
- return 0;
305
- }
306
-
307
- inline int
308
- utf8_string_insert_view (utf8_string_t *string, size_t pos, const utf8_string_view_t other) {
309
- int err;
310
-
311
- if (pos > string->len) return -1;
312
-
313
- size_t inserted_len = string->len + other.len;
314
-
315
- err = utf8_string_reserve(string, inserted_len);
316
- if (err < 0) return err;
317
-
318
- memmove(&string->data[pos + other.len], &string->data[pos], string->len - pos);
319
-
320
- memcpy(&string->data[pos], other.data, other.len);
321
-
322
- string->len = inserted_len;
323
-
324
- return 0;
325
- }
326
-
327
- inline int
328
- utf8_string_insert_character (utf8_string_t *string, size_t pos, utf8_t c) {
329
- int err;
330
-
331
- if (pos > string->len) return -1;
332
-
333
- size_t inserted_len = string->len + 1;
334
-
335
- err = utf8_string_reserve(string, inserted_len);
336
- if (err < 0) return err;
337
-
338
- memmove(&string->data[pos + 1], &string->data[pos], string->len - pos);
339
-
340
- string->data[pos] = c;
341
-
342
- string->len = inserted_len;
343
-
344
- return 0;
345
- }
346
-
347
- inline int
348
- utf8_string_insert_literal (utf8_string_t *string, size_t pos, const utf8_t *literal, size_t n) {
349
- int err;
350
-
351
- if (pos > string->len) return -1;
352
-
353
- if (n == (size_t) -1) n = strlen((const char *) literal);
354
-
355
- size_t inserted_len = string->len + n;
356
-
357
- err = utf8_string_reserve(string, inserted_len);
358
- if (err < 0) return err;
359
-
360
- memmove(&string->data[pos + n], &string->data[pos], string->len - pos);
361
-
362
- memcpy(&string->data[pos], literal, n);
363
-
364
- string->len = inserted_len;
365
-
366
- return 0;
367
- }
368
-
369
- inline int
370
- utf8_string_replace (utf8_string_t *string, size_t pos, size_t len, const utf8_string_t *replacement) {
371
- int err;
372
-
373
- if (pos > string->len) return -1;
374
- if (pos + len > string->len) len = string->len - pos;
375
-
376
- size_t replaced_len = string->len + replacement->len - len;
377
-
378
- err = utf8_string_reserve(string, replaced_len);
379
- if (err < 0) return err;
380
-
381
- memmove(&string->data[pos + replacement->len], &string->data[pos + len], string->len - pos - len);
382
-
383
- memcpy(&string->data[pos], replacement->data, replacement->len);
384
-
385
- string->len = replaced_len;
386
-
387
- return 0;
388
- }
389
-
390
- inline int
391
- utf8_string_replace_view (utf8_string_t *string, size_t pos, size_t len, const utf8_string_view_t replacement) {
392
- int err;
393
-
394
- if (pos > string->len) return -1;
395
- if (pos + len > string->len) len = string->len - pos;
396
-
397
- size_t replaced_len = string->len + replacement.len - len;
398
-
399
- err = utf8_string_reserve(string, replaced_len);
400
- if (err < 0) return err;
401
-
402
- memmove(&string->data[pos + replacement.len], &string->data[pos + len], string->len - pos - len);
403
-
404
- memcpy(&string->data[pos], replacement.data, replacement.len);
405
-
406
- string->len = replaced_len;
407
-
408
- return 0;
409
- }
410
-
411
- inline int
412
- utf8_string_replace_character (utf8_string_t *string, size_t pos, size_t len, utf8_t c) {
413
- int err;
414
-
415
- if (pos > string->len) return -1;
416
-
417
- size_t replaced_len = string->len + 1 - len;
418
-
419
- err = utf8_string_reserve(string, replaced_len);
420
- if (err < 0) return err;
421
-
422
- memmove(&string->data[pos + 1], &string->data[pos + len], string->len - pos - len);
423
-
424
- string->data[pos] = c;
425
-
426
- string->len = replaced_len;
427
-
428
- return 0;
429
- }
430
-
431
- inline int
432
- utf8_string_replace_literal (utf8_string_t *string, size_t pos, size_t len, const utf8_t *literal, size_t n) {
433
- int err;
434
-
435
- if (pos > string->len) return -1;
436
- if (pos + len > string->len) len = string->len - pos;
437
-
438
- if (n == (size_t) -1) n = strlen((const char *) literal);
439
-
440
- size_t replaced_len = string->len + n - len;
441
-
442
- err = utf8_string_reserve(string, replaced_len);
443
- if (err < 0) return err;
444
-
445
- memmove(&string->data[pos + n], &string->data[pos + len], string->len - pos - len);
446
-
447
- memcpy(&string->data[pos], literal, n);
448
-
449
- string->len = replaced_len;
450
-
451
- return 0;
452
- }
453
-
454
- inline int
455
- utf8_string_erase (utf8_string_t *string, size_t pos, size_t len) {
456
- int err;
457
-
458
- if (pos > string->len) return -1;
459
- if (pos + len > string->len) len = string->len - pos;
460
-
461
- memmove(&string->data[pos], &string->data[pos + len], string->len - pos - len);
462
-
463
- string->len -= len;
464
-
465
- return 0;
466
- }
467
-
468
- inline int
469
- utf8_string_concat (const utf8_string_t *string, const utf8_string_t *other, utf8_string_t *result) {
470
- int err;
471
-
472
- utf8_string_init(result);
473
-
474
- err = utf8_string_reserve(result, string->len + other->len);
475
- if (err < 0) return err;
476
-
477
- err = utf8_string_append(result, string);
478
- assert(err == 0);
479
-
480
- err = utf8_string_append(result, other);
481
- assert(err == 0);
482
-
483
- return 0;
484
- }
485
-
486
- inline int
487
- utf8_string_view_concat (const utf8_string_view_t view, const utf8_string_t *other, utf8_string_t *result) {
488
- int err;
489
-
490
- utf8_string_init(result);
491
-
492
- err = utf8_string_reserve(result, view.len + other->len);
493
- if (err < 0) return err;
494
-
495
- err = utf8_string_append_view(result, view);
496
- assert(err == 0);
497
-
498
- err = utf8_string_append(result, other);
499
- assert(err == 0);
500
-
501
- return 0;
502
- }
503
-
504
- inline int
505
- utf8_string_concat_view (const utf8_string_t *string, const utf8_string_view_t other, utf8_string_t *result) {
506
- int err;
507
-
508
- utf8_string_init(result);
509
-
510
- err = utf8_string_reserve(result, string->len + other.len);
511
- if (err < 0) return err;
512
-
513
- err = utf8_string_append(result, string);
514
- assert(err == 0);
515
-
516
- err = utf8_string_append_view(result, other);
517
- assert(err == 0);
518
-
519
- return 0;
520
- }
521
-
522
- inline int
523
- utf8_string_view_concat_view (const utf8_string_view_t view, const utf8_string_view_t other, utf8_string_t *result) {
524
- int err;
525
-
526
- utf8_string_init(result);
527
-
528
- err = utf8_string_reserve(result, view.len + other.len);
529
- if (err < 0) return err;
530
-
531
- err = utf8_string_append_view(result, view);
532
- assert(err == 0);
533
-
534
- err = utf8_string_append_view(result, other);
535
- assert(err == 0);
536
-
537
- return 0;
538
- }
539
-
540
- inline int
541
- utf8_string_concat_character (const utf8_string_t *string, utf8_t c, utf8_string_t *result) {
542
- int err;
543
-
544
- utf8_string_init(result);
545
-
546
- err = utf8_string_reserve(result, string->len + 1);
547
- if (err < 0) return err;
548
-
549
- err = utf8_string_append(result, string);
550
- assert(err == 0);
551
-
552
- err = utf8_string_append_character(result, c);
553
- assert(err == 0);
554
-
555
- return 0;
556
- }
557
-
558
- inline int
559
- utf8_string_view_concat_character (const utf8_string_view_t view, utf8_t c, utf8_string_t *result) {
560
- int err;
561
-
562
- utf8_string_init(result);
563
-
564
- err = utf8_string_reserve(result, view.len + 1);
565
- if (err < 0) return err;
566
-
567
- err = utf8_string_append_view(result, view);
568
- assert(err == 0);
569
-
570
- err = utf8_string_append_character(result, c);
571
- assert(err == 0);
572
-
573
- return 0;
574
- }
575
-
576
- inline int
577
- utf8_string_concat_literal (const utf8_string_t *string, const utf8_t *literal, size_t n, utf8_string_t *result) {
578
- int err;
579
-
580
- utf8_string_init(result);
581
-
582
- err = utf8_string_reserve(result, string->len + n);
583
- if (err < 0) return err;
584
-
585
- err = utf8_string_append(result, string);
586
- assert(err == 0);
587
-
588
- err = utf8_string_append_literal(result, literal, n);
589
- assert(err == 0);
590
-
591
- return 0;
592
- }
593
-
594
- inline int
595
- utf8_string_view_concat_literal (const utf8_string_view_t view, const utf8_t *literal, size_t n, utf8_string_t *result) {
596
- int err;
597
-
598
- utf8_string_init(result);
599
-
600
- err = utf8_string_reserve(result, view.len + n);
601
- if (err < 0) return err;
602
-
603
- err = utf8_string_append_view(result, view);
604
- assert(err == 0);
605
-
606
- err = utf8_string_append_literal(result, literal, n);
607
- assert(err == 0);
608
-
609
- return 0;
610
- }
611
-
612
- inline int
613
- utf8_string_compare (const utf8_string_t *string, const utf8_string_t *other) {
614
- size_t a_len = string->len;
615
- size_t b_len = other->len;
616
-
617
- int result = strncmp((const char *) string->data, (const char *) other->data, a_len < b_len ? a_len : b_len);
618
-
619
- if (result == 0) return a_len < b_len
620
- ? -1
621
- : a_len > b_len ? 1
622
- : 0;
623
-
624
- return result;
625
- }
626
-
627
- inline int
628
- utf8_string_view_compare (const utf8_string_view_t view, const utf8_string_view_t other) {
629
- size_t a_len = view.len;
630
- size_t b_len = other.len;
631
-
632
- int result = strncmp((const char *) view.data, (const char *) other.data, a_len < b_len ? a_len : b_len);
633
-
634
- if (result == 0) return a_len < b_len
635
- ? -1
636
- : a_len > b_len ? 1
637
- : 0;
638
-
639
- return result;
640
- }
641
-
642
- inline int
643
- utf8_string_compare_literal (const utf8_string_t *string, const utf8_t *literal, size_t n) {
644
- if (n == (size_t) -1) n = strlen((const char *) literal);
645
-
646
- size_t a_len = string->len;
647
- size_t b_len = n;
648
-
649
- int result = strncmp((const char *) string->data, (const char *) literal, a_len < b_len ? a_len : b_len);
650
-
651
- if (result == 0) return a_len < b_len
652
- ? -1
653
- : a_len > b_len ? 1
654
- : 0;
655
-
656
- return result;
657
- }
658
-
659
- inline int
660
- utf8_string_view_compare_literal (const utf8_string_view_t view, const utf8_t *literal, size_t n) {
661
- if (n == (size_t) -1) n = strlen((const char *) literal);
662
-
663
- size_t a_len = view.len;
664
- size_t b_len = n;
665
-
666
- int result = strncmp((const char *) view.data, (const char *) literal, a_len < b_len ? a_len : b_len);
667
-
668
- if (result == 0) return a_len < b_len
669
- ? -1
670
- : a_len > b_len ? 1
671
- : 0;
672
-
673
- return result;
674
- }
675
-
676
- inline utf8_string_view_t
677
- utf8_string_substring (const utf8_string_t *string, size_t start, size_t end) {
678
- if (end == (size_t) -1 || end > string->len) end = string->len;
679
- if (start > end) start = end;
680
-
681
- return utf8_string_view_init(&string->data[start], end - start);
682
- }
683
-
684
- inline utf8_string_view_t
685
- utf8_string_view_substring (const utf8_string_view_t view, size_t start, size_t end) {
686
- if (end == (size_t) -1 || end > view.len) end = view.len;
687
- if (start > end) start = end;
688
-
689
- return utf8_string_view_init(&view.data[start], end - start);
690
- }
691
-
692
- inline int
693
- utf8_string_substring_copy (const utf8_string_t *string, size_t start, size_t end, utf8_string_t *result) {
694
- int err;
695
-
696
- if (end == (size_t) -1 || end > string->len) end = string->len;
697
- if (start > end) start = end;
698
-
699
- utf8_string_init(result);
700
-
701
- size_t len = end - start;
702
-
703
- err = utf8_string_reserve(result, len);
704
- if (err < 0) return -1;
705
-
706
- memcpy(result->data, &string->data[start], len);
707
-
708
- result->len = len;
709
-
710
- return 0;
711
- }
712
-
713
- inline int
714
- utf8_string_view_substring_copy (const utf8_string_view_t view, size_t start, size_t end, utf8_string_t *result) {
715
- int err;
716
-
717
- if (end == (size_t) -1 || end > view.len) end = view.len;
718
- if (start > end) start = end;
719
-
720
- size_t len = end - start;
721
-
722
- err = utf8_string_reserve(result, len);
723
- if (err < 0) return -1;
724
-
725
- memcpy(result->data, &view.data[start], len);
726
-
727
- result->len = len;
728
-
729
- return 0;
730
- }
731
-
732
- inline size_t
733
- utf8_string_index_of_character (const utf8_string_t *string, size_t pos, utf8_t c) {
734
- for (size_t i = pos, n = string->len; i < n; i++) {
735
- if (string->data[i] == c) {
736
- return i;
737
- }
738
- }
739
-
740
- return (size_t) -1;
741
- }
742
-
743
- inline size_t
744
- utf8_string_view_index_of_character (const utf8_string_view_t view, size_t pos, utf8_t c) {
745
- for (size_t i = pos, n = view.len; i < n; i++) {
746
- if (view.data[i] == c) {
747
- return i;
748
- }
749
- }
750
-
751
- return (size_t) -1;
752
- }
753
-
754
- inline size_t
755
- utf8_string_last_index_of_character (const utf8_string_t *string, size_t pos, utf8_t c) {
756
- if (pos == (size_t) -1) pos = string->len - 1;
757
- else if (pos >= string->len) return (size_t) -1;
758
-
759
- for (size_t i = pos; i <= pos; i--) {
760
- if (string->data[i] == c) {
761
- return i;
762
- }
763
- }
764
-
765
- return (size_t) -1;
766
- }
767
-
768
- inline size_t
769
- utf8_string_view_last_index_of_character (const utf8_string_view_t view, size_t pos, utf8_t c) {
770
- if (pos == (size_t) -1) pos = view.len - 1;
771
- else if (pos >= view.len) return (size_t) -1;
772
-
773
- for (size_t i = pos; i <= pos; i--) {
774
- if (view.data[i] == c) {
775
- return i;
776
- }
777
- }
778
-
779
- return (size_t) -1;
780
- }
781
-
782
- #ifdef __cplusplus
783
- }
784
- #endif
785
-
786
- #endif // UTF_STRING_H