aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/crepe/api/Asset.h10
-rw-r--r--src/crepe/util/OptionalRef.h37
2 files changed, 44 insertions, 3 deletions
diff --git a/src/crepe/api/Asset.h b/src/crepe/api/Asset.h
index 05dccba..685dd3a 100644
--- a/src/crepe/api/Asset.h
+++ b/src/crepe/api/Asset.h
@@ -1,7 +1,6 @@
#pragma once
#include <string>
-#include <unordered_map>
namespace crepe {
@@ -52,7 +51,16 @@ private:
namespace std {
+//! Hash helper struct
template<> struct hash<const crepe::Asset> {
+ /**
+ * \brief Hash operator for crepe::Asset
+ *
+ * This function hashes a crepe::Asset instance, allowing it to be used as a key in an \c
+ * std::unordered_map.
+ *
+ * \returns Hash value
+ */
size_t operator()(const crepe::Asset & asset) const noexcept;
};
diff --git a/src/crepe/util/OptionalRef.h b/src/crepe/util/OptionalRef.h
index 1ad3a6d..8417a25 100644
--- a/src/crepe/util/OptionalRef.h
+++ b/src/crepe/util/OptionalRef.h
@@ -12,18 +12,51 @@ namespace crepe {
template <typename T>
class OptionalRef {
public:
+ //! Initialize empty (nonexistant) reference
OptionalRef() = default;
- OptionalRef(T &);
- OptionalRef<T> & operator=(T &);
+ //! Initialize reference with value
+ OptionalRef(T & ref);
+ /**
+ * \brief Assign new reference
+ *
+ * \param ref Reference to assign
+ *
+ * \return Reference to this (required for operator)
+ */
+ OptionalRef<T> & operator=(T & ref);
+ /**
+ * \brief Check if this reference is not empty
+ *
+ * \returns `true` if reference is set, or `false` if it is not
+ */
explicit operator bool() const noexcept;
+ /**
+ * \brief Assign new reference
+ *
+ * \param ref Reference to assign
+ */
void set(T &) noexcept;
+ /**
+ * \brief Retrieve this reference
+ *
+ * \returns Internal reference if it is set
+ *
+ * \throws std::runtime_error if this function is called while the reference it not set
+ */
T & get() const;
+ /**
+ * \brief Make this reference empty
+ */
void clear() noexcept;
+ //! Copy constructor
OptionalRef(const OptionalRef<T> &);
+ //! Move constructor
OptionalRef(OptionalRef<T> &&);
+ //! Copy assignment
OptionalRef<T> & operator=(const OptionalRef<T> &);
+ //! Move assignment
OptionalRef<T> & operator=(OptionalRef<T> &&);
private: