Program Listing for File RawDataSourceBase.h

Return to documentation for file (include/mola_kernel/interfaces/RawDataSourceBase.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/Yaml.h>
#include <mola_kernel/interfaces/ExecutableBase.h>
#include <mola_kernel/interfaces/RawDataConsumer.h>
#include <mrpt/core/WorkerThreadsPool.h>
#include <mrpt/core/initializer.h>
#include <mrpt/core/pimpl.h>
#include <mrpt/io/CFileGZOutputStream.h>
#include <mrpt/obs/CObservation.h>
#include <mrpt/version.h>

namespace mola
{
using timestep_t = std::size_t;

class RawDataSourceBase : public mola::ExecutableBase
{
#if MRPT_VERSION < 0x020e00
  DEFINE_VIRTUAL_MRPT_OBJECT(RawDataSourceBase)
#else
  DEFINE_VIRTUAL_MRPT_OBJECT(RawDataSourceBase, mola)
#endif

 public:
  RawDataSourceBase();
  virtual ~RawDataSourceBase();

  // Delete copy constructor and copy assignment operator
  RawDataSourceBase(const RawDataSourceBase&)            = delete;
  RawDataSourceBase& operator=(const RawDataSourceBase&) = delete;

  // Delete move constructor and move assignment operator
  RawDataSourceBase(RawDataSourceBase&&)            = delete;
  RawDataSourceBase& operator=(RawDataSourceBase&&) = delete;

  void attachToDataConsumer(RawDataConsumer& rdc);

  void initialize(const Yaml& cfg) override final;

 protected:
  virtual void initialize_rds(const Yaml& cfg) = 0;

 public:
 protected:
  void sendObservationsToFrontEnds(const CObservation::Ptr& obs);

  virtual void prepareObservationBeforeFrontEnds(const CObservation::Ptr& obs) const;

  void onDatasetPlaybackEnds();

 private:
  std::vector<RawDataConsumer*> rdc_;

  mrpt::io::CFileGZOutputStream export_to_rawlog_out_;
  mrpt::WorkerThreadsPool       worker_pool_export_rawlog_{
      1, mrpt::WorkerThreadsPool::POLICY_FIFO, "worker_pool_export_rawlog"};

  mrpt::WorkerThreadsPool gui_updater_threadpool_{
      1 /* 1 thread */, mrpt::WorkerThreadsPool::POLICY_FIFO, "gui_updater_threadpool"};

  struct SensorViewerImpl;
  std::map<std::string, mrpt::pimpl<SensorViewerImpl>> sensor_preview_gui_;

  bool force_load_lazy_load_         = false;
  bool quit_mola_app_on_dataset_end_ = false;
};

}  // namespace mola