mirror of
https://github.com/arendst/Tasmota.git
synced 2025-04-27 16:27:17 +00:00
58 lines
1.5 KiB
C
58 lines
1.5 KiB
C
/********************************************************************
|
|
** Copyright (c) 2018-2020 Guan Wenliang
|
|
** This file is part of the Berry default interpreter.
|
|
** skiars@qq.com, https://github.com/Skiars/berry
|
|
** See Copyright Notice in the LICENSE file or at
|
|
** https://github.com/Skiars/berry/blob/master/LICENSE
|
|
********************************************************************/
|
|
#ifndef BE_STRING_H
|
|
#define BE_STRING_H
|
|
|
|
#include "be_object.h"
|
|
|
|
#define SHORT_STR_MAX_LEN 64
|
|
|
|
typedef struct {
|
|
bstring_header;
|
|
#if BE_USE_STR_HASH_CACHE
|
|
uint32_t hash;
|
|
#endif
|
|
/* char s[]; */
|
|
} bsstring;
|
|
|
|
typedef struct {
|
|
bstring str;
|
|
int llen;
|
|
/* char s[]; */
|
|
} blstring;
|
|
|
|
typedef struct {
|
|
bstring_header;
|
|
uint32_t hash;
|
|
const char *s;
|
|
} bcstring;
|
|
|
|
#define str_len(_s) \
|
|
((_s)->slen == 255 ? cast(blstring*, _s)->llen : (_s)->slen)
|
|
|
|
#define str(_s) be_str2cstr(_s)
|
|
#define str_extra(_s) ((_s)->extra)
|
|
#define str_literal(_vm, _s) be_newstrn((_vm), (_s), sizeof(_s) - 1)
|
|
|
|
#if BE_USE_PRECOMPILED_OBJECT
|
|
#include "../generate/be_const_strtab.h"
|
|
#endif
|
|
|
|
void be_string_init(bvm *vm);
|
|
void be_string_deleteall(bvm *vm);
|
|
int be_eqstr(bstring *s1, bstring *s2);
|
|
bstring* be_newstr(bvm *vm, const char *str);
|
|
bstring* be_newstrn(bvm *vm, const char *str, size_t len);
|
|
bstring* be_newlongstr(bvm *vm, const char *str, size_t len);
|
|
void be_gcstrtab(bvm *vm);
|
|
uint32_t be_strhash(const bstring *s);
|
|
const char* be_str2cstr(const bstring *s);
|
|
void be_str_setextra(bstring *s, int extra);
|
|
|
|
#endif
|