Program Listing for File registerPool.h

↰ Return to documentation for file (PrismEngine/src/registerPool.h)

#pragma once
#include "dataPool.h"

namespace prism {
    namespace scene {
        struct RegisteredPool {
            using DeleterFunc = void(*)(void*);
            std::unique_ptr<void, DeleterFunc> ptr;

            RegisteredPool() noexcept : ptr(nullptr, nullptr) {}

            template<typename Handle>
            DataPool<Handle>* get() const {
                return static_cast<DataPool<Handle>*>(ptr.get());
            }

            template<typename Handle>
            static RegisteredPool make(DataPool<Handle>* p) {
                RegisteredPool result;
                result.ptr = std::unique_ptr<void, DeleterFunc>(
                    static_cast<void*>(p),
                    [](void* p) {
                        delete static_cast<DataPool<Handle>*>(p);
                    }
                );
                return result;
            }
        };

        template<typename T>
        struct is_data_handle : std::false_type {};

        template<typename DataType, typename TagType>
        struct is_data_handle<DataHandle<DataType, TagType>> : std::true_type {};
    }
}