all files moved out from src/
This commit is contained in:
23
DtsodC/Autoarr/Autoarr.c
Normal file
23
DtsodC/Autoarr/Autoarr.c
Normal file
@@ -0,0 +1,23 @@
|
||||
#include "Autoarr.h"
|
||||
|
||||
define_Autoarr(uint8)
|
||||
define_Autoarr(int8)
|
||||
define_Autoarr(uint16)
|
||||
define_Autoarr(int16)
|
||||
define_Autoarr(uint32)
|
||||
define_Autoarr(int32)
|
||||
define_Autoarr(uint64)
|
||||
define_Autoarr(int64)
|
||||
define_Autoarr(float)
|
||||
define_Autoarr(double)
|
||||
define_Autoarr(Unitype)
|
||||
|
||||
//right func to clear array of unitype values
|
||||
void Autoarr_Unitype_clear(Autoarr(Unitype)* ar){
|
||||
for(uint32 blockI=0;blockI<ar->blocks_count-1;blockI++)
|
||||
for(uint32 elemI=0;elemI<ar->max_block_length;elemI++)
|
||||
Unitype_free(ar->values[blockI][elemI]);
|
||||
for(uint32 elemI=0;elemI<ar->block_length;elemI++)
|
||||
Unitype_free(ar->values[ar->blocks_count-1][elemI]);
|
||||
Autoarr_clear(ar);
|
||||
}
|
||||
19
DtsodC/Autoarr/Autoarr.h
Normal file
19
DtsodC/Autoarr/Autoarr.h
Normal file
@@ -0,0 +1,19 @@
|
||||
#pragma once
|
||||
|
||||
#include "Autoarr_declare.h"
|
||||
#include "Autoarr_define.h"
|
||||
|
||||
declare_Autoarr(uint8)
|
||||
declare_Autoarr(int8)
|
||||
declare_Autoarr(uint16)
|
||||
declare_Autoarr(int16)
|
||||
declare_Autoarr(uint32)
|
||||
declare_Autoarr(int32)
|
||||
declare_Autoarr(uint64)
|
||||
declare_Autoarr(int64)
|
||||
declare_Autoarr(float)
|
||||
declare_Autoarr(double)
|
||||
declare_Autoarr(Unitype)
|
||||
|
||||
//right func to clear array of unitype values
|
||||
void Autoarr_Unitype_clear(Autoarr(Unitype)* ar);
|
||||
52
DtsodC/Autoarr/Autoarr_declare.h
Normal file
52
DtsodC/Autoarr/Autoarr_declare.h
Normal file
@@ -0,0 +1,52 @@
|
||||
#pragma once
|
||||
|
||||
#include "../base/base.h"
|
||||
|
||||
#define declare_Autoarr(type)\
|
||||
\
|
||||
struct Autoarr_##type;\
|
||||
\
|
||||
typedef struct {\
|
||||
void (*add)(struct Autoarr_##type* ar, type element);\
|
||||
type (*get)(struct Autoarr_##type* ar, uint32 index);\
|
||||
type* (*getptr)(struct Autoarr_##type* ar, uint32 index);\
|
||||
void (*set)(struct Autoarr_##type* ar, uint32 index, type element);\
|
||||
void (*clear)(struct Autoarr_##type* ar);\
|
||||
} __functions_list_t_##type;\
|
||||
\
|
||||
typedef struct Autoarr_##type{\
|
||||
uint16 blocks_count;\
|
||||
uint16 max_blocks_count;\
|
||||
uint16 block_length;\
|
||||
uint16 max_block_length;\
|
||||
type** values;\
|
||||
__functions_list_t_##type* functions;\
|
||||
} Autoarr_##type;\
|
||||
\
|
||||
void __Autoarr_add_##type(Autoarr_##type* ar, type element);\
|
||||
type __Autoarr_get_##type(Autoarr_##type* ar, uint32 index);\
|
||||
type* __Autoarr_getptr_##type(Autoarr_##type* ar, uint32 index);\
|
||||
void __Autoarr_set_##type(Autoarr_##type* ar, uint32 index, type element);\
|
||||
void __Autoarr_clear_##type(Autoarr_##type* ar);\
|
||||
Autoarr_##type __Autoarr_create_##type(uint16 max_blocks_count, uint16 max_block_length);
|
||||
|
||||
#define Autoarr(type) Autoarr_##type
|
||||
|
||||
#define Autoarr_add(autoarr, element)\
|
||||
autoarr->functions->add(autoarr, element)
|
||||
#define Autoarr_get(autoarr, index)\
|
||||
autoarr->functions->get(autoarr,index)
|
||||
#define Autoarr_getptr(autoarr, index)\
|
||||
autoarr->functions->getptr(autoarr,index)
|
||||
#define Autoarr_set(autoarr, index, element)\
|
||||
autoarr->functions->set(autoarr, index, element)
|
||||
#define Autoarr_clear(autoarr)\
|
||||
autoarr->functions->clear(autoarr)
|
||||
#define Autoarr_create(type, max_blocks_count, max_block_length)\
|
||||
__Autoarr_create_##type(max_blocks_count, max_block_length)
|
||||
|
||||
#define Autoarr_length(autoarr) \
|
||||
(uint32)(!autoarr->blocks_count ? 0 : \
|
||||
autoarr->max_block_length*(autoarr->blocks_count-1)+autoarr->block_length)
|
||||
#define Autoarr_max_length(autoarr)\
|
||||
(uint32)(autoarr->max_block_length*autoarr->max_blocks_count)
|
||||
64
DtsodC/Autoarr/Autoarr_define.h
Normal file
64
DtsodC/Autoarr/Autoarr_define.h
Normal file
@@ -0,0 +1,64 @@
|
||||
#pragma once
|
||||
|
||||
#include "../base/base.h"
|
||||
|
||||
#define define_Autoarr(type)\
|
||||
\
|
||||
void __Autoarr_add_##type(Autoarr_##type* ar, type element){\
|
||||
if(!ar->values){\
|
||||
ar->values=malloc(ar->max_blocks_count*sizeof(type*));\
|
||||
goto create_block;\
|
||||
}\
|
||||
if(ar->block_length==ar->max_block_length){\
|
||||
if (ar->blocks_count>=ar->max_blocks_count) throw(ERR_MAXLENGTH);\
|
||||
ar->block_length=0;\
|
||||
create_block:\
|
||||
ar->values[ar->blocks_count]=malloc(ar->max_block_length*sizeof(type));\
|
||||
ar->blocks_count++;\
|
||||
}\
|
||||
ar->values[ar->blocks_count-1][ar->block_length]=element;\
|
||||
ar->block_length++;\
|
||||
}\
|
||||
\
|
||||
type __Autoarr_get_##type(Autoarr_##type* ar, uint32 index){\
|
||||
if(index>=Autoarr_length(ar)) throw(ERR_WRONGINDEX);\
|
||||
return ar->values[index/ar->max_block_length][index%ar->max_block_length];\
|
||||
}\
|
||||
\
|
||||
type* __Autoarr_getptr_##type(Autoarr_##type* ar, uint32 index){\
|
||||
if(index>=Autoarr_length(ar)) throw(ERR_WRONGINDEX);\
|
||||
return ar->values[index/ar->max_block_length]+(index%ar->max_block_length);\
|
||||
}\
|
||||
\
|
||||
void __Autoarr_set_##type(Autoarr_##type* ar, uint32 index, type element){\
|
||||
if(index>=Autoarr_length(ar)) throw(ERR_WRONGINDEX);\
|
||||
ar->values[index/ar->max_block_length][index%ar->max_block_length]=element;\
|
||||
}\
|
||||
\
|
||||
void __Autoarr_clear_##type(Autoarr_##type* ar){\
|
||||
for(uint16 i=0; i<ar->blocks_count;i++)\
|
||||
free(ar->values[i]); \
|
||||
free(ar->values);\
|
||||
ar->values=NULL;\
|
||||
ar->blocks_count=0;\
|
||||
ar->block_length=0;\
|
||||
}\
|
||||
\
|
||||
__functions_list_t_##type __functions_list_##type={\
|
||||
&__Autoarr_add_##type,\
|
||||
&__Autoarr_get_##type,\
|
||||
&__Autoarr_getptr_##type,\
|
||||
&__Autoarr_set_##type,\
|
||||
&__Autoarr_clear_##type\
|
||||
};\
|
||||
\
|
||||
Autoarr_##type __Autoarr_create_##type(uint16 max_blocks_count, uint16 max_block_length){\
|
||||
return (Autoarr_##type){\
|
||||
.max_blocks_count=max_blocks_count,\
|
||||
.blocks_count=0,\
|
||||
.max_block_length=max_block_length,\
|
||||
.block_length=0,\
|
||||
.values=NULL,\
|
||||
.functions=&__functions_list_##type\
|
||||
};\
|
||||
}
|
||||
24
DtsodC/Autoarr/StringBuilder.c
Normal file
24
DtsodC/Autoarr/StringBuilder.c
Normal file
@@ -0,0 +1,24 @@
|
||||
#include "StringBuilder.h"
|
||||
|
||||
StringBuilder StringBuilder_create(uint16 max_blocks_count, uint16 max_block_length){
|
||||
return Autoarr_create(int8,max_blocks_count,max_block_length);
|
||||
}
|
||||
|
||||
void StringBuilder_append(StringBuilder* b, char c){
|
||||
Autoarr_add(b,c);
|
||||
}
|
||||
|
||||
void StringBuilder_append_str(StringBuilder* b, char* s){
|
||||
char c;
|
||||
while((c=*s++))
|
||||
Autoarr_add(b,c);
|
||||
}
|
||||
|
||||
char* StringBuilder_build(StringBuilder* b){
|
||||
uint32 len=Autoarr_length(b);
|
||||
char* str=malloc(len+1);
|
||||
str[len]=0;
|
||||
for(uint32 i=0;i<len;i++)
|
||||
str[i]=Autoarr_get(b,i);
|
||||
return str;
|
||||
}
|
||||
10
DtsodC/Autoarr/StringBuilder.h
Normal file
10
DtsodC/Autoarr/StringBuilder.h
Normal file
@@ -0,0 +1,10 @@
|
||||
#pragma once
|
||||
|
||||
#include "Autoarr.h"
|
||||
|
||||
typedef Autoarr(int8) StringBuilder;
|
||||
|
||||
StringBuilder StringBuilder_create(uint16 max_blocks_count, uint16 max_block_length);
|
||||
void StringBuilder_append(StringBuilder* b, char c);
|
||||
void StringBuilder_append_str(StringBuilder* b, char* s);
|
||||
char* StringBuilder_build(StringBuilder* b);
|
||||
Reference in New Issue
Block a user