some Array improvements
This commit is contained in:
parent
3a20caf380
commit
29a5b22286
@ -14,3 +14,13 @@ Array_define(int64)
|
||||
Array_define(uint64)
|
||||
|
||||
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); }
|
||||
|
||||
@ -22,6 +22,10 @@ Array_declare(uint64)
|
||||
|
||||
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
|
||||
}
|
||||
#endif
|
||||
@ -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)\
|
||||
free(array->values);\
|
||||
}
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
#include "string.h"
|
||||
|
||||
ktid_define(string);
|
||||
Array_define(string);
|
||||
|
||||
// copies str content to new char pointer value (adding '\0' at the end)
|
||||
char* string_extract(string str){
|
||||
|
||||
@ -5,6 +5,7 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
#include "../base/base.h"
|
||||
#include "../Array/Array.h"
|
||||
|
||||
// my fixed length string struct
|
||||
// doesn't store '\0' at the end
|
||||
@ -13,6 +14,7 @@ typedef struct string{
|
||||
uint64 length; // amount of chars in ptr value
|
||||
} string;
|
||||
ktid_declare(string);
|
||||
Array_declare(string);
|
||||
|
||||
static const string stringNull={NULL,0};
|
||||
|
||||
|
||||
@ -1,3 +1,9 @@
|
||||
#pragma once
|
||||
|
||||
#if __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include "std.h"
|
||||
|
||||
PACK_ENUM(Endian,
|
||||
@ -7,3 +13,7 @@ PACK_ENUM(Endian,
|
||||
);
|
||||
|
||||
Endian getEndian();
|
||||
|
||||
#if __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
@ -29,18 +29,18 @@ void ktDescriptors_initKerepTypes(){
|
||||
|
||||
|
||||
// base type arrays
|
||||
kt_register(Array_char, (freeMembers_t)Array_char_freeValues, NULL);
|
||||
kt_register(Array_bool, (freeMembers_t)Array_bool_freeValues, NULL);
|
||||
kt_register(Array_float32, (freeMembers_t)Array_float32_freeValues, NULL);
|
||||
kt_register(Array_float64, (freeMembers_t)Array_float64_freeValues, NULL);
|
||||
kt_register(Array_int8, (freeMembers_t)Array_int8_freeValues, NULL);
|
||||
kt_register(Array_uint8, (freeMembers_t)Array_uint8_freeValues, NULL);
|
||||
kt_register(Array_int16, (freeMembers_t)Array_int16_freeValues, NULL);
|
||||
kt_register(Array_uint16, (freeMembers_t)Array_uint16_freeValues, NULL);
|
||||
kt_register(Array_int32, (freeMembers_t)Array_int32_freeValues, NULL);
|
||||
kt_register(Array_uint32, (freeMembers_t)Array_uint32_freeValues, NULL);
|
||||
kt_register(Array_int64, (freeMembers_t)Array_int64_freeValues, NULL);
|
||||
kt_register(Array_uint64, (freeMembers_t)Array_uint64_freeValues, NULL);
|
||||
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);
|
||||
|
||||
// base type autoarrs
|
||||
kt_register(Autoarr_char, ____Autoarr_free_char, NULL);
|
||||
@ -58,7 +58,7 @@ void ktDescriptors_initKerepTypes(){
|
||||
|
||||
// Unitype
|
||||
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);
|
||||
// replacing autogenerated freear() function to custom
|
||||
Autoarr_Unitype* _uar=Autoarr_create(Unitype, 1, 1);
|
||||
@ -81,6 +81,7 @@ void ktDescriptors_initKerepTypes(){
|
||||
|
||||
// string
|
||||
kt_register(string, NULL, NULL);
|
||||
kt_register(Array_string, (freeMembers_t)Array_string_free, NULL);
|
||||
kt_register(Autoarr_string, ____Autoarr_free_string, NULL);
|
||||
// StringBuilder
|
||||
kt_register(StringBuilder, __StringBuilder_free, NULL);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user