Program Listing for File mem_filesystem_resolver.cpp

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

#include "mem_filesystem_resolver.hpp"

#include <utility>

#include "artifact_cache.hpp"

namespace legion::core::filesystem
{
    mem_filesystem_resolver::mem_filesystem_resolver(std::shared_ptr<const byte_vec> target_data)
        : m_targetData(std::move(target_data))
    {
    }

    bool mem_filesystem_resolver::prewarm() const
    {
        //check if data is already available
        if(!m_data)
            m_data = artifact_cache::get_cache(get_identifier(),size_hint(m_targetData));

        //check if data was already built
        if(m_data->empty())
        {
            //check if building information is available
            if(!m_targetData) return false;

            //build faster representation
            build_memory_representation(m_targetData,m_data);
        }
        return true;
    }

    const byte_vec& mem_filesystem_resolver::get_data() const
    {
        if(!prewarm()) throw legion_fs_error("attempting to access data via a purely cached object, which was not cached");
        return *m_data;
    }

    byte_vec& mem_filesystem_resolver::get_data()
    {
        if(!prewarm()) throw legion_fs_error("attempting to access data via a purely cached object, which was not cached");
        return *m_data;
    }
}