Mercurial
comparison third_party/luajit/src/lj_strfmt.h @ 178:94705b5986b3
[ThirdParty] Added WRK and luajit for load testing.
| author | MrJuneJune <me@mrjunejune.com> |
|---|---|
| date | Thu, 22 Jan 2026 20:10:30 -0800 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| 177:24fe8ff94056 | 178:94705b5986b3 |
|---|---|
| 1 /* | |
| 2 ** String formatting. | |
| 3 ** Copyright (C) 2005-2023 Mike Pall. See Copyright Notice in luajit.h | |
| 4 */ | |
| 5 | |
| 6 #ifndef _LJ_STRFMT_H | |
| 7 #define _LJ_STRFMT_H | |
| 8 | |
| 9 #include "lj_obj.h" | |
| 10 | |
| 11 typedef uint32_t SFormat; /* Format indicator. */ | |
| 12 | |
| 13 /* Format parser state. */ | |
| 14 typedef struct FormatState { | |
| 15 const uint8_t *p; /* Current format string pointer. */ | |
| 16 const uint8_t *e; /* End of format string. */ | |
| 17 const char *str; /* Returned literal string. */ | |
| 18 MSize len; /* Size of literal string. */ | |
| 19 } FormatState; | |
| 20 | |
| 21 /* Format types (max. 16). */ | |
| 22 typedef enum FormatType { | |
| 23 STRFMT_EOF, STRFMT_ERR, STRFMT_LIT, | |
| 24 STRFMT_INT, STRFMT_UINT, STRFMT_NUM, STRFMT_STR, STRFMT_CHAR, STRFMT_PTR | |
| 25 } FormatType; | |
| 26 | |
| 27 /* Format subtypes (bits are reused). */ | |
| 28 #define STRFMT_T_HEX 0x0010 /* STRFMT_UINT */ | |
| 29 #define STRFMT_T_OCT 0x0020 /* STRFMT_UINT */ | |
| 30 #define STRFMT_T_FP_A 0x0000 /* STRFMT_NUM */ | |
| 31 #define STRFMT_T_FP_E 0x0010 /* STRFMT_NUM */ | |
| 32 #define STRFMT_T_FP_F 0x0020 /* STRFMT_NUM */ | |
| 33 #define STRFMT_T_FP_G 0x0030 /* STRFMT_NUM */ | |
| 34 #define STRFMT_T_QUOTED 0x0010 /* STRFMT_STR */ | |
| 35 | |
| 36 /* Format flags. */ | |
| 37 #define STRFMT_F_LEFT 0x0100 | |
| 38 #define STRFMT_F_PLUS 0x0200 | |
| 39 #define STRFMT_F_ZERO 0x0400 | |
| 40 #define STRFMT_F_SPACE 0x0800 | |
| 41 #define STRFMT_F_ALT 0x1000 | |
| 42 #define STRFMT_F_UPPER 0x2000 | |
| 43 | |
| 44 /* Format indicator fields. */ | |
| 45 #define STRFMT_SH_WIDTH 16 | |
| 46 #define STRFMT_SH_PREC 24 | |
| 47 | |
| 48 #define STRFMT_TYPE(sf) ((FormatType)((sf) & 15)) | |
| 49 #define STRFMT_WIDTH(sf) (((sf) >> STRFMT_SH_WIDTH) & 255u) | |
| 50 #define STRFMT_PREC(sf) ((((sf) >> STRFMT_SH_PREC) & 255u) - 1u) | |
| 51 #define STRFMT_FP(sf) (((sf) >> 4) & 3) | |
| 52 | |
| 53 /* Formats for conversion characters. */ | |
| 54 #define STRFMT_A (STRFMT_NUM|STRFMT_T_FP_A) | |
| 55 #define STRFMT_C (STRFMT_CHAR) | |
| 56 #define STRFMT_D (STRFMT_INT) | |
| 57 #define STRFMT_E (STRFMT_NUM|STRFMT_T_FP_E) | |
| 58 #define STRFMT_F (STRFMT_NUM|STRFMT_T_FP_F) | |
| 59 #define STRFMT_G (STRFMT_NUM|STRFMT_T_FP_G) | |
| 60 #define STRFMT_I STRFMT_D | |
| 61 #define STRFMT_O (STRFMT_UINT|STRFMT_T_OCT) | |
| 62 #define STRFMT_P (STRFMT_PTR) | |
| 63 #define STRFMT_Q (STRFMT_STR|STRFMT_T_QUOTED) | |
| 64 #define STRFMT_S (STRFMT_STR) | |
| 65 #define STRFMT_U (STRFMT_UINT) | |
| 66 #define STRFMT_X (STRFMT_UINT|STRFMT_T_HEX) | |
| 67 #define STRFMT_G14 (STRFMT_G | ((14+1) << STRFMT_SH_PREC)) | |
| 68 | |
| 69 /* Maximum buffer sizes for conversions. */ | |
| 70 #define STRFMT_MAXBUF_XINT (1+22) /* '0' prefix + uint64_t in octal. */ | |
| 71 #define STRFMT_MAXBUF_INT (1+10) /* Sign + int32_t in decimal. */ | |
| 72 #define STRFMT_MAXBUF_NUM 32 /* Must correspond with STRFMT_G14. */ | |
| 73 #define STRFMT_MAXBUF_PTR (2+2*sizeof(ptrdiff_t)) /* "0x" + hex ptr. */ | |
| 74 | |
| 75 /* Format parser. */ | |
| 76 LJ_FUNC SFormat LJ_FASTCALL lj_strfmt_parse(FormatState *fs); | |
| 77 | |
| 78 static LJ_AINLINE void lj_strfmt_init(FormatState *fs, const char *p, MSize len) | |
| 79 { | |
| 80 fs->p = (const uint8_t *)p; | |
| 81 fs->e = (const uint8_t *)p + len; | |
| 82 /* Must be NUL-terminated. May have NULs inside, too. */ | |
| 83 lj_assertX(*fs->e == 0, "format not NUL-terminated"); | |
| 84 } | |
| 85 | |
| 86 /* Raw conversions. */ | |
| 87 LJ_FUNC char * LJ_FASTCALL lj_strfmt_wint(char *p, int32_t k); | |
| 88 LJ_FUNC char * LJ_FASTCALL lj_strfmt_wptr(char *p, const void *v); | |
| 89 LJ_FUNC char * LJ_FASTCALL lj_strfmt_wuleb128(char *p, uint32_t v); | |
| 90 LJ_FUNC const char *lj_strfmt_wstrnum(lua_State *L, cTValue *o, MSize *lenp); | |
| 91 | |
| 92 /* Unformatted conversions to buffer. */ | |
| 93 LJ_FUNC SBuf * LJ_FASTCALL lj_strfmt_putint(SBuf *sb, int32_t k); | |
| 94 #if LJ_HASJIT | |
| 95 LJ_FUNC SBuf * LJ_FASTCALL lj_strfmt_putnum(SBuf *sb, cTValue *o); | |
| 96 #endif | |
| 97 LJ_FUNC SBuf * LJ_FASTCALL lj_strfmt_putptr(SBuf *sb, const void *v); | |
| 98 #if LJ_HASJIT | |
| 99 LJ_FUNC SBuf * LJ_FASTCALL lj_strfmt_putquoted(SBuf *sb, GCstr *str); | |
| 100 #endif | |
| 101 | |
| 102 /* Formatted conversions to buffer. */ | |
| 103 LJ_FUNC SBuf *lj_strfmt_putfxint(SBuf *sb, SFormat sf, uint64_t k); | |
| 104 LJ_FUNC SBuf *lj_strfmt_putfnum_int(SBuf *sb, SFormat sf, lua_Number n); | |
| 105 LJ_FUNC SBuf *lj_strfmt_putfnum_uint(SBuf *sb, SFormat sf, lua_Number n); | |
| 106 LJ_FUNC SBuf *lj_strfmt_putfnum(SBuf *sb, SFormat, lua_Number n); | |
| 107 LJ_FUNC SBuf *lj_strfmt_putfchar(SBuf *sb, SFormat, int32_t c); | |
| 108 #if LJ_HASJIT | |
| 109 LJ_FUNC SBuf *lj_strfmt_putfstr(SBuf *sb, SFormat, GCstr *str); | |
| 110 #endif | |
| 111 LJ_FUNC int lj_strfmt_putarg(lua_State *L, SBuf *sb, int arg, int retry); | |
| 112 | |
| 113 /* Conversions to strings. */ | |
| 114 LJ_FUNC GCstr * LJ_FASTCALL lj_strfmt_int(lua_State *L, int32_t k); | |
| 115 LJ_FUNCA GCstr * LJ_FASTCALL lj_strfmt_num(lua_State *L, cTValue *o); | |
| 116 LJ_FUNCA GCstr * LJ_FASTCALL lj_strfmt_number(lua_State *L, cTValue *o); | |
| 117 #if LJ_HASJIT | |
| 118 LJ_FUNC GCstr * LJ_FASTCALL lj_strfmt_char(lua_State *L, int c); | |
| 119 #endif | |
| 120 LJ_FUNC GCstr * LJ_FASTCALL lj_strfmt_obj(lua_State *L, cTValue *o); | |
| 121 | |
| 122 /* Internal string formatting. */ | |
| 123 LJ_FUNC const char *lj_strfmt_pushvf(lua_State *L, const char *fmt, | |
| 124 va_list argp); | |
| 125 LJ_FUNC const char *lj_strfmt_pushf(lua_State *L, const char *fmt, ...) | |
| 126 #if defined(__GNUC__) || defined(__clang__) | |
| 127 __attribute__ ((format (printf, 2, 3))) | |
| 128 #endif | |
| 129 ; | |
| 130 | |
| 131 #endif |