You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
1.6 KiB
68 lines
1.6 KiB
/* |
|
htop - DynamicScreen.c |
|
(C) 2022 Sohaib Mohammed |
|
(C) 2022-2023 htop dev team |
|
Released under the GNU GPLv2+, see the COPYING file |
|
in the source distribution for its full text. |
|
*/ |
|
|
|
#include "config.h" // IWYU pragma: keep |
|
|
|
#include "DynamicScreen.h" |
|
|
|
#include <stdbool.h> |
|
#include <stddef.h> |
|
#include <stdlib.h> |
|
|
|
#include "Hashtable.h" |
|
#include "Platform.h" |
|
#include "XUtils.h" |
|
|
|
|
|
Hashtable* DynamicScreens_new(void) { |
|
return Platform_dynamicScreens(); |
|
} |
|
|
|
void DynamicScreens_delete(Hashtable* screens) { |
|
if (screens) { |
|
Platform_dynamicScreensDone(screens); |
|
Hashtable_delete(screens); |
|
} |
|
} |
|
|
|
void DynamicScreen_done(DynamicScreen* this) { |
|
free(this->caption); |
|
free(this->fields); |
|
free(this->heading); |
|
free(this->sortKey); |
|
free(this->columnKeys); |
|
} |
|
|
|
typedef struct { |
|
ht_key_t key; |
|
const char* name; |
|
bool found; |
|
} DynamicIterator; |
|
|
|
static void DynamicScreen_compare(ht_key_t key, void* value, void* data) { |
|
const DynamicScreen* screen = (const DynamicScreen*)value; |
|
DynamicIterator* iter = (DynamicIterator*)data; |
|
if (String_eq(iter->name, screen->name)) { |
|
iter->found = true; |
|
iter->key = key; |
|
} |
|
} |
|
|
|
bool DynamicScreen_search(Hashtable* screens, const char* name, ht_key_t* key) { |
|
DynamicIterator iter = { .key = 0, .name = name, .found = false }; |
|
if (screens) |
|
Hashtable_foreach(screens, DynamicScreen_compare, &iter); |
|
if (key) |
|
*key = iter.key; |
|
return iter.found; |
|
} |
|
|
|
const char* DynamicScreen_lookup(Hashtable* screens, ht_key_t key) { |
|
const DynamicScreen* screen = Hashtable_get(screens, key); |
|
return screen ? screen->name : NULL; |
|
}
|
|
|