mrs_lib
Various reusable classes, functions and utilities for use in MRS projects
Loading...
Searching...
No Matches
mutex.h
Go to the documentation of this file.
1
5#ifndef MUTEX_H
6#define MUTEX_H
7
8#include <mutex>
9#include <tuple>
10
11namespace mrs_lib
12{
13
26template <class... GetArgs, class... SetArgs>
27std::tuple<GetArgs...> get_set_mutexed(std::mutex& mut, std::tuple<GetArgs&...> get, std::tuple<SetArgs...> from_set, std::tuple<SetArgs&...> to_set) {
28
29 std::scoped_lock lock(mut);
30
31 std::tuple<GetArgs...> result = get;
32 to_set = from_set;
33
34 return result;
35}
36
46template <class... Args>
47std::tuple<Args...> get_mutexed(std::mutex& mut, Args&... args) {
48
49 std::scoped_lock lock(mut);
50
51 std::tuple result = std::tuple(args...);
52
53 return result;
54}
55
56
66template <class T>
67T get_mutexed(std::mutex& mut, T& arg) {
68
69 std::scoped_lock lock(mut);
70
71 return arg;
72}
73
81template <class T>
82void set_mutexed_impl(const T what, T& where) {
83
84 where = what;
85}
86
96template <class T, class... Args>
97void set_mutexed_impl(const T what, T& where, Args&... args) {
98
99 where = what;
100
101 set_mutexed_impl(args...);
102}
103
114template <class T>
115auto set_mutexed(std::mutex& mut, const T what, T& where) {
116
117 std::scoped_lock lock(mut);
118
119 where = what;
120
121 return where;
122}
123
138template <class... Args>
139auto set_mutexed(std::mutex& mut, Args&... args) {
140
141 std::scoped_lock lock(mut);
142
143 set_mutexed_impl(args...);
144
145 return std::tuple(args...);
146}
147
163template <class... Args>
164auto set_mutexed(std::mutex& mut, const std::tuple<Args...> from, std::tuple<Args&...> to) {
165
166 std::scoped_lock lock(mut);
167
168 to = from;
169
170 return to;
171}
172
173} // namespace mrs_lib
174
175#endif
All mrs_lib functions, classes, variables and definitions are contained in this namespace.
Definition attitude_converter.h:24
std::tuple< GetArgs... > get_set_mutexed(std::mutex &mut, std::tuple< GetArgs &... > get, std::tuple< SetArgs... > from_set, std::tuple< SetArgs &... > to_set)
thread-safe getter and setter for values of variables (args)
Definition mutex.h:27
std::tuple< Args... > get_mutexed(std::mutex &mut, Args &... args)
thread-safe getter for values of variables (args)
Definition mutex.h:47
void set_mutexed_impl(const T what, T &where)
base case of the variadic template for set_mutexed()
Definition mutex.h:82
auto set_mutexed(std::mutex &mut, const T what, T &where)
thread-safe setter for a variable
Definition mutex.h:115