2023-02-12 15:51:39 +01:00
|
|
|
// SPDX-License-Identifier: GPL-2.0
|
|
|
|
#include "eventname.h"
|
|
|
|
#include "subsurface-string.h"
|
|
|
|
|
|
|
|
#include <string>
|
|
|
|
#include <vector>
|
|
|
|
#include <algorithm>
|
|
|
|
|
|
|
|
struct event_name {
|
|
|
|
std::string name;
|
2024-02-12 23:04:36 +13:00
|
|
|
int flags;
|
2023-02-12 15:51:39 +01:00
|
|
|
bool plot;
|
|
|
|
};
|
|
|
|
|
|
|
|
static std::vector<event_name> event_names;
|
|
|
|
|
|
|
|
// Small helper so that we can compare events to C-strings
|
2024-02-12 23:04:36 +13:00
|
|
|
static bool operator==(const event_name &en1, const event_name &en2)
|
2023-02-12 15:51:39 +01:00
|
|
|
{
|
2024-02-12 23:04:36 +13:00
|
|
|
return en1.name == en2.name && en1.flags == en2.flags;
|
2023-02-12 15:51:39 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
extern "C" void clear_event_names()
|
|
|
|
{
|
|
|
|
event_names.clear();
|
|
|
|
}
|
|
|
|
|
2024-02-12 23:04:36 +13:00
|
|
|
extern "C" void remember_event_name(const char *eventname, const int flags)
|
2023-02-12 15:51:39 +01:00
|
|
|
{
|
|
|
|
if (empty_string(eventname))
|
|
|
|
return;
|
2024-02-12 23:04:36 +13:00
|
|
|
if (std::find(event_names.begin(), event_names.end(), event_name{ eventname, flags }) != event_names.end())
|
2023-02-12 15:51:39 +01:00
|
|
|
return;
|
2024-02-12 23:04:36 +13:00
|
|
|
event_names.push_back({ eventname, flags, true });
|
2023-02-12 15:51:39 +01:00
|
|
|
}
|
|
|
|
|
2024-02-12 23:04:36 +13:00
|
|
|
extern "C" bool is_event_hidden(const char *eventname, const int flags)
|
2023-02-12 15:51:39 +01:00
|
|
|
{
|
2024-02-12 23:04:36 +13:00
|
|
|
auto it = std::find(event_names.begin(), event_names.end(), event_name{ eventname, flags });
|
2023-02-12 15:51:39 +01:00
|
|
|
return it != event_names.end() && !it->plot;
|
|
|
|
}
|
|
|
|
|
2024-02-12 23:04:36 +13:00
|
|
|
extern "C" void hide_similar_events(const char *eventname, const int flags)
|
|
|
|
{
|
|
|
|
auto it = std::find(event_names.begin(), event_names.end(), event_name{ eventname, flags });
|
|
|
|
if (it != event_names.end())
|
|
|
|
it->plot = false;
|
|
|
|
}
|
|
|
|
|
2023-02-12 15:51:39 +01:00
|
|
|
extern "C" void show_all_events()
|
|
|
|
{
|
|
|
|
for (event_name &en: event_names)
|
|
|
|
en.plot = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
extern "C" bool any_events_hidden()
|
|
|
|
{
|
|
|
|
return std::any_of(event_names.begin(), event_names.end(),
|
|
|
|
[] (const event_name &en) { return !en.plot; });
|
|
|
|
}
|