Program Listing for File mem_filesystem_resolver.hpp

Return to documentation for file (/home/runner/work/Legion-Engine/Legion-Engine/legion/engine/core/filesystem/mem_filesystem_resolver.hpp)

#pragma once
#include "filesystem_resolver.hpp"



namespace legion::core::filesystem
{
    class mem_filesystem_resolver : public filesystem_resolver, public memory_resolver_common_base
    {
    public:
        explicit mem_filesystem_resolver(std::shared_ptr<const byte_vec> target_data);

        bool prewarm() const;

        void set_disk_data(const byte_vec& target_data)
        {
            m_targetData = std::make_shared<const byte_vec>(target_data.begin(), target_data.end());
        }
        void set_disk_data(byte_vec&& target_data)
        {
            m_targetData = std::make_shared<const byte_vec>(std::move(target_data));
        }
        void set_disk_data(std::shared_ptr<const byte_vec> target_data)
        {
            m_targetData = target_data;
        }

        L_NODISCARD filesystem_resolver* make() final override
        {
            mem_filesystem_resolver* x = make_higher();
            x->set_disk_data(m_targetData);
            return x;
        }

        L_NODISCARD virtual mem_filesystem_resolver* make_higher() LEGION_PURE;


    protected:

        L_NODISCARD const byte_vec& get_data() const;
        L_NODISCARD byte_vec& get_data();


        virtual void build_memory_representation(std::shared_ptr<const byte_vec> in, std::shared_ptr<byte_vec> out) const LEGION_PURE;

        virtual void build_disk_representation(std::shared_ptr<const byte_vec> in, std::shared_ptr<byte_vec> out) const LEGION_IMPURE;

        virtual std::size_t size_hint(std::shared_ptr<const byte_vec> in) const LEGION_IMPURE_RETURN(0);


    private:
        mutable std::shared_ptr<byte_vec> m_data;
        std::shared_ptr<const byte_vec> m_targetData;
    };
}