diff options
author | Petr Mrázek <peterix@gmail.com> | 2016-11-15 02:51:22 +0100 |
---|---|---|
committer | Petr Mrázek <peterix@gmail.com> | 2016-11-17 01:00:15 +0100 |
commit | 12f6534e77d28ba5dc5fd5f555d43e7cd9da9336 (patch) | |
tree | 677c82d8d1a50c7027610e9602e423a568ae7762 /api/logic/Usable.h | |
parent | 3769897be19308ada8b975ecf541a3b200b5eb14 (diff) | |
download | PrismLauncher-12f6534e77d28ba5dc5fd5f555d43e7cd9da9336.tar.gz PrismLauncher-12f6534e77d28ba5dc5fd5f555d43e7cd9da9336.tar.bz2 PrismLauncher-12f6534e77d28ba5dc5fd5f555d43e7cd9da9336.zip |
NOISSUE mark used accounts/sessions in selection menus
Diffstat (limited to 'api/logic/Usable.h')
-rw-r--r-- | api/logic/Usable.h | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/api/logic/Usable.h b/api/logic/Usable.h new file mode 100644 index 00000000..1168be4d --- /dev/null +++ b/api/logic/Usable.h @@ -0,0 +1,58 @@ +#pragma once + +#include <cstddef> +#include <memory> + +class Usable; + +/** + * Base class for things that can be used by multiple other things and we want to track the use count. + * + * @see UseLock + */ +class Usable +{ + friend class UseLock; +public: + std::size_t useCount() + { + return m_useCount; + } + bool isInUse() + { + return m_useCount > 0; + } +protected: + virtual void decrementUses() + { + m_useCount--; + } + virtual void incrementUses() + { + m_useCount++; + } +private: + std::size_t m_useCount = 0; +}; + +/** + * Lock class to use for keeping track of uses of other things derived from Usable + * + * @see Usable + */ +class UseLock +{ +public: + UseLock(std::shared_ptr<Usable> usable) + : m_usable(usable) + { + // this doesn't use shared pointer use count, because that wouldn't be correct. this count is separate. + m_usable->incrementUses(); + } + ~UseLock() + { + m_usable->decrementUses(); + } +private: + std::shared_ptr<Usable> m_usable; +}; |