Kiwi Engine
VM for interpreter
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros
KEObject.h
Go to the documentation of this file.
1 
8 #ifndef KEOBJECT_H
9 #define KEOBJECT_H
10 
11 #include <Coconut/Coconut.h>
12 #include "KEForwarders.h"
13 
15 typedef enum {
16  KEFrameObject,
17  KEArrayObject,
18  KEDictionaryObject,
19  KEPathObject,
20  KEFunctionObject,
21  KEBuiltinFuncObject
22 } KEObjectType ;
23 
25 typedef const char * (*KETypeNameOfObjectFuncRef)(void) ;
26 
28 typedef void (*KEDumpObjectFuncRef)(struct CNText* outbuf,
29  struct KEObject * src) ;
30 
34  struct CNObjectMethods superClass ;
39 } ;
40 
42 struct KEObject {
44  struct CNObject superClass ;
47 };
48 
57 struct KEObject *
58 KEAllocateObject(KEObjectType type, size_t objsize, const struct KEObjectMethods * methods, struct CNResource * resource) ;
59 
64 static inline void
65 KERetainObject(struct KEObject * dst)
66 {
67  CNRetainObject(&(dst->superClass)) ;
68 }
69 
74 static inline void
75 KEReleaseObject(struct KEObject * dst)
76 {
77  CNReleaseObject(&(dst->superClass)) ;
78 }
79 
85 static inline struct CNResource *
86 KEResourceOfObject(struct KEObject * src)
87 {
88  return CNResourceOfObject(&(src->superClass)) ;
89 }
90 
96 static inline const struct KEObjectMethods *
97 KEMethodsOfObject(const struct KEObject * src)
98 {
99  return (const struct KEObjectMethods *) CNMethodsOfObject(&(src->superClass)) ;
100 }
101 
107 static inline KEObjectType
108 KETypeOfObject(const struct KEObject * src)
109 {
110  return src->objectType ;
111 }
112 
118 static inline const char *
119 KETypeNameOfObject(const struct KEObject * src)
120 {
121  const struct KEObjectMethods * methods = KEMethodsOfObject(src) ;
122  return (*(methods->typeNameFuncRef))() ;
123 }
124 
130 static inline void
131 KEDumpObject(struct CNText * outbuf, struct KEObject * src)
132 {
133  const struct KEObjectMethods * methods = KEMethodsOfObject(src) ;
134  (*(methods->dumpFuncRef))(outbuf, src) ;
135 }
136 
137 #endif /* KEOBJECT_H */
const char *(* KETypeNameOfObjectFuncRef)(void)
Definition: KEObject.h:25
KEDumpObjectFuncRef dumpFuncRef
Definition: KEObject.h:38
struct CNObjectMethods superClass
Definition: KEObject.h:34
struct KEObject * KEAllocateObject(KEObjectType type, size_t objsize, const struct KEObjectMethods *methods, struct CNResource *resource)
Allocate the sub class of KEObject.
KEObjectType
Definition: KEObject.h:15
Definition: KEObject.h:42
KETypeNameOfObjectFuncRef typeNameFuncRef
Definition: KEObject.h:36
Definition: KEObject.h:32
KEObjectType objectType
Definition: KEObject.h:46
Forward declarations of the data type in KiwiEngine.
void(* KEDumpObjectFuncRef)(struct CNText *outbuf, struct KEObject *src)
Definition: KEObject.h:28
struct CNObject superClass
Definition: KEObject.h:44