Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacques Lucke <jacques@blender.org>2022-03-19 10:26:29 +0300
committerJacques Lucke <jacques@blender.org>2022-03-19 10:26:29 +0300
commit3e16f3b3ef4b8f385b30fe4a1e00860620f610ee (patch)
treecea8e2a3ea8a8a7dbce98263d166b4782d83721b /source/blender/functions/FN_generic_value_map.hh
parentc655146b87fe20853e52b87991b46732a04d749e (diff)
BLI: move generic data structures to blenlib
This is a follow up to rB2252bc6a5527cd7360d1ccfe7a2d1bc640a8dfa6.
Diffstat (limited to 'source/blender/functions/FN_generic_value_map.hh')
-rw-r--r--source/blender/functions/FN_generic_value_map.hh112
1 files changed, 0 insertions, 112 deletions
diff --git a/source/blender/functions/FN_generic_value_map.hh b/source/blender/functions/FN_generic_value_map.hh
deleted file mode 100644
index 3807ada1c3c..00000000000
--- a/source/blender/functions/FN_generic_value_map.hh
+++ /dev/null
@@ -1,112 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-or-later */
-
-#pragma once
-
-#include "BLI_linear_allocator.hh"
-#include "BLI_map.hh"
-
-#include "FN_generic_pointer.hh"
-
-namespace blender::fn {
-
-/**
- * This is a map that stores key-value-pairs. What makes it special is that the type of values does
- * not have to be known at compile time. There just has to be a corresponding CPPType.
- */
-template<typename Key> class GValueMap {
- private:
- /* Used to allocate values owned by this container. */
- LinearAllocator<> &allocator_;
- Map<Key, GMutablePointer> values_;
-
- public:
- GValueMap(LinearAllocator<> &allocator) : allocator_(allocator)
- {
- }
-
- ~GValueMap()
- {
- /* Destruct all values that are still in the map. */
- for (GMutablePointer value : values_.values()) {
- value.destruct();
- }
- }
-
- /* Add a value to the container. The container becomes responsible for destructing the value that
- * is passed in. The caller remains responsible for freeing the value after it has been
- * destructed. */
- template<typename ForwardKey> void add_new_direct(ForwardKey &&key, GMutablePointer value)
- {
- values_.add_new_as(std::forward<ForwardKey>(key), value);
- }
-
- /* Add a value to the container that is move constructed from the given value. The caller remains
- * responsible for destructing and freeing the given value. */
- template<typename ForwardKey> void add_new_by_move(ForwardKey &&key, GMutablePointer value)
- {
- const CPPType &type = *value.type();
- void *buffer = allocator_.allocate(type.size(), type.alignment());
- type.move_construct(value.get(), buffer);
- values_.add_new_as(std::forward<ForwardKey>(key), GMutablePointer{type, buffer});
- }
-
- /* Add a value to the container that is copy constructed from the given value. The caller remains
- * responsible for destructing and freeing the given value. */
- template<typename ForwardKey> void add_new_by_copy(ForwardKey &&key, GPointer value)
- {
- const CPPType &type = *value.type();
- void *buffer = allocator_.allocate(type.size(), type.alignment());
- type.copy_construct(value.get(), buffer);
- values_.add_new_as(std::forward<ForwardKey>(key), GMutablePointer{type, buffer});
- }
-
- /* Add a value to the container. */
- template<typename ForwardKey, typename T> void add_new(ForwardKey &&key, T &&value)
- {
- if constexpr (std::is_rvalue_reference_v<T>) {
- this->add_new_by_move(std::forward<ForwardKey>(key), &value);
- }
- else {
- this->add_new_by_copy(std::forward<ForwardKey>(key), &value);
- }
- }
-
- /* Remove the value for the given name from the container and remove it. The caller is
- * responsible for freeing it. The lifetime of the referenced memory might be bound to lifetime
- * of the container. */
- template<typename ForwardKey> GMutablePointer extract(const ForwardKey &key)
- {
- return values_.pop_as(key);
- }
-
- template<typename ForwardKey> GPointer lookup(const ForwardKey &key) const
- {
- return values_.lookup_as(key);
- }
-
- /* Remove the value for the given name from the container and remove it. */
- template<typename T, typename ForwardKey> T extract(const ForwardKey &key)
- {
- GMutablePointer value = values_.pop_as(key);
- const CPPType &type = *value.type();
- BLI_assert(type.is<T>());
- T return_value;
- type.relocate_assign(value.get(), &return_value);
- return return_value;
- }
-
- template<typename T, typename ForwardKey> const T &lookup(const ForwardKey &key) const
- {
- GMutablePointer value = values_.lookup_as(key);
- BLI_assert(value.is_type<T>());
- BLI_assert(value.get() != nullptr);
- return *(const T *)value.get();
- }
-
- template<typename ForwardKey> bool contains(const ForwardKey &key) const
- {
- return values_.contains_as(key);
- }
-};
-
-} // namespace blender::fn