#pragma once /** ** \defgroup util_js Utilities ** This is becoming just a dumping ground of small helpers. ** @{ */ #include "quickjs.h" #include void tf_util_register(JSContext* context); JSValue tf_util_utf8_decode(JSContext* context, JSValue value); uint8_t* tf_util_try_get_array_buffer(JSContext* context, size_t* psize, JSValueConst obj); JSValue tf_util_try_get_typed_array_buffer(JSContext* context, JSValueConst obj, size_t* pbyte_offset, size_t* pbyte_length, size_t* pbytes_per_element); bool tf_util_report_error(JSContext* context, JSValue value); int tf_util_get_length(JSContext* context, JSValue value); int tf_util_insert_index(const void* key, const void* base, size_t count, size_t size, int (*compare)(const void*, const void*)); JSValue tf_util_new_uint8_array(JSContext* context, const uint8_t* data, size_t size); size_t tf_base64_encode(const uint8_t* source, size_t source_length, char* out, size_t out_length); size_t tf_base64_decode(const char* source, size_t source_length, uint8_t* out, size_t out_length); int tf_util_backtrace(void** buffer, int count); const char* tf_util_backtrace_to_string(void* const* buffer, int count); const char* tf_util_backtrace_string(); const char* tf_util_function_to_string(void* function); #define tf_min(a, b) \ ({ \ __typeof__(a) _a = (a); \ __typeof__(b) _b = (b); \ _a > _b ? _b : _a; \ }) /** @} */