i32
This commit is contained in:
@@ -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];
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
static const union
|
||||
{
|
||||
uint16 number;
|
||||
u16 number;
|
||||
Endian bytes[2];
|
||||
} _endian_union={ .number=0x0102 };
|
||||
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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:\
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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){\
|
||||
|
||||
Reference in New Issue
Block a user