aboutsummaryrefslogtreecommitdiff
path: root/src/utils/sysc_utils.cpp
diff options
context:
space:
mode:
authorClément Zrounba <6691770+clement-z@users.noreply.github.com>2023-09-30 23:06:01 +0200
committerClément Zrounba <6691770+clement-z@users.noreply.github.com>2023-09-30 23:26:46 +0200
commitff9b8bb838ecdfbfc1dc81038fcf3b2a87636982 (patch)
tree21f27be782ce11c6d00b96ce100a2bff88141b2e /src/utils/sysc_utils.cpp
downloadspecs-ff9b8bb838ecdfbfc1dc81038fcf3b2a87636982.tar.gz
specs-ff9b8bb838ecdfbfc1dc81038fcf3b2a87636982.zip
Initial release
Diffstat (limited to 'src/utils/sysc_utils.cpp')
-rw-r--r--src/utils/sysc_utils.cpp70
1 files changed, 70 insertions, 0 deletions
diff --git a/src/utils/sysc_utils.cpp b/src/utils/sysc_utils.cpp
new file mode 100644
index 0000000..9b63632
--- /dev/null
+++ b/src/utils/sysc_utils.cpp
@@ -0,0 +1,70 @@
+#include <sysc_utils.h>
+
+#include <string>
+
+
+inline bool sc_object_is_module(const sc_object &obj) {
+ return strcmp(obj.kind(), "sc_module") == 0;
+}
+
+// Return vector containing all children objects (expanded) of obj
+set<sc_object *> sc_collect_children_object(sc_object* obj)
+{
+ auto v = obj->get_child_objects();
+ auto children = set<sc_object *>(v.begin(), v.end());
+ auto all_children = children;
+ for (auto child : children)
+ if ( child )
+ {
+ auto children_children = sc_collect_children_object(child);
+ for (auto child_child : children_children)
+ all_children.insert(child_child);
+ }
+ return all_children;
+}
+
+// Return vector containing all children objects (expanded) of obj
+set<sc_module *> sc_collect_children_module(sc_module* obj)
+{
+ auto v = obj->get_child_objects();
+ auto children = set<sc_object *>(v.begin(), v.end());
+ set<sc_module *> all_children;
+ for (auto obj: children)
+ {
+ auto mod = dynamic_cast<sc_module *>(obj);
+ if(mod) {
+ all_children.insert(mod);
+ auto children2 = sc_collect_children_module(mod);
+ all_children.insert(children2.begin(), children2.end());
+ }
+ }
+ return all_children;
+}
+
+set<sc_module *> sc_get_all_module() {
+ set<sc_module *> all_modules;
+
+ for ( auto obj : sc_get_top_level_objects() ) {
+ auto mod = dynamic_cast<sc_module *>(obj);
+ if (mod)
+ {
+ all_modules.insert(mod);
+ auto all_children = sc_collect_children_module(mod);
+ for (auto child : all_children)
+ all_modules.insert(child);
+ }
+ }
+ return all_modules;
+}
+
+set<sc_object *> sc_get_all_object() {
+ set<sc_object *> all_objects;
+
+ for ( auto obj : sc_get_top_level_objects() ) {
+ all_objects.insert(obj);
+ auto all_children = sc_collect_children_object(obj);
+ for (auto child : all_children)
+ all_objects.insert(child);
+ }
+ return all_objects;
+} \ No newline at end of file