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-2025 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