From 52e25213825024b8bb446eb26b03bedc9d5c2103 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 28 Apr 2024 11:00:29 +0200 Subject: Adding upstream version 3.2.2. Signed-off-by: Daniel Baumann --- Object.h | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 Object.h (limited to 'Object.h') diff --git a/Object.h b/Object.h new file mode 100644 index 0000000..d5b3bb3 --- /dev/null +++ b/Object.h @@ -0,0 +1,59 @@ +#ifndef HEADER_Object +#define HEADER_Object +/* +htop - Object.h +(C) 2004-2012 Hisham H. Muhammad +(C) 2020 Red Hat, Inc. All Rights Reserved. +Released under the GNU GPLv2+, see the COPYING file +in the source distribution for its full text. +*/ + +#include "config.h" // IWYU pragma: keep + +#include +#include + +#include "RichString.h" +#include "XUtils.h" // IWYU pragma: keep + + +struct Object_; +typedef struct Object_ Object; + +typedef void(*Object_Display)(const Object*, RichString*); +typedef int(*Object_Compare)(const void*, const void*); +typedef void(*Object_Delete)(Object*); + +#define Object_getClass(obj_) ((const Object*)(obj_))->klass +#define Object_setClass(obj_, class_) (((Object*)(obj_))->klass = (const ObjectClass*) (class_)) + +#define Object_delete(obj_) (assert(Object_getClass(obj_)->delete), Object_getClass(obj_)->delete((Object*)(obj_))) +#define Object_displayFn(obj_) Object_getClass(obj_)->display +#define Object_display(obj_, str_) (assert(Object_getClass(obj_)->display), Object_getClass(obj_)->display((const Object*)(obj_), str_)) +#define Object_compare(obj_, other_) (assert(Object_getClass(obj_)->compare), Object_getClass(obj_)->compare((const void*)(obj_), other_)) + +#define Class(class_) ((const ObjectClass*)(&(class_ ## _class))) + +#define AllocThis(class_) (class_*) xMalloc(sizeof(class_)); Object_setClass(this, Class(class_)) + +typedef struct ObjectClass_ { + const void* const extends; + const Object_Display display; + const Object_Delete delete; + const Object_Compare compare; +} ObjectClass; + +struct Object_ { + const ObjectClass* klass; +}; + +typedef union { + int i; + void* v; +} Arg; + +extern const ObjectClass Object_class; + +bool Object_isA(const Object* o, const ObjectClass* klass); + +#endif -- cgit v1.2.3