// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #pragma once #include "Service/ServiceCreator.hpp" #include #include namespace sys { class BaseServiceCreator; // Forward declaration namespace graph { using Node = std::reference_wrapper; using Nodes = std::vector; Nodes nodesFrom(const std::vector> &services); } // namespace graph class DependencySortingStrategy { public: virtual ~DependencySortingStrategy() noexcept = default; [[nodiscard]] virtual auto sort(const graph::Nodes &nodes) -> graph::Nodes = 0; }; class DependencyGraph { public: DependencyGraph(graph::Nodes nodes, std::unique_ptr &&strategy); [[nodiscard]] auto sort() const -> graph::Nodes; private: graph::Nodes nodes; std::unique_ptr strategy; }; } // namespace sys