/* 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 #include #include #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; }