summaryrefslogtreecommitdiff
path: root/src/lib/eina/eina_strbuf_common.h
blob: 447cb47a74e0a9facef539bd0a59454a6fd85bee (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
#ifndef EINA_STRBUF_COMMON_H
#define EINA_STRBUF_COMMON_H

#include <stdlib.h>

#include "eina_private.h"
#include "eina_magic.h"
#include "eina_strbuf.h"

/**
 * @struct _Eina_Strbuf
 * String buffer to facilitate string operations.
 */
struct _Eina_Strbuf
{
   void *buf;
   size_t len;
   size_t size;
   size_t step;

   EINA_MAGIC

   Eina_Bool ro : 1;
};

#define EINA_MAGIC_CHECK_STRBUF(d, ...)                         \
   do {                                                         \
        if (!(d)) return __VA_ARGS__;                           \
        if (!EINA_MAGIC_CHECK((d), _STRBUF_MAGIC))              \
          {                                                     \
             EINA_MAGIC_FAIL((d), _STRBUF_MAGIC);               \
             return __VA_ARGS__;                                \
          }                                                     \
     } while (0)

Eina_Bool
eina_strbuf_common_init(void);

Eina_Bool
eina_strbuf_common_shutdown(void);
Eina_Strbuf *
eina_strbuf_common_new(size_t csize);
Eina_Strbuf *
eina_strbuf_common_manage_new(size_t csize,
                               void *str,
                               size_t len);
Eina_Strbuf *
eina_strbuf_common_manage_ro_new(size_t csize,
                                 const void *str,
                                 size_t len);

void
eina_strbuf_common_free(Eina_Strbuf *buf);
void
eina_strbuf_common_reset(size_t csize, Eina_Strbuf *buf);

Eina_Rw_Slice
eina_strbuf_common_expand(size_t csize,
                          Eina_Strbuf *buf,
                          size_t minimum_unused_space);
Eina_Bool
eina_strbuf_common_use(Eina_Strbuf *buf,
                       size_t extra_bytes);

Eina_Bool
eina_strbuf_common_append(size_t csize,
                          Eina_Strbuf *buf,
                          const void *str,
                          size_t len);
Eina_Bool
eina_strbuf_common_append_escaped(size_t csize,
                                  Eina_Strbuf *buf,
                                  const void *str);
Eina_Bool
eina_strbuf_common_append_n(size_t csize,
                            Eina_Strbuf *buf,
                            const void *str,
                            size_t len,
                            size_t maxlen);
Eina_Bool
eina_strbuf_common_append_length(size_t csize,
                                 Eina_Strbuf *buf,
                                 const void *str,
                                 size_t length);
Eina_Bool
eina_strbuf_common_insert(size_t csize,
                          Eina_Strbuf *buf,
                          const void *str,
                          size_t len,
                          size_t pos);
Eina_Bool
eina_strbuf_common_insert_escaped(size_t csize,
                                  Eina_Strbuf *buf,
                                  const void *str,
                                  size_t len,
                                  size_t pos);
Eina_Bool
eina_strbuf_common_insert_n(size_t csize,
                            Eina_Strbuf *buf,
                            const void *str,
                            size_t len,
                            size_t maxlen,
                            size_t pos);
Eina_Bool
eina_strbuf_common_insert_length(size_t csize,
                                 Eina_Strbuf *buf,
                                 const void *str,
                                 size_t length,
                                 size_t pos);
Eina_Bool
eina_strbuf_common_append_char(size_t csize, Eina_Strbuf *buf, const void *c);
Eina_Bool
eina_strbuf_common_insert_char(size_t csize,
                               Eina_Strbuf *buf,
                               const void *c,
                               size_t pos);
Eina_Bool
eina_strbuf_common_remove(size_t csize,
                          Eina_Strbuf *buf,
                          size_t start,
                          size_t end);
const void *
eina_strbuf_common_string_get(const Eina_Strbuf *buf);
void *
eina_strbuf_common_string_steal(size_t csize, Eina_Strbuf *buf);
void
eina_strbuf_common_string_free(size_t csize, Eina_Strbuf *buf);
size_t
eina_strbuf_common_length_get(const Eina_Strbuf *buf);
Eina_Slice
eina_strbuf_common_slice_get(const Eina_Strbuf *buf);
Eina_Rw_Slice
eina_strbuf_common_rw_slice_get(const Eina_Strbuf *buf);


Eina_Bool
_eina_strbuf_common_grow(size_t csize, Eina_Strbuf *buf, size_t size);
/**
 * @}
 */

#endif