Program Listing for File LazyLoadResource.h
↰ Return to documentation for file (include/mola_kernel/LazyLoadResource.h
)
/* -------------------------------------------------------------------------
* A Modular Optimization framework for Localization and mApping (MOLA)
* Copyright (C) 2018-2024 Jose Luis Blanco, University of Almeria
* See LICENSE for license information.
* ------------------------------------------------------------------------- */
#pragma once
#include <mola_kernel/id.h>
#include <mrpt/serialization/CSerializable.h>
#include <string>
namespace mola
{
class LazyLoadResource
{
public:
LazyLoadResource() = default;
LazyLoadResource(
const mrpt::serialization::CSerializable::Ptr& source,
const std::string& f)
: data_(source), external_filename_(f)
{
}
const std::string& externalStorage() const { return external_filename_; }
mrpt::serialization::CSerializable::Ptr value()
{
internalLoadProxy();
return data_;
}
const mrpt::serialization::CSerializable::Ptr& value() const
{
internalLoadProxy();
return data_;
}
void load() const;
void unload() const;
bool isUnloaded() const;
void reset() { *this = LazyLoadResource(); }
void set(
const mrpt::serialization::CSerializable::Ptr& source,
const std::string& f);
void setAsExternal(const std::string& relativeFileName);
void setParentEntityID(const mola::id_t id) { parent_entity_id_ = id; }
static std::string EXTERNAL_BASE_DIR;
private:
inline void internalLoadProxy() const
{
if (data_) return;
load();
}
const std::string& buildAbsoluteFilePath() const;
mutable mrpt::serialization::CSerializable::Ptr data_;
std::string external_filename_;
mola::id_t parent_entity_id_{INVALID_ID};
mutable std::string cached_abs_fil_;
mutable bool cached_file_ok_{false};
};
} // namespace mola