Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*-
- * Copyright (c) 2012 valsorym <[email protected]>.
- * All rights reserved.
- *
- * Discussion on the forums.freebsd.org.
- * url: http://forums.freebsd.org/showthread.php?p=177208
- */
- /*
- * Class prototype, and new/delete emulation in OOD ANSI C.
- */
- #ifndef OBJECTMODE_H
- #define OBJECTMODE_H
- #include <stdio.h>
- #include <stdlib.h>
- #include <stdarg.h>
- /* NEW TYPES */
- /* ************************************************************************* */
- /*
- * Structure has size our future object, and it Constructor/Destructor
- * memory point.
- */
- typedef struct {
- size_t size;
- void *(*create)(void *, va_list *);
- void *(*destroy)(void *);
- } w_class;
- /* INTERFACE */
- /* ************************************************************************* */
- /* IMPLEMENTATION */
- /* ************************************************************************* */
- /*
- * Function find constructor point our class, and initialize memory section for
- * it. Function has va_list arguments for initialization different objects.
- */
- void
- *new(w_class *class, ...)
- {
- void *p = NULL;
- if (class && class->create) {
- /* Call constructor our future object. */
- va_list app;
- va_start(app, class);
- p = class->create(class, &app);
- va_end(app);
- }
- return p;
- }
- /*
- * Free memory sector, when lived our object.
- */
- void
- delete(void *obj)
- {
- w_class **p = obj;
- if (obj && p && (*p)->destroy)
- obj = (*p)->destroy(obj);
- free(obj);
- }
- #endif
- /* The End. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement