// Copyright (C) 2018-2019 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//

#pragma once

#include <ie_blob.h>
#include <ie_layers.h>

#include <string>
#include <functional>
#include <unordered_set>
#include <vector>
#include <utility>

namespace InferenceEngine {
class ICNNNetwork;

using LayersSet = std::unordered_set<CNNLayerPtr>;

/// Split network on subgraphs based on layer affinity
///
/// @param network - source network
/// @param checkers - list of supported plugins
///
/// @return list of subgraphs
INFERENCE_ENGINE_API_CPP(std::vector<LayersSet>)
splitGraph(ICNNNetwork& network,
           const std::vector<std::string>& plugins);

/// Sort sugraphs topologically, behaviour is undefined if there are circular
/// refences between subgraps
///
/// @param subgraphs - list of subgraphs
INFERENCE_ENGINE_API_CPP(void)
sortSubgraphs(std::vector<LayersSet>& subgraphs);

}  // namespace InferenceEngine