Created
July 13, 2014 13:51
-
-
Save johnfredcee/db72b9d89a87e62f4d2b to your computer and use it in GitHub Desktop.
Another c based object system sketch - decouple code from data
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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