RMM API 2.0.0
Loading...
Searching...
No Matches
RegMutex.h
1#pragma once
2
3#include <RMMLog.h>
4#include <RMMUtils.h>
5
6#include <cstdarg>
7#include <list>
8#include <memory>
9#include <mutex>
10#include <string>
11#include <unordered_map>
12
13using MutStrPair = std::pair<std::shared_ptr<std::recursive_mutex>, std::string>;
14using MutexMap = std::unordered_map<std::string, MutStrPair>;
15using RegLockGuard = std::unique_lock<std::recursive_mutex>;
16using FENRegMap = std::unordered_map<std::string, uint32_t>;
17
25class RegMutex : public RMMLog {
26 public:
27 bool lock(std::string reg, bool critic = true);
28 bool unlock(std::string reg, bool critic = true);
29 bool addReg(std::string reg, std::string tag = "NoTag", bool critic = true);
30 unsigned int addRegs(std::list<std::string> regs, bool critic = true);
31 unsigned int removeReg(std::string reg, bool critic = true);
32 unsigned int removeRegs(std::list<std::string> regs, bool critic = true);
33 RegLockGuard lockGuard(std::string reg, std::string tag = "NoTag");
34 RegMutex(FENRegMap map);
35 RegMutex(std::list<FENRegMap> registers);
36 RegMutex(std::list<std::shared_ptr<FENRegMap>> registers);
37 void printRegisters();
38
39 private:
40 std::mutex mapMut;
41 void addMap(FENRegMap registers);
42 MutexMap mutMap;
43
44 friend class RMMRegisterAccess;
45};
RMMLog(const char *name)
Constructs the RMMLog object with a name for the log.
Definition RMMLog.cpp:30
RegLockGuard lockGuard(std::string reg, std::string tag="NoTag")
returns a lock guard object for that register mutex.
Definition RegMutex.cpp:185
unsigned int addRegs(std::list< std::string > regs, bool critic=true)
Calls addReg for each register address of a list of strings.
Definition RegMutex.cpp:82
bool addReg(std::string reg, std::string tag="NoTag", bool critic=true)
Adds a register to the map, initializing a mutex to it.
Definition RegMutex.cpp:62
unsigned int removeReg(std::string reg, bool critic=true)
Removes a register from the map, destroying it's mutex.
Definition RegMutex.cpp:98
RegMutex(FENRegMap map)
Constructor that uses one register map. It will throw an exception if there are duplicate register ad...
Definition RegMutex.cpp:32
unsigned int removeRegs(std::list< std::string > regs, bool critic=true)
Calls removeReg for each register address of a list of strings.
Definition RegMutex.cpp:118
void printRegisters()
prints registers and addresses inside internal list. Mostly used for debugging purposes.
Definition RegMutex.cpp:130
bool unlock(std::string reg, bool critic=true)
Receives a string representing a register address. Unlocks the mutex associated with it....
Definition RegMutex.cpp:164
bool lock(std::string reg, bool critic=true)
Receives a string representing a register address. Locks the mutex associated with it....
Definition RegMutex.cpp:144