Update the include/bits implementation
This commit is contained in:
parent
e92ff17be4
commit
205c8337c2
@ -2,8 +2,8 @@
|
|||||||
/* Copyright © 2022 Gregory Lirent */
|
/* Copyright © 2022 Gregory Lirent */
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include "../include/extra/cstring.h"
|
|
||||||
#include "__internal/include.h"
|
#include "__internal/include.h"
|
||||||
|
|
||||||
#undef aligned_alloc
|
#undef aligned_alloc
|
||||||
#undef malloc
|
#undef malloc
|
||||||
#undef realloc
|
#undef realloc
|
||||||
|
20
src/extra.c
20
src/extra.c
@ -1,9 +1,27 @@
|
|||||||
/* This software is licensed by the MIT License, see LICENSE file */
|
/* This software is licensed by the MIT License, see LICENSE file */
|
||||||
/* Copyright © 2022 Gregory Lirent */
|
/* Copyright © 2022 Gregory Lirent */
|
||||||
|
|
||||||
#include "../include/extra/cstring.h"
|
#include "../modules/libunic/include.h"
|
||||||
#include "__internal/include.h"
|
#include "__internal/include.h"
|
||||||
|
|
||||||
|
static _Thread_local int CHAR_BUFFER_POS = 0;
|
||||||
|
static _Thread_local char CHAR_BUFFER[16][5];
|
||||||
|
|
||||||
|
const char* libcdsb_char_to_cstring(int c) {
|
||||||
|
|
||||||
|
char* p;
|
||||||
|
|
||||||
|
if (CHAR_BUFFER_POS > 15)
|
||||||
|
CHAR_BUFFER_POS = 0;
|
||||||
|
|
||||||
|
if (is_null(p = tochar_unicode(CHAR_BUFFER[CHAR_BUFFER_POS], c))) {
|
||||||
|
CHAR_BUFFER[CHAR_BUFFER_POS][0] = 0;
|
||||||
|
} else *p = 0;
|
||||||
|
|
||||||
|
return CHAR_BUFFER[CHAR_BUFFER_POS++];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
size_t libcdsb_strlen(const char* s) {
|
size_t libcdsb_strlen(const char* s) {
|
||||||
static const size_t m = (sizeof(size_t) == 8) ? 0x8080808080808080UL : 0x80808080UL;
|
static const size_t m = (sizeof(size_t) == 8) ? 0x8080808080808080UL : 0x80808080UL;
|
||||||
static const size_t d = (sizeof(size_t) == 8) ? 0x0101010101010101UL : 0x01010101UL;
|
static const size_t d = (sizeof(size_t) == 8) ? 0x0101010101010101UL : 0x01010101UL;
|
||||||
|
@ -19,13 +19,13 @@
|
|||||||
double: "%."s__(DBL_DIG)"lg",\
|
double: "%."s__(DBL_DIG)"lg",\
|
||||||
long double: "%."s__(LDBL_DIG)"Lg")
|
long double: "%."s__(LDBL_DIG)"Lg")
|
||||||
|
|
||||||
#define stringify(v) sprintf(STRINGIFY_BUFFER, fstring(v), (v))
|
#define stringify(v) sprintf(STRINGIFY_BUFFER[STRINGIFY_BUFFER_POS], fstring(v), (v))
|
||||||
|
|
||||||
static _Thread_local char STRINGIFY_BUFFER[64];
|
static _Thread_local int STRINGIFY_BUFFER_POS = 0;
|
||||||
|
static _Thread_local char STRINGIFY_BUFFER[16][64];
|
||||||
|
|
||||||
/*#####################################################################################################################*/
|
/*#####################################################################################################################*/
|
||||||
|
|
||||||
|
|
||||||
const size_t LIBCDSB_VTYPE_SIZES[19] = {
|
const size_t LIBCDSB_VTYPE_SIZES[19] = {
|
||||||
sizeof(void*), sizeof(bool),
|
sizeof(void*), sizeof(bool),
|
||||||
sizeof(u8_t), sizeof(u16_t), sizeof(u32_t), sizeof(u64_t),
|
sizeof(u8_t), sizeof(u16_t), sizeof(u32_t), sizeof(u64_t),
|
||||||
@ -35,12 +35,13 @@ const size_t LIBCDSB_VTYPE_SIZES[19] = {
|
|||||||
sizeof(list_t), sizeof(set_t), sizeof(dict_t)
|
sizeof(list_t), sizeof(set_t), sizeof(dict_t)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/*#####################################################################################################################*/
|
/*#####################################################################################################################*/
|
||||||
|
|
||||||
|
|
||||||
const char* libcdsb_vtype_name(vtype t) {
|
const char* libcdsb_vtype_name(vtype t) {
|
||||||
switch (t) { default: abort();
|
switch (t) {
|
||||||
|
#ifndef NDEBUG
|
||||||
|
default: abort();
|
||||||
|
#endif
|
||||||
case VTYPE_POINTER: return "VTYPE_POINTER";
|
case VTYPE_POINTER: return "VTYPE_POINTER";
|
||||||
case VTYPE_BOOLEAN: return "VTYPE_BOOLEAN";
|
case VTYPE_BOOLEAN: return "VTYPE_BOOLEAN";
|
||||||
case VTYPE_UINT8: return "VTYPE_UINT8";
|
case VTYPE_UINT8: return "VTYPE_UINT8";
|
||||||
@ -69,6 +70,9 @@ const char* libcdsb_vtype_stringify(const void* v, vtype t) {
|
|||||||
if (t == VTYPE_BOOLEAN) return (*(vtype_bool*)v) ? "true" : "false";
|
if (t == VTYPE_BOOLEAN) return (*(vtype_bool*)v) ? "true" : "false";
|
||||||
if (t == VTYPE_STRING) return *(char**)v;
|
if (t == VTYPE_STRING) return *(char**)v;
|
||||||
|
|
||||||
|
if (STRINGIFY_BUFFER_POS > 15)
|
||||||
|
STRINGIFY_BUFFER_POS = 0;
|
||||||
|
|
||||||
switch (t) {
|
switch (t) {
|
||||||
case VTYPE_INT8: stringify(*( s8_t*)v); break;
|
case VTYPE_INT8: stringify(*( s8_t*)v); break;
|
||||||
case VTYPE_INT16: stringify(*( s16_t*)v); break;
|
case VTYPE_INT16: stringify(*( s16_t*)v); break;
|
||||||
@ -79,25 +83,25 @@ const char* libcdsb_vtype_stringify(const void* v, vtype t) {
|
|||||||
case VTYPE_UINT32: stringify(*( u32_t*)v); break;
|
case VTYPE_UINT32: stringify(*( u32_t*)v); break;
|
||||||
case VTYPE_UINT64: stringify(*( u64_t*)v); break;
|
case VTYPE_UINT64: stringify(*( u64_t*)v); break;
|
||||||
case VTYPE_FLOAT: if (abs(*(fl_t*)v) <= FLT_EPSILON) {
|
case VTYPE_FLOAT: if (abs(*(fl_t*)v) <= FLT_EPSILON) {
|
||||||
STRINGIFY_BUFFER[0] = 0x30;
|
STRINGIFY_BUFFER[STRINGIFY_BUFFER_POS][0] = 0x30;
|
||||||
STRINGIFY_BUFFER[1] = 0x00;
|
STRINGIFY_BUFFER[STRINGIFY_BUFFER_POS][1] = 0x00;
|
||||||
} else stringify(*(fl_t*)v);
|
} else stringify(*(fl_t*)v);
|
||||||
break;
|
break;
|
||||||
case VTYPE_DOUBLE: if (abs(*(dbl_t*)v) <= DBL_EPSILON) {
|
case VTYPE_DOUBLE: if (abs(*(dbl_t*)v) <= DBL_EPSILON) {
|
||||||
STRINGIFY_BUFFER[0] = 0x30;
|
STRINGIFY_BUFFER[STRINGIFY_BUFFER_POS][0] = 0x30;
|
||||||
STRINGIFY_BUFFER[1] = 0x00;
|
STRINGIFY_BUFFER[STRINGIFY_BUFFER_POS][1] = 0x00;
|
||||||
} else stringify(*(dbl_t*)v);
|
} else stringify(*(dbl_t*)v);
|
||||||
break;
|
break;
|
||||||
case VTYPE_LDOUBLE: if (abs(*(ldbl_t*)v) <= LDBL_EPSILON) {
|
case VTYPE_LDOUBLE: if (abs(*(ldbl_t*)v) <= LDBL_EPSILON) {
|
||||||
STRINGIFY_BUFFER[0] = 0x30;
|
STRINGIFY_BUFFER[STRINGIFY_BUFFER_POS][0] = 0x30;
|
||||||
STRINGIFY_BUFFER[1] = 0x00;
|
STRINGIFY_BUFFER[STRINGIFY_BUFFER_POS][1] = 0x00;
|
||||||
} else stringify(*(ldbl_t*)v);
|
} else stringify(*(ldbl_t*)v);
|
||||||
break;
|
break;
|
||||||
case VTYPE_POINTER: sprintf(STRINGIFY_BUFFER, (sizeof(void*) == 8) ? "0x%016lx" : "0x%08x", (uintptr_t)*(void**)v); break;
|
case VTYPE_POINTER: sprintf(STRINGIFY_BUFFER[STRINGIFY_BUFFER_POS], (sizeof(void*) == 8) ? "0x%016lx" : "0x%08x", (uintptr_t)*(void**)v); break;
|
||||||
|
|
||||||
default: sprintf(STRINGIFY_BUFFER, "<%s>", libcdsb_vtype_name(t));
|
default: sprintf(STRINGIFY_BUFFER[STRINGIFY_BUFFER_POS], "<%s>", libcdsb_vtype_name(t));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return STRINGIFY_BUFFER;
|
return STRINGIFY_BUFFER[STRINGIFY_BUFFER_POS++];
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user