libsheepy

C lib for handling text files, strings and json like data structure with an object oriented system
git clone https://spartatek.se/git/libsheepy.git
Log | Files | Refs | README | LICENSE

libsheepyCClassTemplate.c (3094B)


      1 //
      2 //
      3 //
      4 
      5 #include "../libsheepyObject.h"
      6 #include "libsheepyCClassTemplate.h"
      7 #include "libsheepyCClassTemplateInternal.h"
      8 
      9 #define internal static
     10 
     11 #include <stdlib.h>
     12 #include <string.h>
     13 #include <stdio.h>
     14 
     15 void initiateClassTemplate(classTemplatet *self);
     16 void registerMethodsClassTemplate(classTemplateFunctionst *f);
     17 void initiateAllocateClassTemplate(classTemplatet **self);
     18 void finalizeClassTemplate(void);
     19 classTemplatet* allocClassTemplate(void);
     20 internal void freeClassTemplate(classTemplatet *self);
     21 internal void terminateClassTemplate(classTemplatet **self);
     22 internal char* toStringClassTemplate(classTemplatet *self);
     23 internal classTemplatet* duplicateClassTemplate(classTemplatet *self);
     24 internal void smashClassTemplate(classTemplatet **self);
     25 #if (NFreeStackCheck)
     26 internal void finishClassTemplate(classTemplatet **self);
     27 #else
     28 internal void finishClassTemplate(classTemplatet **self);
     29 #endif
     30 
     31 void initiateClassTemplate(classTemplatet *self) {
     32 
     33   self->type = "classTemplate";
     34   if (!classTemplateF) {
     35     classTemplateF            = malloc(sizeof(classTemplateFunctionst));
     36     registerMethodsClassTemplate(classTemplateF);
     37   }
     38   self->f = classTemplateF;
     39 }
     40 
     41 void registerMethodsClassTemplate(classTemplateFunctionst *f) {
     42 
     43   f->free      = freeClassTemplate;
     44   f->terminate = terminateClassTemplate;
     45   f->toString  = toStringClassTemplate;
     46   f->duplicate = duplicateClassTemplate;
     47   f->smash     = smashClassTemplate;
     48   f->finish    = finishClassTemplate;
     49 }
     50 
     51 void initiateAllocateClassTemplate(classTemplatet **self) {
     52 
     53   if (self) {
     54     (*self) = malloc(sizeof(classTemplatet));
     55     if (*self) {
     56       initiateClassTemplate(*self);
     57       if (!(*self)->f) {
     58         finishClassTemplate(self);
     59 }
     60   }
     61     }
     62       }
     63 
     64 void finalizeClassTemplate(void) {
     65 
     66   if (classTemplateF) {
     67     free(classTemplateF);
     68     classTemplateF = NULL;
     69     // bug in cgc
     70 }
     71   }
     72 
     73 classTemplatet* allocClassTemplate(void) {
     74   classTemplatet *r = NULL;
     75 
     76   initiateAllocateClassTemplate(&r);
     77   return(r);
     78 }
     79 
     80 
     81 internal void freeClassTemplate(classTemplatet *self) {
     82 
     83   // TODO
     84   return;
     85 }
     86 
     87 internal void terminateClassTemplate(classTemplatet **self) {
     88 
     89   freeClassTemplate(*self);
     90   free(*self);
     91   *self = NULL;
     92 }
     93 
     94 
     95 internal char* toStringClassTemplate(classTemplatet *self) {
     96 
     97   return(strdup("TODO - class template"));
     98 }
     99 
    100 internal classTemplatet* duplicateClassTemplate(classTemplatet *self) {
    101 
    102   createAllocateClassTemplate(dup);
    103   // TODO COPY data
    104   return(dup);
    105 }
    106 
    107 internal void smashClassTemplate(classTemplatet **self) {
    108 
    109   finishClassTemplate(self);
    110 }
    111 
    112 #if (NFreeStackCheck)
    113 internal void finishClassTemplate(classTemplatet **self) {
    114 
    115   #warning "NFreeStackCheck is available on x64/gcc/linux and BSD."
    116   register u64 rsp asm("rsp");
    117   if ((u64)*self > rsp) {
    118     logW("Probably trying to free a classTemplate on stack: "BLD PRIx64 RST" sp: "BLD PRIx64 RST, *self, rsp);
    119     logBtrace;
    120   }
    121   else {
    122     free(*self);
    123     *self = NULL;
    124 }
    125   }
    126 
    127 #else
    128 // #if NFreeStackCheck
    129 internal void finishClassTemplate(classTemplatet **self) {
    130 
    131   free(*self);
    132   *self = NULL;
    133 }
    134 
    135 #endif
    136 // #if NFreeStackCheck