Generic datatype

 /******************************************************************************
                            New-Era Datastructure
                              by Daipayan Bhowal

*******************************************************************************/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct GenType
{
  char size;
  void *payload;
} generic;

typedef generic* general_t;

typedef enum ty
{
    INT,
    CHAR,
    SHORT,
    FLOAT,
    DOUBLE,
    LONG,
    LONG_LONG,
    STRUCT
}type_t;

#define asg(data) assign(&data,sizeof(data))


general_t assign(void *ptr,size_t sz)
{
    general_t t = (general_t) malloc(sizeof(generic));
    t->size = sz;
    t->payload = malloc(sz);
    memcpy(t->payload,ptr,sz);

    return t;
}

void derefprintf(general_t g,type_t type)
{
    
    switch(type)
    {
        case INT:
          printf("%d\n", *(int*)g->payload);
        break;
        
        case CHAR:
          printf("%c\n", *(char*)g->payload);
        break;
        
        case SHORT:
          printf("%hi\n", *(short*)g->payload);
        break;
        
        case FLOAT:
         printf("%f\n", *(float*)g->payload);
        break;
        
        case DOUBLE:
          printf("%f\n", *(double*)g->payload);
        break;
        
        case LONG:
         printf("%l\n", *(long*)g->payload);
        break;
        
        case LONG_LONG:
         printf("%ll\n", *(long long*)g->payload);
        break;
        
    }
    
}

void main()
{
    int d = 5;
    general_t b = asg(d);
    derefprintf(b,INT);
}

Comments