1 // Copyright (C) 2018-2019 Intel Corporation
2 // SPDX-License-Identifier: Apache-2.0
5 #include "graph_tools.hpp"
6 #include "details/ie_cnn_network_tools.h"
11 namespace InferenceEngine {
14 std::vector<CNNLayerPtr> CNNNetSortTopologically(const ICNNNetwork & network) {
15 std::vector<CNNLayerPtr> stackOfVisited;
16 bool res = CNNNetForestDFS(CNNNetGetAllInputLayers(network), [&](CNNLayerPtr current){
17 stackOfVisited.push_back(current);
21 THROW_IE_EXCEPTION << "Sorting not possible, due to existed loop.";
24 std::reverse(std::begin(stackOfVisited), std::end(stackOfVisited));
26 return stackOfVisited;
29 } // namespace details
31 void CNNNetSubstituteLayer(InferenceEngine::ICNNNetwork &network,
32 const InferenceEngine::CNNLayerPtr &layer,
33 const InferenceEngine::CNNLayerPtr &newLayer) {
34 IE_ASSERT(layer->name == newLayer->name);
37 for (auto& src : layer->insData) {
38 src.lock()->getInputTo()[layer->name] = newLayer;
40 newLayer->insData = layer->insData;
43 for (auto& dst : layer->outData) {
44 dst->creatorLayer = newLayer;
46 newLayer->outData = layer->outData;
48 network.addLayer(newLayer);
52 } // namespace InferenceEngine