diff options
author | Diogo Ferreira <defer@cyngn.com> | 2015-01-14 11:13:52 +0000 |
---|---|---|
committer | Diogo Ferreira <defer@cyngn.com> | 2015-01-14 11:38:57 +0000 |
commit | 841159c272ac08b1cd5bdef5167a8ce11383fbb5 (patch) | |
tree | d7272ef150e58eaa1acc9ab62cf9e6c0aecbc2da /Object.c | |
parent | e1a8535012ab86d3e926bebfb7731dab1eb7320a (diff) | |
download | android_external_htop-cm-13.0.tar.gz android_external_htop-cm-13.0.tar.bz2 android_external_htop-cm-13.0.zip |
htop: Update to 1.0.3HEADreplicant-6.0-0004-transitionreplicant-6.0-0004-rc6replicant-6.0-0004-rc5-transitionreplicant-6.0-0004-rc5replicant-6.0-0004-rc4replicant-6.0-0004-rc3replicant-6.0-0004-rc2replicant-6.0-0004-rc1replicant-6.0-0004replicant-6.0-0003replicant-6.0-0002replicant-6.0-0001staging/cm-12.1stable/cm-13.0-ZNH5Ystable/cm-13.0-ZNH2KBstable/cm-13.0-ZNH2Kstable/cm-13.0-ZNH0Estable/cm-12.1-YOG7Dstable/cm-12.1-YOG4Pstable/cm-12.1-YOG3Cstable/cm-12.0-YNG4Nstable/cm-12.0-YNG3Cstable/cm-12.0-YNG1TAstable/cm-12.0-YNG1Tstable/cm-12.0-YNG1Ilineage-15.0cm-14.1cm-14.0cm-13.0cm-12.1cm-12.0
Change-Id: I416c44803b3a79c2fd752e342ea113875fa533e0
Diffstat (limited to 'Object.c')
-rw-r--r-- | Object.c | 69 |
1 files changed, 37 insertions, 32 deletions
@@ -1,24 +1,14 @@ /* -htop -(C) 2004-2010 Hisham H. Muhammad +htop - Object.c +(C) 2004-2012 Hisham H. Muhammad Released under the GNU GPL, see the COPYING file in the source distribution for its full text. */ #include "Object.h" -#include "RichString.h" -#include "CRT.h" -#include <stdlib.h> -#include <stdio.h> -#include <stdbool.h> - -#include "debug.h" /*{ - -#ifndef DEBUG -#define Object_setClass(obj, class) -#endif +#include "RichString.h" typedef struct Object_ Object; @@ -26,32 +16,47 @@ typedef void(*Object_Display)(Object*, RichString*); typedef int(*Object_Compare)(const void*, const void*); typedef void(*Object_Delete)(Object*); +#define Object_getClass(obj_) ((Object*)(obj_))->klass +#define Object_setClass(obj_, class_) Object_getClass(obj_) = (ObjectClass*) class_ + +#define Object_delete(obj_) Object_getClass(obj_)->delete((Object*)(obj_)) +#define Object_displayFn(obj_) Object_getClass(obj_)->display +#define Object_display(obj_, str_) Object_getClass(obj_)->display((Object*)(obj_), str_) +#define Object_compare(obj_, other_) Object_getClass(obj_)->compare((const void*)(obj_), other_) + +#define Class(class_) ((ObjectClass*)(&(class_ ## _class))) + +#define AllocThis(class_) (class_*) malloc(sizeof(class_)); Object_setClass(this, Class(class_)); + +typedef struct ObjectClass_ { + const void* extends; + const Object_Display display; + const Object_Delete delete; + const Object_Compare compare; +} ObjectClass; + struct Object_ { - #ifdef DEBUG - char* class; - #endif - Object_Display display; - Object_Delete delete; + ObjectClass* klass; }; -}*/ -#ifdef DEBUG -char* OBJECT_CLASS = "Object"; +}*/ -#else -#define OBJECT_CLASS NULL -#endif +ObjectClass Object_class = { + .extends = NULL +}; #ifdef DEBUG -void Object_setClass(void* this, char* class) { - ((Object*)this)->class = class; -} - -static void Object_display(Object* this, RichString* out) { - char objAddress[50]; - sprintf(objAddress, "%s @ %p", this->class, (void*) this); - RichString_write(out, CRT_colors[DEFAULT_COLOR], objAddress); +bool Object_isA(Object* o, const ObjectClass* klass) { + if (!o) + return false; + const ObjectClass* type = o->klass; + while (type) { + if (type == klass) + return true; + type = type->extends; + } + return false; } #endif |