mirror of
https://github.com/BotChain-Robots/control.git
synced 2026-03-10 00:32:26 +01:00
Prepare files for public release
This commit is contained in:
50
include/util/Event.h
Normal file
50
include/util/Event.h
Normal file
@@ -0,0 +1,50 @@
|
||||
|
||||
#ifndef CONTROL_EVENT_H
|
||||
#define CONTROL_EVENT_H
|
||||
|
||||
#include <functional>
|
||||
|
||||
class Event;
|
||||
|
||||
class CallbackHandle {
|
||||
public:
|
||||
CallbackHandle(Event *evt, int id) : evt(evt), id(id) {
|
||||
}
|
||||
~CallbackHandle();
|
||||
|
||||
private:
|
||||
Event *evt;
|
||||
int id;
|
||||
};
|
||||
|
||||
class Event {
|
||||
public:
|
||||
using Callback = std::function<void()>;
|
||||
|
||||
CallbackHandle addListener(Callback cb) {
|
||||
int id = nextId++;
|
||||
callbacks[id] = std::move(cb);
|
||||
return CallbackHandle(this, id);
|
||||
}
|
||||
|
||||
void remove(int id) {
|
||||
callbacks.erase(id);
|
||||
}
|
||||
|
||||
void fire() {
|
||||
for (auto &kv : callbacks)
|
||||
kv.second();
|
||||
}
|
||||
|
||||
private:
|
||||
friend class CallbackHandle;
|
||||
std::unordered_map<int, Callback> callbacks;
|
||||
int nextId = 0;
|
||||
};
|
||||
|
||||
CallbackHandle::~CallbackHandle() {
|
||||
if (evt)
|
||||
evt->remove(id);
|
||||
}
|
||||
|
||||
#endif // CONTROL_EVENT_H
|
||||
18
include/util/Map.h
Normal file
18
include/util/Map.h
Normal file
@@ -0,0 +1,18 @@
|
||||
|
||||
#ifndef CONTROL_MAP_H
|
||||
#define CONTROL_MAP_H
|
||||
|
||||
#include <unordered_map>
|
||||
#include <vector>
|
||||
|
||||
template <typename K, typename V, typename H>
|
||||
std::vector<V> map_to_values(const std::unordered_map<K, V, H> &map) {
|
||||
std::vector<V> out;
|
||||
out.reserve(map.size());
|
||||
for (auto const &[key, value] : map) {
|
||||
out.push_back(value);
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
#endif // CONTROL_MAP_H
|
||||
14
include/util/PairHash.h
Normal file
14
include/util/PairHash.h
Normal file
@@ -0,0 +1,14 @@
|
||||
|
||||
#ifndef CONTROL_PAIRHASH_H
|
||||
#define CONTROL_PAIRHASH_H
|
||||
|
||||
#include <unordered_map>
|
||||
|
||||
// Custom hash function for std::pair
|
||||
template <typename T> struct pair_hash {
|
||||
std::size_t operator()(const std::pair<T, T> &p) const {
|
||||
return std::hash<T>()(p.first) ^ (std::hash<T>()(p.second) << 1);
|
||||
}
|
||||
};
|
||||
|
||||
#endif // CONTROL_PAIRHASH_H
|
||||
13
include/util/Variant.h
Normal file
13
include/util/Variant.h
Normal file
@@ -0,0 +1,13 @@
|
||||
|
||||
#ifndef VARIANT_H
|
||||
#define VARIANT_H
|
||||
|
||||
#include <variant> // NOLINT
|
||||
|
||||
template <class... Ts> struct overloaded : Ts... {
|
||||
using Ts::operator()...;
|
||||
};
|
||||
|
||||
template <class... Ts> overloaded(Ts...) -> overloaded<Ts...>;
|
||||
|
||||
#endif // VARIANT_H
|
||||
Reference in New Issue
Block a user