49 lines
1.0 KiB
C++
49 lines
1.0 KiB
C++
#pragma once
|
|
#ifndef _NB_EVENTS
|
|
#define _NB_EVENTS
|
|
|
|
#include <atomic>
|
|
#include <memory>
|
|
#include <functional>
|
|
#include <string>
|
|
namespace NB {
|
|
|
|
class NBEvent {
|
|
friend class NBEventListener;
|
|
public:
|
|
NBEvent(void (*initFunc)(), uint64_t initMask, const char* initName="");
|
|
|
|
const std::string getName() const;
|
|
const uint64_t getMask() const;
|
|
void setMask(const uint64_t);
|
|
void setName(const char*);
|
|
void setFunc(void (*newFunc)());
|
|
const uint64_t check(const uint64_t);
|
|
|
|
private:
|
|
uint64_t mask;
|
|
void (*func)();
|
|
std::string name;
|
|
|
|
};
|
|
|
|
class NBEventListener {
|
|
public:
|
|
NBEventListener(NBEvent*, uint16_t, std::shared_ptr<std::atomic<uint64_t>> initStatePtr=nullptr, uint64_t initState=0);
|
|
NBEvent& operator[](int);
|
|
|
|
std::shared_ptr<std::atomic<uint64_t>> getStatePtr();
|
|
const uint64_t getState();
|
|
const uint64_t raiseState(const uint64_t);
|
|
void setState(const uint64_t);
|
|
void check();
|
|
|
|
private:
|
|
NBEvent* eventList;
|
|
uint16_t numEvents;
|
|
std::shared_ptr<std::atomic<uint64_t>> state;
|
|
|
|
};
|
|
|
|
};
|
|
#endif |