#include #include using namespace sc_core; using namespace sc_dt; using std::cout; using std::endl; // 10) sc_find_object, sc_get_top_level_objects static int object_count = 0; void recurse_hierarchy(sc_object* obj) { ++ object_count; std::vector children = obj->get_child_objects(); for (std::vector::iterator i = children.begin(); i != children.end(); i++) recurse_hierarchy(*i); } SC_MODULE(M) { SC_CTOR(M) : sig("sig") { SC_THREAD(T); } void T() { } sc_signal sig; }; SC_MODULE(Top) { M *m; SC_CTOR(Top) { m = new M("m"); sc_object* obj; obj = sc_find_object(""); sc_assert(obj == 0); obj = sc_find_object("foo"); sc_assert(obj == 0); obj = sc_find_object("top.m.foo"); sc_assert(obj == 0); obj = sc_find_object("top"); sc_assert(strcmp(obj->kind(), "sc_module") == 0); obj = sc_find_object("top.m"); sc_assert(strcmp(obj->kind(), "sc_module") == 0); obj = sc_find_object("top.m.sig"); sc_assert(strcmp(obj->kind(), "sc_signal") == 0); obj = sc_find_object("top.m.T"); sc_assert(sc_process_handle(obj).valid()); sc_assert(strcmp(sc_process_handle(obj).name(), "top.m.T") == 0); object_count = 0; recurse_hierarchy(m); sc_assert(object_count == 3); } }; int sc_main(int argc, char* argv[]) { cout << "Should be silent..." << endl; std::vector tops = sc_get_top_level_objects(); sc_assert(tops.size() == 0); Top top("top"); tops = sc_get_top_level_objects(); sc_assert(tops.size() == 1); sc_assert(strcmp(tops[0]->name(), "top") == 0); M m2("m2"); tops = sc_get_top_level_objects(); sc_assert(tops.size() == 2); sc_assert(strcmp(tops[0]->name(), "top") == 0); sc_assert(strcmp(tops[1]->name(), "m2") == 0); sc_signal sig("sig2"); tops = sc_get_top_level_objects(); sc_assert(tops.size() == 3); sc_assert(strcmp(tops[0]->name(), "top") == 0); sc_assert(strcmp(tops[1]->name(), "m2") == 0); sc_assert(strcmp(tops[2]->name(), "sig2") == 0); sc_object* obj; obj = sc_find_object(""); sc_assert(obj == 0); obj = sc_find_object("foo"); sc_assert(obj == 0); obj = sc_find_object("top.m.foo"); sc_assert(obj == 0); obj = sc_find_object("top"); sc_assert(strcmp(obj->kind(), "sc_module") == 0); obj = sc_find_object("sig2"); sc_assert(strcmp(obj->kind(), "sc_signal") == 0); obj = sc_find_object("m2"); sc_assert(strcmp(obj->kind(), "sc_module") == 0); obj = sc_find_object("top.m"); sc_assert(strcmp(obj->kind(), "sc_module") == 0); obj = sc_find_object("top.m.sig"); sc_assert(strcmp(obj->kind(), "sc_signal") == 0); obj = sc_find_object("top.m.T"); sc_assert(sc_process_handle(obj).valid()); sc_assert(strcmp(sc_process_handle(obj).name(), "top.m.T") == 0); object_count = 0; recurse_hierarchy(tops[0]); sc_assert(object_count == 4); sc_start(); cout << endl << "Success" << endl; return 0; }