RMM API 2.0.0
Loading...
Searching...
No Matches
RegMutex.h
1#pragma once
2
3#include <RMMLog.h>
4#include <RMMUtils.h>
5#include <Topology.h>
6
7#include <cstdarg>
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>;
16
24class RegMutex : public RMMLog {
25 public:
26 bool lock(std::string reg, bool critic = true);
27 bool unlock(std::string reg, bool critic = true);
28 bool addReg(std::string reg, std::string tag = "NoTag", bool critic = true);
29 unsigned int addRegs(std::list<std::string> regs, bool critic = true);
30 unsigned int removeReg(std::string reg, bool critic = true);
31 unsigned int removeRegs(std::list<std::string> regs, bool critic = true);
32 RegLockGuard lockGuard(std::string reg, std::string tag = "NoTag");
33 RegMutex(FENRegMap map);
34 RegMutex(std::list<FENRegMap> registers);
35 RegMutex(std::list<std::shared_ptr<FENRegMap>> registers);
36 void printRegisters();
37
38 private:
39 std::mutex mapMut;
40 void addMap(FENRegMap registers);
41 MutexMap mutMap;
42
43 friend class RMMRegisterAccess;
44};
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:182
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:81
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:61
unsigned int removeReg(std::string reg, bool critic=true)
Removes a register from the map, destroying it's mutex.
Definition RegMutex.cpp:97
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:117
void printRegisters()
prints registers and addresses inside internal list. Mostly used for debugging purposes.
Definition RegMutex.cpp:129
bool unlock(std::string reg, bool critic=true)
Receives a string representing a register address. Unlocks the mutex associated with it....
Definition RegMutex.cpp:163
bool lock(std::string reg, bool critic=true)
Receives a string representing a register address. Locks the mutex associated with it....
Definition RegMutex.cpp:143