summaryrefslogtreecommitdiff
path: root/runtimes/neurun/core/include/model/Subgraph.h
diff options
context:
space:
mode:
Diffstat (limited to 'runtimes/neurun/core/include/model/Subgraph.h')
-rw-r--r--runtimes/neurun/core/include/model/Subgraph.h86
1 files changed, 86 insertions, 0 deletions
diff --git a/runtimes/neurun/core/include/model/Subgraph.h b/runtimes/neurun/core/include/model/Subgraph.h
new file mode 100644
index 000000000..70abf6a1c
--- /dev/null
+++ b/runtimes/neurun/core/include/model/Subgraph.h
@@ -0,0 +1,86 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd. All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __NEURUN_MODEL_SUBGRAPH_H__
+#define __NEURUN_MODEL_SUBGRAPH_H__
+
+#include <vector>
+#include <string>
+#include <memory>
+
+#include "Layout.h"
+#include "Index.h"
+#include "Operation.h"
+
+namespace neurun
+{
+namespace model
+{
+
+// To support ValueSwappable, Element doesn't have members which are classes
+// as value(or can have members which are classes as value and the classes
+// support Swappable)
+struct Element
+{
+ OperationIndex index;
+ const Operation *node;
+
+ Element(const OperationIndex *i, const Operation *n) : index{*i}, node{n}
+ {
+ // DO NOTHING
+ }
+};
+
+class Subgraph : public Operation
+{
+public:
+ explicit Subgraph(model::Layout layout);
+ Subgraph(const Subgraph &) = delete;
+
+public:
+ void accept(OperationVisitor &v) const override;
+
+ virtual std::string getName(void) const override { return "Subgraph"; }
+
+public:
+ void appendOperation(const OperationIndex &index, const Operation &node)
+ {
+ _operations.emplace_back(&index, &node);
+ }
+
+ std::vector<Element> &operations(void) { return _operations; }
+
+ const std::vector<Element> &operations(void) const { return _operations; }
+
+ uint32_t size(void) const { return _operations.size(); }
+
+ // TODO: Impl Dumper instead of this method
+ std::string getStr(void) const;
+
+public:
+ Layout getLayout() const { return _layout; }
+
+private:
+ std::vector<Element> _operations;
+
+private:
+ Layout _layout;
+};
+
+} // namespace model
+} // namespace neurun
+
+#endif // __NEURUN_MODEL_SUBGRAPH_H__