Autoarr2 renamed to Autoarr
This commit is contained in:
parent
83f4a1775e
commit
9776a2c423
23
DtsodC/src/Autoarr/Autoarr.c
Normal file
23
DtsodC/src/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/src/Autoarr/Autoarr.h
Normal file
19
DtsodC/src/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);
|
||||||
@ -1,23 +0,0 @@
|
|||||||
#include "Autoarr2.h"
|
|
||||||
|
|
||||||
define_Autoarr2(uint8)
|
|
||||||
define_Autoarr2(int8)
|
|
||||||
define_Autoarr2(uint16)
|
|
||||||
define_Autoarr2(int16)
|
|
||||||
define_Autoarr2(uint32)
|
|
||||||
define_Autoarr2(int32)
|
|
||||||
define_Autoarr2(uint64)
|
|
||||||
define_Autoarr2(int64)
|
|
||||||
define_Autoarr2(float)
|
|
||||||
define_Autoarr2(double)
|
|
||||||
define_Autoarr2(Unitype)
|
|
||||||
|
|
||||||
//right func to clear array of unitype values
|
|
||||||
void Autoarr2_Unitype_clear(Autoarr2(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]);
|
|
||||||
Autoarr2_clear(ar);
|
|
||||||
}
|
|
||||||
@ -1,19 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include "Autoarr2_declare.h"
|
|
||||||
#include "Autoarr2_define.h"
|
|
||||||
|
|
||||||
declare_Autoarr2(uint8)
|
|
||||||
declare_Autoarr2(int8)
|
|
||||||
declare_Autoarr2(uint16)
|
|
||||||
declare_Autoarr2(int16)
|
|
||||||
declare_Autoarr2(uint32)
|
|
||||||
declare_Autoarr2(int32)
|
|
||||||
declare_Autoarr2(uint64)
|
|
||||||
declare_Autoarr2(int64)
|
|
||||||
declare_Autoarr2(float)
|
|
||||||
declare_Autoarr2(double)
|
|
||||||
declare_Autoarr2(Unitype)
|
|
||||||
|
|
||||||
//right func to clear array of unitype values
|
|
||||||
void Autoarr2_Unitype_clear(Autoarr2(Unitype)* ar);
|
|
||||||
@ -1,52 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include "../base/base.h"
|
|
||||||
|
|
||||||
#define declare_Autoarr2(type)\
|
|
||||||
\
|
|
||||||
struct Autoarr2_##type;\
|
|
||||||
\
|
|
||||||
typedef struct {\
|
|
||||||
void (*add)(struct Autoarr2_##type* ar, type element);\
|
|
||||||
type (*get)(struct Autoarr2_##type* ar, uint32 index);\
|
|
||||||
type* (*getptr)(struct Autoarr2_##type* ar, uint32 index);\
|
|
||||||
void (*set)(struct Autoarr2_##type* ar, uint32 index, type element);\
|
|
||||||
void (*clear)(struct Autoarr2_##type* ar);\
|
|
||||||
} __functions_list_t_##type;\
|
|
||||||
\
|
|
||||||
typedef struct Autoarr2_##type{\
|
|
||||||
uint16 blocks_count;\
|
|
||||||
uint16 max_blocks_count;\
|
|
||||||
uint16 block_length;\
|
|
||||||
uint16 max_block_length;\
|
|
||||||
type** values;\
|
|
||||||
__functions_list_t_##type* functions;\
|
|
||||||
} Autoarr2_##type;\
|
|
||||||
\
|
|
||||||
void __Autoarr2_add_##type(Autoarr2_##type* ar, type element);\
|
|
||||||
type __Autoarr2_get_##type(Autoarr2_##type* ar, uint32 index);\
|
|
||||||
type* __Autoarr2_getptr_##type(Autoarr2_##type* ar, uint32 index);\
|
|
||||||
void __Autoarr2_set_##type(Autoarr2_##type* ar, uint32 index, type element);\
|
|
||||||
void __Autoarr2_clear_##type(Autoarr2_##type* ar);\
|
|
||||||
Autoarr2_##type __Autoarr2_create_##type(uint16 max_blocks_count, uint16 max_block_length);
|
|
||||||
|
|
||||||
#define Autoarr2(type) Autoarr2_##type
|
|
||||||
|
|
||||||
#define Autoarr2_add(autoarr, element)\
|
|
||||||
autoarr->functions->add(autoarr, element)
|
|
||||||
#define Autoarr2_get(autoarr, index)\
|
|
||||||
autoarr->functions->get(autoarr,index)
|
|
||||||
#define Autoarr2_getptr(autoarr, index)\
|
|
||||||
autoarr->functions->getptr(autoarr,index)
|
|
||||||
#define Autoarr2_set(autoarr, index, element)\
|
|
||||||
autoarr->functions->set(autoarr, index, element)
|
|
||||||
#define Autoarr2_clear(autoarr)\
|
|
||||||
autoarr->functions->clear(autoarr)
|
|
||||||
#define Autoarr2_create(type, max_blocks_count, max_block_length)\
|
|
||||||
__Autoarr2_create_##type(max_blocks_count, max_block_length)
|
|
||||||
|
|
||||||
#define Autoarr2_length(autoarr) \
|
|
||||||
(uint32)(!autoarr->blocks_count ? 0 : \
|
|
||||||
autoarr->max_block_length*(autoarr->blocks_count-1)+autoarr->block_length)
|
|
||||||
#define Autoarr2_max_length(autoarr)\
|
|
||||||
(uint32)(autoarr->max_block_length*autoarr->max_blocks_count)
|
|
||||||
52
DtsodC/src/Autoarr/Autoarr_declare.h
Normal file
52
DtsodC/src/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)
|
||||||
@ -2,9 +2,9 @@
|
|||||||
|
|
||||||
#include "../base/base.h"
|
#include "../base/base.h"
|
||||||
|
|
||||||
#define define_Autoarr2(type)\
|
#define define_Autoarr(type)\
|
||||||
\
|
\
|
||||||
void __Autoarr2_add_##type(Autoarr2_##type* ar, type element){\
|
void __Autoarr_add_##type(Autoarr_##type* ar, type element){\
|
||||||
if(!ar->values){\
|
if(!ar->values){\
|
||||||
ar->values=malloc(ar->max_blocks_count*sizeof(type*));\
|
ar->values=malloc(ar->max_blocks_count*sizeof(type*));\
|
||||||
goto create_block;\
|
goto create_block;\
|
||||||
@ -20,22 +20,22 @@ create_block:\
|
|||||||
ar->block_length++;\
|
ar->block_length++;\
|
||||||
}\
|
}\
|
||||||
\
|
\
|
||||||
type __Autoarr2_get_##type(Autoarr2_##type* ar, uint32 index){\
|
type __Autoarr_get_##type(Autoarr_##type* ar, uint32 index){\
|
||||||
if(index>=Autoarr2_length(ar)) throw(ERR_WRONGINDEX);\
|
if(index>=Autoarr_length(ar)) throw(ERR_WRONGINDEX);\
|
||||||
return ar->values[index/ar->max_block_length][index%ar->max_block_length];\
|
return ar->values[index/ar->max_block_length][index%ar->max_block_length];\
|
||||||
}\
|
}\
|
||||||
\
|
\
|
||||||
type* __Autoarr2_getptr_##type(Autoarr2_##type* ar, uint32 index){\
|
type* __Autoarr_getptr_##type(Autoarr_##type* ar, uint32 index){\
|
||||||
if(index>=Autoarr2_length(ar)) throw(ERR_WRONGINDEX);\
|
if(index>=Autoarr_length(ar)) throw(ERR_WRONGINDEX);\
|
||||||
return ar->values[index/ar->max_block_length]+(index%ar->max_block_length);\
|
return ar->values[index/ar->max_block_length]+(index%ar->max_block_length);\
|
||||||
}\
|
}\
|
||||||
\
|
\
|
||||||
void __Autoarr2_set_##type(Autoarr2_##type* ar, uint32 index, type element){\
|
void __Autoarr_set_##type(Autoarr_##type* ar, uint32 index, type element){\
|
||||||
if(index>=Autoarr2_length(ar)) throw(ERR_WRONGINDEX);\
|
if(index>=Autoarr_length(ar)) throw(ERR_WRONGINDEX);\
|
||||||
ar->values[index/ar->max_block_length][index%ar->max_block_length]=element;\
|
ar->values[index/ar->max_block_length][index%ar->max_block_length]=element;\
|
||||||
}\
|
}\
|
||||||
\
|
\
|
||||||
void __Autoarr2_clear_##type(Autoarr2_##type* ar){\
|
void __Autoarr_clear_##type(Autoarr_##type* ar){\
|
||||||
for(uint16 i=0; i<ar->blocks_count;i++)\
|
for(uint16 i=0; i<ar->blocks_count;i++)\
|
||||||
free(ar->values[i]); \
|
free(ar->values[i]); \
|
||||||
free(ar->values);\
|
free(ar->values);\
|
||||||
@ -45,15 +45,15 @@ void __Autoarr2_clear_##type(Autoarr2_##type* ar){\
|
|||||||
}\
|
}\
|
||||||
\
|
\
|
||||||
__functions_list_t_##type __functions_list_##type={\
|
__functions_list_t_##type __functions_list_##type={\
|
||||||
&__Autoarr2_add_##type,\
|
&__Autoarr_add_##type,\
|
||||||
&__Autoarr2_get_##type,\
|
&__Autoarr_get_##type,\
|
||||||
&__Autoarr2_getptr_##type,\
|
&__Autoarr_getptr_##type,\
|
||||||
&__Autoarr2_set_##type,\
|
&__Autoarr_set_##type,\
|
||||||
&__Autoarr2_clear_##type\
|
&__Autoarr_clear_##type\
|
||||||
};\
|
};\
|
||||||
\
|
\
|
||||||
Autoarr2_##type __Autoarr2_create_##type(uint16 max_blocks_count, uint16 max_block_length){\
|
Autoarr_##type __Autoarr_create_##type(uint16 max_blocks_count, uint16 max_block_length){\
|
||||||
return (Autoarr2_##type){\
|
return (Autoarr_##type){\
|
||||||
.max_blocks_count=max_blocks_count,\
|
.max_blocks_count=max_blocks_count,\
|
||||||
.blocks_count=0,\
|
.blocks_count=0,\
|
||||||
.max_block_length=max_block_length,\
|
.max_block_length=max_block_length,\
|
||||||
@ -1,24 +1,24 @@
|
|||||||
#include "StringBuilder.h"
|
#include "StringBuilder.h"
|
||||||
|
|
||||||
StringBuilder StringBuilder_create(uint16 max_blocks_count, uint16 max_block_length){
|
StringBuilder StringBuilder_create(uint16 max_blocks_count, uint16 max_block_length){
|
||||||
return Autoarr2_create(int8,max_blocks_count,max_block_length);
|
return Autoarr_create(int8,max_blocks_count,max_block_length);
|
||||||
}
|
}
|
||||||
|
|
||||||
void StringBuilder_append(StringBuilder* b, char c){
|
void StringBuilder_append(StringBuilder* b, char c){
|
||||||
Autoarr2_add(b,c);
|
Autoarr_add(b,c);
|
||||||
}
|
}
|
||||||
|
|
||||||
void StringBuilder_append_str(StringBuilder* b, char* s){
|
void StringBuilder_append_str(StringBuilder* b, char* s){
|
||||||
char c;
|
char c;
|
||||||
while((c=*s++))
|
while((c=*s++))
|
||||||
Autoarr2_add(b,c);
|
Autoarr_add(b,c);
|
||||||
}
|
}
|
||||||
|
|
||||||
char* StringBuilder_build(StringBuilder* b){
|
char* StringBuilder_build(StringBuilder* b){
|
||||||
uint32 len=Autoarr2_length(b);
|
uint32 len=Autoarr_length(b);
|
||||||
char* str=malloc(len+1);
|
char* str=malloc(len+1);
|
||||||
str[len]=0;
|
str[len]=0;
|
||||||
for(uint32 i=0;i<len;i++)
|
for(uint32 i=0;i<len;i++)
|
||||||
str[i]=Autoarr2_get(b,i);
|
str[i]=Autoarr_get(b,i);
|
||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,8 +1,8 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "Autoarr2.h"
|
#include "Autoarr.h"
|
||||||
|
|
||||||
typedef Autoarr2(int8) StringBuilder;
|
typedef Autoarr(int8) StringBuilder;
|
||||||
|
|
||||||
StringBuilder StringBuilder_create(uint16 max_blocks_count, uint16 max_block_length);
|
StringBuilder StringBuilder_create(uint16 max_blocks_count, uint16 max_block_length);
|
||||||
void StringBuilder_append(StringBuilder* b, char c);
|
void StringBuilder_append(StringBuilder* b, char c);
|
||||||
|
|||||||
@ -85,12 +85,12 @@ Hashtable* __deserialize(char** _text, bool calledRecursively){
|
|||||||
return str;
|
return str;
|
||||||
};
|
};
|
||||||
|
|
||||||
Autoarr2(Unitype)* ReadList(){
|
Autoarr(Unitype)* ReadList(){
|
||||||
Autoarr2(Unitype)* list=malloc(sizeof(Autoarr2(Unitype)));
|
Autoarr(Unitype)* list=malloc(sizeof(Autoarr(Unitype)));
|
||||||
*list=Autoarr2_create(Unitype,ARR_BC,ARR_BL);
|
*list=Autoarr_create(Unitype,ARR_BC,ARR_BL);
|
||||||
readingList=true;
|
readingList=true;
|
||||||
while (true){
|
while (true){
|
||||||
Autoarr2_add(list,ReadValue());
|
Autoarr_add(list,ReadValue());
|
||||||
if (!readingList) break;
|
if (!readingList) break;
|
||||||
}
|
}
|
||||||
return list;
|
return list;
|
||||||
@ -212,17 +212,17 @@ Hashtable* __deserialize(char** _text, bool calledRecursively){
|
|||||||
char* nameCPtr=string_cpToCharPtr(name);
|
char* nameCPtr=string_cpToCharPtr(name);
|
||||||
Unitype value=ReadValue();
|
Unitype value=ReadValue();
|
||||||
if(partOfDollarList){
|
if(partOfDollarList){
|
||||||
Autoarr2(Unitype)* list;
|
Autoarr(Unitype)* list;
|
||||||
Unitype lu;
|
Unitype lu;
|
||||||
if(Hashtable_try_get(dict,nameCPtr, &lu)){
|
if(Hashtable_try_get(dict,nameCPtr, &lu)){
|
||||||
list=(Autoarr2(Unitype)*)lu.VoidPtr;
|
list=(Autoarr(Unitype)*)lu.VoidPtr;
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
list=malloc(sizeof(Autoarr2(Unitype)));
|
list=malloc(sizeof(Autoarr(Unitype)));
|
||||||
*list=Autoarr2_create(Unitype,ARR_BC,ARR_BL);
|
*list=Autoarr_create(Unitype,ARR_BC,ARR_BL);
|
||||||
Hashtable_add(dict,nameCPtr,UniPtr(AutoarrUnitypePtr,list));
|
Hashtable_add(dict,nameCPtr,UniPtr(AutoarrUnitypePtr,list));
|
||||||
}
|
}
|
||||||
Autoarr2_add(list,value);
|
Autoarr_add(list,value);
|
||||||
}
|
}
|
||||||
else Hashtable_add(dict,nameCPtr,value);
|
else Hashtable_add(dict,nameCPtr,value);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -11,15 +11,15 @@ static const uint16 HT_HEIGHTS[]={61,257,1021,4099,16381,65521};
|
|||||||
Hashtable* Hashtable_create(){
|
Hashtable* Hashtable_create(){
|
||||||
Hashtable* ht=malloc(sizeof(Hashtable));
|
Hashtable* ht=malloc(sizeof(Hashtable));
|
||||||
ht->hein=HT_HEIN_MIN;
|
ht->hein=HT_HEIN_MIN;
|
||||||
ht->rows=malloc(HT_HEIGHTS[HT_HEIN_MIN]*sizeof(Autoarr2(KeyValuePair)));
|
ht->rows=malloc(HT_HEIGHTS[HT_HEIN_MIN]*sizeof(Autoarr(KeyValuePair)));
|
||||||
for(uint16 i=0;i<HT_HEIGHTS[HT_HEIN_MIN];i++)
|
for(uint16 i=0;i<HT_HEIGHTS[HT_HEIN_MIN];i++)
|
||||||
ht->rows[i]=Autoarr2_create(KeyValuePair,ARR_BC,ARR_BL);
|
ht->rows[i]=Autoarr_create(KeyValuePair,ARR_BC,ARR_BL);
|
||||||
return ht;
|
return ht;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Hashtable_free(Hashtable* ht){
|
void Hashtable_free(Hashtable* ht){
|
||||||
for(uint16 i=0;i<HT_HEIGHTS[ht->hein];i++){
|
for(uint16 i=0;i<HT_HEIGHTS[ht->hein];i++){
|
||||||
Autoarr2_KeyValuePair_clear(ht->rows+i);
|
Autoarr_KeyValuePair_clear(ht->rows+i);
|
||||||
}
|
}
|
||||||
free(ht->rows);
|
free(ht->rows);
|
||||||
free(ht);
|
free(ht);
|
||||||
@ -30,27 +30,27 @@ uint32 Hashtable_height(Hashtable* ht){ return HT_HEIGHTS[ht->hein]; }
|
|||||||
|
|
||||||
void Hashtable_expand(Hashtable* ht){
|
void Hashtable_expand(Hashtable* ht){
|
||||||
if(ht->hein>=HT_HEIN_MAX) throw(ERR_MAXLENGTH);
|
if(ht->hein>=HT_HEIN_MAX) throw(ERR_MAXLENGTH);
|
||||||
Autoarr2(KeyValuePair)* newrows=malloc(HT_HEIGHTS[++ht->hein]*sizeof(Autoarr2(KeyValuePair)));
|
Autoarr(KeyValuePair)* newrows=malloc(HT_HEIGHTS[++ht->hein]*sizeof(Autoarr(KeyValuePair)));
|
||||||
for(uint16 i=0;i<HT_HEIGHTS[ht->hein];i++)
|
for(uint16 i=0;i<HT_HEIGHTS[ht->hein];i++)
|
||||||
newrows[i]=Autoarr2_create(KeyValuePair,ARR_BC,ARR_BL);
|
newrows[i]=Autoarr_create(KeyValuePair,ARR_BC,ARR_BL);
|
||||||
for(uint16 i=0;i<HT_HEIGHTS[ht->hein-1];i++){
|
for(uint16 i=0;i<HT_HEIGHTS[ht->hein-1];i++){
|
||||||
Autoarr2(KeyValuePair)* ar=ht->rows+i;
|
Autoarr(KeyValuePair)* ar=ht->rows+i;
|
||||||
uint32 arlen=Autoarr2_length(ar);
|
uint32 arlen=Autoarr_length(ar);
|
||||||
for(uint16 k=0;k<arlen;k++){
|
for(uint16 k=0;k<arlen;k++){
|
||||||
KeyValuePair p=Autoarr2_get(ar,k);
|
KeyValuePair p=Autoarr_get(ar,k);
|
||||||
uint16 newrown=ihash(p.key)%HT_HEIGHTS[ht->hein];
|
uint16 newrown=ihash(p.key)%HT_HEIGHTS[ht->hein];
|
||||||
Autoarr2(KeyValuePair)* newar=newrows+newrown;
|
Autoarr(KeyValuePair)* newar=newrows+newrown;
|
||||||
Autoarr2_add(newar,p);
|
Autoarr_add(newar,p);
|
||||||
}
|
}
|
||||||
Autoarr2_clear(ar);
|
Autoarr_clear(ar);
|
||||||
}
|
}
|
||||||
free(ht->rows);
|
free(ht->rows);
|
||||||
ht->rows=newrows;
|
ht->rows=newrows;
|
||||||
}
|
}
|
||||||
|
|
||||||
Autoarr2(KeyValuePair)* getrow(Hashtable* ht, char* key, bool can_expand){
|
Autoarr(KeyValuePair)* getrow(Hashtable* ht, char* key, bool can_expand){
|
||||||
Autoarr2(KeyValuePair)* ar=ht->rows+ihash(key)%HT_HEIGHTS[ht->hein];
|
Autoarr(KeyValuePair)* ar=ht->rows+ihash(key)%HT_HEIGHTS[ht->hein];
|
||||||
if(can_expand && Autoarr2_length(ar)==Autoarr2_max_length(ar))
|
if(can_expand && Autoarr_length(ar)==Autoarr_max_length(ar))
|
||||||
optime("expand",1,(Hashtable_expand(ht)));
|
optime("expand",1,(Hashtable_expand(ht)));
|
||||||
ar=ht->rows+ihash(key)%HT_HEIGHTS[ht->hein];
|
ar=ht->rows+ihash(key)%HT_HEIGHTS[ht->hein];
|
||||||
return ar;
|
return ar;
|
||||||
@ -58,7 +58,7 @@ Autoarr2(KeyValuePair)* getrow(Hashtable* ht, char* key, bool can_expand){
|
|||||||
|
|
||||||
|
|
||||||
void Hashtable_add_pair(Hashtable* ht, KeyValuePair p){
|
void Hashtable_add_pair(Hashtable* ht, KeyValuePair p){
|
||||||
Autoarr2_add(getrow(ht,p.key,true),p);
|
Autoarr_add(getrow(ht,p.key,true),p);
|
||||||
}
|
}
|
||||||
void Hashtable_add(Hashtable* ht, char* key, Unitype u){
|
void Hashtable_add(Hashtable* ht, char* key, Unitype u){
|
||||||
Hashtable_add_pair(ht,KVPair(key,u));
|
Hashtable_add_pair(ht,KVPair(key,u));
|
||||||
@ -66,20 +66,20 @@ void Hashtable_add(Hashtable* ht, char* key, Unitype u){
|
|||||||
|
|
||||||
//returns null or pointer to value in hashtable
|
//returns null or pointer to value in hashtable
|
||||||
Unitype* Hashtable_getptr(Hashtable* ht, char* key){
|
Unitype* Hashtable_getptr(Hashtable* ht, char* key){
|
||||||
Autoarr2(KeyValuePair)* ar=getrow(ht,key,false);
|
Autoarr(KeyValuePair)* ar=getrow(ht,key,false);
|
||||||
uint32 arlen=Autoarr2_length(ar);
|
uint32 arlen=Autoarr_length(ar);
|
||||||
for(uint32 i=0;i<arlen;i++){
|
for(uint32 i=0;i<arlen;i++){
|
||||||
KeyValuePair* p=Autoarr2_getptr(ar,i);
|
KeyValuePair* p=Autoarr_getptr(ar,i);
|
||||||
if(charbuf_compare(key,p->key)) return &p->value;
|
if(charbuf_compare(key,p->key)) return &p->value;
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
Unitype Hashtable_get(Hashtable* ht, char* key){
|
Unitype Hashtable_get(Hashtable* ht, char* key){
|
||||||
Autoarr2(KeyValuePair)* ar=getrow(ht,key,false);
|
Autoarr(KeyValuePair)* ar=getrow(ht,key,false);
|
||||||
uint32 arlen=Autoarr2_length(ar);
|
uint32 arlen=Autoarr_length(ar);
|
||||||
for(uint32 i=0;i<arlen;i++){
|
for(uint32 i=0;i<arlen;i++){
|
||||||
KeyValuePair p=Autoarr2_get(ar,i);
|
KeyValuePair p=Autoarr_get(ar,i);
|
||||||
if(charbuf_compare(key,p.key)) return p.value;
|
if(charbuf_compare(key,p.key)) return p.value;
|
||||||
}
|
}
|
||||||
return UniNull;
|
return UniNull;
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
typedef struct Hashtable{
|
typedef struct Hashtable{
|
||||||
uint8 hein; //height=HT_HEIGHTS[hein]
|
uint8 hein; //height=HT_HEIGHTS[hein]
|
||||||
Autoarr2(KeyValuePair)* rows; // Autoarr[height]
|
Autoarr(KeyValuePair)* rows; // Autoarr[height]
|
||||||
} Hashtable;
|
} Hashtable;
|
||||||
|
|
||||||
Hashtable* Hashtable_create();
|
Hashtable* Hashtable_create();
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
#include "KeyValuePair.h"
|
#include "KeyValuePair.h"
|
||||||
|
|
||||||
define_Autoarr2(KeyValuePair)
|
define_Autoarr(KeyValuePair)
|
||||||
|
|
||||||
|
|
||||||
//proper way to clear a KVP
|
//proper way to clear a KVP
|
||||||
@ -10,11 +10,11 @@ void KeyValuePair_free(KeyValuePair p){
|
|||||||
}
|
}
|
||||||
|
|
||||||
//func for KVP array clearing
|
//func for KVP array clearing
|
||||||
void Autoarr2_KeyValuePair_clear(Autoarr2_KeyValuePair* ar){
|
void Autoarr_KeyValuePair_clear(Autoarr_KeyValuePair* ar){
|
||||||
for(uint16 blockI=0; blockI < ar->blocks_count-1; blockI++)
|
for(uint16 blockI=0; blockI < ar->blocks_count-1; blockI++)
|
||||||
for(uint16 elemI=0; elemI < ar->max_block_length; elemI++)
|
for(uint16 elemI=0; elemI < ar->max_block_length; elemI++)
|
||||||
KeyValuePair_free(ar->values[blockI][elemI]);
|
KeyValuePair_free(ar->values[blockI][elemI]);
|
||||||
for(uint16 elemI=0; elemI < ar->block_length; elemI++)
|
for(uint16 elemI=0; elemI < ar->block_length; elemI++)
|
||||||
KeyValuePair_free(ar->values[ar->blocks_count-1][elemI]);
|
KeyValuePair_free(ar->values[ar->blocks_count-1][elemI]);
|
||||||
Autoarr2_clear(ar);
|
Autoarr_clear(ar);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,15 +1,15 @@
|
|||||||
#include "../base/base.h"
|
#include "../base/base.h"
|
||||||
#include "../Autoarr/Autoarr2.h"
|
#include "../Autoarr/Autoarr.h"
|
||||||
|
|
||||||
typedef struct KeyValuePair{
|
typedef struct KeyValuePair{
|
||||||
char* key;
|
char* key;
|
||||||
Unitype value;
|
Unitype value;
|
||||||
} KeyValuePair;
|
} KeyValuePair;
|
||||||
|
|
||||||
declare_Autoarr2(KeyValuePair)
|
declare_Autoarr(KeyValuePair)
|
||||||
|
|
||||||
//proper way to clear a KVP
|
//proper way to clear a KVP
|
||||||
void KeyValuePair_free(KeyValuePair p);
|
void KeyValuePair_free(KeyValuePair p);
|
||||||
|
|
||||||
//func to clear KVP array
|
//func to clear KVP array
|
||||||
void Autoarr2_KeyValuePair_clear(Autoarr2_KeyValuePair* ar);
|
void Autoarr_KeyValuePair_clear(Autoarr_KeyValuePair* ar);
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
#include "types.h"
|
#include "types.h"
|
||||||
#include "errors.h"
|
#include "errors.h"
|
||||||
#include "../Autoarr/Autoarr2.h"
|
#include "../Autoarr/Autoarr.h"
|
||||||
#include "../Hashtable/Hashtable.h"
|
#include "../Hashtable/Hashtable.h"
|
||||||
#include "../SearchTree/SearchTree.h"
|
#include "../SearchTree/SearchTree.h"
|
||||||
|
|
||||||
@ -80,36 +80,36 @@ void Unitype_free(Unitype u){
|
|||||||
STNode_free(u.VoidPtr);
|
STNode_free(u.VoidPtr);
|
||||||
break;
|
break;
|
||||||
case AutoarrInt8Ptr:
|
case AutoarrInt8Ptr:
|
||||||
Autoarr2_clear(((Autoarr2(int8)*)u.VoidPtr));
|
Autoarr_clear(((Autoarr(int8)*)u.VoidPtr));
|
||||||
break;
|
break;
|
||||||
case AutoarrUInt8Ptr:
|
case AutoarrUInt8Ptr:
|
||||||
Autoarr2_clear(((Autoarr2(uint8)*)u.VoidPtr));
|
Autoarr_clear(((Autoarr(uint8)*)u.VoidPtr));
|
||||||
break;
|
break;
|
||||||
case AutoarrInt16Ptr:
|
case AutoarrInt16Ptr:
|
||||||
Autoarr2_clear(((Autoarr2(int16)*)u.VoidPtr));
|
Autoarr_clear(((Autoarr(int16)*)u.VoidPtr));
|
||||||
break;
|
break;
|
||||||
case AutoarrUInt16Ptr:
|
case AutoarrUInt16Ptr:
|
||||||
Autoarr2_clear(((Autoarr2(uint16)*)u.VoidPtr));
|
Autoarr_clear(((Autoarr(uint16)*)u.VoidPtr));
|
||||||
break;
|
break;
|
||||||
case AutoarrInt32Ptr:
|
case AutoarrInt32Ptr:
|
||||||
Autoarr2_clear(((Autoarr2(int32)*)u.VoidPtr));
|
Autoarr_clear(((Autoarr(int32)*)u.VoidPtr));
|
||||||
break;
|
break;
|
||||||
case AutoarrUInt32Ptr:
|
case AutoarrUInt32Ptr:
|
||||||
Autoarr2_clear(((Autoarr2(uint32)*)u.VoidPtr));
|
Autoarr_clear(((Autoarr(uint32)*)u.VoidPtr));
|
||||||
break;
|
break;
|
||||||
case AutoarrInt64Ptr:
|
case AutoarrInt64Ptr:
|
||||||
Autoarr2_clear(((Autoarr2(int64)*)u.VoidPtr));
|
Autoarr_clear(((Autoarr(int64)*)u.VoidPtr));
|
||||||
break;
|
break;
|
||||||
case AutoarrUInt64Ptr:
|
case AutoarrUInt64Ptr:
|
||||||
Autoarr2_clear(((Autoarr2(uint64)*)u.VoidPtr));
|
Autoarr_clear(((Autoarr(uint64)*)u.VoidPtr));
|
||||||
break;
|
break;
|
||||||
case AutoarrUnitypePtr:
|
case AutoarrUnitypePtr:
|
||||||
Autoarr2_Unitype_clear(u.VoidPtr);
|
Autoarr_Unitype_clear(u.VoidPtr);
|
||||||
free((Autoarr2(Unitype)*)u.VoidPtr);
|
free((Autoarr(Unitype)*)u.VoidPtr);
|
||||||
break;
|
break;
|
||||||
case AutoarrKVPairPtr:
|
case AutoarrKVPairPtr:
|
||||||
Autoarr2_KeyValuePair_clear(u.VoidPtr);
|
Autoarr_KeyValuePair_clear(u.VoidPtr);
|
||||||
free((Autoarr2(KeyValuePair)*)u.VoidPtr);
|
free((Autoarr(KeyValuePair)*)u.VoidPtr);
|
||||||
break;
|
break;
|
||||||
default: throw(ERR_WRONGTYPE);
|
default: throw(ERR_WRONGTYPE);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -16,7 +16,7 @@ void printuni(Unitype v){
|
|||||||
|
|
||||||
void test_all(){
|
void test_all(){
|
||||||
test_searchtree();
|
test_searchtree();
|
||||||
test_autoarr2();
|
test_autoarr();
|
||||||
test_hashtable();
|
test_hashtable();
|
||||||
test_string();
|
test_string();
|
||||||
test_dtsod();
|
test_dtsod();
|
||||||
|
|||||||
52
DtsodC/tests/test_autoarr.c
Normal file
52
DtsodC/tests/test_autoarr.c
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
#include "tests.h"
|
||||||
|
#include "../src/Autoarr/Autoarr.h"
|
||||||
|
|
||||||
|
static void printautoarr(Autoarr(uint16)* ar){
|
||||||
|
printf("\e[94mAutoarr(uint16): %lu\n"
|
||||||
|
" max_blocks_count: %u\n"
|
||||||
|
" blocks_count: %u\n"
|
||||||
|
" max_block_length: %u\n"
|
||||||
|
" block_length: %u\n"
|
||||||
|
" max_length: %u\n"
|
||||||
|
" length: %u\n",
|
||||||
|
sizeof(Autoarr(uint16)),
|
||||||
|
ar->max_blocks_count,
|
||||||
|
ar->blocks_count,
|
||||||
|
ar->max_block_length,
|
||||||
|
ar->block_length,
|
||||||
|
Autoarr_max_length(ar),
|
||||||
|
Autoarr_length(ar));
|
||||||
|
}
|
||||||
|
|
||||||
|
static void fillar(Autoarr(uint16)* ar){
|
||||||
|
for (uint16 i=0;i<Autoarr_max_length(ar);i++)
|
||||||
|
Autoarr_add(ar,i);
|
||||||
|
}
|
||||||
|
static void resetar(Autoarr(uint16)* ar){
|
||||||
|
for (uint16 i=0;i<Autoarr_max_length(ar);i++)
|
||||||
|
Autoarr_set(ar,i,Autoarr_max_length(ar)-i-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void printallval(Autoarr(uint16)* ar){
|
||||||
|
printf("\e[90m");
|
||||||
|
for (uint16 i=0;i<Autoarr_length(ar);i++)
|
||||||
|
printf("%u ",Autoarr_get(ar,i));
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
void test_autoarr(){
|
||||||
|
optime("test_autoarr",1,({
|
||||||
|
printf("\e[96m------------[test_autoarr]------------\n");
|
||||||
|
Autoarr(uint16) ar=Autoarr_create(uint16,10,16);
|
||||||
|
printf("\e[92mautoarr created\n");
|
||||||
|
fillar(&ar);
|
||||||
|
printf("\e[92mautoarr filled up\n");
|
||||||
|
printautoarr(&ar);
|
||||||
|
printallval(&ar);
|
||||||
|
resetar(&ar);
|
||||||
|
printf("\e[92mautoarr values reset\n");
|
||||||
|
printallval(&ar);
|
||||||
|
Autoarr_clear(((&ar)));
|
||||||
|
printf("\e[92mautoarr cleared\n");
|
||||||
|
}));
|
||||||
|
}
|
||||||
@ -1,52 +0,0 @@
|
|||||||
#include "tests.h"
|
|
||||||
#include "../src/Autoarr/Autoarr2.h"
|
|
||||||
|
|
||||||
static void printautoarr(Autoarr2(uint16)* ar){
|
|
||||||
printf("\e[94mAutoarr2(uint16): %lu\n"
|
|
||||||
" max_blocks_count: %u\n"
|
|
||||||
" blocks_count: %u\n"
|
|
||||||
" max_block_length: %u\n"
|
|
||||||
" block_length: %u\n"
|
|
||||||
" max_length: %u\n"
|
|
||||||
" length: %u\n",
|
|
||||||
sizeof(Autoarr2(uint16)),
|
|
||||||
ar->max_blocks_count,
|
|
||||||
ar->blocks_count,
|
|
||||||
ar->max_block_length,
|
|
||||||
ar->block_length,
|
|
||||||
Autoarr2_max_length(ar),
|
|
||||||
Autoarr2_length(ar));
|
|
||||||
}
|
|
||||||
|
|
||||||
static void fillar(Autoarr2(uint16)* ar){
|
|
||||||
for (uint16 i=0;i<Autoarr2_max_length(ar);i++)
|
|
||||||
Autoarr2_add(ar,i);
|
|
||||||
}
|
|
||||||
static void resetar(Autoarr2(uint16)* ar){
|
|
||||||
for (uint16 i=0;i<Autoarr2_max_length(ar);i++)
|
|
||||||
Autoarr2_set(ar,i,Autoarr2_max_length(ar)-i-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void printallval(Autoarr2(uint16)* ar){
|
|
||||||
printf("\e[90m");
|
|
||||||
for (uint16 i=0;i<Autoarr2_length(ar);i++)
|
|
||||||
printf("%u ",Autoarr2_get(ar,i));
|
|
||||||
printf("\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
void test_autoarr2(){
|
|
||||||
optime("test_autoarr2",1,({
|
|
||||||
printf("\e[96m------------[test_autoarr2]------------\n");
|
|
||||||
Autoarr2(uint16) ar=Autoarr2_create(uint16,10,16);
|
|
||||||
printf("\e[92mautoarr created\n");
|
|
||||||
fillar(&ar);
|
|
||||||
printf("\e[92mautoarr filled up\n");
|
|
||||||
printautoarr(&ar);
|
|
||||||
printallval(&ar);
|
|
||||||
resetar(&ar);
|
|
||||||
printf("\e[92mautoarr values reset\n");
|
|
||||||
printallval(&ar);
|
|
||||||
Autoarr2_clear(((&ar)));
|
|
||||||
printf("\e[92mautoarr cleared\n");
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
@ -20,8 +20,8 @@ void test_dtsod(){
|
|||||||
printf("\e[92mhashtable_get(message)->\n\e[94m");
|
printf("\e[92mhashtable_get(message)->\n\e[94m");
|
||||||
Unitype msg=Hashtable_get(dtsod,"message");
|
Unitype msg=Hashtable_get(dtsod,"message");
|
||||||
printuni(msg);
|
printuni(msg);
|
||||||
Autoarr2(Unitype)* ar=msg.VoidPtr;
|
Autoarr(Unitype)* ar=msg.VoidPtr;
|
||||||
id=Hashtable_get(Autoarr2_get(ar,0).VoidPtr,"message_id");
|
id=Hashtable_get(Autoarr_get(ar,0).VoidPtr,"message_id");
|
||||||
printf("\e[92m\nmessage_id: %lu\n",id.UInt64);
|
printf("\e[92m\nmessage_id: %lu\n",id.UInt64);
|
||||||
Hashtable_free(dtsod);
|
Hashtable_free(dtsod);
|
||||||
}));
|
}));
|
||||||
|
|||||||
@ -25,8 +25,8 @@ void printrowgraph(Hashtable* ht){
|
|||||||
for(uint32 i=0; i<lgs_l; i++)
|
for(uint32 i=0; i<lgs_l; i++)
|
||||||
lgs[i]=0;
|
lgs[i]=0;
|
||||||
for(uint16 h=0;h<Hashtable_height(ht);h++){
|
for(uint16 h=0;h<Hashtable_height(ht);h++){
|
||||||
Autoarr2(KeyValuePair)* ar=ht->rows+h;
|
Autoarr(KeyValuePair)* ar=ht->rows+h;
|
||||||
uint32 l=Autoarr2_length(ar);
|
uint32 l=Autoarr_length(ar);
|
||||||
lgs[l]++;
|
lgs[l]++;
|
||||||
}
|
}
|
||||||
for(uint32 i=0; i<lgs_l; i++)
|
for(uint32 i=0; i<lgs_l; i++)
|
||||||
|
|||||||
@ -5,7 +5,7 @@
|
|||||||
void printuni(Unitype v);
|
void printuni(Unitype v);
|
||||||
|
|
||||||
void test_searchtree();
|
void test_searchtree();
|
||||||
void test_autoarr2();
|
void test_autoarr();
|
||||||
void test_hashtable();
|
void test_hashtable();
|
||||||
void test_string();
|
void test_string();
|
||||||
void test_dtsod();
|
void test_dtsod();
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user