Example #1
0
sc_result sc_helper_find_element_by_system_identifier(sc_memory_context const * ctx, const sc_char* data, sc_uint32 len, sc_addr *result_addr)
{
    sc_addr *results = 0;
    sc_uint32 results_count = 0;
    sc_stream *stream = 0;
    sc_uint32 i = 0;
    sc_iterator5 *it = 0;
    sc_bool found = SC_FALSE;

    g_assert(sc_helper_is_initialized == SC_TRUE);
    g_assert(sc_keynodes != 0);

    // try to find sc-links with that contains system identifier value
    stream = sc_stream_memory_new(data, sizeof(sc_char) * len, SC_STREAM_FLAG_READ, SC_FALSE);
    if (sc_memory_find_links_with_content(ctx, stream, &results, &results_count) == SC_RESULT_OK)
    {
        for (i = 0; i < results_count; i++)
        {
            it = sc_iterator5_a_a_f_a_f_new(ctx,
                                            0,
                                            sc_type_arc_common | sc_type_const,
                                            results[i],
                                            sc_type_arc_pos_const_perm,
                                            sc_keynodes[SC_KEYNODE_NREL_SYSTEM_IDENTIFIER]);
            if (sc_iterator5_next(it))
            {
                if (found == SC_FALSE)
                {
                    found = SC_TRUE;
                    *result_addr = sc_iterator5_value(it, 0);
                }else
                {
                    // don't foget to free allocated memory before return error
                    sc_iterator5_free(it);
                    sc_stream_free(stream);
                    g_free(results);
                    return SC_RESULT_ERROR_INVALID_STATE;
                }
            }

            sc_iterator5_free(it);
        }

        g_free(results);
    }

    sc_stream_free(stream);

    return found == SC_TRUE ? SC_RESULT_OK : SC_RESULT_ERROR;
}
//scp_result searchElStr5_a_f_f_a_a(scp_operand *param1, scp_operand *param2, scp_operand *param3, scp_operand *param4, scp_operand *param5){}
//scp_result searchElStr5_a_f_a_f_a(scp_operand *param1, scp_operand *param2, scp_operand *param3, scp_operand *param4, scp_operand *param5){}
//scp_result searchElStr5_a_f_a_a_f(scp_operand *param1, scp_operand *param2, scp_operand *param3, scp_operand *param4, scp_operand *param5){}
//scp_result searchElStr5_a_a_f_f_a(scp_operand *param1, scp_operand *param2, scp_operand *param3, scp_operand *param4, scp_operand *param5){}
scp_result searchElStr5_a_a_f_a_f(scp_operand *param1, scp_operand *param2, scp_operand *param3, scp_operand *param4, scp_operand *param5)
{
    sc_iterator5 *it = sc_iterator5_a_a_f_a_f_new(param1->element_type, param2->element_type, param3->addr, param4->element_type, param5->addr);
    if (SC_TRUE == sc_iterator5_next(it))
    {
        param1->addr = sc_iterator5_value(it, 0);
        param2->addr = sc_iterator5_value(it, 1);
        param4->addr = sc_iterator5_value(it, 3);
        sc_iterator5_free(it);
        return SCP_RESULT_TRUE;
    }
    sc_iterator5_free(it);
    return SCP_RESULT_FALSE;
}
Example #3
0
template<> TIterator5<sc_type, sc_type, Addr, sc_type, Addr>::TIterator5(MemoryContext const & context, sc_type const & p1, sc_type const & p2, Addr const & p3, sc_type const & p4, Addr const & p5)
{
    mIterator = sc_iterator5_a_a_f_a_f_new(context.getRealContext(), p1, p2, p3.mRealAddr, p4, p5.mRealAddr);
}
Example #4
0
sc_result sc_helper_set_system_identifier(sc_memory_context const * ctx, sc_addr addr, const sc_char* data, sc_uint32 len)
{
    sc_iterator5 *it5 = 0;
    sc_addr *results = 0;
    sc_uint32 results_count = 0;
    sc_stream *stream = 0;
    sc_uint32 i = 0;
    sc_addr idtf_addr, arc_addr;

    SC_ADDR_MAKE_EMPTY(idtf_addr)
    g_assert(sc_keynodes != 0);

    // check if specified system identifier already used
    stream = sc_stream_memory_new(data, sizeof(sc_char) * len, SC_STREAM_FLAG_READ, SC_FALSE);
    if (sc_memory_find_links_with_content(ctx, stream, &results, &results_count) == SC_RESULT_OK)
    {
        for (i = 0; i < results_count; i++)
        {
            it5 = sc_iterator5_a_a_f_a_f_new(ctx,
                                             0,
                                             sc_type_arc_common | sc_type_const,
                                             results[i],
                                             sc_type_arc_pos_const_perm,
                                             sc_keynodes[SC_KEYNODE_NREL_SYSTEM_IDENTIFIER]);
            if (sc_iterator5_next(it5))
            {
                // don't foget to free allocated memory before return error
                sc_iterator5_free(it5);
                sc_stream_free(stream);
                g_free(results);
                return SC_RESULT_ERROR_INVALID_PARAMS;
            }

            sc_iterator5_free(it5);
        }

        g_free(results);
    }

    // if there are no elements with specified system identitifier, then we can use it
    idtf_addr = sc_memory_link_new(ctx);
    if (sc_memory_set_link_content(ctx, idtf_addr, stream) != SC_RESULT_OK)
    {
        sc_stream_free(stream);
        return SC_RESULT_ERROR;
    }

    // we doesn't need link data anymore
    sc_stream_free(stream);

    // setup new system identifier
    arc_addr = sc_memory_arc_new(ctx, sc_type_arc_common | sc_type_const, addr, idtf_addr);
    if (SC_ADDR_IS_EMPTY(arc_addr))
        return SC_RESULT_ERROR;

    arc_addr = sc_memory_arc_new(ctx, sc_type_arc_pos_const_perm, sc_keynodes[SC_KEYNODE_NREL_SYSTEM_IDENTIFIER], arc_addr);
    if (SC_ADDR_IS_EMPTY(arc_addr))
        return SC_RESULT_ERROR;

    return SC_RESULT_OK;
}
sc_result agent_search_links_of_relation_connected_with_element(const sc_event *event, sc_addr arg)
{
    sc_addr question, answer, param_elem, param_rel;
    sc_iterator3 *it1, *it2, *it3, *it4;
    sc_iterator5 *it5, *it_order;
    sc_type el_type;
    sc_bool sys_off = SC_TRUE;
    sc_bool param_elem_found = SC_FALSE, param_rel_found = SC_FALSE, found = SC_FALSE;

    if (!sc_memory_get_arc_end(arg, &question))
        return SC_RESULT_ERROR_INVALID_PARAMS;

    // check question type
    if (sc_helper_check_arc(keynode_question_search_links_of_relation_connected_with_element, question, sc_type_arc_pos_const_perm) == SC_FALSE)
        return SC_RESULT_ERROR_INVALID_TYPE;

    answer = create_answer_node();

    // get question arguments
    it5 = sc_iterator5_f_a_a_a_a_new(question,
                                     sc_type_arc_pos_const_perm,
                                     0,
                                     sc_type_arc_pos_const_perm,
                                     sc_type_node | sc_type_const);
    while (sc_iterator5_next(it5) == SC_TRUE)
    {
        if (SC_ADDR_IS_EQUAL(sc_iterator5_value(it5, 4), keynode_rrel_1))
        {
            param_elem = sc_iterator5_value(it5, 2);
            param_elem_found = SC_TRUE;
            continue;
        }
        if (SC_ADDR_IS_EQUAL(sc_iterator5_value(it5, 4), keynode_rrel_2))
        {
            param_rel = sc_iterator5_value(it5, 2);
            param_rel_found = SC_TRUE;
            continue;
        }
    }
    sc_iterator5_free(it5);
    if (param_elem_found == SC_FALSE || param_rel_found == SC_FALSE)
    {
        return SC_RESULT_ERROR;
    }

    appendIntoAnswer(answer, param_elem);

    if (IS_SYSTEM_ELEMENT(param_elem) || IS_SYSTEM_ELEMENT(param_rel))
        sys_off = SC_FALSE;

    if (SC_TRUE == sc_helper_check_arc(keynode_quasybinary_relation, param_rel, sc_type_arc_pos_const_perm))
    {
        // Search subclasses in quasybinary relation
        // Iterate input arcs of quasybinary relation
        it5 = sc_iterator5_a_a_f_a_f_new(sc_type_const,
                                         sc_type_const | sc_type_arc_common,
                                         param_elem,
                                         sc_type_arc_pos_const_perm,
                                         param_rel);
        while (sc_iterator5_next(it5) == SC_TRUE)
        {
            if (sys_off == SC_TRUE && (IS_SYSTEM_ELEMENT(sc_iterator5_value(it5, 0))
                                       || IS_SYSTEM_ELEMENT(sc_iterator5_value(it5, 1))
                                       || IS_SYSTEM_ELEMENT(sc_iterator5_value(it5, 3))))
                continue;

            found = SC_TRUE;

            appendIntoAnswer(answer, sc_iterator5_value(it5, 0));
            appendIntoAnswer(answer, sc_iterator5_value(it5, 1));
            appendIntoAnswer(answer, sc_iterator5_value(it5, 3));

            search_arc_components(sc_iterator5_value(it5, 0), answer, sys_off);

            // Iterate subclasses in quasybinary relation
            it1 = sc_iterator3_f_a_a_new(sc_iterator5_value(it5, 0),
                                         sc_type_arc_pos_const_perm,
                                         sc_type_const | sc_type_node);
            while (sc_iterator3_next(it1) == SC_TRUE)
            {
                if (sys_off == SC_TRUE && (IS_SYSTEM_ELEMENT(sc_iterator3_value(it1, 1))
                                           || IS_SYSTEM_ELEMENT(sc_iterator3_value(it1, 2))))
                    continue;

                appendIntoAnswer(answer, sc_iterator3_value(it1, 1));
                appendIntoAnswer(answer, sc_iterator3_value(it1, 2));

                search_arc_components(sc_iterator3_value(it1, 2), answer, sys_off);

                // iterate order relations between elements
                it_order = sc_iterator5_f_a_a_a_a_new(sc_iterator3_value(it1, 2),
                                                      sc_type_arc_common | sc_type_const,
                                                      sc_type_node | sc_type_const,
                                                      sc_type_arc_pos_const_perm,
                                                      sc_type_node | sc_type_const);
                while (sc_iterator5_next(it_order) == SC_TRUE)
                {
                    if (sys_off == SC_TRUE && (IS_SYSTEM_ELEMENT(sc_iterator5_value(it_order, 1)) || IS_SYSTEM_ELEMENT(sc_iterator5_value(it_order, 2))
                                               || IS_SYSTEM_ELEMENT(sc_iterator5_value(it_order, 3)) || IS_SYSTEM_ELEMENT(sc_iterator5_value(it_order, 4))))
                        continue;

                    if (SC_FALSE == sc_helper_check_arc(keynode_order_relation, sc_iterator5_value(it_order, 4), sc_type_arc_pos_const_perm))
                        continue;
                    if (SC_FALSE == sc_helper_check_arc(sc_iterator5_value(it5, 0), sc_iterator5_value(it_order, 2), sc_type_arc_pos_const_perm))
                        continue;

                    appendIntoAnswer(answer, sc_iterator5_value(it_order, 1));
                    appendIntoAnswer(answer, sc_iterator5_value(it_order, 2));
                    appendIntoAnswer(answer, sc_iterator5_value(it_order, 3));
                    appendIntoAnswer(answer, sc_iterator5_value(it_order, 4));
                }
                sc_iterator5_free(it_order);

                // iterate roles of element in link
                it2 = sc_iterator3_a_a_f_new(sc_type_node | sc_type_const,
                                             sc_type_arc_pos_const_perm,
                                             sc_iterator3_value(it1, 1));
                while (sc_iterator3_next(it2) == SC_TRUE)
                {
                    sc_memory_get_element_type(sc_iterator3_value(it2, 0), &el_type);
                    if (!(el_type & sc_type_node_role))
                        continue;

                    if (sys_off == SC_TRUE && (IS_SYSTEM_ELEMENT(sc_iterator3_value(it2, 0))
                                               || IS_SYSTEM_ELEMENT(sc_iterator3_value(it2, 1))))
                        continue;

                    appendIntoAnswer(answer, sc_iterator3_value(it2, 0));
                    appendIntoAnswer(answer, sc_iterator3_value(it2, 1));
                }
                sc_iterator3_free(it2);
            }
            sc_iterator3_free(it1);
        }
        sc_iterator5_free(it5);

        // Iterate input arcs of quasybinary relation
        it1 = sc_iterator3_a_a_f_new(sc_type_const | sc_type_node,
                                     sc_type_arc_pos_const_perm,
                                     param_elem);
        while (sc_iterator3_next(it1) == SC_TRUE)
        {
            if (sys_off == SC_TRUE && (IS_SYSTEM_ELEMENT(sc_iterator3_value(it1, 0))
                                       || IS_SYSTEM_ELEMENT(sc_iterator3_value(it1, 1))))
                continue;

            // search all parents in quasybinary relation
            it5 = sc_iterator5_f_a_a_a_f_new(sc_iterator3_value(it1, 0),
                                             sc_type_arc_common | sc_type_const,
                                             sc_type_node | sc_type_const,
                                             sc_type_arc_pos_const_perm,
                                             param_rel);
            if (sc_iterator5_next(it5) == SC_TRUE)
            {
                if (sys_off == SC_TRUE && (IS_SYSTEM_ELEMENT(sc_iterator5_value(it5, 1))
                                           || IS_SYSTEM_ELEMENT(sc_iterator5_value(it5, 2))
                                           || IS_SYSTEM_ELEMENT(sc_iterator5_value(it5, 3))))
                    continue;

                appendIntoAnswer(answer, sc_iterator5_value(it5, 1));
                appendIntoAnswer(answer, sc_iterator5_value(it5, 2));
                appendIntoAnswer(answer, sc_iterator5_value(it5, 3));

                search_arc_components(sc_iterator5_value(it5, 2), answer, sys_off);

                appendIntoAnswer(answer, sc_iterator3_value(it1, 0));
                appendIntoAnswer(answer, sc_iterator3_value(it1, 1));

                search_arc_components(sc_iterator3_value(it1, 0), answer, sys_off);
            }
            sc_iterator5_free(it5);
        }
        sc_iterator3_free(it1);
    }
    else
    {
        // Iterate output arcs of given relation
        it5 = sc_iterator5_f_a_a_a_f_new(param_elem,
                                         sc_type_const,
                                         sc_type_const,
                                         sc_type_arc_pos_const_perm,
                                         param_rel);
        while (sc_iterator5_next(it5) == SC_TRUE)
        {
            if (sys_off == SC_TRUE && (IS_SYSTEM_ELEMENT(sc_iterator5_value(it5, 1))
                                       || IS_SYSTEM_ELEMENT(sc_iterator5_value(it5, 2))
                                       || IS_SYSTEM_ELEMENT(sc_iterator5_value(it5, 3))))
                continue;

            found = SC_TRUE;

            appendIntoAnswer(answer, sc_iterator5_value(it5, 1));
            appendIntoAnswer(answer, sc_iterator5_value(it5, 2));
            appendIntoAnswer(answer, sc_iterator5_value(it5, 3));

            search_arc_components(sc_iterator5_value(it5, 2), answer, sys_off);
        }
        sc_iterator5_free(it5);

        // Iterate input arcs of given relation
        it5 = sc_iterator5_a_a_f_a_f_new(sc_type_const,
                                         sc_type_const,
                                         param_elem,
                                         sc_type_arc_pos_const_perm,
                                         param_rel);
        while (sc_iterator5_next(it5) == SC_TRUE)
        {
            if (sys_off == SC_TRUE && (IS_SYSTEM_ELEMENT(sc_iterator5_value(it5, 0))
                                       || IS_SYSTEM_ELEMENT(sc_iterator5_value(it5, 1))
                                       || IS_SYSTEM_ELEMENT(sc_iterator5_value(it5, 3))))
                continue;

            appendIntoAnswer(answer, sc_iterator5_value(it5, 0));
            appendIntoAnswer(answer, sc_iterator5_value(it5, 1));
            appendIntoAnswer(answer, sc_iterator5_value(it5, 3));

            search_arc_components(sc_iterator5_value(it5, 0), answer, sys_off);
        }
        sc_iterator5_free(it5);

        // Iterate input arcs for input element
        it1 = sc_iterator3_a_a_f_new(sc_type_const,
                                     sc_type_arc_pos_const_perm,
                                     param_elem);
        while (sc_iterator3_next(it1) == SC_TRUE)
        {
            if (sys_off == SC_TRUE && (IS_SYSTEM_ELEMENT(sc_iterator3_value(it1, 0))
                                       || IS_SYSTEM_ELEMENT(sc_iterator3_value(it1, 1))))
                continue;

            // Iterate input arcs for input element
            it2 = sc_iterator3_f_a_f_new(param_rel,
                                         sc_type_arc_pos_const_perm,
                                         sc_iterator3_value(it1, 0));
            if (sc_iterator3_next(it2) == SC_TRUE)
            {
                if (sys_off == SC_TRUE && (IS_SYSTEM_ELEMENT(sc_iterator3_value(it2, 1))))
                    continue;

                appendIntoAnswer(answer, sc_iterator3_value(it2, 1));
                appendIntoAnswer(answer, sc_iterator3_value(it1, 0));

                // Iterate elements of fonnd link of given relation
                it3 = sc_iterator3_f_a_a_new(sc_iterator3_value(it1, 0),
                                             sc_type_arc_pos_const_perm,
                                             sc_type_const);
                while (sc_iterator3_next(it3) == SC_TRUE)
                {
                    if (sys_off == SC_TRUE && (IS_SYSTEM_ELEMENT(sc_iterator3_value(it3, 1))
                                               || IS_SYSTEM_ELEMENT(sc_iterator3_value(it3, 2))))
                        continue;

                    appendIntoAnswer(answer, sc_iterator3_value(it3, 1));
                    appendIntoAnswer(answer, sc_iterator3_value(it3, 2));

                    search_arc_components(sc_iterator3_value(it3, 2), answer, sys_off);

                    // Iterate role relations
                    it4 = sc_iterator3_a_a_f_new(sc_type_const | sc_type_node,
                                                 sc_type_arc_pos_const_perm,
                                                 sc_iterator3_value(it3, 1));
                    while (sc_iterator3_next(it4) == SC_TRUE)
                    {
                        if (sys_off == SC_TRUE && (IS_SYSTEM_ELEMENT(sc_iterator3_value(it4, 0))
                                                   || IS_SYSTEM_ELEMENT(sc_iterator3_value(it4, 1))))
                            continue;

                        appendIntoAnswer(answer, sc_iterator3_value(it4, 0));
                        appendIntoAnswer(answer, sc_iterator3_value(it4, 1));

                        search_arc_components(sc_iterator3_value(it4, 0), answer, sys_off);
                    }
                    sc_iterator3_free(it4);
                }
                sc_iterator3_free(it3);
            }
            sc_iterator3_free(it2);
        }
        sc_iterator3_free(it1);
    }

    if (found == SC_TRUE)
    {
        appendIntoAnswer(answer, param_rel);
    }

    connect_answer_to_question(question, answer);
    finish_question(question);

    return SC_RESULT_OK;
}
void search_translation(sc_addr elem, sc_addr answer, sc_bool sys_off)
{
    sc_iterator5 *it5;
    sc_iterator3 *it3, *it4;
    sc_bool found = SC_FALSE;

    // iterate translations of sc-element
    it5 = sc_iterator5_a_a_f_a_f_new(sc_type_node | sc_type_const,
                                     sc_type_arc_common | sc_type_const,
                                     elem,
                                     sc_type_arc_pos_const_perm,
                                     keynode_nrel_translation);
    while (sc_iterator5_next(it5) == SC_TRUE)
    {
        found = SC_TRUE;

        if (sys_off == SC_TRUE && (IS_SYSTEM_ELEMENT(sc_iterator5_value(it5, 0))
                                   || IS_SYSTEM_ELEMENT(sc_iterator5_value(it5, 1))
                                   || IS_SYSTEM_ELEMENT(sc_iterator5_value(it5, 3))))
            continue;

        appendIntoAnswer(answer, sc_iterator5_value(it5, 0));
        appendIntoAnswer(answer, sc_iterator5_value(it5, 1));
        appendIntoAnswer(answer, sc_iterator5_value(it5, 3));

        // iterate translation sc-links
        it3 = sc_iterator3_f_a_a_new(sc_iterator5_value(it5, 0),
                                     sc_type_arc_pos_const_perm,
                                     0);
        while (sc_iterator3_next(it3) == SC_TRUE)
        {
            if (sys_off == SC_TRUE && (IS_SYSTEM_ELEMENT(sc_iterator3_value(it3, 1)) || IS_SYSTEM_ELEMENT(sc_iterator3_value(it3, 2))))
                continue;

            // iterate input arcs for link
            it4 = sc_iterator3_a_a_f_new(sc_type_node,
                                         sc_type_arc_pos_const_perm,
                                         sc_iterator3_value(it3, 2));
            while (sc_iterator3_next(it4) == SC_TRUE)
            {
                if (sys_off == SC_TRUE && (IS_SYSTEM_ELEMENT(sc_iterator3_value(it4, 1)) || IS_SYSTEM_ELEMENT(sc_iterator3_value(it4, 0))))
                    continue;
                if (sc_helper_check_arc(keynode_languages, sc_iterator3_value(it4, 0), sc_type_arc_pos_const_perm) == SC_TRUE)
                {
                    appendIntoAnswer(answer, sc_iterator3_value(it4, 0));
                    appendIntoAnswer(answer, sc_iterator3_value(it4, 1));
                }
            }
            sc_iterator3_free(it4);

            // iterate input arcs for arc
            it4 = sc_iterator3_a_a_f_new(sc_type_node,
                                         sc_type_arc_pos_const_perm,
                                         sc_iterator3_value(it3, 1));
            while (sc_iterator3_next(it4) == SC_TRUE)
            {
                if (sys_off == SC_TRUE && (IS_SYSTEM_ELEMENT(sc_iterator3_value(it4, 0)) || IS_SYSTEM_ELEMENT(sc_iterator3_value(it4, 1))))
                    continue;

                appendIntoAnswer(answer, sc_iterator3_value(it4, 0));
                appendIntoAnswer(answer, sc_iterator3_value(it4, 1));
            }
            sc_iterator3_free(it4);

            appendIntoAnswer(answer, sc_iterator3_value(it3, 1));
            appendIntoAnswer(answer, sc_iterator3_value(it3, 2));
        }
        sc_iterator3_free(it3);

    }
    sc_iterator5_free(it5);

    if (found == SC_TRUE)
    {
        appendIntoAnswer(answer, keynode_nrel_translation);
    }
}
Example #7
0
scp_iterator5 *scp_iterator5_new(sc_memory_context *context, scp_operand *param1, scp_operand *param2, scp_operand *param3, scp_operand *param4, scp_operand *param5)
{
    sc_uint32 fixed1 = 0;
    sc_uint32 fixed3 = 0;
    sc_uint32 fixed5 = 0;
    long fixed = 0;
    if (param2->param_type == SCP_FIXED)
    {
        print_error("SCP ITERATOR 5 NEW", "Parameter 2 must have ASSIGN modifier");
        return null_ptr;                ;
    }
    if (param4->param_type == SCP_FIXED)
    {
        print_error("SCP ITERATOR 5 NEW", "Parameter 4 must have ASSIGN modifier");
        return null_ptr;                ;
    }
    if (param1->param_type == SCP_FIXED)
    {
        if (SC_FALSE == sc_memory_is_element(context, param1->addr))
        {
            print_error("SCP ITERATOR 5 NEW", "Parameter 1 has modifier FIXED, but has not value");
            return null_ptr;
        }
        fixed1 = 0x1;
    }
    if (param3->param_type == SCP_FIXED)
    {
        if (SC_FALSE == sc_memory_is_element(context, param3->addr))
        {
            print_error("SCP ITERATOR 5 NEW", "Parameter 3 has modifier FIXED, but has not value");
            return null_ptr;
        }
        fixed3 = 0x100;
    }
    if (param5->param_type == SCP_FIXED)
    {
        if (SC_FALSE == sc_memory_is_element(context, param5->addr))
        {
            print_error("SCP ITERATOR 5 NEW", "Parameter 5 has modifier FIXED, but has not value");
            return null_ptr;
        }
        fixed5 = 0x10000;
    }
    fixed = (fixed1 | fixed3 | fixed5);
    switch (fixed)
    {
        case 0x00001:
            return (scp_iterator5 *)sc_iterator5_f_a_a_a_a_new(context, param1->addr, param2->element_type, param3->element_type, param4->element_type, param5->element_type);
        case 0x00100:
            return (scp_iterator5 *)sc_iterator5_a_a_f_a_a_new(context, param1->element_type, param2->element_type, param3->addr, param4->element_type, param5->element_type);
        case 0x10001:
            return (scp_iterator5 *)sc_iterator5_f_a_a_a_f_new(context, param1->addr, param2->element_type, param3->element_type, param4->element_type, param5->addr);
        case 0x10100:
            return (scp_iterator5 *)sc_iterator5_a_a_f_a_f_new(context, param1->element_type, param2->element_type, param3->addr, param4->element_type, param5->addr);
        case 0x00101:
            return (scp_iterator5 *)sc_iterator5_f_a_f_a_a_new(context, param1->addr, param2->element_type, param3->addr, param4->element_type, param5->element_type);
        case 0x10101:
            return (scp_iterator5 *)sc_iterator5_f_a_f_a_f_new(context, param1->addr, param2->element_type, param3->addr, param4->element_type, param5->addr);
        default:
            print_error("SCP ITERATOR 5 NEW", "Unsupported parameter type combination");
            return null_ptr;
    }
}