some Array improvements

This commit is contained in:
timerix 2023-01-20 19:57:37 +06:00
parent 3a20caf380
commit 29a5b22286
7 changed files with 42 additions and 14 deletions

View File

@ -14,3 +14,13 @@ Array_define(int64)
Array_define(uint64) Array_define(uint64)
Array_define(Unitype) Array_define(Unitype)
void Array_Unitype_free_(Array_Unitype* array, bool freeMembers){
if(freeMembers) for (int32 i; i<array->length; i++)
Unitype_free(array->values[i]);
if(array->allocatedOnHeap)
free(array->values);
}
void __Array_Unitype_free_(void* ar)
{ Array_Unitype_free_(ar, true); }

View File

@ -22,6 +22,10 @@ Array_declare(uint64)
Array_declare(Unitype) Array_declare(Unitype)
/// use this function instead of auto generated
void Array_Unitype_free_(Array_Unitype* array, bool freeMembers);
void __Array_Unitype_free_(void* ar);
#if __cplusplus #if __cplusplus
} }
#endif #endif

View File

@ -31,7 +31,7 @@ static inline Array_##type Array_##type##_fromBuffer(type* buffer, uint32 buffer
};\ };\
}\ }\
\ \
static inline void Array_##type##_freeValues(Array_##type* array){\ static inline void Array_##type##_free(Array_##type* array){\
if(array->allocatedOnHeap)\ if(array->allocatedOnHeap)\
free(array->values);\ free(array->values);\
} }

View File

@ -1,6 +1,7 @@
#include "string.h" #include "string.h"
ktid_define(string); ktid_define(string);
Array_define(string);
// copies str content to new char pointer value (adding '\0' at the end) // copies str content to new char pointer value (adding '\0' at the end)
char* string_extract(string str){ char* string_extract(string str){

View File

@ -5,6 +5,7 @@ extern "C" {
#endif #endif
#include "../base/base.h" #include "../base/base.h"
#include "../Array/Array.h"
// my fixed length string struct // my fixed length string struct
// doesn't store '\0' at the end // doesn't store '\0' at the end
@ -13,6 +14,7 @@ typedef struct string{
uint64 length; // amount of chars in ptr value uint64 length; // amount of chars in ptr value
} string; } string;
ktid_declare(string); ktid_declare(string);
Array_declare(string);
static const string stringNull={NULL,0}; static const string stringNull={NULL,0};

View File

@ -1,3 +1,9 @@
#pragma once
#if __cplusplus
extern "C" {
#endif
#include "std.h" #include "std.h"
PACK_ENUM(Endian, PACK_ENUM(Endian,
@ -7,3 +13,7 @@ PACK_ENUM(Endian,
); );
Endian getEndian(); Endian getEndian();
#if __cplusplus
}
#endif

View File

@ -29,18 +29,18 @@ void ktDescriptors_initKerepTypes(){
// base type arrays // base type arrays
kt_register(Array_char, (freeMembers_t)Array_char_freeValues, NULL); kt_register(Array_char, (freeMembers_t)Array_char_free, NULL);
kt_register(Array_bool, (freeMembers_t)Array_bool_freeValues, NULL); kt_register(Array_bool, (freeMembers_t)Array_bool_free, NULL);
kt_register(Array_float32, (freeMembers_t)Array_float32_freeValues, NULL); kt_register(Array_float32, (freeMembers_t)Array_float32_free, NULL);
kt_register(Array_float64, (freeMembers_t)Array_float64_freeValues, NULL); kt_register(Array_float64, (freeMembers_t)Array_float64_free, NULL);
kt_register(Array_int8, (freeMembers_t)Array_int8_freeValues, NULL); kt_register(Array_int8, (freeMembers_t)Array_int8_free, NULL);
kt_register(Array_uint8, (freeMembers_t)Array_uint8_freeValues, NULL); kt_register(Array_uint8, (freeMembers_t)Array_uint8_free, NULL);
kt_register(Array_int16, (freeMembers_t)Array_int16_freeValues, NULL); kt_register(Array_int16, (freeMembers_t)Array_int16_free, NULL);
kt_register(Array_uint16, (freeMembers_t)Array_uint16_freeValues, NULL); kt_register(Array_uint16, (freeMembers_t)Array_uint16_free, NULL);
kt_register(Array_int32, (freeMembers_t)Array_int32_freeValues, NULL); kt_register(Array_int32, (freeMembers_t)Array_int32_free, NULL);
kt_register(Array_uint32, (freeMembers_t)Array_uint32_freeValues, NULL); kt_register(Array_uint32, (freeMembers_t)Array_uint32_free, NULL);
kt_register(Array_int64, (freeMembers_t)Array_int64_freeValues, NULL); kt_register(Array_int64, (freeMembers_t)Array_int64_free, NULL);
kt_register(Array_uint64, (freeMembers_t)Array_uint64_freeValues, NULL); kt_register(Array_uint64, (freeMembers_t)Array_uint64_free, NULL);
// base type autoarrs // base type autoarrs
kt_register(Autoarr_char, ____Autoarr_free_char, NULL); kt_register(Autoarr_char, ____Autoarr_free_char, NULL);
@ -58,7 +58,7 @@ void ktDescriptors_initKerepTypes(){
// Unitype // Unitype
kt_register(Unitype, __UnitypePtr_free, NULL); kt_register(Unitype, __UnitypePtr_free, NULL);
kt_register(Array_Unitype, (freeMembers_t)Array_Unitype_freeValues, NULL); kt_register(Array_Unitype, __Array_Unitype_free_, NULL);
kt_register(Autoarr_Unitype, ____Autoarr_free_Unitype_, NULL); kt_register(Autoarr_Unitype, ____Autoarr_free_Unitype_, NULL);
// replacing autogenerated freear() function to custom // replacing autogenerated freear() function to custom
Autoarr_Unitype* _uar=Autoarr_create(Unitype, 1, 1); Autoarr_Unitype* _uar=Autoarr_create(Unitype, 1, 1);
@ -81,6 +81,7 @@ void ktDescriptors_initKerepTypes(){
// string // string
kt_register(string, NULL, NULL); kt_register(string, NULL, NULL);
kt_register(Array_string, (freeMembers_t)Array_string_free, NULL);
kt_register(Autoarr_string, ____Autoarr_free_string, NULL); kt_register(Autoarr_string, ____Autoarr_free_string, NULL);
// StringBuilder // StringBuilder
kt_register(StringBuilder, __StringBuilder_free, NULL); kt_register(StringBuilder, __StringBuilder_free, NULL);