Tasmota/lib/libesp32/berry/src/be_string.h
2021-12-14 15:10:03 +01:00

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