base_toString
This commit is contained in:
parent
d270554dfa
commit
4222c3ebf6
@ -25,6 +25,8 @@ Every registered type should have it's own descriptor (`ktDescriptor`). It's a s
|
||||
## type registration
|
||||
|
||||
To finally register a type, you should call macro `kt_register()` between `ktDescriptors_beginInit()` and `ktDescriptors_endInit()`. Better do it at the start of your program. To register all types from kerep, call `ktDescriptors_initKerepTypes()`.
|
||||
|
||||
You can free internal ktDescriptors storage by calling `ktDescriptors_free()` at exit, if your debugger (valgrind in my case) sees a memory leak.
|
||||
Examples:
|
||||
+ [ktDescriptors_initKerepTypes()](src/base/type_system/init.c)
|
||||
+ [kerep types registration](tests/main.cpp)
|
||||
|
||||
@ -2,6 +2,26 @@
|
||||
#include "../cptr.h"
|
||||
#include "../../kprint/kprint_format.h"
|
||||
|
||||
char* __toString_char(void* c, uint32 fmt) {
|
||||
char* cc=malloc(2);
|
||||
cc[0]=*(char*)c;
|
||||
cc[1]=0;
|
||||
return cc;
|
||||
}
|
||||
|
||||
char* __toString_bool(void* c, uint32 fmt) {
|
||||
static const char _strbool[4][6]={ "false", "true\0", "False", "True\0" };
|
||||
uint8 strind=*(bool*)c==1 + kprint_format_uppercase(fmt)*2;
|
||||
char* rez=malloc(6);
|
||||
rez[0]=_strbool[strind][0];
|
||||
rez[1]=_strbool[strind][1];
|
||||
rez[2]=_strbool[strind][2];
|
||||
rez[3]=_strbool[strind][3];
|
||||
rez[4]=_strbool[strind][4];
|
||||
rez[5]=0;
|
||||
return rez;
|
||||
}
|
||||
|
||||
char* toString_int(int64 n){
|
||||
int64 d=n;
|
||||
char str[32];
|
||||
@ -151,3 +171,6 @@ __toString_uint_def(64)
|
||||
return NULL;\
|
||||
}\
|
||||
}
|
||||
|
||||
__toString_float_def(32)
|
||||
__toString_float_def(64)
|
||||
|
||||
@ -7,16 +7,19 @@ extern "C" {
|
||||
#include "../errors.h"
|
||||
|
||||
// functions for base types
|
||||
char* __toString_char(void* c, uint32 fmt);
|
||||
char* __toString_bool(void* c, uint32 fmt);
|
||||
|
||||
char* toString_int(int64 n);
|
||||
char* __toString_int8(void* n, uint32 fmt);
|
||||
char* __toString_int16(void* n, uint32 fmt);
|
||||
char* __toString_uint32(void* n, uint32 fmt);
|
||||
char* __toString_int32(void* n, uint32 fmt);
|
||||
char* __toString_int64(void* n, uint32 fmt);
|
||||
|
||||
char* toString_uint(uint64 n, bool withPostfix, bool uppercase);
|
||||
char* __toString_uint8(void* n, uint32 fmt);
|
||||
char* __toString_uint16(void* n, uint32 fmt);
|
||||
char* __toString_uuint32(void* n, uint32 fmt);
|
||||
char* __toString_uint32(void* n, uint32 fmt);
|
||||
char* __toString_uint64(void* n, uint32 fmt);
|
||||
|
||||
char* toString_float(float64 n, bool withPostfix, bool uppercase); // very bad implimentation
|
||||
|
||||
@ -9,31 +9,32 @@ void ktDescriptors_initKerepTypes(){
|
||||
// null
|
||||
kt_register(NULL, ktId_Null, NULL, NULL);
|
||||
// base types
|
||||
kt_register(char, ktId_Char, NULL, NULL);
|
||||
kt_register(bool, ktId_Bool, NULL, NULL);
|
||||
kt_register(float32, ktId_Float32, NULL, NULL);
|
||||
kt_register(float64, ktId_Float64, NULL, NULL);
|
||||
kt_register(int8, ktId_Int8, NULL, NULL);
|
||||
kt_register(uint8, ktId_UInt8, NULL, NULL);
|
||||
kt_register(int16, ktId_Int16, NULL, NULL);
|
||||
kt_register(uint16, ktId_UInt16, NULL, NULL);
|
||||
kt_register(int32, ktId_Int32, NULL, NULL);
|
||||
kt_register(uint32, ktId_UInt32, NULL, NULL);
|
||||
kt_register(int64, ktId_Int64, NULL, NULL);
|
||||
kt_register(uint64, ktId_UInt64, NULL, NULL);
|
||||
kt_register(char, ktId_Char, NULL, __toString_char);
|
||||
kt_register(bool, ktId_Bool, NULL, __toString_bool);
|
||||
kt_register(float32, ktId_Float32, NULL, __toString_float32);
|
||||
kt_register(float64, ktId_Float64, NULL, __toString_float64);
|
||||
kt_register(int8, ktId_Int8, NULL, __toString_int8);
|
||||
kt_register(uint8, ktId_UInt8, NULL, __toString_uint8);
|
||||
kt_register(int16, ktId_Int16, NULL, __toString_int16);
|
||||
kt_register(uint16, ktId_UInt16, NULL, __toString_uint16);
|
||||
kt_register(int32, ktId_Int32, NULL, __toString_int32);
|
||||
kt_register(uint32, ktId_UInt32, NULL, __toString_uint32);
|
||||
kt_register(int64, ktId_Int64, NULL, __toString_int64);
|
||||
kt_register(uint64, ktId_UInt64, NULL, __toString_uint64);
|
||||
// base type pointers
|
||||
kt_register(char*, ktId_CharPtr, NULL, NULL);
|
||||
kt_register(bool*, ktId_BoolPtr, NULL, NULL);
|
||||
kt_register(float32*, ktId_Float32Ptr, NULL, NULL);
|
||||
kt_register(float64*, ktId_Float64Ptr, NULL, NULL);
|
||||
kt_register(int8*, ktId_Int8Ptr, NULL, NULL);
|
||||
kt_register(uint8*, ktId_UInt8Ptr, NULL, NULL);
|
||||
kt_register(int16*, ktId_Int16Ptr, NULL, NULL);
|
||||
kt_register(uint16*, ktId_UInt16Ptr, NULL, NULL);
|
||||
kt_register(int32*, ktId_Int32Ptr, NULL, NULL);
|
||||
kt_register(uint32*, ktId_UInt32Ptr, NULL, NULL);
|
||||
kt_register(int64*, ktId_Int64Ptr, NULL, NULL);
|
||||
kt_register(uint64*, ktId_UInt64Ptr, NULL, NULL);
|
||||
kt_register(char*, ktId_CharPtr, NULL, __toString_char);
|
||||
kt_register(bool*, ktId_BoolPtr, NULL, __toString_bool);
|
||||
kt_register(float32*, ktId_Float32Ptr, NULL, __toString_float32);
|
||||
kt_register(float64*, ktId_Float64Ptr, NULL, __toString_float64);
|
||||
kt_register(int8*, ktId_Int8Ptr, NULL, __toString_int8);
|
||||
kt_register(uint8*, ktId_UInt8Ptr, NULL, __toString_uint8);
|
||||
kt_register(int16*, ktId_Int16Ptr, NULL, __toString_int16);
|
||||
kt_register(uint16*, ktId_UInt16Ptr, NULL, __toString_uint16);
|
||||
kt_register(int32*, ktId_Int32Ptr, NULL, __toString_int32);
|
||||
kt_register(uint32*, ktId_UInt32Ptr, NULL, __toString_uint32);
|
||||
kt_register(int64*, ktId_Int64Ptr, NULL, __toString_int64);
|
||||
kt_register(uint64*, ktId_UInt64Ptr, NULL, __toString_uint64);
|
||||
|
||||
// ktDescriptor
|
||||
kt_register(ktDescriptor, ktId_ktDescriptor, NULL, NULL);
|
||||
kt_register(ktDescriptor*, ktId_ktDescriptorPtr, NULL, NULL);
|
||||
|
||||
@ -76,3 +76,7 @@ ktDescriptor ktDescriptor_get(ktId id){
|
||||
}
|
||||
return typeDescriptors[id];
|
||||
}
|
||||
|
||||
void ktDescriptors_free(){
|
||||
free(typeDescriptors);
|
||||
}
|
||||
|
||||
@ -21,6 +21,8 @@ void ktDescriptors_endInit();
|
||||
/// @param id id of registered type
|
||||
ktDescriptor ktDescriptor_get(ktId id);
|
||||
|
||||
// call it to free heap-allocated ktDescriptors array
|
||||
void ktDescriptors_free();
|
||||
|
||||
ktId_declare(Null);
|
||||
|
||||
|
||||
@ -22,6 +22,7 @@ int main(){
|
||||
// optime("test_all",1,test_all());
|
||||
// test_kprint_colors();
|
||||
test_rng_algorithms();
|
||||
ktDescriptors_free();
|
||||
printf("\e[0m\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user