| 1 | /* |
| 2 | ** String handling. |
| 3 | ** Copyright (C) 2005-2014 Mike Pall. See Copyright Notice in luajit.h |
| 4 | */ |
| 5 | |
| 6 | #ifndef _LJ_STR_H |
| 7 | #define _LJ_STR_H |
| 8 | |
| 9 | #include <stdarg.h> |
| 10 | |
| 11 | #include "lj_obj.h" |
| 12 | |
| 13 | /* String interning. */ |
| 14 | LJ_FUNC int32_t LJ_FASTCALL lj_str_cmp(GCstr *a, GCstr *b); |
| 15 | LJ_FUNC void lj_str_resize(lua_State *L, MSize newmask); |
| 16 | LJ_FUNCA GCstr *lj_str_new(lua_State *L, const char *str, size_t len); |
| 17 | LJ_FUNC void LJ_FASTCALL lj_str_free(global_State *g, GCstr *s); |
| 18 | |
| 19 | #define lj_str_newz(L, s) (lj_str_new(L, s, strlen(s))) |
| 20 | #define lj_str_newlit(L, s) (lj_str_new(L, "" s, sizeof(s)-1)) |
| 21 | |
| 22 | /* Type conversions. */ |
| 23 | LJ_FUNC size_t LJ_FASTCALL lj_str_bufnum(char *s, cTValue *o); |
| 24 | LJ_FUNC char * LJ_FASTCALL lj_str_bufint(char *p, int32_t k); |
| 25 | LJ_FUNCA GCstr * LJ_FASTCALL lj_str_fromnum(lua_State *L, const lua_Number *np); |
| 26 | LJ_FUNC GCstr * LJ_FASTCALL lj_str_fromint(lua_State *L, int32_t k); |
| 27 | LJ_FUNCA GCstr * LJ_FASTCALL lj_str_fromnumber(lua_State *L, cTValue *o); |
| 28 | |
| 29 | #define LJ_STR_INTBUF (1+10) |
| 30 | #define LJ_STR_NUMBUF LUAI_MAXNUMBER2STR |
| 31 | |
| 32 | /* String formatting. */ |
| 33 | LJ_FUNC const char *lj_str_pushvf(lua_State *L, const char *fmt, va_list argp); |
| 34 | LJ_FUNC const char *lj_str_pushf(lua_State *L, const char *fmt, ...) |
| 35 | #if defined(__GNUC__) |
| 36 | __attribute__ ((format (printf, 2, 3))) |
| 37 | #endif |
| 38 | ; |
| 39 | |
| 40 | /* Resizable string buffers. Struct definition in lj_obj.h. */ |
| 41 | LJ_FUNC char *lj_str_needbuf(lua_State *L, SBuf *sb, MSize sz); |
| 42 | |
| 43 | #define lj_str_initbuf(sb) ((sb)->buf = NULL, (sb)->sz = 0) |
| 44 | #define lj_str_resetbuf(sb) ((sb)->n = 0) |
| 45 | #define lj_str_resizebuf(L, sb, size) \ |
| 46 | ((sb)->buf = (char *)lj_mem_realloc(L, (sb)->buf, (sb)->sz, (size)), \ |
| 47 | (sb)->sz = (size)) |
| 48 | #define lj_str_freebuf(g, sb) lj_mem_free(g, (void *)(sb)->buf, (sb)->sz) |
| 49 | |
| 50 | #endif |
| 51 | |