/** * @name Find the root handle * @brief Find the root handle using an optional name * * Get a handle to the root simulator object. This is usually the toplevel. * * If no name is provided, we return the first root instance. * * If name is provided, we check the name against the available objects until * we find a match. If no match is found we return NULL */ GpiObjHdl *FliImpl::get_root_handle(const char *name) { mtiRegionIdT root; char *rgn_name; char *rgn_fullname; std::string root_name; std::string root_fullname; PLI_INT32 accType; PLI_INT32 accFullType; for (root = mti_GetTopRegion(); root != NULL; root = mti_NextRegion(root)) { LOG_DEBUG("Iterating over: %s", mti_GetRegionName(root)); if (name == NULL || !strcmp(name, mti_GetRegionName(root))) break; } if (!root) { goto error; } rgn_name = mti_GetRegionName(root); rgn_fullname = mti_GetRegionFullName(root); root_name = rgn_name; root_fullname = rgn_fullname; mti_VsimFree(rgn_fullname); LOG_DEBUG("Found toplevel: %s, creating handle....", root_name.c_str()); accType = acc_fetch_type(root); accFullType = acc_fetch_fulltype(root); return create_gpi_obj_from_handle(root, root_name, root_fullname, accType, accFullType); error: LOG_ERROR("FLI: Couldn't find root handle %s", name); for (root = mti_GetTopRegion(); root != NULL; root = mti_NextRegion(root)) { if (name == NULL) break; LOG_ERROR("FLI: Toplevel instances: %s != %s...", name, mti_GetRegionName(root)); } return NULL; }
/** * @name Find the root handle * @brief Find the root handle using an optional name * * Get a handle to the root simulator object. This is usually the toplevel. * * If no name is provided, we return the first root instance. * * If name is provided, we check the name against the available objects until * we find a match. If no match is found we return NULL */ GpiObjHdl *FliImpl::get_root_handle(const char *name) { mtiRegionIdT root; GpiObjHdl *rv; char *rgn_name; std::string root_name; for (root = mti_GetTopRegion(); root != NULL; root = mti_NextRegion(root)) { LOG_DEBUG("Iterating over: %s", mti_GetRegionName(root)); if (name == NULL || !strcmp(name, mti_GetRegionName(root))) break; } if (!root) { goto error; } rgn_name = mti_GetRegionFullName(root); root_name = rgn_name; mti_VsimFree(rgn_name); LOG_DEBUG("Found toplevel: %s, creating handle....", root_name.c_str()); rv = new FliRegionObjHdl(this, root); rv->initialise(root_name); LOG_DEBUG("Returning root handle %p", rv); return rv; error: LOG_CRITICAL("FLI: Couldn't find root handle %s", name); for (root = mti_GetTopRegion(); root != NULL; root = mti_NextRegion(root)) { if (name == NULL) break; LOG_CRITICAL("FLI: Toplevel instances: %s != %s...", name, mti_GetRegionName(root)); } return NULL; }