22 void AssertIfNullsOrDuplicates(
const C& container,
const std::string& errorMessage)
24 using T =
typename C::value_type;
25 std::unordered_set<T> duplicateSet;
26 std::for_each(container.begin(), container.end(), [&duplicateSet, &errorMessage](
const T& i)
35 ARMNN_ASSERT_MSG(duplicateSet.find(i) == duplicateSet.end(), errorMessage.c_str());
37 duplicateSet.insert(i);
46 , m_Layers(graph.begin(), graph.end())
52 : m_InputSlots{inputs}
53 , m_OutputSlots{outputs}
60 : m_InputSlots(subgraph.m_InputSlots.
begin(), subgraph.m_InputSlots.
end())
61 , m_OutputSlots(subgraph.m_OutputSlots.
begin(), subgraph.m_OutputSlots.
end())
62 , m_Layers(subgraph.m_Layers.
begin(), subgraph.m_Layers.
end())
68 : m_InputSlots(
std::move(subgraph.m_InputSlots))
69 , m_OutputSlots(
std::move(subgraph.m_OutputSlots))
70 , m_Layers(
std::move(subgraph.m_Layers))
78 , m_Layers{PolymorphicDowncast<Layer*>(layer)}
80 unsigned int numInputSlots = layer->GetNumInputSlots();
81 m_InputSlots.resize(numInputSlots);
82 for (
unsigned int i = 0; i < numInputSlots; i++)
84 m_InputSlots.at(i) = PolymorphicDowncast<InputSlot*>(&(layer->GetInputSlot(i)));
87 unsigned int numOutputSlots = layer->GetNumOutputSlots();
88 m_OutputSlots.resize(numOutputSlots);
89 for (
unsigned int i = 0; i < numOutputSlots; i++)
91 m_OutputSlots.at(i) = PolymorphicDowncast<OutputSlot*>(&(layer->GetOutputSlot(i)));
99 m_InputSlots = std::move(other.m_InputSlots);
100 m_OutputSlots = std::move(other.m_OutputSlots);
101 m_Layers = std::move(other.m_Layers);
108 void SubgraphView::CheckSubgraph()
111 AssertIfNullsOrDuplicates(m_InputSlots,
"Sub-graphs cannot contain null or duplicate input slots");
114 AssertIfNullsOrDuplicates(m_OutputSlots,
"Sub-graphs cannot contain null or duplicate output slots");
117 AssertIfNullsOrDuplicates(m_Layers,
"Sub-graphs cannot contain null or duplicate layers");
127 return m_OutputSlots;
132 return m_InputSlots.at(index);
137 return m_InputSlots.at(index);
142 return m_OutputSlots.at(index);
147 return m_OutputSlots.at(index);
167 return m_Layers.begin();
172 return m_Layers.end();
177 return m_Layers.begin();
182 return m_Layers.end();
197 m_InputSlots.clear();
198 m_OutputSlots.clear();
Interface for a layer that is connectable to other layers via InputSlots and OutputSlots.
Layers::iterator Iterator
SubgraphView & operator=(SubgraphView &&other)
Move-assignment operator.
std::vector< OutputSlot * > OutputSlots
unsigned int GetNumInputSlots() const
Copyright (c) 2020 ARM Limited.
void IgnoreUnused(Ts &&...)
The SubgraphView class represents a subgraph of a Graph.
#define ARMNN_ASSERT_MSG(COND, MSG)
const OutputSlot * GetOutputSlot(unsigned int index) const
std::vector< InputSlot * > InputSlots
SubgraphView(Graph &graph)
Constructs a sub-graph from the entire given graph.
const InputSlots & GetInputSlots() const
ConstIterator cend() const
const InputSlot * GetInputSlot(unsigned int index) const
const OutputSlots & GetOutputSlots() const
const Layers & GetLayers() const
std::enable_if_t< std::is_unsigned< Source >::value &&std::is_unsigned< Dest >::value, Dest > numeric_cast(Source source)
ConstIterator cbegin() const
std::list< Layer * > Layers
Layers::const_iterator ConstIterator
unsigned int GetNumOutputSlots() const