+/** @brief Find a link from its name.
+ *
+ * @throw std::invalid_argument if the searched link does not exist.
+ */
+Link* Engine::link_by_name(const std::string& name)
+{
+ if (pimpl->links_.find(name) == pimpl->links_.end())
+ throw std::invalid_argument(std::string("Link not found: ") + name);
+
+ return pimpl->links_.at(name);
+}
+
+/** @brief Find an link from its name (or nullptr if that link does not exist) */
+Link* Engine::link_by_name_or_null(const std::string& name)
+{
+ auto link = pimpl->links_.find(name);
+ return link == pimpl->links_.end() ? nullptr : link->second;
+}
+
+void Engine::link_register(const std::string& name, Link* link)
+{
+ pimpl->links_[name] = link;
+}
+
+void Engine::link_unregister(const std::string& name)
+{
+ pimpl->links_.erase(name);
+}
+
+/** @brief Returns the amount of storages in the platform */
+size_t Engine::get_storage_count()
+{
+ return pimpl->storages_.size();
+}
+