// Copyright (C) 2015 Jérôme Leclercq // This file is part of the "Nazara Engine - Core module" // For conditions of distribution and use, see copyright notice in Config.hpp #pragma once #ifndef NAZARA_REFCOUNTED_HPP #define NAZARA_REFCOUNTED_HPP #include #include #include #if NAZARA_CORE_THREADSAFE && NAZARA_THREADSAFETY_REFCOUNTED #include #else #include #endif namespace Nz { class NAZARA_CORE_API RefCounted { public: RefCounted(); RefCounted(const RefCounted&) = delete; RefCounted(RefCounted&&) = default; virtual ~RefCounted(); void AddReference() const; unsigned int GetReferenceCount() const; bool RemoveReference() const; RefCounted& operator=(const RefCounted&) = delete; RefCounted& operator=(RefCounted&&) = default; private: mutable std::atomic_uint m_referenceCount; }; } #endif // NAZARA_RESOURCE_HPP