void printIdtf(sc_memory_context *context, sc_addr element)
{
    sc_addr idtf;
    sc_type type;
    sc_memory_get_element_type(context, element, &type);

    if ((sc_type_node & type) == sc_type_node || (sc_type_link & type) == sc_type_link )
    {

		if (SC_RESULT_OK == sc_helper_get_system_identifier_link(context, element, &idtf))
        {
            sc_stream *stream;
            sc_uint32 length = 0, read_length = 0;
            sc_char *data;
            sc_memory_get_link_content(context, idtf, &stream);
            sc_stream_get_length(stream, &length);
            data = (sc_char *)calloc(length + 1, sizeof(sc_char));
            sc_stream_read_data(stream, data, length, &read_length);
            data[length] = '\0';
            printf("%s", data);
            sc_stream_free(stream);
            free(data);
        }
        else
        {
            printf("%u|%u", element.seg, element.offset);
        }
    }
    else
    {
        sc_addr elem1, elem2;
        sc_memory_get_arc_begin(context, element, &elem1);
        sc_memory_get_arc_end(context, element, &elem2);
        printf("(");
        printIdtf(context, elem1);
        printf(" -> ");
        printIdtf(context, elem2);
        printf(")");
    }
}
Beispiel #2
0
std::string ScMemoryContext::helperGetSystemIdtf(ScAddr const & addr)
{
	check_expr(isValid());
	ScAddr idtfLink;
	if (sc_helper_get_system_identifier_link(mContext, *addr, &idtfLink.mRealAddr) == SC_RESULT_OK)
	{
		if (idtfLink.isValid())
		{
			ScStream stream;
			if (getLinkContent(idtfLink, stream))
			{
				std::string result;
				if (StreamConverter::streamToString(stream, result))
				{
					return result;
				}
			}
		}
	}

	return std::string("");
}