Introduction
Introduction Statistics Contact Development Disclaimer Help
character.c - libgrapheme - unicode string library
git clone git://git.suckless.org/libgrapheme
Log
Files
Refs
README
LICENSE
---
character.c (1991B)
---
1 /* See LICENSE file for copyright and license details. */
2 #include <errno.h>
3 #include <math.h>
4 #include <stdint.h>
5 #include <stdio.h>
6 #include <stdlib.h>
7 #include <string.h>
8
9 #include "../gen/character-test.h"
10 #include "../grapheme.h"
11 #include "util.h"
12
13 #include <utf8proc.h>
14
15 #define NUM_ITERATIONS 100000
16
17 struct break_benchmark_payload {
18 uint_least32_t *buf;
19 utf8proc_int32_t *buf_utf8proc;
20 size_t buflen;
21 };
22
23 void
24 libgrapheme(const void *payload)
25 {
26 uint_least16_t state = 0;
27 const struct break_benchmark_payload *p = payload;
28 size_t i;
29
30 for (i = 0; i + 1 < p->buflen; i++) {
31 (void)grapheme_is_character_break(p->buf[i], p->buf[i + …
32 &state);
33 }
34 }
35
36 void
37 libutf8proc(const void *payload)
38 {
39 utf8proc_int32_t state = 0;
40 const struct break_benchmark_payload *p = payload;
41 size_t i;
42
43 for (i = 0; i + 1 < p->buflen; i++) {
44 (void)utf8proc_grapheme_break_stateful(
45 p->buf_utf8proc[i], p->buf_utf8proc[i + 1], &sta…
46 }
47 }
48
49 int
50 main(int argc, char *argv[])
51 {
52 struct break_benchmark_payload p;
53 double baseline = (double)NAN;
54 size_t i;
55
56 (void)argc;
57
58 if ((p.buf = generate_cp_test_buffer(character_break_test,
59 LEN(character_break_test),
60 &(p.buflen))) == NULL) {
61 return 1;
62 }
63 if ((p.buf_utf8proc = malloc(p.buflen * sizeof(*(p.buf_utf8proc)…
64 NULL) {
65 fprintf(stderr, "malloc: %s\n", strerror(errno));
66 exit(1);
67 }
68 for (i = 0; i < p.buflen; i++) {
69 /*
70 * there is no overflow, as we know that the maximum
71 * codepoint is 0x10FFFF, which is way below 2^31
72 */
73 p.buf_utf8proc[i] = (utf8proc_int32_t)p.buf[i];
74 }
75
76 printf("%s\n", argv[0]);
77 run_benchmark(libgrapheme, &p, "libgrapheme ", NULL, "comparison…
78 &baseline, NUM_ITERATIONS, p.buflen - 1);
79 run_benchmark(libutf8proc, &p, "libutf8proc ", NULL, "comparison…
80 &baseline, NUM_ITERATIONS, p.buflen - 1);
81
82 free(p.buf);
83 free(p.buf_utf8proc);
84
85 return 0;
86 }
You are viewing proxied material from suckless.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.