Skip to content

Instantly share code, notes, and snippets.

@johnfredcee
Created July 13, 2014 13:51
Show Gist options
  • Select an option

  • Save johnfredcee/db72b9d89a87e62f4d2b to your computer and use it in GitHub Desktop.

Select an option

Save johnfredcee/db72b9d89a87e62f4d2b to your computer and use it in GitHub Desktop.
Another c based object system sketch - decouple code from data
enum eClass
{
MODEL,
RENDERABLE,
ATTACHMENT,
LOCATION
};
struct Object
{
enum eClass;
int32_t id;
};
Object* new(eClass class);
struct Model
{
Object* object;
Vertices **verts;
//..
};
struct ModelData
{
char pathmane[256];
};
void model_init(Model* object, ModelData* params)
{
}
struct Renderable
{
OBject object;
Model* model;
}
void rennderable_init(Renderable* renderable, RenderableData* params)
{
}
typedef void (*initfnptr)(void *, void *);
void init(eclass class, Object* object, void* params);
{
static initfnptr init_fn_table[] =
{ (initfnptr) model_init,
(initfnptr) renderable_init,
..
};
switch (object->eClass)
{
case MODEL:
((void (*)(Model*, ModelData*)) init_fn_table[MODEL])((Model*) object, (ModelData*) params);
break;
case RENDERABLE:
((void (*)(Renderable*, RenderableData*)) init_fn_table[MODEL])((Renderable*) object, (RenderableData*) params);
break;
default:
// arrgh;
break;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment