This commit is contained in:
2023-02-11 12:19:05 +06:00
parent 609dfcf3ed
commit 305854e721
77 changed files with 565 additions and 562 deletions

View File

@@ -1,15 +1,15 @@
#include "base.h"
// returns length of char buffer (without \0)
uint32 cptr_length(char* str){
uint32 len=0;
u32 cptr_length(char* str){
u32 len=0;
while(*(str++)) len++;
return len;
}
// allocates new char[] and copies src there
char* cptr_copy(char* src){
uint32 len=cptr_length(src)+1;
u32 len=cptr_length(src)+1;
char* dst=malloc(len);
while(len--!=0)
dst[len]=src[len];
@@ -27,7 +27,7 @@ bool cptr_compare(char* key0, char* key1){
}
// multiplies char n times
char* char_multiply(char c, uint32 n){
char* char_multiply(char c, u32 n){
char* rez=malloc(n+1);
rez[n]=0;
while(n--!=0)
@@ -48,9 +48,9 @@ bool cptr_endsWith(char* ptr, char* fragment){
return true;
}
uint32 cptr_indexOf(char* ptr, char* fragment){
u32 cptr_indexOf(char* ptr, char* fragment){
char sc=*ptr;
for(int si=0, fi=0; sc!=0; si++){
for(i32 si=0, fi=0; sc!=0; si++){
sc=ptr[si];
if(sc==fragment[fi]){
fi++;
@@ -61,9 +61,9 @@ uint32 cptr_indexOf(char* ptr, char* fragment){
}
return -1;
}
uint32 cptr_indexOfChar(char* ptr, char fragment){
u32 cptr_indexOfChar(char* ptr, char fragment){
char sc=*ptr;
for(int si=0; sc!=0; si++){
for(i32 si=0; sc!=0; si++){
sc=ptr[si];
if(sc==fragment){
return si;
@@ -71,10 +71,10 @@ uint32 cptr_indexOfChar(char* ptr, char fragment){
}
return -1;
}
uint32 cptr_lastIndexOf(char* ptr, char* fragment){
u32 cptr_lastIndexOf(char* ptr, char* fragment){
char sc=*ptr;
int fi_last=cptr_length(fragment)-1;
for(int si=cptr_length(ptr)-1, fi=fi_last; si>=0; si--){
i32 fi_last=cptr_length(fragment)-1;
for(i32 si=cptr_length(ptr)-1, fi=fi_last; si>=0; si--){
sc=ptr[si];
if(sc==fragment[fi]){
if(fi==0)
@@ -85,9 +85,9 @@ uint32 cptr_lastIndexOf(char* ptr, char* fragment){
}
return -1;
}
uint32 cptr_lastIndexOfChar(char* ptr, char fragment){
u32 cptr_lastIndexOfChar(char* ptr, char fragment){
char sc=*ptr;
for(int si=cptr_length(ptr)-1; si>=0; si--){
for(i32 si=cptr_length(ptr)-1; si>=0; si--){
sc=ptr[si];
if(sc==fragment){
return si;
@@ -96,24 +96,24 @@ uint32 cptr_lastIndexOfChar(char* ptr, char fragment){
return -1;
}
void memcopy(void* from, void* to, uint32 size){
void memcopy(void* from, void* to, u32 size){
if(from==NULL || to==NULL)
throw(ERR_NULLPTR);
for(uint32 i=0; i<size; i++)
for(u32 i=0; i<size; i++)
((char*)to)[i]=((char*)from)[i];
}
char* __cptr_concat(uint16 n, ...){
char* __cptr_concat(u16 n, ...){
char** strs=(char**)malloc(n*sizeof(char*));
uint32* lengths=malloc(n*sizeof(uint32));
uint32 totalLength=0;
u32* lengths=malloc(n*sizeof(u32));
u32 totalLength=0;
// reading args from va_list
va_list vl;
va_start(vl, n);
for(uint16 i=0; i<n; i++){
for(u16 i=0; i<n; i++){
char* str=va_arg(vl,char*);
int16 length=cptr_length(str);
i16 length=cptr_length(str);
strs[i]=str;
lengths[i]=length;
totalLength+=length;
@@ -126,7 +126,7 @@ char* __cptr_concat(uint16 n, ...){
totality[totalLength]=0;
// copying content of all strings to rezult
for(uint16 k=0; k<n; k++){
for(u16 k=0; k<n; k++){
memcopy(strs[k], totality, lengths[k]);
totality+=lengths[k];
}

View File

@@ -7,7 +7,7 @@ extern "C" {
#include "std.h"
// returns length of char buffer (without \0)
uint32 cptr_length(char* str);
u32 cptr_length(char* str);
// allocates new char[] and copies src there
char* cptr_copy(char* src);
@@ -16,7 +16,7 @@ char* cptr_copy(char* src);
bool cptr_compare(char* key0, char* key1);
// multiplies char n times
char* char_multiply(char c, uint32 n);
char* char_multiply(char c, u32 n);
bool cptr_startsWith(char* ptr, char* fragment);
@@ -24,16 +24,16 @@ bool cptr_endsWith(char* ptr, char* fragment);
/// @brief search for <fragment> in <ptr>
/// @return index of first <fragment> inclusion or -1 if not found
uint32 cptr_indexOf(char* ptr, char* fragment);
u32 cptr_indexOf(char* ptr, char* fragment);
/// @brief search for <fragment> in <ptr>
/// @return index of first <fragment> inclusion or -1 if not found
uint32 cptr_indexOfChar(char* ptr, char fragment);
u32 cptr_indexOfChar(char* ptr, char fragment);
/// @brief search for <fragment> in <ptr>
/// @return index of last <fragment> inclusion or -1 if not found
uint32 cptr_lastIndexOf(char* ptr, char* fragment);
u32 cptr_lastIndexOf(char* ptr, char* fragment);
/// @brief search for <fragment> in <ptr>
/// @return index of last <fragment> inclusion or -1 if not found
uint32 cptr_lastIndexOfChar(char* ptr, char fragment);
u32 cptr_lastIndexOfChar(char* ptr, char fragment);
static inline bool cptr_contains(char* ptr, char* fragment){
// if(cptr_indexOf(ptr, fragment)==-1)
@@ -42,9 +42,9 @@ static inline bool cptr_contains(char* ptr, char* fragment){
return cptr_indexOf(ptr, fragment) +1;
}
void memcopy(void* from, void* to, uint32 size);
void memcopy(void* from, void* to, u32 size);
char* __cptr_concat(uint16 n, ...);
char* __cptr_concat(u16 n, ...);
#define cptr_concat(STR...) __cptr_concat(count_args(STR), STR)
#if __cplusplus

View File

@@ -2,7 +2,7 @@
static const union
{
uint16 number;
u16 number;
Endian bytes[2];
} _endian_union={ .number=0x0102 };

View File

@@ -23,7 +23,7 @@ char* errname(ErrorId err){
#define ERRMSG_MAXLENGTH 1024
char* __genErrMsg(const char* errmsg, const char* srcfile, int line, const char* funcname){
char* __genErrMsg(const char* errmsg, const char* srcfile, i32 line, const char* funcname){
size_t bufsize=ERRMSG_MAXLENGTH;
char* rezult=malloc(bufsize);
IFMSC(
@@ -33,7 +33,7 @@ char* __genErrMsg(const char* errmsg, const char* srcfile, int line, const char*
return rezult;
}
char* __extendErrMsg(const char* errmsg, const char* srcfile, int line, const char* funcname){
char* __extendErrMsg(const char* errmsg, const char* srcfile, i32 line, const char* funcname){
size_t bufsize=cptr_length(errmsg)+ERRMSG_MAXLENGTH;
char* rezult=malloc(bufsize);
IFMSC(

View File

@@ -17,8 +17,8 @@ PACK_ENUM(ErrorId,
char* errname(ErrorId err);
char* __genErrMsg(const char* errmsg, const char* srcfile, int line, const char* funcname);
char* __extendErrMsg(const char* errmsg, const char* srcfile, int line, const char* funcname);
char* __genErrMsg(const char* errmsg, const char* srcfile, i32 line, const char* funcname);
char* __extendErrMsg(const char* errmsg, const char* srcfile, i32 line, const char* funcname);
typedef struct Maybe{
Unitype value;

View File

@@ -4,7 +4,7 @@
#define __optime_print(opname, t)\
char tnames[3][3]={"s\0","ms","us"};\
int tni=0;\
i32 tni=0;\
if(t>1000000){\
t/=1000000;\
tni=0;\
@@ -17,25 +17,25 @@
#ifdef CLOCK_REALTIME
/// executes codeblock and prints execution time
/// uint64 op_i is counter of the internal loop
/// u64 op_i is counter of the internal loop
/// uses non-standard high-precision clock
#define optime(opname,repeats,codeblock) ({\
struct timespec start, stop;\
clock_gettime(CLOCK_REALTIME, &start);\
for(uint64 op_i=0;op_i<(uint64)repeats;op_i++)\
for(u64 op_i=0;op_i<(u64)repeats;op_i++)\
(codeblock);\
clock_gettime(CLOCK_REALTIME, &stop);\
double t=(double)(stop.tv_sec-start.tv_sec)*1000000+(double)(stop.tv_nsec-start.tv_nsec)/1000;\
f64 t=(f64)(stop.tv_sec-start.tv_sec)*1000000+(f64)(stop.tv_nsec-start.tv_nsec)/1000;\
__optime_print(opname,t)\
})
#else
/// uses standard low precision clock
#define optime(opname,repeats,codeblock) ({\
clock_t start=clock();\
for(uint64 op_i=0;op_i<(uint64)repeats;op_i++)\
for(u64 op_i=0;op_i<(u64)repeats;op_i++)\
(codeblock);\
clock_t stop=clock();\
double t=(double)(stop-start)/CLOCKS_PER_SEC*1000000;\
f64 t=(f64)(stop-start)/CLOCKS_PER_SEC*1000000;\
__optime_print(opname,t)\
})
#endif

View File

@@ -12,22 +12,23 @@ extern "C" {
#include <time.h>
#include <setjmp.h>
typedef int8_t int8;
typedef uint8_t uint8;
typedef int16_t int16;
typedef uint16_t uint16;
typedef int32_t int32;
typedef uint32_t uint32;
typedef int64_t int64;
typedef uint64_t uint64;
typedef float float32;
typedef double float64;
typedef int8_t i8;
typedef uint8_t u8;
typedef int16_t i16;
typedef uint16_t u16;
typedef int32_t i32;
typedef uint32_t u32;
typedef int64_t i64;
typedef uint64_t u64;
typedef float f32;
typedef double f64;
// Usually bool from stdbool.h is defined as macro,
// so in other macros like ktid_##TYPE it will be replaced by _Bool.
// ktid__Bool will be created instead of ktid_bool
// In C++ bool is a keyword, so there is no need to redefine it.
#if !__cplusplus
typedef uint8 bool;
typedef u8 bool;
#define true 1
#define false 0
#endif

View File

@@ -2,7 +2,7 @@
#include "../base.h"
#include "../../kprint/kprint_format.h"
char* __toString_char(void* c, uint32 fmt) {
char* __toString_char(void* c, u32 fmt) {
//*c=char
if(kp_fmt_dataFormat(fmt)==kp_c){
char* cc=malloc(2);
@@ -17,9 +17,9 @@ char* __toString_char(void* c, uint32 fmt) {
else throw(ERR_FORMAT);
}
char* __toString_bool(void* c, uint32 fmt) {
char* __toString_bool(void* c, u32 fmt) {
static const char _strbool[4][6]={ "false", "true\0", "False", "True\0" };
uint8 strind=*(bool*)c==1 + kp_fmt_isUpper(fmt)*2;
u8 strind=*(bool*)c==1 + kp_fmt_isUpper(fmt)*2;
char* rez=malloc(6);
rez[0]=_strbool[strind][0];
rez[1]=_strbool[strind][1];
@@ -30,10 +30,10 @@ char* __toString_bool(void* c, uint32 fmt) {
return rez;
}
char* toString_int(int64 n){
int64 d=n<0 ? -1*n : n;
char* toString_i64(i64 n){
i64 d=n<0 ? -1*n : n;
char str[32];
uint8 i=sizeof(str);
u8 i=sizeof(str);
str[--i]=0;
if(d==0)
str[--i]='0';
@@ -46,9 +46,9 @@ char* toString_int(int64 n){
return cptr_copy((char*)str+i);
}
char* toString_uint(uint64 n, bool withPostfix, bool uppercase){
char* toString_u64(u64 n, bool withPostfix, bool uppercase){
char str[32];
uint8 i=sizeof(str);
u8 i=sizeof(str);
str[--i]=0;
if(withPostfix)
str[--i]= uppercase ? 'U' : 'u';
@@ -67,7 +67,7 @@ char* toString_uint(uint64 n, bool withPostfix, bool uppercase){
throw("too big precision");\
if(precision==0)\
precision=toString_float_default_precision;\
int cn=IFMSC(\
i32 cn=IFMSC(\
sprintf_s(str, bufsize, "%.*f", precision, n),\
sprintf(str, "%.*f", precision, n)\
);\
@@ -80,37 +80,37 @@ char* toString_uint(uint64 n, bool withPostfix, bool uppercase){
return cptr_copy(str);\
}
char* toString_float32(float32 n, uint8 precision, bool withPostfix, bool uppercase)
_toString_float_impl(48, toString_float32_max_precision)
char* toString_f32(f32 n, u8 precision, bool withPostfix, bool uppercase)
_toString_float_impl(48, toString_f32_max_precision)
char* toString_float64(float64 n, uint8 precision, bool withPostfix, bool uppercase)
_toString_float_impl(512, toString_float64_max_precision)
char* toString_f64(f64 n, u8 precision, bool withPostfix, bool uppercase)
_toString_float_impl(512, toString_f64_max_precision)
#define byte_to_bits(byte) {\
str[cn++]='0' + (uint8)((byte>>7)&1); /* 8th bit */\
str[cn++]='0' + (uint8)((byte>>6)&1); /* 7th bit */\
str[cn++]='0' + (uint8)((byte>>5)&1); /* 6th bit */\
str[cn++]='0' + (uint8)((byte>>4)&1); /* 5th bit */\
str[cn++]='0' + (uint8)((byte>>3)&1); /* 4th bit */\
str[cn++]='0' + (uint8)((byte>>2)&1); /* 3th bit */\
str[cn++]='0' + (uint8)((byte>>1)&1); /* 2th bit */\
str[cn++]='0' + (uint8)((byte>>0)&1); /* 1th bit */\
str[cn++]='0' + (u8)((byte>>7)&1); /* 8th bit */\
str[cn++]='0' + (u8)((byte>>6)&1); /* 7th bit */\
str[cn++]='0' + (u8)((byte>>5)&1); /* 6th bit */\
str[cn++]='0' + (u8)((byte>>4)&1); /* 5th bit */\
str[cn++]='0' + (u8)((byte>>3)&1); /* 4th bit */\
str[cn++]='0' + (u8)((byte>>2)&1); /* 3th bit */\
str[cn++]='0' + (u8)((byte>>1)&1); /* 2th bit */\
str[cn++]='0' + (u8)((byte>>0)&1); /* 1th bit */\
}
char* toString_bin(void* _bytes, uint32 size, bool inverse, bool withPrefix){
char* toString_bin(void* _bytes, u32 size, bool inverse, bool withPrefix){
char* bytes=_bytes;
char* str=malloc(size*8 + (withPrefix?2:0) +1);
uint32 cn=0; // char number
u32 cn=0; // char number
if(withPrefix){
str[cn++]='0';
str[cn++]='b';
}
if(inverse){
// byte number
for(int32 bn=size-1; bn>=0; bn--)
for(i32 bn=size-1; bn>=0; bn--)
byte_to_bits(bytes[bn])
} else {
for(int32 bn=0; bn<size; bn++)
for(i32 bn=0; bn<size; bn++)
byte_to_bits(bytes[bn])
}
str[cn]=0;
@@ -118,7 +118,7 @@ char* toString_bin(void* _bytes, uint32 size, bool inverse, bool withPrefix){
}
// converts number from 0 to F to char
char _4bitsHex(uint8 u, bool uppercase){
char _4bitsHex(u8 u, bool uppercase){
switch(u){
case 0: case 1: case 2: case 3: case 4:
case 5: case 6: case 7: case 8: case 9:
@@ -133,10 +133,10 @@ char _4bitsHex(uint8 u, bool uppercase){
}
}
char* toString_hex(void* _bytes, uint32 size, bool inverse, bool withPrefix, bool uppercase){
char* toString_hex(void* _bytes, u32 size, bool inverse, bool withPrefix, bool uppercase){
char* bytes=_bytes;
char* str=malloc(size*2 + (withPrefix?2:0) + 1);
uint32 cn=0; // char number
u32 cn=0; // char number
if(withPrefix){
str[cn++]='0';
str[cn++]='x';
@@ -144,7 +144,7 @@ char* toString_hex(void* _bytes, uint32 size, bool inverse, bool withPrefix, boo
// left to right
if(inverse){
// byte number
for(int32 bn=size-1; bn>=0; bn--){
for(i32 bn=size-1; bn>=0; bn--){
unsigned char byte=bytes[bn];
str[cn++]=_4bitsHex(byte/16, uppercase);
str[cn++]=_4bitsHex(byte%16, uppercase);
@@ -152,7 +152,7 @@ char* toString_hex(void* _bytes, uint32 size, bool inverse, bool withPrefix, boo
}
// right to left
else {
for(int32 bn=0; bn<size; bn++){ // byte number
for(i32 bn=0; bn<size; bn++){ // byte number
unsigned char byte=bytes[bn];
str[cn++]=_4bitsHex(byte/16, uppercase);
str[cn++]=_4bitsHex(byte%16, uppercase);
@@ -163,11 +163,11 @@ char* toString_hex(void* _bytes, uint32 size, bool inverse, bool withPrefix, boo
}
#define __toString_int_def(BITS) char* __toString_int##BITS(void* _n, uint32 f){\
#define __toString_i32_def(BITS) char* __toString_i##BITS(void* _n, u32 f){\
switch(kp_fmt_dataFormat(f)){\
case kp_i: ;\
int##BITS n=*(int##BITS*)_n;\
return toString_int(n);\
i##BITS n=*(i##BITS*)_n;\
return toString_i64(n);\
case kp_b:\
return toString_bin(_n, BITS/8, getEndian()==LittleEndian, kp_fmt_withPrefix(f));\
case kp_h:\
@@ -178,16 +178,16 @@ char* toString_hex(void* _bytes, uint32 size, bool inverse, bool withPrefix, boo
return NULL;\
}\
}
__toString_int_def(8)
__toString_int_def(16)
__toString_int_def(32)
__toString_int_def(64)
__toString_i32_def(8)
__toString_i32_def(16)
__toString_i32_def(32)
__toString_i32_def(64)
#define __toString_uint_def(BITS) char* __toString_uint##BITS(void* _n, uint32 f){\
#define __toString_u_def(BITS) char* __toString_u##BITS(void* _n, u32 f){\
switch(kp_fmt_dataFormat(f)){\
case kp_u: ;\
uint##BITS n=*(uint##BITS*)_n;\
return toString_uint(n, kp_fmt_withPostfix(f), kp_fmt_isUpper(f));\
u##BITS n=*(u##BITS*)_n;\
return toString_u64(n, kp_fmt_withPostfix(f), kp_fmt_isUpper(f));\
case kp_b:\
return toString_bin(_n, BITS/8, getEndian()==LittleEndian, kp_fmt_withPrefix(f));\
case kp_h:\
@@ -198,16 +198,16 @@ __toString_int_def(64)
return NULL;\
}\
}
__toString_uint_def(8)
__toString_uint_def(16)
__toString_uint_def(32)
__toString_uint_def(64)
__toString_u_def(8)
__toString_u_def(16)
__toString_u_def(32)
__toString_u_def(64)
#define __toString_float_def(BITS) char* __toString_float##BITS(void* _n, uint32 f){\
#define __toString_float_def(BITS) char* __toString_f##BITS(void* _n, u32 f){\
switch(kp_fmt_dataFormat(f)){\
case kp_f: ;\
float##BITS n=*(float##BITS*)_n;\
return toString_float64(n, toString_float_default_precision, kp_fmt_withPostfix(f), kp_fmt_isUpper(f));\
f##BITS n=*(f##BITS*)_n;\
return toString_f64(n, toString_float_default_precision, kp_fmt_withPostfix(f), kp_fmt_isUpper(f));\
case kp_b:\
return toString_bin(_n, BITS/8, getEndian()==LittleEndian, kp_fmt_withPrefix(f));\
case kp_h:\

View File

@@ -8,39 +8,39 @@ extern "C" {
// char and cstring
// has different output for fmtChar and fmtString
char* __toString_char(void* c, uint32 fmt);
char* __toString_char(void* c, u32 fmt);
// bool
char* __toString_bool(void* c, uint32 fmt);
char* __toString_bool(void* c, u32 fmt);
// signed int
char* toString_int(int64 n);
char* __toString_int8(void* n, uint32 fmt);
char* __toString_int16(void* n, uint32 fmt);
char* __toString_int32(void* n, uint32 fmt);
char* __toString_int64(void* n, uint32 fmt);
char* toString_i64(i64 n);
char* __toString_i8(void* n, u32 fmt);
char* __toString_i16(void* n, u32 fmt);
char* __toString_i32(void* n, u32 fmt);
char* __toString_i64(void* n, u32 fmt);
// unsigned int
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_uint32(void* n, uint32 fmt);
char* __toString_uint64(void* n, uint32 fmt);
char* toString_u64(u64 n, bool withPostfix, bool uppercase);
char* __toString_u8(void* n, u32 fmt);
char* __toString_u16(void* n, u32 fmt);
char* __toString_u32(void* n, u32 fmt);
char* __toString_u64(void* n, u32 fmt);
// float
#define toString_float32_max_precision 6
#define toString_float64_max_precision 15
#define toString_f32_max_precision 6
#define toString_f64_max_precision 15
#define toString_float_default_precision 6
char* toString_float32(float32 n, uint8 precision, bool withPostfix, bool uppercase); // uses sprintf
char* toString_float64(float64 n, uint8 precision, bool withPostfix, bool uppercase); // uses sprintf
char* __toString_float32(void* n, uint32 fmt);
char* __toString_float64(void* n, uint32 fmt);
char* toString_f32(f32 n, u8 precision, bool withPostfix, bool uppercase); // uses sprintf
char* toString_f64(f64 n, u8 precision, bool withPostfix, bool uppercase); // uses sprintf
char* __toString_f32(void* n, u32 fmt);
char* __toString_f64(void* n, u32 fmt);
///@param inverse set to true for little endian numbers (their bytes are in reverse order)
char* toString_bin(void* bytes, uint32 size, bool inverse, bool withPrefix);
char* toString_bin(void* bytes, u32 size, bool inverse, bool withPrefix);
///@param inverse set to true for little endian numbers (their bytes are in reverse order)
char* toString_hex(void* bytes, uint32 size, bool inverse, bool withPrefix, bool uppercase);
char* toString_hex(void* bytes, u32 size, bool inverse, bool withPrefix, bool uppercase);
#if __cplusplus
}

View File

@@ -13,16 +13,16 @@ void ktDescriptors_initKerepTypes(){
// base types
kt_register(char, NULL, __toString_char);
kt_register(bool, NULL, __toString_bool);
kt_register(float32, NULL, __toString_float32);
kt_register(float64, NULL, __toString_float64);
kt_register(int8, NULL, __toString_int8);
kt_register(uint8, NULL, __toString_uint8);
kt_register(int16, NULL, __toString_int16);
kt_register(uint16, NULL, __toString_uint16);
kt_register(int32, NULL, __toString_int32);
kt_register(uint32, NULL, __toString_uint32);
kt_register(int64, NULL, __toString_int64);
kt_register(uint64, NULL, __toString_uint64);
kt_register(f32, NULL, __toString_f32);
kt_register(f64, NULL, __toString_f64);
kt_register(i8, NULL, __toString_i8);
kt_register(u8, NULL, __toString_u8);
kt_register(i16, NULL, __toString_i16);
kt_register(u16, NULL, __toString_u16);
kt_register(i32, NULL, __toString_i32);
kt_register(u32, NULL, __toString_u32);
kt_register(i64, NULL, __toString_i64);
kt_register(u64, NULL, __toString_u64);
// ktDescriptor
kt_register(ktDescriptor, NULL, NULL);
@@ -31,30 +31,30 @@ void ktDescriptors_initKerepTypes(){
// base type arrays
kt_register(Array_char, (freeMembers_t)Array_char_free, NULL);
kt_register(Array_bool, (freeMembers_t)Array_bool_free, NULL);
kt_register(Array_float32, (freeMembers_t)Array_float32_free, NULL);
kt_register(Array_float64, (freeMembers_t)Array_float64_free, NULL);
kt_register(Array_int8, (freeMembers_t)Array_int8_free, NULL);
kt_register(Array_uint8, (freeMembers_t)Array_uint8_free, NULL);
kt_register(Array_int16, (freeMembers_t)Array_int16_free, NULL);
kt_register(Array_uint16, (freeMembers_t)Array_uint16_free, NULL);
kt_register(Array_int32, (freeMembers_t)Array_int32_free, NULL);
kt_register(Array_uint32, (freeMembers_t)Array_uint32_free, NULL);
kt_register(Array_int64, (freeMembers_t)Array_int64_free, NULL);
kt_register(Array_uint64, (freeMembers_t)Array_uint64_free, NULL);
kt_register(Array_f32, (freeMembers_t)Array_f32_free, NULL);
kt_register(Array_f64, (freeMembers_t)Array_f64_free, NULL);
kt_register(Array_i8, (freeMembers_t)Array_i8_free, NULL);
kt_register(Array_u8, (freeMembers_t)Array_u8_free, NULL);
kt_register(Array_i16, (freeMembers_t)Array_i16_free, NULL);
kt_register(Array_u16, (freeMembers_t)Array_u16_free, NULL);
kt_register(Array_i32, (freeMembers_t)Array_i32_free, NULL);
kt_register(Array_u32, (freeMembers_t)Array_u32_free, NULL);
kt_register(Array_i64, (freeMembers_t)Array_i64_free, NULL);
kt_register(Array_u64, (freeMembers_t)Array_u64_free, NULL);
// base type autoarrs
kt_register(Autoarr_char, ____Autoarr_free_char, NULL);
kt_register(Autoarr_bool, ____Autoarr_free_bool, NULL);
kt_register(Autoarr_float32, ____Autoarr_free_float32, NULL);
kt_register(Autoarr_float64, ____Autoarr_free_float64, NULL);
kt_register(Autoarr_int8, ____Autoarr_free_int8, NULL);
kt_register(Autoarr_uint8, ____Autoarr_free_uint8, NULL);
kt_register(Autoarr_int16, ____Autoarr_free_int16, NULL);
kt_register(Autoarr_uint16, ____Autoarr_free_uint16, NULL);
kt_register(Autoarr_int32, ____Autoarr_free_int32, NULL);
kt_register(Autoarr_uint32, ____Autoarr_free_uint32, NULL);
kt_register(Autoarr_int64, ____Autoarr_free_int64, NULL);
kt_register(Autoarr_uint64, ____Autoarr_free_uint64, NULL);
kt_register(Autoarr_f32, ____Autoarr_free_f32, NULL);
kt_register(Autoarr_f64, ____Autoarr_free_f64, NULL);
kt_register(Autoarr_i8, ____Autoarr_free_i8, NULL);
kt_register(Autoarr_u8, ____Autoarr_free_u8, NULL);
kt_register(Autoarr_i16, ____Autoarr_free_i16, NULL);
kt_register(Autoarr_u16, ____Autoarr_free_u16, NULL);
kt_register(Autoarr_i32, ____Autoarr_free_i32, NULL);
kt_register(Autoarr_u32, ____Autoarr_free_u32, NULL);
kt_register(Autoarr_i64, ____Autoarr_free_i64, NULL);
kt_register(Autoarr_u64, ____Autoarr_free_u64, NULL);
// Unitype
kt_register(Unitype, __UnitypePtr_free, NULL);

View File

@@ -8,11 +8,11 @@ extern "C" {
#include "ktid.h"
typedef void (*freeMembers_t)(void*);
typedef char* (*toString_t)(void* obj, uint32 fmt);
typedef char* (*toString_t)(void* obj, u32 fmt);
typedef struct ktDescriptor{
char* name;
ktid id;
uint16 size;
u16 size;
freeMembers_t freeMembers; // NULL or function which frees all struct members
toString_t toString; // NULL or function which generates string representaion of object
} ktDescriptor;

View File

@@ -7,16 +7,16 @@ ktid ktid_Null=-1;
ktid_define(char);
ktid_define(bool);
ktid_define(float32);
ktid_define(float64);
ktid_define(int8);
ktid_define(uint8);
ktid_define(int16);
ktid_define(uint16);
ktid_define(int32);
ktid_define(uint32);
ktid_define(int64);
ktid_define(uint64);
ktid_define(f32);
ktid_define(f64);
ktid_define(i8);
ktid_define(u8);
ktid_define(i16);
ktid_define(u16);
ktid_define(i32);
ktid_define(u32);
ktid_define(i64);
ktid_define(u64);
ktid_define(ktDescriptor);
@@ -44,7 +44,7 @@ void ktDescriptors_endInit(){
kprintf("\e[92minitialized %u type descriptors\n", ktid_last);
}
void __kt_register(char* name, int16 size, void (*freeMembers)(void*), char* (*toString)(void*, uint32)){
void __kt_register(char* name, i16 size, void (*freeMembers)(void*), char* (*toString)(void*, u32)){
ktDescriptor typeDesc={
.name=name,
.size=size,

View File

@@ -9,7 +9,7 @@ extern "C" {
#include "ktDescriptor.h"
extern ktid ktid_last;
void __kt_register(char* name, int16 size, void (*freeMembers)(void*), char* (*toString)(void*, uint32));
void __kt_register(char* name, i16 size, void (*freeMembers)(void*), char* (*toString)(void*, u32));
#define kt_register(TYPE, FREE_MEMBERS_FUNC, TO_STRING_FUNC)\
__kt_register(#TYPE, sizeof(TYPE), FREE_MEMBERS_FUNC, TO_STRING_FUNC);\
@@ -30,16 +30,16 @@ extern ktid ktid_Null;
ktid_declare(char);
ktid_declare(bool);
ktid_declare(float32);
ktid_declare(float64);
ktid_declare(int8);
ktid_declare(uint8);
ktid_declare(int16);
ktid_declare(uint16);
ktid_declare(int32);
ktid_declare(uint32);
ktid_declare(int64);
ktid_declare(uint64);
ktid_declare(f32);
ktid_declare(f64);
ktid_declare(i8);
ktid_declare(u8);
ktid_declare(i16);
ktid_declare(u16);
ktid_declare(i32);
ktid_declare(u32);
ktid_declare(i64);
ktid_declare(u64);
ktid_declare(ktDescriptor);

View File

@@ -5,7 +5,7 @@ extern "C" {
#endif
#include "../std.h"
typedef uint16 ktid;
typedef u16 ktid;
#define ktid_name(TYPE) ktid_##TYPE
#define ktid_ptrName(TYPE) ktid_##TYPE##_Ptr

View File

@@ -11,7 +11,7 @@ void Unitype_free(Unitype u){
}
void __UnitypePtr_free(void* u) { Unitype_free(*(Unitype*)u); }
char* toString_Unitype(void* _u, uint32 fmt){
char* toString_Unitype(void* _u, u32 fmt){
Unitype* u=_u;
ktDescriptor type=ktDescriptor_get(u->typeId);
char* valuestr=type.toString(_u, fmt);
@@ -30,11 +30,11 @@ char* sprintuni(Unitype v){
ktDescriptor type=ktDescriptor_get(v.typeId);
if(v.typeId==ktid_Null)
sprintf_s(buf, BUFSIZE, "{Null}");
else if(v.typeId==ktid_name(float64))
else if(v.typeId==ktid_name(f64))
sprintf_s(buf, BUFSIZE, "{%s : %lf}", type.name,v.Float64);
else if(v.typeId==ktid_name(bool) || v.typeId==ktid_name(uint64))
else if(v.typeId==ktid_name(bool) || v.typeId==ktid_name(u64))
sprintf_s(buf, BUFSIZE, "{%s : " IFWIN("%llu", "%lu") "}", type.name,v.UInt64);
else if(v.typeId==ktid_name(int64))
else if(v.typeId==ktid_name(i64))
sprintf_s(buf, BUFSIZE, "{%s : " IFWIN("%lld", "%ld") "}", type.name,v.Int64);
else if(v.typeId==ktid_ptrName(char)){
size_t newBUFSIZE=cptr_length(v.VoidPtr) + BUFSIZE/2;

View File

@@ -8,9 +8,9 @@ extern "C" {
typedef struct Unitype{
union {
int64 Int64;
uint64 UInt64;
double Float64;
i64 Int64;
u64 UInt64;
f64 Float64;
bool Bool;
void* VoidPtr;
char Bytes[8];
@@ -24,9 +24,9 @@ ktid_declare(Unitype);
#define __UniDef(FIELD, TYPE, VAL) (Unitype){\
.FIELD=VAL, .typeId=ktid_name(TYPE), .allocatedInHeap=false}
#define UniInt64(VAL) __UniDef(Int64, int64, VAL)
#define UniUInt64(VAL) __UniDef(UInt64, uint64, VAL)
#define UniFloat64(VAL) __UniDef(Float64, float64, VAL)
#define UniInt64(VAL) __UniDef(Int64, i64, VAL)
#define UniUInt64(VAL) __UniDef(UInt64, u64, VAL)
#define UniFloat64(VAL) __UniDef(Float64, f64, VAL)
#define UniBool(VAL) __UniDef(Bool, bool, VAL)
#define UniStackPtr(TYPE, VAL) (Unitype){\