Example #1
0
bool GwfTranslator::getScAddr(const String &idtf, sc_addr &addr)
{
    tStringAddrMap::iterator it = mLocalIdtfAddrs.find(idtf);
    if (it != mLocalIdtfAddrs.end())
    {
        addr = it->second;
        return true;
    }

    it = mSysIdtfAddrs.find(idtf);
    if (it != mSysIdtfAddrs.end())
    {
        addr = it->second;
        return true;
    }

    it = msGlobalIdtfAddrs.find(idtf);
    if (it != msGlobalIdtfAddrs.end())
    {
        addr = it->second;
        return true;
    }

    if (sc_helper_find_element_by_system_identifier(idtf.c_str(), idtf.size(), &addr) == SC_RESULT_OK)
        return true;

    return false;
}
Example #2
0
sctpErrorCode sctpCommand::processFindElementBySysIdtf(quint32 cmdFlags, quint32 cmdId, QDataStream *params, QIODevice *outDevice)
{
    sc_addr addr;
    sc_uint32 data_len = 0;
    sc_char *data = 0;

    Q_UNUSED(cmdFlags);

    Q_ASSERT(params != 0);

    // read length of content data
    READ_PARAM(data_len);
    Q_ASSERT(data_len > 0);

    data = new sc_char[data_len];
    if (params->readRawData(data, data_len) != data_len)
        return SCTP_ERROR_CMD_READ_PARAMS;

    sc_addr result;

    if (sc_helper_find_element_by_system_identifier(data, data_len, &result) != SC_RESULT_OK)
        writeResultHeader(SCTP_CMD_FIND_ELEMENT_BY_SYSITDF, cmdId, SCTP_RESULT_FAIL, 0, outDevice);
    else
    {
        writeResultHeader(SCTP_CMD_FIND_ELEMENT_BY_SYSITDF, cmdId, SCTP_RESULT_OK, sizeof(sc_addr), outDevice);
        outDevice->write((const char*)&result, sizeof(sc_addr));
    }

    return SCTP_ERROR_NO;
}
Example #3
0
void iTranslator::generateFormatInfo(sc_addr addr, const String &ext)
{
    String fmtStr = "format_" + ext;

    tStringAddrMap::iterator it = mSysIdtfAddrs.find(fmtStr);
    sc_addr fmt_addr;

    if (it != mSysIdtfAddrs.end())
    {
        fmt_addr = it->second;
    }
    else
    {
        // try to find by system identifier
        if (sc_helper_find_element_by_system_identifier(mContext, fmtStr.c_str(), (sc_uint32)fmtStr.size(), &fmt_addr) != SC_RESULT_OK)
        {
            fmt_addr = sc_memory_node_new(mContext, sc_type_node_class | sc_type_const);
            sc_helper_set_system_identifier(mContext, fmt_addr, fmtStr.c_str(), (sc_uint32)fmtStr.size());
            mSysIdtfAddrs[fmtStr] = fmt_addr;
        }
    }

    // try to find format relation
    sc_addr nrel_format_addr;
    String nrel_format_str = NREL_FORMAT_STR;
    it = mSysIdtfAddrs.find(nrel_format_str);
    if (it != mSysIdtfAddrs.end())
    {
        nrel_format_addr = it->second;
    }
    else
    {
        // try to find by system identifier
        if (sc_helper_find_element_by_system_identifier(mContext, nrel_format_str.c_str(), (sc_uint32)nrel_format_str.size(), &nrel_format_addr) != SC_RESULT_OK)
        {
            nrel_format_addr = sc_memory_node_new(mContext, sc_type_node_norole | sc_type_const);
            sc_helper_set_system_identifier(mContext, nrel_format_addr, nrel_format_str.c_str(), (sc_uint32)nrel_format_str.size());
            mSysIdtfAddrs[nrel_format_str] = nrel_format_addr;
        }
    }

    // connect sc-link with format
    sc_addr arc_addr = sc_memory_arc_new(mContext, sc_type_arc_common | sc_type_const, addr, fmt_addr);
    sc_memory_arc_new(mContext, sc_type_arc_pos_const_perm, nrel_format_addr, arc_addr);
}
Example #4
0
sc_bool sc_helper_resolve_system_identifier(sc_memory_context const * ctx, const char *system_idtf, sc_addr *result)
{
    gchar *keynode_idtf = 0;
    gsize bytes_written = 0;

    keynode_idtf = g_locale_to_utf8(system_idtf, -1, 0, &bytes_written, 0);
    if (keynode_idtf == null_ptr)
    {
        g_warning("Error while trying to convert %s to utf-8", system_idtf);
        return SC_FALSE;
    }

    if (sc_helper_find_element_by_system_identifier(ctx, keynode_idtf, (sc_uint32)bytes_written, result) != SC_RESULT_OK)
        return SC_FALSE;

    g_free(keynode_idtf);

    return SC_TRUE;
}
Example #5
0
sc_addr SCsTranslator::resolveScAddr(sElement *el)
{
    assert(SC_ADDR_IS_EMPTY(el->addr));

    sc_addr addr;
    SC_ADDR_MAKE_EMPTY(addr);
    if (!el->idtf.empty())
    {
        // try to find in system identifiers
        tStringAddrMap::iterator it = mSysIdtfAddrs.find(el->idtf);
        if (it != mSysIdtfAddrs.end())
        {
            addr = it->second;
        } else
        {
            // try to find in global identifiers
            it = msGlobalIdtfAddrs.find(el->idtf);
            if (it != msGlobalIdtfAddrs.end())
                addr = it->second;
            else
            {
                // try to find in local identifiers
                it = mLocalIdtfAddrs.find(el->idtf);
                if (it != mLocalIdtfAddrs.end())
                    addr = it->second;
                else
                {
                    // resolve system identifier
                    sc_result res = sc_helper_find_element_by_system_identifier(mContext, el->idtf.c_str(), (sc_uint32)el->idtf.size(), &addr);
                    if (res == SC_RESULT_OK)
                        mSysIdtfAddrs[el->idtf] = addr;
                }
            }
        }
    }

    if (SC_ADDR_IS_NOT_EMPTY(addr))
    {
        sc_type t = 0;
        if (sc_memory_get_element_type(mContext, addr, &t) == SC_RESULT_OK)
            sc_memory_change_element_subtype(mContext, addr, ~sc_type_element_mask & (el->type | t));

        el->addr = addr;
        return addr;
    }

    // generate addr
    addr = createScAddr(el);


    // store in addrs map
    if (!el->idtf.empty())
    {
        switch (_getIdentifierVisibility(el->idtf))
        {
        case IdtfSystem:
            sc_helper_set_system_identifier(mContext, addr, el->idtf.c_str(), (sc_uint32)el->idtf.size());
            mSysIdtfAddrs[el->idtf] = addr;
            break;
        case IdtfLocal:
            mLocalIdtfAddrs[el->idtf] = addr;
            break;
        case IdtfGlobal:
            msGlobalIdtfAddrs[el->idtf] = addr;
            break;
        }

    }

    return addr;
}
Example #6
0
bool ScMemoryContext::helperFindBySystemIdtf(std::string const & sysIdtf, ScAddr & outAddr)
{
	check_expr(isValid());
	return (sc_helper_find_element_by_system_identifier(mContext, sysIdtf.c_str(), (sc_uint32)sysIdtf.size(), &outAddr.mRealAddr) == SC_RESULT_OK);
}