diff options
author | Hisham Muhammad <hisham@gobolinux.org> | 2015-03-31 23:23:10 -0300 |
---|---|---|
committer | Hisham Muhammad <hisham@gobolinux.org> | 2015-03-31 23:23:10 -0300 |
commit | 4c24a9b462e2e55e9d2f6d24694d5408c886c556 (patch) | |
tree | d5e7af57c59190bf5d35718d4c31c96546f2adf6 /Process.c | |
parent | 5320bab202aa5dad893a0da5848be1c40728d9e1 (diff) |
Fixes to subclassing Process.
Diffstat (limited to 'Process.c')
-rw-r--r-- | Process.c | 28 |
1 files changed, 20 insertions, 8 deletions
@@ -192,6 +192,15 @@ typedef struct Process_ { } Process; +typedef void (*Process_WriteField)(Process*, RichString*, ProcessField); + +typedef struct ProcessClass_ { + const ObjectClass super; + const Process_WriteField writeField; +} ProcessClass; + +#define As_Process(this_) ((ProcessClass*)((this_)->super.klass)) + }*/ const char *Process_fieldNames[] = { @@ -470,7 +479,7 @@ static inline void Process_outputRate(RichString* str, int attr, char* buffer, i RichString_append(str, attr, buffer); } -static void Process_writeField(Process* this, RichString* str, ProcessField field) { +void Process_writeField(Process* this, RichString* str, ProcessField field) { char buffer[256]; buffer[255] = '\0'; int attr = CRT_colors[DEFAULT_COLOR]; int baseattr = CRT_colors[PROCESS_BASENAME]; @@ -630,12 +639,12 @@ static void Process_writeField(Process* this, RichString* str, ProcessField fiel RichString_append(str, attr, buffer); } -static void Process_display(Object* cast, RichString* out) { +void Process_display(Object* cast, RichString* out) { Process* this = (Process*) cast; ProcessField* fields = this->pl->fields; RichString_prune(out); for (int i = 0; fields[i]; i++) - Process_writeField(this, out, fields[i]); + As_Process(this)->writeField(this, out, fields[i]); if (this->pl->shadowOtherUsers && (int)this->st_uid != Process_getuid) RichString_setAttr(out, CRT_colors[PROCESS_SHADOW]); if (this->tag == true) @@ -651,11 +660,14 @@ void Process_done(Process* this) { #endif } -ObjectClass Process_class = { - .extends = Class(Object), - .display = Process_display, - .delete = Process_delete, - .compare = Process_compare +ProcessClass Process_class = { + .super = { + .extends = Class(Object), + .display = Process_display, + .delete = Process_delete, + .compare = Process_compare + }, + .writeField = Process_writeField, }; void Process_init(Process* this, struct ProcessList_* pl) { |