fixed Array (again)

This commit is contained in:
timerix 2022-10-28 14:30:20 +06:00
parent 5e907327d6
commit 67680b8157
4 changed files with 57 additions and 28 deletions

27
src/Array/Array.c Normal file
View File

@ -0,0 +1,27 @@
#include "Array.h"
ktId_define(ArrayChar);
ktId_define(ArrayBool);
ktId_define(ArrayFloat32);
ktId_define(ArrayFloat64);
ktId_define(ArrayInt8);
ktId_define(ArrayUInt8);
ktId_define(ArrayInt16);
ktId_define(ArrayUInt16);
ktId_define(ArrayInt32);
ktId_define(ArrayUInt32);
ktId_define(ArrayInt64);
ktId_define(ArrayUInt64);
ktId_define(ArrayCharPtr);
ktId_define(ArrayBoolPtr);
ktId_define(ArrayFloat32Ptr);
ktId_define(ArrayFloat64Ptr);
ktId_define(ArrayInt8Ptr);
ktId_define(ArrayUInt8Ptr);
ktId_define(ArrayInt16Ptr);
ktId_define(ArrayUInt16Ptr);
ktId_define(ArrayInt32Ptr);
ktId_define(ArrayUInt32Ptr);
ktId_define(ArrayInt64Ptr);
ktId_define(ArrayUInt64Ptr);

View File

