aboutsummaryrefslogtreecommitdiff
path: root/src/crepe/util
diff options
context:
space:
mode:
authorLoek Le Blansch <loek@pipeframe.xyz>2024-12-02 16:13:08 +0100
committerLoek Le Blansch <loek@pipeframe.xyz>2024-12-02 16:13:08 +0100
commit7a8657dfe019104aced61a5b63e63f61ad919f7a (patch)
treefd8e7aa148aac0a4f50fca8fe05e5016dfd16e47 /src/crepe/util
parentb8194e02679dc88f5c0a240da83a4700ec5200cf (diff)
remove `Private`
Diffstat (limited to 'src/crepe/util')
-rw-r--r--src/crepe/util/CMakeLists.txt3
-rw-r--r--src/crepe/util/Private.cpp27
-rw-r--r--src/crepe/util/Private.h89
-rw-r--r--src/crepe/util/Private.hpp31
4 files changed, 0 insertions, 150 deletions
diff --git a/src/crepe/util/CMakeLists.txt b/src/crepe/util/CMakeLists.txt
index f49d851..94ed906 100644
--- a/src/crepe/util/CMakeLists.txt
+++ b/src/crepe/util/CMakeLists.txt
@@ -1,7 +1,6 @@
target_sources(crepe PUBLIC
LogColor.cpp
Log.cpp
- Private.cpp
)
target_sources(crepe PUBLIC FILE_SET HEADERS FILES
@@ -12,7 +11,5 @@ target_sources(crepe PUBLIC FILE_SET HEADERS FILES
Proxy.hpp
OptionalRef.h
OptionalRef.hpp
- Private.h
- Private.hpp
)
diff --git a/src/crepe/util/Private.cpp b/src/crepe/util/Private.cpp
deleted file mode 100644
index 262620d..0000000
--- a/src/crepe/util/Private.cpp
+++ /dev/null
@@ -1,27 +0,0 @@
-#include "Private.h"
-
-using namespace crepe;
-
-bool Private::empty() const noexcept { return this->instance == nullptr; }
-
-Private::~Private() {
- if (this->instance == nullptr) return;
- this->destructor(this->instance);
-}
-
-Private::Private(Private && other) { *this = std::move(other); }
-
-Private & Private::operator=(Private && other) {
- // TODO: ideally this function checks for self-assignment
- this->instance = other.instance;
- this->destructor = other.destructor;
- this->type = other.type;
-
- other.instance = nullptr;
- other.destructor = [](void *) {};
-
- return *this;
-}
-
-Private::Private(const Private & other) {}
-Private & Private::operator=(const Private & other) { return *this; }
diff --git a/src/crepe/util/Private.h b/src/crepe/util/Private.h
deleted file mode 100644
index d725a5e..0000000
--- a/src/crepe/util/Private.h
+++ /dev/null
@@ -1,89 +0,0 @@
-#pragma once
-
-#include <functional>
-#include <typeindex>
-
-namespace crepe {
-
-/**
- * \brief Utility for storing type hidden from user
- *
- * This class can be used to store types which cannot be used in the API directly due to header
- * distribution limitations. This class is similar to `std::any`, but provides a method for
- * retrieving a mutable reference to the stored object.
- */
-class Private {
-public:
- Private() = default;
- ~Private();
- /**
- * \name Copy
- *
- * \note These functions do not do anything, resulting in `*this` being an empty (default)
- * instance.
- *
- * \{
- */
- Private(const Private &);
- Private & operator=(const Private &);
- //! \}
- /**
- * \name Move
- *
- * These functions actually move the stored type if present.
- *
- * \{
- */
- Private(Private &&);
- Private & operator=(Private &&);
- //! \}
-
- /**
- * \brief Get the stored object
- *
- * \tparam T Type of stored object
- *
- * \returns Mutable reference to stored object
- *
- * \throws std::out_of_range if this instance does not contain any object
- * \throws std::logic_error if the stored type and requested type differ
- */
- template <typename T>
- T & get() const;
-
- /**
- * \brief Create and store an arbitrary object
- *
- * \tparam T Type of object
- * \tparam Args Perfect forwarding arguments
- * \param args Perfect forwarding arguments
- *
- * All arguments to this function are forwarded using `std::forward` to the constructor of T.
- *
- * \returns Mutable reference to stored object
- *
- * \note If this instance already contained an object, this function implicitly destroys the
- * previous object.
- */
- template <typename T, typename... Args>
- T & set(Args &&... args);
-
- /**
- * \brief Check if this instance contains an object
- *
- * \returns `true` if this instance is empty, `false` if it contains an object
- */
- bool empty() const noexcept;
-
-private:
- //! Wrapper for destructor call of stored object type
- std::function<void(void *)> destructor;
- //! Stored object's type
- std::type_index type = typeid(void);
- //! Stored object
- void * instance = nullptr;
-};
-
-} // namespace crepe
-
-#include "Private.hpp"
diff --git a/src/crepe/util/Private.hpp b/src/crepe/util/Private.hpp
deleted file mode 100644
index b2174c0..0000000
--- a/src/crepe/util/Private.hpp
+++ /dev/null
@@ -1,31 +0,0 @@
-#pragma once
-
-#include <format>
-#include <stdexcept>
-
-#include "Private.h"
-
-namespace crepe {
-
-template <typename T, typename... Args>
-T & Private::set(Args &&... args) {
- if (!this->empty()) this->destructor(this->instance);
- T * instance = new T(std::forward<Args>(args)...);
- this->instance = static_cast<void *>(instance);
- this->destructor = [](void * instance) { delete static_cast<T *>(instance); };
- this->type = typeid(T);
- return *instance;
-}
-
-template <typename T>
-T & Private::get() const {
- using namespace std;
- if (this->empty()) throw out_of_range("Private: get() called on empty object");
- type_index requested_type = typeid(T);
- if (this->type != requested_type)
- throw logic_error(format("Private: get() called with [T = {}] (actual is [T = {}])",
- requested_type.name(), this->type.name()));
- return *static_cast<T *>(this->instance);
-}
-
-} // namespace crepe