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
26 template <class... GetArgs, class... SetArgs>
27 std::tuple<GetArgs...> get_set_mutexed(std::mutex& mut, std::tuple<GetArgs&...> get, std::tuple<SetArgs...> from_set, std::tuple<SetArgs&...> to_set)
28 {
29
30 std::scoped_lock lock(mut);
31
32 std::tuple<GetArgs...> result = get;
33 to_set = from_set;
34
35 return result;
36 }
37
47 template <class... Args>
48 std::tuple<Args...> get_mutexed(std::mutex& mut, Args&... args)
49 {
50
51 std::scoped_lock lock(mut);
52
53 std::tuple result = std::tuple(args...);
54
55 return result;
56 }
57
58
68 template <class T>
69 T get_mutexed(std::mutex& mut, T& arg)
70 {
71
72 std::scoped_lock lock(mut);
73
74 return arg;
75 }
76
84 template <class T>
85 void set_mutexed_impl(const T what, T& where)
86 {
87
88 where = what;
89 }
90
100 template <class T, class... Args>
101 void set_mutexed_impl(const T what, T& where, Args&... args)
102 {
103
104 where = what;
105
106 set_mutexed_impl(args...);
107 }
108
119 template <class T>
120 auto set_mutexed(std::mutex& mut, const T what, T& where)
121 {
122
123 std::scoped_lock lock(mut);
124
125 where = what;
126
127 return where;
128 }
129
144 template <class... Args>
145 auto set_mutexed(std::mutex& mut, Args&... args)
146 {
147
148 std::scoped_lock lock(mut);
149
150 set_mutexed_impl(args...);
151
152 return std::tuple(args...);
153 }
154
170 template <class... Args>
171 auto set_mutexed(std::mutex& mut, const std::tuple<Args...> from, std::tuple<Args&...> to)
172 {
173
174 std::scoped_lock lock(mut);
175
176 to = from;
177
178 return to;
179 }
180
181} // namespace mrs_lib
182
183#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:48
void set_mutexed_impl(const T what, T &where)
base case of the variadic template for set_mutexed()
Definition mutex.h:85
auto set_mutexed(std::mutex &mut, const T what, T &where)
thread-safe setter for a variable
Definition mutex.h:120