Program Listing for File MinimalModuleContainer.h

Return to documentation for file (include/mola_kernel/MinimalModuleContainer.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/interfaces/ExecutableBase.h>

#include <string>
#include <vector>

namespace mola
{
class MinimalModuleContainer
{
   public:
    MinimalModuleContainer() = default;
    ~MinimalModuleContainer();

    MinimalModuleContainer(const std::vector<mola::ExecutableBase::Ptr>& mods)
        : modules_(mods)
    {
        for (auto& m : modules_)
        {
            ASSERT_(m);
            installNameServer(*m);
        }
    }

    void add(const mola::ExecutableBase::Ptr& m)
    {
        ASSERT_(m);
        modules_.push_back(m);
        installNameServer(*m);
    }

    const auto& modules() const { return modules_; }

   private:
    std::vector<mola::ExecutableBase::Ptr> modules_;

    void installNameServer(mola::ExecutableBase& m);

    ExecutableBase::Ptr nameServerImpl(const std::string& name);
};

}  // namespace mola