23 #include "../libsheepyObject.h" 27 #define internal static 69 self->type =
"smallContainer";
70 if (!smallContainerF) {
77 self->f = smallContainerF;;
80 self->dataFree = NULL;
81 self->dataToString = NULL;
82 self->dataDuplicate = NULL;
96 f->dataToString = NULL;
99 f->dataDuplicate = NULL;
110 #if (recycleContainers) 127 #if (recycleContainers) 135 if (smallContainerF) {
136 free(smallContainerF);
137 smallContainerF = NULL;
177 if (self->data->free) {
178 self->data->free(self->data->data);
180 else if (self->dataFree) {
181 self->dataFree(self->data->data);
183 else if (self->f->dataFree) {
184 self->f->dataFree(self->data->data);
198 #if (NFreeStackCheck) 201 register u64 rsp
asm(
"rsp");
202 if ((
u64)*
self > rsp) {
203 logW(
"Probably trying to free a smallContainer on stack: "BLD PRIx64
RST" sp: "BLD PRIx64
RST, *
self, rsp);
207 #if (recycleContainers) 221 #if (recycleContainers) 244 if (self->dataToString) {
245 return(self->dataToString(self->data->data));
247 if (self->f->dataToString) {
248 return(self->f->dataToString(self->data->data));
250 return(strdup(
"<data smallContainer>"));
261 if (self->dataDuplicate) {
262 dup->data->data =
self->dataDuplicate(self->data->data);
264 else if (self->f->dataDuplicate) {
265 dup->data->data =
self->f->dataDuplicate(self->data->data);
267 dup->data->free =
self->data->free;
269 dup->dataFree =
self->dataFree;
270 dup->dataToString =
self->dataToString;
271 dup->dataDuplicate =
self->dataDuplicate;
277 self->
f->dataFree =
free;
295 self->
f->dataToString = toString;
307 self->
f->dataDuplicate = duplicate;
330 return(self->data->data);
337 if (self->f->dataFree) {
343 self->data->data =
data;
350 return(self->f->duplicate(
self));
357 return(self->f->get(
self));
362 return(self->f->set(
self, data));
void * getSmallContainerG(smallContainert *self, void *retType UNUSED, int64_t index UNUSED)
smallContainert * duplicateSmallContainerG(smallContainert *self)
internal smallContainert * setClassDataToStringSmallContainer(smallContainert *self, dataToStringSmallContainerFt toString)
internal smallContainert * setSmallContainer(smallContainert *self, void *data)
internal smallContainert * setClassDataDuplicateSmallContainer(smallContainert *self, dataDuplicateSmallContainerFt duplicate)
smallContainert * setSmallContainerG(smallContainert *self, void *data)
finishSmallContainerFt finish
void(* dataFreeSmallContainerFt)(void *data)
prototype for user provided free function
#define RST
reset for color function
char *(* dataToStringSmallContainerFt)(void *data)
prototype for user provided toString function
smallContainert * allocSmallContainer(void *data)
toStringSmallContainerFt toString
internal smallContainert * duplicateSmallContainer(smallContainert *self)
#define helpTextSmallContainer
help text for this class It is public declaration so that child classes can add their help text easil...
internal smallContainert * setClassDataFreeSmallContainer(smallContainert *self, dataFreeSmallContainerFt free)
internal void * getSmallContainer(smallContainert *self)
#define isError(assigned, left)
is Assigment Error catch error when assigned is false, 0 or NULL after being assigned with left ...
void(* freeSContainerFt)(void *data)
small container holding a pointer to a buffer
internal smallContainert * setObjectDataToStringSmallContainer(smallContainert *self, dataToStringSmallContainerFt toString)
dataFreeSmallContainerFt dataFree
internal void terminateSmallContainer(smallContainert **self)
void cleanUpSmallContainerFinishG(smallContainert **val)
internal char * toStringSmallContainer(smallContainert *self)
internal void freeSmallContainer(smallContainert *self)
#define terminateO(obj)
free buffers and obj itself
void cleanUpSmallContainerTerminateG(smallContainert **val)
sContainert * allocSContainer(void *data)
allocate a small container The container holds a pointer to a user buffer
void *(* dataDuplicateSmallContainerFt)(void *data)
prototype for user provided duplicate function
smashSmallContainerFt smash
void finalizeRecycleSmallContainer(void *arg UNUSED)
sContainert * data
pointer to data in smallContainer
void initiateSmallContainer(smallContainert *self)
dataToStringSmallContainerFt dataToString
smallContainerFunctionst * f
void finalizeSmallContainer(void)
void freeSmallContainerG(smallContainert *self)
#define BLD
bold for color function
internal void smashSmallContainer(smallContainert **self)
void registerMethodsSmallContainer(smallContainerFunctionst *f)
internal const char * helpSmallContainer(smallContainert UNUSED *self)
duplicateSmallContainerFt duplicate
void initiateAllocateSmallContainer(smallContainert **self)
createAllocateSmallContainer(jcontainer)
void cleanUpSmallContainerFreeLocalG(smallContainert *val)
internal void finishSmallContainer(smallContainert **self)
void cleanUpSmallContainerFreeG(smallContainert **val)
#define freeO(obj)
free buffers in obj
dataDuplicateSmallContainerFt dataDuplicate
internal smallContainert * setObjectDataFreeSmallContainer(smallContainert *self, dataFreeSmallContainerFt free)
internal smallContainert * setObjectDataDuplicateSmallContainer(smallContainert *self, dataDuplicateSmallContainerFt duplicate)
terminateSmallContainerFt terminate
freeSmallContainerFt free
#define finishO(obj)
free container only