Software / code / prosody
Comparison
util-src/ringbuffer.c @ 10480:94cacf9fd0ae
util.*.c: Add static qualifiers everywhere
| author | Emmanuel Gil Peyrot <linkmauve@linkmauve.fr> |
|---|---|
| date | Sun, 01 Dec 2019 20:25:20 +0100 |
| parent | 8735:856a40ec4a0a |
| child | 10898:c6465fb3c839 |
comparison
equal
deleted
inserted
replaced
| 10479:d362934437eb | 10480:94cacf9fd0ae |
|---|---|
| 13 size_t alen; /* allocated size */ | 13 size_t alen; /* allocated size */ |
| 14 size_t blen; /* current content size */ | 14 size_t blen; /* current content size */ |
| 15 char buffer[]; | 15 char buffer[]; |
| 16 } ringbuffer; | 16 } ringbuffer; |
| 17 | 17 |
| 18 char readchar(ringbuffer *b) { | 18 static void writechar(ringbuffer *b, char c) { |
| 19 b->blen--; | |
| 20 return b->buffer[(b->rpos++) % b->alen]; | |
| 21 } | |
| 22 | |
| 23 void writechar(ringbuffer *b, char c) { | |
| 24 b->blen++; | 19 b->blen++; |
| 25 b->buffer[(b->wpos++) % b->alen] = c; | 20 b->buffer[(b->wpos++) % b->alen] = c; |
| 26 } | 21 } |
| 27 | 22 |
| 28 /* make sure position counters stay within the allocation */ | 23 /* make sure position counters stay within the allocation */ |
| 29 void modpos(ringbuffer *b) { | 24 static void modpos(ringbuffer *b) { |
| 30 b->rpos = b->rpos % b->alen; | 25 b->rpos = b->rpos % b->alen; |
| 31 b->wpos = b->wpos % b->alen; | 26 b->wpos = b->wpos % b->alen; |
| 32 } | 27 } |
| 33 | 28 |
| 34 int find(ringbuffer *b, const char *s, size_t l) { | 29 static int find(ringbuffer *b, const char *s, size_t l) { |
| 35 size_t i, j; | 30 size_t i, j; |
| 36 int m; | 31 int m; |
| 37 | 32 |
| 38 if(b->rpos == b->wpos) { /* empty */ | 33 if(b->rpos == b->wpos) { /* empty */ |
| 39 return 0; | 34 return 0; |
| 62 | 57 |
| 63 /* | 58 /* |
| 64 * Find first position of a substring in buffer | 59 * Find first position of a substring in buffer |
| 65 * (buffer, string) -> number | 60 * (buffer, string) -> number |
| 66 */ | 61 */ |
| 67 int rb_find(lua_State *L) { | 62 static int rb_find(lua_State *L) { |
| 68 size_t l, m; | 63 size_t l, m; |
| 69 ringbuffer *b = luaL_checkudata(L, 1, "ringbuffer_mt"); | 64 ringbuffer *b = luaL_checkudata(L, 1, "ringbuffer_mt"); |
| 70 const char *s = luaL_checklstring(L, 2, &l); | 65 const char *s = luaL_checklstring(L, 2, &l); |
| 71 m = find(b, s, l); | 66 m = find(b, s, l); |
| 72 | 67 |
| 80 | 75 |
| 81 /* | 76 /* |
| 82 * Move read position forward without returning the data | 77 * Move read position forward without returning the data |
| 83 * (buffer, number) -> boolean | 78 * (buffer, number) -> boolean |
| 84 */ | 79 */ |
| 85 int rb_discard(lua_State *L) { | 80 static int rb_discard(lua_State *L) { |
| 86 ringbuffer *b = luaL_checkudata(L, 1, "ringbuffer_mt"); | 81 ringbuffer *b = luaL_checkudata(L, 1, "ringbuffer_mt"); |
| 87 size_t r = luaL_checkinteger(L, 2); | 82 size_t r = luaL_checkinteger(L, 2); |
| 88 | 83 |
| 89 if(r > b->blen) { | 84 if(r > b->blen) { |
| 90 lua_pushboolean(L, 0); | 85 lua_pushboolean(L, 0); |
| 101 | 96 |
| 102 /* | 97 /* |
| 103 * Read bytes from buffer | 98 * Read bytes from buffer |
| 104 * (buffer, number, boolean?) -> string | 99 * (buffer, number, boolean?) -> string |
| 105 */ | 100 */ |
| 106 int rb_read(lua_State *L) { | 101 static int rb_read(lua_State *L) { |
| 107 ringbuffer *b = luaL_checkudata(L, 1, "ringbuffer_mt"); | 102 ringbuffer *b = luaL_checkudata(L, 1, "ringbuffer_mt"); |
| 108 size_t r = luaL_checkinteger(L, 2); | 103 size_t r = luaL_checkinteger(L, 2); |
| 109 int peek = lua_toboolean(L, 3); | 104 int peek = lua_toboolean(L, 3); |
| 110 | 105 |
| 111 if(r > b->blen) { | 106 if(r > b->blen) { |
| 133 | 128 |
| 134 /* | 129 /* |
| 135 * Read buffer until first occurrence of a substring | 130 * Read buffer until first occurrence of a substring |
| 136 * (buffer, string) -> string | 131 * (buffer, string) -> string |
| 137 */ | 132 */ |
| 138 int rb_readuntil(lua_State *L) { | 133 static int rb_readuntil(lua_State *L) { |
| 139 size_t l, m; | 134 size_t l, m; |
| 140 ringbuffer *b = luaL_checkudata(L, 1, "ringbuffer_mt"); | 135 ringbuffer *b = luaL_checkudata(L, 1, "ringbuffer_mt"); |
| 141 const char *s = luaL_checklstring(L, 2, &l); | 136 const char *s = luaL_checklstring(L, 2, &l); |
| 142 m = find(b, s, l); | 137 m = find(b, s, l); |
| 143 | 138 |
| 152 | 147 |
| 153 /* | 148 /* |
| 154 * Write bytes into the buffer | 149 * Write bytes into the buffer |
| 155 * (buffer, string) -> integer | 150 * (buffer, string) -> integer |
| 156 */ | 151 */ |
| 157 int rb_write(lua_State *L) { | 152 static int rb_write(lua_State *L) { |
| 158 size_t l, w = 0; | 153 size_t l, w = 0; |
| 159 ringbuffer *b = luaL_checkudata(L, 1, "ringbuffer_mt"); | 154 ringbuffer *b = luaL_checkudata(L, 1, "ringbuffer_mt"); |
| 160 const char *s = luaL_checklstring(L, 2, &l); | 155 const char *s = luaL_checklstring(L, 2, &l); |
| 161 | 156 |
| 162 /* Does `l` bytes fit? */ | 157 /* Does `l` bytes fit? */ |
| 175 lua_pushinteger(L, w); | 170 lua_pushinteger(L, w); |
| 176 | 171 |
| 177 return 1; | 172 return 1; |
| 178 } | 173 } |
| 179 | 174 |
| 180 int rb_tostring(lua_State *L) { | 175 static int rb_tostring(lua_State *L) { |
| 181 ringbuffer *b = luaL_checkudata(L, 1, "ringbuffer_mt"); | 176 ringbuffer *b = luaL_checkudata(L, 1, "ringbuffer_mt"); |
| 182 lua_pushfstring(L, "ringbuffer: %p %d/%d", b, b->blen, b->alen); | 177 lua_pushfstring(L, "ringbuffer: %p %d/%d", b, b->blen, b->alen); |
| 183 return 1; | 178 return 1; |
| 184 } | 179 } |
| 185 | 180 |
| 186 int rb_length(lua_State *L) { | 181 static int rb_length(lua_State *L) { |
| 187 ringbuffer *b = luaL_checkudata(L, 1, "ringbuffer_mt"); | 182 ringbuffer *b = luaL_checkudata(L, 1, "ringbuffer_mt"); |
| 188 lua_pushinteger(L, b->blen); | 183 lua_pushinteger(L, b->blen); |
| 189 return 1; | 184 return 1; |
| 190 } | 185 } |
| 191 | 186 |
| 192 int rb_size(lua_State *L) { | 187 static int rb_size(lua_State *L) { |
| 193 ringbuffer *b = luaL_checkudata(L, 1, "ringbuffer_mt"); | 188 ringbuffer *b = luaL_checkudata(L, 1, "ringbuffer_mt"); |
| 194 lua_pushinteger(L, b->alen); | 189 lua_pushinteger(L, b->alen); |
| 195 return 1; | 190 return 1; |
| 196 } | 191 } |
| 197 | 192 |
| 198 int rb_free(lua_State *L) { | 193 static int rb_free(lua_State *L) { |
| 199 ringbuffer *b = luaL_checkudata(L, 1, "ringbuffer_mt"); | 194 ringbuffer *b = luaL_checkudata(L, 1, "ringbuffer_mt"); |
| 200 lua_pushinteger(L, b->alen - b->blen); | 195 lua_pushinteger(L, b->alen - b->blen); |
| 201 return 1; | 196 return 1; |
| 202 } | 197 } |
| 203 | 198 |
| 204 int rb_new(lua_State *L) { | 199 static int rb_new(lua_State *L) { |
| 205 size_t size = luaL_optinteger(L, 1, sysconf(_SC_PAGESIZE)); | 200 size_t size = luaL_optinteger(L, 1, sysconf(_SC_PAGESIZE)); |
| 206 ringbuffer *b = lua_newuserdata(L, sizeof(ringbuffer) + size); | 201 ringbuffer *b = lua_newuserdata(L, sizeof(ringbuffer) + size); |
| 207 | 202 |
| 208 b->rpos = 0; | 203 b->rpos = 0; |
| 209 b->wpos = 0; | 204 b->wpos = 0; |