@ -16,13 +16,13 @@ typedef struct Array_##type{\
\
static inline Array_##type Array_##type##_allocValues(uint32 length){\
return (Array_##type) {\
.values=(type##*)malloc(sizeof(type)*length),\
.values=(type*)malloc(sizeof(type)*length),\
.length=length,\
.allocatedOnHeap=true\
};\
}\
\
static inline Array_##type Array_##type##_fromBuffer(type##* buffer, uint32 bufferLength, bool allocatedOnHeap){\
static inline Array_##type Array_##type##_fromBuffer(type* buffer, uint32 bufferLength, bool allocatedOnHeap){\
return (Array_##type) {\
.values=buffer,\
.length=bufferLength,\

View File

@ -42,31 +42,31 @@ void ktDescriptors_initKerepTypes(){
// base type arrays
kt_register(Array_char, ktId_ArrayChar, Array_char_freeValues, NULL);
kt_register(Array_bool, ktId_ArrayBool, Array_bool_freeValues, NULL);
kt_register(Array_float32, ktId_ArrayFloat32, Array_float32_freeValues, NULL);
kt_register(Array_float64, ktId_ArrayFloat64, Array_float64_freeValues, NULL);
kt_register(Array_int8, ktId_ArrayInt8, Array_int8_freeValues, NULL);
kt_register(Array_uint8, ktId_ArrayUInt8, Array_uint8_freeValues, NULL);
kt_register(Array_int16, ktId_ArrayInt16, Array_int16_freeValues, NULL);
kt_register(Array_uint16, ktId_ArrayUInt16, Array_uint16_freeValues, NULL);
kt_register(Array_int32, ktId_ArrayInt32, Array_int32_freeValues, NULL);
kt_register(Array_uint32, ktId_ArrayUInt32, Array_uint32_freeValues, NULL);
kt_register(Array_int64, ktId_ArrayInt64, Array_int64_freeValues, NULL);
kt_register(Array_uint64, ktId_ArrayUInt64, Array_uint64_freeValues, NULL);
kt_register(Array_char, ktId_ArrayChar, (freeMembers_t)Array_char_freeValues, NULL);
kt_register(Array_bool, ktId_ArrayBool, (freeMembers_t)Array_bool_freeValues, NULL);
kt_register(Array_float32, ktId_ArrayFloat32, (freeMembers_t)Array_float32_freeValues, NULL);
kt_register(Array_float64, ktId_ArrayFloat64, (freeMembers_t)Array_float64_freeValues, NULL);
kt_register(Array_int8, ktId_ArrayInt8, (freeMembers_t)Array_int8_freeValues, NULL);
kt_register(Array_uint8, ktId_ArrayUInt8, (freeMembers_t)Array_uint8_freeValues, NULL);
kt_register(Array_int16, ktId_ArrayInt16, (freeMembers_t)Array_int16_freeValues, NULL);
kt_register(Array_uint16, ktId_ArrayUInt16, (freeMembers_t)Array_uint16_freeValues, NULL);
kt_register(Array_int32, ktId_ArrayInt32, (freeMembers_t)Array_int32_freeValues, NULL);
kt_register(Array_uint32, ktId_ArrayUInt32, (freeMembers_t)Array_uint32_freeValues, NULL);
kt_register(Array_int64, ktId_ArrayInt64, (freeMembers_t)Array_int64_freeValues, NULL);
kt_register(Array_uint64, ktId_ArrayUInt64, (freeMembers_t)Array_uint64_freeValues, NULL);
// base type array pointers
kt_register(Array_char*, ktId_ArrayCharPtr, Array_char_freeValues, NULL);
kt_register(Array_bool*, ktId_ArrayBoolPtr, Array_bool_freeValues, NULL);
kt_register(Array_float32*, ktId_ArrayFloat32Ptr, Array_float32_freeValues, NULL);
kt_register(Array_float64*, ktId_ArrayFloat64Ptr, Array_float64_freeValues, NULL);
kt_register(Array_int8*, ktId_ArrayInt8Ptr, Array_int8_freeValues, NULL);
kt_register(Array_uint8*, ktId_ArrayUInt8Ptr, Array_uint8_freeValues, NULL);
kt_register(Array_int16*, ktId_ArrayInt16Ptr, Array_int16_freeValues, NULL);
kt_register(Array_uint16*, ktId_ArrayUInt16Ptr, Array_uint16_freeValues, NULL);
kt_register(Array_int32*, ktId_ArrayInt32Ptr, Array_int32_freeValues, NULL);
kt_register(Array_uint32*, ktId_ArrayUInt32Ptr, Array_uint32_freeValues, NULL);
kt_register(Array_int64*, ktId_ArrayInt64Ptr, Array_int64_freeValues, NULL);
kt_register(Array_uint64*, ktId_ArrayUInt64Ptr, Array_uint64_freeValues, NULL);
kt_register(Array_char*, ktId_ArrayCharPtr, (freeMembers_t)Array_char_freeValues, NULL);
kt_register(Array_bool*, ktId_ArrayBoolPtr, (freeMembers_t)Array_bool_freeValues, NULL);
kt_register(Array_float32*, ktId_ArrayFloat32Ptr, (freeMembers_t)Array_float32_freeValues, NULL);
kt_register(Array_float64*, ktId_ArrayFloat64Ptr, (freeMembers_t)Array_float64_freeValues, NULL);
kt_register(Array_int8*, ktId_ArrayInt8Ptr, (freeMembers_t)Array_int8_freeValues, NULL);
kt_register(Array_uint8*, ktId_ArrayUInt8Ptr, (freeMembers_t)Array_uint8_freeValues, NULL);
kt_register(Array_int16*, ktId_ArrayInt16Ptr, (freeMembers_t)Array_int16_freeValues, NULL);
kt_register(Array_uint16*, ktId_ArrayUInt16Ptr, (freeMembers_t)Array_uint16_freeValues, NULL);
kt_register(Array_int32*, ktId_ArrayInt32Ptr, (freeMembers_t)Array_int32_freeValues, NULL);
kt_register(Array_uint32*, ktId_ArrayUInt32Ptr, (freeMembers_t)Array_uint32_freeValues, NULL);
kt_register(Array_int64*, ktId_ArrayInt64Ptr, (freeMembers_t)Array_int64_freeValues, NULL);
kt_register(Array_uint64*, ktId_ArrayUInt64Ptr, (freeMembers_t)Array_uint64_freeValues, NULL);
// base type autoarrs
kt_register(Autoarr_char, ktId_AutoarrChar, ____Autoarr_free_char, NULL);

View File

@ -7,12 +7,14 @@ extern "C" {
#include "../std.h"
#include "ktId.h"
typedef void (*freeMembers_t)(void*);
typedef char* (*toString_t)(void* obj, uint32 fmt);
typedef struct ktDescriptor{
char* name;
ktId id;
uint16 size;
void (*freeMembers)(void*); // NULL or function which frees all struct members
char* (*toString)(void* obj, uint32 fmt); // NULL or function which generates string representaion of object
freeMembers_t freeMembers; // NULL or function which frees all struct members
toString_t toString; // NULL or function which generates string representaion of object
} ktDescriptor;
#if __cplusplus