sc_result resolve_nrel_system_identifier(sc_memory_context const * ctx) { sc_addr *results = 0; sc_uint32 results_count = 0; sc_stream *stream = sc_stream_memory_new(keynodes_str[SC_KEYNODE_NREL_SYSTEM_IDENTIFIER], (sc_uint)(sizeof(sc_uchar) * strlen(keynodes_str[SC_KEYNODE_NREL_SYSTEM_IDENTIFIER])), SC_STREAM_FLAG_READ, SC_FALSE); sc_uint32 i = 0; sc_iterator5 *it = 0; sc_bool found = SC_FALSE; sc_addr addr1, addr2; // try to find nrel_system_identifier strings 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_a_new(ctx, sc_type_node | sc_type_const | sc_type_node_norole, sc_type_arc_common | sc_type_const, results[i], sc_type_arc_pos_const_perm, sc_type_const | sc_type_node | sc_type_node_norole); while (sc_iterator5_next(it)) { addr1 = sc_iterator5_value(it, 0); addr2 = sc_iterator5_value(it, 4); // comare begin sc-element and attribute, they must be equivalent if (SC_ADDR_IS_EQUAL(addr1, addr2)) { if (found == SC_FALSE) { sc_keynodes[SC_KEYNODE_NREL_SYSTEM_IDENTIFIER] = addr1; found = SC_TRUE; }else { sc_iterator5_free(it); sc_stream_free(stream); g_free(results); g_error("There are more then one sc-elements with system identifier nrel_system_identifier "); return SC_RESULT_ERROR; } } } sc_iterator5_free(it); } g_free(results); }else return SC_RESULT_ERROR; sc_stream_free(stream); return found == SC_TRUE ? SC_RESULT_OK : SC_RESULT_ERROR; }
//scp_result searchElStr5_a_f_a_a_a(scp_operand *param1, scp_operand *param2, scp_operand *param3, scp_operand *param4, scp_operand *param5){} scp_result searchElStr5_a_a_f_a_a(scp_operand *param1, scp_operand *param2, scp_operand *param3, scp_operand *param4, scp_operand *param5) { sc_iterator5 *it = sc_iterator5_a_a_f_a_a_new(param1->element_type, param2->element_type, param3->addr, param4->element_type, param5->element_type); 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); param5->addr = sc_iterator5_value(it, 4); sc_iterator5_free(it); return SCP_RESULT_TRUE; } sc_iterator5_free(it); return SCP_RESULT_FALSE; }
template<> TIterator5<sc_type, sc_type, Addr, sc_type, sc_type>::TIterator5(MemoryContext const & context, sc_type const & p1, sc_type const & p2, Addr const & p3, sc_type const & p4, sc_type const & p5) { mIterator = sc_iterator5_a_a_f_a_a_new(context.getRealContext(), p1, p2, p3.mRealAddr, p4, p5); }
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; } }
void search_superclasses_rec(sc_addr elem, sc_addr answer, sc_bool sys_off) { sc_iterator3 *it3; sc_iterator5 *it5; // search taxonomy it5 = sc_iterator5_a_a_f_a_a_new(s_default_ctx, sc_type_node | sc_type_const, sc_type_arc_common | sc_type_const, elem, sc_type_arc_pos_const_perm, sc_type_node | sc_type_const); while (sc_iterator5_next(it5) == SC_TRUE) { if (SC_FALSE == sc_helper_check_arc(s_default_ctx, keynode_taxonomy_relation, sc_iterator5_value(it5, 4), sc_type_arc_pos_const_perm)) continue; if (SC_TRUE == sys_off && (IS_SYSTEM_ELEMENT(sc_iterator5_value(it5, 0)) || IS_SYSTEM_ELEMENT(sc_iterator5_value(it5, 1)) || IS_SYSTEM_ELEMENT(sc_iterator5_value(it5, 3)) || IS_SYSTEM_ELEMENT(sc_iterator5_value(it5, 4)))) continue; appendIntoAnswer(answer, sc_iterator5_value(it5, 0)); appendIntoAnswer(answer, sc_iterator5_value(it5, 1)); appendIntoAnswer(answer, sc_iterator5_value(it5, 3)); appendIntoAnswer(answer, sc_iterator5_value(it5, 4)); search_superclasses_rec(sc_iterator5_value(it5, 0), answer, sys_off); } sc_iterator5_free(it5); // iterate input arcs it3 = sc_iterator3_a_a_f_new(s_default_ctx, sc_type_node | sc_type_const, sc_type_arc_pos_const_perm, elem); while (sc_iterator3_next(it3) == SC_TRUE) { // search all parents in quasybinary relation it5 = sc_iterator5_f_a_a_a_a_new(s_default_ctx, sc_iterator3_value(it3, 0), 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(it5) == SC_TRUE) { // check if it's a quasybinary relation if (sc_helper_check_arc(s_default_ctx, keynode_quasybinary_relation, sc_iterator5_value(it5, 4), sc_type_arc_pos_const_perm) == SC_TRUE) { if (!(sc_helper_check_arc(s_default_ctx, keynode_taxonomy_relation, sc_iterator5_value(it5, 4), sc_type_arc_pos_const_perm) == SC_TRUE || sc_helper_check_arc(s_default_ctx, keynode_decomposition_relation, sc_iterator5_value(it5, 4), sc_type_arc_pos_const_perm) == SC_TRUE)) continue; 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)) || IS_SYSTEM_ELEMENT(sc_iterator5_value(it5, 4)) || IS_SYSTEM_ELEMENT(sc_iterator3_value(it3, 0)) || IS_SYSTEM_ELEMENT(sc_iterator3_value(it3, 1)))) continue; appendIntoAnswer(answer, sc_iterator5_value(it5, 1)); appendIntoAnswer(answer, sc_iterator5_value(it5, 2)); appendIntoAnswer(answer, sc_iterator5_value(it5, 3)); appendIntoAnswer(answer, sc_iterator5_value(it5, 4)); appendIntoAnswer(answer, sc_iterator3_value(it3, 0)); appendIntoAnswer(answer, sc_iterator3_value(it3, 1)); search_superclasses_rec(sc_iterator5_value(it5, 2), answer, sys_off); } } sc_iterator5_free(it5); } sc_iterator3_free(it3); }
sc_result agent_search_decomposition(const sc_event *event, sc_addr arg) { sc_addr question, answer; sc_iterator3 *it1, *it2, *it3; sc_iterator5 *it5, *it_order; sc_bool sys_off = SC_TRUE; sc_type el_type; if (!sc_memory_get_arc_end(s_default_ctx, arg, &question)) return SC_RESULT_ERROR_INVALID_PARAMS; // check question type if (sc_helper_check_arc(s_default_ctx, keynode_question_decomposition, question, sc_type_arc_pos_const_perm) == SC_FALSE) return SC_RESULT_ERROR_INVALID_TYPE; answer = create_answer_node(); // get operation argument it1 = sc_iterator3_f_a_a_new(s_default_ctx, question, sc_type_arc_pos_const_perm, 0); if (sc_iterator3_next(it1) == SC_TRUE) { if (IS_SYSTEM_ELEMENT(sc_iterator3_value(it1, 2))) sys_off = SC_FALSE; appendIntoAnswer(answer, sc_iterator3_value(it1, 2)); // iterate decomposition it5 = sc_iterator5_a_a_f_a_a_new(s_default_ctx, sc_type_node | sc_type_const, sc_type_arc_common | sc_type_const, sc_iterator3_value(it1, 2), sc_type_arc_pos_const_perm, sc_type_node | sc_type_const); while (sc_iterator5_next(it5) == SC_TRUE) { if (SC_FALSE == sc_helper_check_arc(s_default_ctx, keynode_decomposition_relation, sc_iterator5_value(it5, 4), sc_type_arc_pos_const_perm)) continue; 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)) || IS_SYSTEM_ELEMENT(sc_iterator5_value(it5, 4)))) continue; appendIntoAnswer(answer, sc_iterator5_value(it5, 0)); appendIntoAnswer(answer, sc_iterator5_value(it5, 1)); appendIntoAnswer(answer, sc_iterator5_value(it5, 3)); appendIntoAnswer(answer, sc_iterator5_value(it5, 4)); // iterate decomposition set elements it2 = sc_iterator3_f_a_a_new(s_default_ctx, sc_iterator5_value(it5, 0), sc_type_arc_pos_const_perm, 0); while (sc_iterator3_next(it2) == SC_TRUE) { if (sys_off == SC_TRUE && (IS_SYSTEM_ELEMENT(sc_iterator3_value(it2, 1)) || IS_SYSTEM_ELEMENT(sc_iterator3_value(it2, 2)))) continue; // iterate order relations between elements it_order = sc_iterator5_f_a_a_a_a_new(s_default_ctx, sc_iterator3_value(it2, 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 (SC_FALSE == sc_helper_check_arc(s_default_ctx, keynode_order_relation, sc_iterator5_value(it_order, 4), sc_type_arc_pos_const_perm)) continue; if (SC_FALSE == sc_helper_check_arc(s_default_ctx, sc_iterator5_value(it5, 0), sc_iterator5_value(it_order, 2), sc_type_arc_pos_const_perm)) continue; 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; 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 it3 = sc_iterator3_a_a_f_new(s_default_ctx, sc_type_node | sc_type_const, sc_type_arc_pos_const_perm, sc_iterator3_value(it2, 1)); while (sc_iterator3_next(it3) == SC_TRUE) { sc_memory_get_element_type(s_default_ctx, sc_iterator3_value(it3, 0), &el_type); if (!(el_type & sc_type_node_role)) continue; if (sys_off == SC_TRUE && (IS_SYSTEM_ELEMENT(sc_iterator3_value(it3, 0)) || IS_SYSTEM_ELEMENT(sc_iterator3_value(it3, 1)))) continue; appendIntoAnswer(answer, sc_iterator3_value(it3, 0)); appendIntoAnswer(answer, sc_iterator3_value(it3, 1)); } sc_iterator3_free(it3); appendIntoAnswer(answer, sc_iterator3_value(it2, 1)); appendIntoAnswer(answer, sc_iterator3_value(it2, 2)); } sc_iterator3_free(it2); } sc_iterator5_free(it5); } sc_iterator3_free(it1); connect_answer_to_question(question, answer); finish_question(question); return SC_RESULT_OK; }
void search_subclasses_rec(sc_addr elem, sc_addr answer, sc_bool sys_off) { sc_iterator3 *it2, *it6; sc_iterator5 *it5, *it_order; sc_type el_type; // iterate taxonomy it5 = sc_iterator5_f_a_a_a_a_new(s_default_ctx, elem, 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(it5) == SC_TRUE) { if (SC_FALSE == sc_helper_check_arc(s_default_ctx, keynode_taxonomy_relation, sc_iterator5_value(it5, 4), sc_type_arc_pos_const_perm)) continue; if (SC_TRUE == sys_off && (IS_SYSTEM_ELEMENT(sc_iterator5_value(it5, 1)) || IS_SYSTEM_ELEMENT(sc_iterator5_value(it5, 2)) || IS_SYSTEM_ELEMENT(sc_iterator5_value(it5, 3)) || IS_SYSTEM_ELEMENT(sc_iterator5_value(it5, 4)))) continue; appendIntoAnswer(answer, sc_iterator5_value(it5, 1)); appendIntoAnswer(answer, sc_iterator5_value(it5, 2)); appendIntoAnswer(answer, sc_iterator5_value(it5, 3)); appendIntoAnswer(answer, sc_iterator5_value(it5, 4)); search_subclasses_rec(sc_iterator5_value(it5, 2), answer, sys_off); } sc_iterator5_free(it5); // iterate decomposition it5 = sc_iterator5_a_a_f_a_a_new(s_default_ctx, sc_type_node | sc_type_const, sc_type_arc_common | sc_type_const, elem, sc_type_arc_pos_const_perm, sc_type_node | sc_type_const); while (sc_iterator5_next(it5) == SC_TRUE) { if (SC_FALSE == sc_helper_check_arc(s_default_ctx, keynode_decomposition_relation, sc_iterator5_value(it5, 4), sc_type_arc_pos_const_perm)) continue; 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)) || IS_SYSTEM_ELEMENT(sc_iterator5_value(it5, 4)))) continue; appendIntoAnswer(answer, sc_iterator5_value(it5, 0)); appendIntoAnswer(answer, sc_iterator5_value(it5, 1)); appendIntoAnswer(answer, sc_iterator5_value(it5, 3)); appendIntoAnswer(answer, sc_iterator5_value(it5, 4)); // iterate decomposition set elements it2 = sc_iterator3_f_a_a_new(s_default_ctx, sc_iterator5_value(it5, 0), sc_type_arc_pos_const_perm, 0); while (sc_iterator3_next(it2) == SC_TRUE) { if (sys_off == SC_TRUE && (IS_SYSTEM_ELEMENT(sc_iterator3_value(it2, 1)) || IS_SYSTEM_ELEMENT(sc_iterator3_value(it2, 2)))) continue; // iterate order relations between elements it_order = sc_iterator5_f_a_a_a_a_new(s_default_ctx, sc_iterator3_value(it2, 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 (SC_FALSE == sc_helper_check_arc(s_default_ctx, keynode_order_relation, sc_iterator5_value(it_order, 4), sc_type_arc_pos_const_perm)) continue; if (SC_FALSE == sc_helper_check_arc(s_default_ctx, sc_iterator5_value(it5, 0), sc_iterator5_value(it_order, 2), sc_type_arc_pos_const_perm)) continue; 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; 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 it6 = sc_iterator3_a_a_f_new(s_default_ctx, sc_type_node | sc_type_const, sc_type_arc_pos_const_perm, sc_iterator3_value(it2, 1)); while (sc_iterator3_next(it6) == SC_TRUE) { sc_memory_get_element_type(s_default_ctx, sc_iterator3_value(it6, 0), &el_type); if (!(el_type & sc_type_node_role)) continue; if (sys_off == SC_TRUE && (IS_SYSTEM_ELEMENT(sc_iterator3_value(it6, 0)) || IS_SYSTEM_ELEMENT(sc_iterator3_value(it6, 1)))) continue; appendIntoAnswer(answer, sc_iterator3_value(it6, 0)); appendIntoAnswer(answer, sc_iterator3_value(it6, 1)); } sc_iterator3_free(it6); appendIntoAnswer(answer, sc_iterator3_value(it2, 1)); appendIntoAnswer(answer, sc_iterator3_value(it2, 2)); search_subclasses_rec(sc_iterator3_value(it2, 2), answer, sys_off); } sc_iterator3_free(it2); } sc_iterator5_free(it5); }