diff options
Diffstat (limited to 'src/safe/accessmode.h')
-rw-r--r-- | src/safe/accessmode.h | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/src/safe/accessmode.h b/src/safe/accessmode.h new file mode 100644 index 0000000..3dd0f4f --- /dev/null +++ b/src/safe/accessmode.h @@ -0,0 +1,49 @@ +/** + * @file accessmode.h + * @author L.-C. C. + * @brief + * @version 0.1 + * @date 2019-01-20 + * + * @copyright Copyright (c) 2019 + * + */ + +#pragma once + +#include <mutex> +#if __cplusplus >= 201402L +#include <shared_mutex> +#endif // __cplusplus >= 201402L + +namespace safe +{ + enum class AccessMode + { + ReadOnly, + ReadWrite + }; + + template<typename LockType> + struct AccessTraits + { + static constexpr bool IsReadOnly = false; + }; + template<typename MutexType> + struct AccessTraits<std::lock_guard<MutexType>> + { + static constexpr bool IsReadOnly = false; + }; + template<typename MutexType> + struct AccessTraits<std::unique_lock<MutexType>> + { + static constexpr bool IsReadOnly = false; + }; +#if __cplusplus >= 201402L + template<typename MutexType> + struct AccessTraits<std::shared_lock<MutexType>> + { + static constexpr bool IsReadOnly = true; + }; +#endif // __cplusplus >= 201402L +} // namespace safe |