From 7e1d99dfd03271ff3d652f4247268b417c93b853 Mon Sep 17 00:00:00 2001 From: Botond Baranyi <botond.baranyi@ericsson.com> Date: Fri, 3 Feb 2017 14:06:29 +0100 Subject: [PATCH] Removed 'any from' macros and unichar pattern warning during build Change-Id: Iddeb4de1b79206a843070593a67ac29082c6dc45 Signed-off-by: Botond Baranyi <botond.baranyi@ericsson.com> --- common/UnicharPattern.cc | 34 +- core/Array.hh | 748 ++++++++++++++++++++++++++++++++------- 2 files changed, 649 insertions(+), 133 deletions(-) diff --git a/common/UnicharPattern.cc b/common/UnicharPattern.cc index 42fe288b6..674620795 100644 --- a/common/UnicharPattern.cc +++ b/common/UnicharPattern.cc @@ -82,23 +82,35 @@ UnicharPattern::UnicharPattern() : mappings_head(NULL) { // if anything goes wrong while parsing the case mappings file, just delete the // partial results, display a warning, and treat all patterns as case-sensitive + FILE* fp = NULL; const char* ttcn3_dir = getenv("TTCN3_DIR"); - if (ttcn3_dir == NULL) { - TTCN_pattern_warning("Environment variable TTCN3_DIR not present. " - "Case-insensitive universal charstring patterns are disabled.\n"); - return; + char* mappings_file = NULL; + if (ttcn3_dir != NULL) { + size_t ttcn3_dir_len = strlen(ttcn3_dir); + bool ends_with_slash = ttcn3_dir_len > 0 && ttcn3_dir[ttcn3_dir_len - 1] == '/'; + mappings_file = mprintf("%s%setc/CaseFolding.txt", ttcn3_dir, + ends_with_slash ? "" : "/"); + fp = fopen(mappings_file, "r"); + if (fp == NULL) { + // during the TITAN build the case mappings file has not been moved to the + // installation directory yet; try its original location + fp = fopen("../etc/CaseFolding.txt", "r"); + } } - size_t ttcn3_dir_len = strlen(ttcn3_dir); - bool ends_with_slash = ttcn3_dir_len > 0 && ttcn3_dir[ttcn3_dir_len - 1] == '/'; - char* mappings_file = mprintf("%s%setc/CaseFolding.txt", ttcn3_dir, - ends_with_slash ? "" : "/"); - FILE* fp = fopen(mappings_file, "r"); if (fp == NULL) { - TTCN_pattern_warning("Cannot open file '%s' for reading. " - "Case-insensitive universal charstring patterns are disabled.\n", mappings_file); + if (ttcn3_dir == NULL) { + TTCN_pattern_warning("Environment variable TTCN3_DIR not present. " + "Case-insensitive universal charstring patterns are disabled.\n"); + } + else { + TTCN_pattern_warning("Cannot open file '%s' for reading. " + "Case-insensitive universal charstring patterns are disabled.\n", + mappings_file); + } Free(mappings_file); return; } + Free(mappings_file); // this always points to the last element of the list diff --git a/core/Array.hh b/core/Array.hh index 0369ffdfe..c12f6b8f9 100644 --- a/core/Array.hh +++ b/core/Array.hh @@ -35,90 +35,6 @@ class INTEGER; -/** common code for all port, timer and component operations with at least one - * argument, performed on arrays with the help of the 'any from' clause - * - * returns an alt status, depending on the return values of elements - * alt-status priority: ALT_YES (return immediately) > ALT_REPEAT > ALT_MAYBE > ALT_NO - */ -#define ANY_FROM_OPERATION(opname, ...) \ - if (index_redirect != NULL) { \ - index_redirect->incr_pos(); \ - } \ - alt_status result = ALT_NO; \ - for (unsigned int i = 0; i < array_size; ++i) { \ - alt_status ret_val = array_elements[i].opname(__VA_ARGS__, index_redirect); \ - if (ret_val == ALT_YES) { \ - if (index_redirect != NULL) { \ - index_redirect->add_index((int)i + index_offset); \ - } \ - result = ret_val; \ - break; \ - } \ - else if (ret_val == ALT_REPEAT || \ - (ret_val == ALT_MAYBE && result == ALT_NO)) { \ - result = ret_val; \ - } \ - } \ - if (index_redirect != NULL) { \ - index_redirect->decr_pos(); \ - } \ - return result; - -/** common code for all timer and component operations with no arguments, - * performed on arrays with the help of the 'any from' clause - * - * returns an alt status, depending on the return values of elements - * alt-status priority: ALT_YES (return immediately) > ALT_REPEAT > ALT_MAYBE > ALT_NO - */ -#define ANY_FROM_OPERATION_NO_ARGS(opname) \ - if (index_redirect != NULL) { \ - index_redirect->incr_pos(); \ - } \ - alt_status result = ALT_NO; \ - for (unsigned int i = 0; i < array_size; ++i) { \ - alt_status ret_val = array_elements[i].opname(index_redirect); \ - if (ret_val == ALT_YES) { \ - if (index_redirect != NULL) { \ - index_redirect->add_index((int)i + index_offset); \ - } \ - result = ret_val; \ - break; \ - } \ - else if (ret_val == ALT_REPEAT || \ - (ret_val == ALT_MAYBE && result == ALT_NO)) { \ - result = ret_val; \ - } \ - } \ - if (index_redirect != NULL) { \ - index_redirect->decr_pos(); \ - } \ - return result; - -/** common code for all port, timer and component operations with no arguments, - * performed on arrays with the help of the 'any from' clause - * - * returns a boolean: TRUE if at least one of the elements returns TRUE - */ -#define ANY_FROM_OPERATION_NO_ARGS_BOOL(opname) \ - if (index_redirect != NULL) { \ - index_redirect->incr_pos(); \ - } \ - boolean ret_val = FALSE; \ - for (unsigned int i = 0; i < array_size; ++i) { \ - ret_val = array_elements[i].opname(index_redirect); \ - if (ret_val) { \ - if (index_redirect != NULL) { \ - index_redirect->add_index((int)i + index_offset); \ - } \ - break; \ - } \ - } \ - if (index_redirect != NULL) { \ - index_redirect->decr_pos(); \ - } \ - return ret_val; - extern unsigned int get_timer_array_index(int index_value, unsigned int array_size, int index_offset); extern unsigned int get_timer_array_index(const INTEGER& index_value, @@ -187,14 +103,52 @@ public: TTCN_Logger::log_event_str(" }"); } + // alt-status priority: ALT_YES (return immediately) > ALT_REPEAT > ALT_MAYBE > ALT_NO alt_status timeout(Index_Redirect* index_redirect) { - ANY_FROM_OPERATION_NO_ARGS(timeout) + if (index_redirect != NULL) { + index_redirect->incr_pos(); + } + alt_status result = ALT_NO; + for (unsigned int i = 0; i < array_size; ++i) { + alt_status ret_val = array_elements[i].timeout(index_redirect); + if (ret_val == ALT_YES) { + if (index_redirect != NULL) { + index_redirect->add_index((int)i + index_offset); + } + result = ret_val; + break; + } + else if (ret_val == ALT_REPEAT || + (ret_val == ALT_MAYBE && result == ALT_NO)) { + result = ret_val; + } + } + if (index_redirect != NULL) { + index_redirect->decr_pos(); + } + return result; } boolean running(Index_Redirect* index_redirect) const { - ANY_FROM_OPERATION_NO_ARGS_BOOL(running) + if (index_redirect != NULL) { + index_redirect->incr_pos(); + } + boolean ret_val = FALSE; + for (unsigned int i = 0; i < array_size; ++i) { + ret_val = array_elements[i].running(index_redirect); + if (ret_val) { + if (index_redirect != NULL) { + index_redirect->add_index((int)i + index_offset); + } + break; + } + } + if (index_redirect != NULL) { + index_redirect->decr_pos(); + } + return ret_val; } }; @@ -261,10 +215,33 @@ public: TTCN_Logger::log_event_str(" }"); } + // alt-status priority: ALT_YES (return immediately) > ALT_REPEAT > ALT_MAYBE > ALT_NO alt_status receive(const COMPONENT_template& sender_template, COMPONENT *sender_ptr, Index_Redirect* index_redirect) { - ANY_FROM_OPERATION(receive, sender_template, sender_ptr) + if (index_redirect != NULL) { + index_redirect->incr_pos(); + } + alt_status result = ALT_NO; + for (unsigned int i = 0; i < array_size; ++i) { + alt_status ret_val = array_elements[i].receive(sender_template, + sender_ptr, index_redirect); + if (ret_val == ALT_YES) { + if (index_redirect != NULL) { + index_redirect->add_index((int)i + index_offset); + } + result = ret_val; + break; + } + else if (ret_val == ALT_REPEAT || + (ret_val == ALT_MAYBE && result == ALT_NO)) { + result = ret_val; + } + } + if (index_redirect != NULL) { + index_redirect->decr_pos(); + } + return result; } template <typename T_template> @@ -278,8 +255,29 @@ public: const COMPONENT_template& sender_template, COMPONENT* sender_ptr, Index_Redirect* index_redirect) { - ANY_FROM_OPERATION(receive, value_template, NULL, - sender_template, sender_ptr) + if (index_redirect != NULL) { + index_redirect->incr_pos(); + } + alt_status result = ALT_NO; + for (unsigned int i = 0; i < array_size; ++i) { + alt_status ret_val = array_elements[i].receive(value_template, NULL, + sender_template, sender_ptr, index_redirect); + if (ret_val == ALT_YES) { + if (index_redirect != NULL) { + index_redirect->add_index((int)i + index_offset); + } + result = ret_val; + break; + } + else if (ret_val == ALT_REPEAT || + (ret_val == ALT_MAYBE && result == ALT_NO)) { + result = ret_val; + } + } + if (index_redirect != NULL) { + index_redirect->decr_pos(); + } + return result; } template <typename T_value_redirect, typename T_template> @@ -289,14 +287,57 @@ public: const COMPONENT_template& sender_template, COMPONENT* sender_ptr, Index_Redirect* index_redirect) { - ANY_FROM_OPERATION(receive, value_template, value_redirect, - sender_template, sender_ptr) + if (index_redirect != NULL) { + index_redirect->incr_pos(); + } + alt_status result = ALT_NO; + for (unsigned int i = 0; i < array_size; ++i) { + alt_status ret_val = array_elements[i].receive(value_template, + value_redirect, sender_template, sender_ptr, index_redirect); + if (ret_val == ALT_YES) { + if (index_redirect != NULL) { + index_redirect->add_index((int)i + index_offset); + } + result = ret_val; + break; + } + else if (ret_val == ALT_REPEAT || + (ret_val == ALT_MAYBE && result == ALT_NO)) { + result = ret_val; + } + } + if (index_redirect != NULL) { + index_redirect->decr_pos(); + } + return result; } alt_status check_receive(const COMPONENT_template& sender_template, COMPONENT* sender_ptr, Index_Redirect* index_redirect) { - ANY_FROM_OPERATION(check_receive, sender_template, sender_ptr) + if (index_redirect != NULL) { + index_redirect->incr_pos(); + } + alt_status result = ALT_NO; + for (unsigned int i = 0; i < array_size; ++i) { + alt_status ret_val = array_elements[i].check_receive(sender_template, + sender_ptr, index_redirect); + if (ret_val == ALT_YES) { + if (index_redirect != NULL) { + index_redirect->add_index((int)i + index_offset); + } + result = ret_val; + break; + } + else if (ret_val == ALT_REPEAT || + (ret_val == ALT_MAYBE && result == ALT_NO)) { + result = ret_val; + } + } + if (index_redirect != NULL) { + index_redirect->decr_pos(); + } + return result; } template <typename T_template> @@ -308,8 +349,29 @@ public: const COMPONENT_template& sender_template, COMPONENT* sender_ptr, Index_Redirect* index_redirect) { - ANY_FROM_OPERATION(check_receive, value_template, NULL, - sender_template, sender_ptr) + if (index_redirect != NULL) { + index_redirect->incr_pos(); + } + alt_status result = ALT_NO; + for (unsigned int i = 0; i < array_size; ++i) { + alt_status ret_val = array_elements[i].check_receive(value_template, NULL, + sender_template, sender_ptr, index_redirect); + if (ret_val == ALT_YES) { + if (index_redirect != NULL) { + index_redirect->add_index((int)i + index_offset); + } + result = ret_val; + break; + } + else if (ret_val == ALT_REPEAT || + (ret_val == ALT_MAYBE && result == ALT_NO)) { + result = ret_val; + } + } + if (index_redirect != NULL) { + index_redirect->decr_pos(); + } + return result; } template <typename T_value_redirect, typename T_template> @@ -319,14 +381,57 @@ public: const COMPONENT_template& sender_template, COMPONENT* sender_ptr, Index_Redirect* index_redirect) { - ANY_FROM_OPERATION(check_receive, value_template, value_redirect, - sender_template, sender_ptr) + if (index_redirect != NULL) { + index_redirect->incr_pos(); + } + alt_status result = ALT_NO; + for (unsigned int i = 0; i < array_size; ++i) { + alt_status ret_val = array_elements[i].check_receive(value_template, + value_redirect, sender_template, sender_ptr, index_redirect); + if (ret_val == ALT_YES) { + if (index_redirect != NULL) { + index_redirect->add_index((int)i + index_offset); + } + result = ret_val; + break; + } + else if (ret_val == ALT_REPEAT || + (ret_val == ALT_MAYBE && result == ALT_NO)) { + result = ret_val; + } + } + if (index_redirect != NULL) { + index_redirect->decr_pos(); + } + return result; } alt_status trigger(const COMPONENT_template& sender_template, COMPONENT* sender_ptr, Index_Redirect* index_redirect) { - ANY_FROM_OPERATION(trigger, sender_template, sender_ptr) + if (index_redirect != NULL) { + index_redirect->incr_pos(); + } + alt_status result = ALT_NO; + for (unsigned int i = 0; i < array_size; ++i) { + alt_status ret_val = array_elements[i].trigger(sender_template, + sender_ptr, index_redirect); + if (ret_val == ALT_YES) { + if (index_redirect != NULL) { + index_redirect->add_index((int)i + index_offset); + } + result = ret_val; + break; + } + else if (ret_val == ALT_REPEAT || + (ret_val == ALT_MAYBE && result == ALT_NO)) { + result = ret_val; + } + } + if (index_redirect != NULL) { + index_redirect->decr_pos(); + } + return result; } template <typename T_template> @@ -338,8 +443,29 @@ public: const COMPONENT_template& sender_template, COMPONENT* sender_ptr, Index_Redirect* index_redirect) { - ANY_FROM_OPERATION(trigger, value_template, NULL, - sender_template, sender_ptr) + if (index_redirect != NULL) { + index_redirect->incr_pos(); + } + alt_status result = ALT_NO; + for (unsigned int i = 0; i < array_size; ++i) { + alt_status ret_val = array_elements[i].trigger(value_template, NULL, + sender_template, sender_ptr, index_redirect); + if (ret_val == ALT_YES) { + if (index_redirect != NULL) { + index_redirect->add_index((int)i + index_offset); + } + result = ret_val; + break; + } + else if (ret_val == ALT_REPEAT || + (ret_val == ALT_MAYBE && result == ALT_NO)) { + result = ret_val; + } + } + if (index_redirect != NULL) { + index_redirect->decr_pos(); + } + return result; } template <typename T_value_redirect, typename T_template> @@ -349,14 +475,57 @@ public: const COMPONENT_template& sender_template, COMPONENT* sender_ptr, Index_Redirect* index_redirect) { - ANY_FROM_OPERATION(trigger, value_template, value_redirect, - sender_template, sender_ptr) + if (index_redirect != NULL) { + index_redirect->incr_pos(); + } + alt_status result = ALT_NO; + for (unsigned int i = 0; i < array_size; ++i) { + alt_status ret_val = array_elements[i].trigger(value_template, + value_redirect, sender_template, sender_ptr, index_redirect); + if (ret_val == ALT_YES) { + if (index_redirect != NULL) { + index_redirect->add_index((int)i + index_offset); + } + result = ret_val; + break; + } + else if (ret_val == ALT_REPEAT || + (ret_val == ALT_MAYBE && result == ALT_NO)) { + result = ret_val; + } + } + if (index_redirect != NULL) { + index_redirect->decr_pos(); + } + return result; } alt_status getcall(const COMPONENT_template& sender_template, COMPONENT* sender_ptr, Index_Redirect* index_redirect) { - ANY_FROM_OPERATION(getcall, sender_template, sender_ptr) + if (index_redirect != NULL) { + index_redirect->incr_pos(); + } + alt_status result = ALT_NO; + for (unsigned int i = 0; i < array_size; ++i) { + alt_status ret_val = array_elements[i].getcall(sender_template, + sender_ptr, index_redirect); + if (ret_val == ALT_YES) { + if (index_redirect != NULL) { + index_redirect->add_index((int)i + index_offset); + } + result = ret_val; + break; + } + else if (ret_val == ALT_REPEAT || + (ret_val == ALT_MAYBE && result == ALT_NO)) { + result = ret_val; + } + } + if (index_redirect != NULL) { + index_redirect->decr_pos(); + } + return result; } template <typename T_template, typename T_parameter_redirect> @@ -365,14 +534,57 @@ public: const T_parameter_redirect& param_ref, COMPONENT* sender_ptr, Index_Redirect* index_redirect) { - ANY_FROM_OPERATION(getcall, getcall_template, sender_template, - param_ref, sender_ptr) + if (index_redirect != NULL) { + index_redirect->incr_pos(); + } + alt_status result = ALT_NO; + for (unsigned int i = 0; i < array_size; ++i) { + alt_status ret_val = array_elements[i].getcall(getcall_template, + sender_template, param_ref, sender_ptr, index_redirect); + if (ret_val == ALT_YES) { + if (index_redirect != NULL) { + index_redirect->add_index((int)i + index_offset); + } + result = ret_val; + break; + } + else if (ret_val == ALT_REPEAT || + (ret_val == ALT_MAYBE && result == ALT_NO)) { + result = ret_val; + } + } + if (index_redirect != NULL) { + index_redirect->decr_pos(); + } + return result; } alt_status check_getcall(const COMPONENT_template& sender_template, COMPONENT* sender_ptr, Index_Redirect* index_redirect) { - ANY_FROM_OPERATION(check_getcall, sender_template, sender_ptr) + if (index_redirect != NULL) { + index_redirect->incr_pos(); + } + alt_status result = ALT_NO; + for (unsigned int i = 0; i < array_size; ++i) { + alt_status ret_val = array_elements[i].check_getcall(sender_template, + sender_ptr, index_redirect); + if (ret_val == ALT_YES) { + if (index_redirect != NULL) { + index_redirect->add_index((int)i + index_offset); + } + result = ret_val; + break; + } + else if (ret_val == ALT_REPEAT || + (ret_val == ALT_MAYBE && result == ALT_NO)) { + result = ret_val; + } + } + if (index_redirect != NULL) { + index_redirect->decr_pos(); + } + return result; } template <typename T_template, typename T_parameter_redirect> @@ -381,14 +593,57 @@ public: const T_parameter_redirect& param_ref, COMPONENT* sender_ptr, Index_Redirect* index_redirect) { - ANY_FROM_OPERATION(check_getcall, getcall_template, sender_template, - param_ref, sender_ptr) + if (index_redirect != NULL) { + index_redirect->incr_pos(); + } + alt_status result = ALT_NO; + for (unsigned int i = 0; i < array_size; ++i) { + alt_status ret_val = array_elements[i].check_getcall(getcall_template, + sender_template, param_ref, sender_ptr, index_redirect); + if (ret_val == ALT_YES) { + if (index_redirect != NULL) { + index_redirect->add_index((int)i + index_offset); + } + result = ret_val; + break; + } + else if (ret_val == ALT_REPEAT || + (ret_val == ALT_MAYBE && result == ALT_NO)) { + result = ret_val; + } + } + if (index_redirect != NULL) { + index_redirect->decr_pos(); + } + return result; } alt_status getreply(const COMPONENT_template& sender_template, COMPONENT* sender_ptr, Index_Redirect* index_redirect) { - ANY_FROM_OPERATION(getreply, sender_template, sender_ptr) + if (index_redirect != NULL) { + index_redirect->incr_pos(); + } + alt_status result = ALT_NO; + for (unsigned int i = 0; i < array_size; ++i) { + alt_status ret_val = array_elements[i].getreply(sender_template, + sender_ptr, index_redirect); + if (ret_val == ALT_YES) { + if (index_redirect != NULL) { + index_redirect->add_index((int)i + index_offset); + } + result = ret_val; + break; + } + else if (ret_val == ALT_REPEAT || + (ret_val == ALT_MAYBE && result == ALT_NO)) { + result = ret_val; + } + } + if (index_redirect != NULL) { + index_redirect->decr_pos(); + } + return result; } template <typename T_template, typename T_parameter_redirect> @@ -397,14 +652,57 @@ public: const T_parameter_redirect& param_ref, COMPONENT* sender_ptr, Index_Redirect* index_redirect) { - ANY_FROM_OPERATION(getreply, getreply_template, sender_template, - param_ref, sender_ptr) + if (index_redirect != NULL) { + index_redirect->incr_pos(); + } + alt_status result = ALT_NO; + for (unsigned int i = 0; i < array_size; ++i) { + alt_status ret_val = array_elements[i].getreply(getreply_template, + sender_template, param_ref, sender_ptr, index_redirect); + if (ret_val == ALT_YES) { + if (index_redirect != NULL) { + index_redirect->add_index((int)i + index_offset); + } + result = ret_val; + break; + } + else if (ret_val == ALT_REPEAT || + (ret_val == ALT_MAYBE && result == ALT_NO)) { + result = ret_val; + } + } + if (index_redirect != NULL) { + index_redirect->decr_pos(); + } + return result; } alt_status check_getreply(const COMPONENT_template& sender_template, COMPONENT* sender_ptr, Index_Redirect* index_redirect) { - ANY_FROM_OPERATION(check_getreply, sender_template, sender_ptr) + if (index_redirect != NULL) { + index_redirect->incr_pos(); + } + alt_status result = ALT_NO; + for (unsigned int i = 0; i < array_size; ++i) { + alt_status ret_val = array_elements[i].check_getreply(sender_template, + sender_ptr, index_redirect); + if (ret_val == ALT_YES) { + if (index_redirect != NULL) { + index_redirect->add_index((int)i + index_offset); + } + result = ret_val; + break; + } + else if (ret_val == ALT_REPEAT || + (ret_val == ALT_MAYBE && result == ALT_NO)) { + result = ret_val; + } + } + if (index_redirect != NULL) { + index_redirect->decr_pos(); + } + return result; } template <typename T_template, typename T_parameter_redirect> @@ -413,14 +711,57 @@ public: const T_parameter_redirect& param_ref, COMPONENT* sender_ptr, Index_Redirect* index_redirect) { - ANY_FROM_OPERATION(check_getreply, getreply_template, sender_template, - param_ref, sender_ptr) + if (index_redirect != NULL) { + index_redirect->incr_pos(); + } + alt_status result = ALT_NO; + for (unsigned int i = 0; i < array_size; ++i) { + alt_status ret_val = array_elements[i].check_getreply(getreply_template, + sender_template, param_ref, sender_ptr, index_redirect); + if (ret_val == ALT_YES) { + if (index_redirect != NULL) { + index_redirect->add_index((int)i + index_offset); + } + result = ret_val; + break; + } + else if (ret_val == ALT_REPEAT || + (ret_val == ALT_MAYBE && result == ALT_NO)) { + result = ret_val; + } + } + if (index_redirect != NULL) { + index_redirect->decr_pos(); + } + return result; } alt_status get_exception(const COMPONENT_template& sender_template, COMPONENT* sender_ptr, Index_Redirect* index_redirect) { - ANY_FROM_OPERATION(get_exception, sender_template, sender_ptr) + if (index_redirect != NULL) { + index_redirect->incr_pos(); + } + alt_status result = ALT_NO; + for (unsigned int i = 0; i < array_size; ++i) { + alt_status ret_val = array_elements[i].get_exception(sender_template, + sender_ptr, index_redirect); + if (ret_val == ALT_YES) { + if (index_redirect != NULL) { + index_redirect->add_index((int)i + index_offset); + } + result = ret_val; + break; + } + else if (ret_val == ALT_REPEAT || + (ret_val == ALT_MAYBE && result == ALT_NO)) { + result = ret_val; + } + } + if (index_redirect != NULL) { + index_redirect->decr_pos(); + } + return result; } template <typename T_template> @@ -428,13 +769,57 @@ public: const COMPONENT_template& sender_template, COMPONENT* sender_ptr, Index_Redirect* index_redirect) { - ANY_FROM_OPERATION(get_exception, catch_template, sender_template, sender_ptr) + if (index_redirect != NULL) { + index_redirect->incr_pos(); + } + alt_status result = ALT_NO; + for (unsigned int i = 0; i < array_size; ++i) { + alt_status ret_val = array_elements[i].get_exception(catch_template, + sender_template, sender_ptr, index_redirect); + if (ret_val == ALT_YES) { + if (index_redirect != NULL) { + index_redirect->add_index((int)i + index_offset); + } + result = ret_val; + break; + } + else if (ret_val == ALT_REPEAT || + (ret_val == ALT_MAYBE && result == ALT_NO)) { + result = ret_val; + } + } + if (index_redirect != NULL) { + index_redirect->decr_pos(); + } + return result; } alt_status check_catch(const COMPONENT_template& sender_template, COMPONENT* sender_ptr, Index_Redirect* index_redirect) { - ANY_FROM_OPERATION(check_catch, sender_template, sender_ptr) + if (index_redirect != NULL) { + index_redirect->incr_pos(); + } + alt_status result = ALT_NO; + for (unsigned int i = 0; i < array_size; ++i) { + alt_status ret_val = array_elements[i].check_catch(sender_template, + sender_ptr, index_redirect); + if (ret_val == ALT_YES) { + if (index_redirect != NULL) { + index_redirect->add_index((int)i + index_offset); + } + result = ret_val; + break; + } + else if (ret_val == ALT_REPEAT || + (ret_val == ALT_MAYBE && result == ALT_NO)) { + result = ret_val; + } + } + if (index_redirect != NULL) { + index_redirect->decr_pos(); + } + return result; } template <typename T_template> @@ -442,13 +827,57 @@ public: const COMPONENT_template& sender_template, COMPONENT* sender_ptr, Index_Redirect* index_redirect) { - ANY_FROM_OPERATION(check_catch, catch_template, sender_template, sender_ptr) + if (index_redirect != NULL) { + index_redirect->incr_pos(); + } + alt_status result = ALT_NO; + for (unsigned int i = 0; i < array_size; ++i) { + alt_status ret_val = array_elements[i].check_catch(catch_template, + sender_template, sender_ptr, index_redirect); + if (ret_val == ALT_YES) { + if (index_redirect != NULL) { + index_redirect->add_index((int)i + index_offset); + } + result = ret_val; + break; + } + else if (ret_val == ALT_REPEAT || + (ret_val == ALT_MAYBE && result == ALT_NO)) { + result = ret_val; + } + } + if (index_redirect != NULL) { + index_redirect->decr_pos(); + } + return result; } alt_status check(const COMPONENT_template& sender_template, COMPONENT* sender_ptr, Index_Redirect* index_redirect) { - ANY_FROM_OPERATION(check, sender_template, sender_ptr) + if (index_redirect != NULL) { + index_redirect->incr_pos(); + } + alt_status result = ALT_NO; + for (unsigned int i = 0; i < array_size; ++i) { + alt_status ret_val = array_elements[i].check(sender_template, sender_ptr, + index_redirect); + if (ret_val == ALT_YES) { + if (index_redirect != NULL) { + index_redirect->add_index((int)i + index_offset); + } + result = ret_val; + break; + } + else if (ret_val == ALT_REPEAT || + (ret_val == ALT_MAYBE && result == ALT_NO)) { + result = ret_val; + } + } + if (index_redirect != NULL) { + index_redirect->decr_pos(); + } + return result; } }; @@ -540,24 +969,99 @@ public: * Returns the length of the decoded data. */ int JSON_decode(const TTCN_Typedescriptor_t&, JSON_Tokenizer&, boolean); + // alt-status priority: ALT_YES (return immediately) > ALT_REPEAT > ALT_MAYBE > ALT_NO alt_status done(Index_Redirect* index_redirect) const { - ANY_FROM_OPERATION_NO_ARGS(done) + if (index_redirect != NULL) { + index_redirect->incr_pos(); + } + alt_status result = ALT_NO; + for (unsigned int i = 0; i < array_size; ++i) { + alt_status ret_val = array_elements[i].done(index_redirect); + if (ret_val == ALT_YES) { + if (index_redirect != NULL) { + index_redirect->add_index((int)i + index_offset); + } + result = ret_val; + break; + } + else if (ret_val == ALT_REPEAT || + (ret_val == ALT_MAYBE && result == ALT_NO)) { + result = ret_val; + } + } + if (index_redirect != NULL) { + index_redirect->decr_pos(); + } + return result; } alt_status killed(Index_Redirect* index_redirect) const { - ANY_FROM_OPERATION_NO_ARGS(killed) + if (index_redirect != NULL) { + index_redirect->incr_pos(); + } + alt_status result = ALT_NO; + for (unsigned int i = 0; i < array_size; ++i) { + alt_status ret_val = array_elements[i].killed(index_redirect); + if (ret_val == ALT_YES) { + if (index_redirect != NULL) { + index_redirect->add_index((int)i + index_offset); + } + result = ret_val; + break; + } + else if (ret_val == ALT_REPEAT || + (ret_val == ALT_MAYBE && result == ALT_NO)) { + result = ret_val; + } + } + if (index_redirect != NULL) { + index_redirect->decr_pos(); + } + return result; } boolean running(Index_Redirect* index_redirect) const { - ANY_FROM_OPERATION_NO_ARGS_BOOL(running) + if (index_redirect != NULL) { + index_redirect->incr_pos(); + } + boolean ret_val = FALSE; + for (unsigned int i = 0; i < array_size; ++i) { + ret_val = array_elements[i].running(index_redirect); + if (ret_val) { + if (index_redirect != NULL) { + index_redirect->add_index((int)i + index_offset); + } + break; + } + } + if (index_redirect != NULL) { + index_redirect->decr_pos(); + } + return ret_val; } boolean alive(Index_Redirect* index_redirect) const { - ANY_FROM_OPERATION_NO_ARGS_BOOL(alive) + if (index_redirect != NULL) { + index_redirect->incr_pos(); + } + boolean ret_val = FALSE; + for (unsigned int i = 0; i < array_size; ++i) { + ret_val = array_elements[i].alive(index_redirect); + if (ret_val) { + if (index_redirect != NULL) { + index_redirect->add_index((int)i + index_offset); + } + break; + } + } + if (index_redirect != NULL) { + index_redirect->decr_pos(); + } + return ret_val; } }; -- GitLab