integer string_to_integer(char* s) { integer result = create_integer((int)ceil(LOG_2_10*strlen(s)/COMPONENT_BITS)); set_zero_integer(result); integer digit = create_integer(1); int i; for (i = 0; s[i] != '\0'; i++) { multiply_small_integer(result, 10, result); digit.c[0] = s[i] - '0'; add_integer(result, digit, result); } free_integer(digit); return result; }
/** * Tests the pointer return. * * In other words, if an array element is returned correctly, * when using a null pointer. */ void test_pointer_return() { fputs("Test pointer return:\n", stdout); // The character array (including new line and null termination character). void* c = NULL_POINTER; int* cs = INTEGER_NULL_POINTER; // Create character array. c = (void*) "Hello World!"; create_integer((void*) &cs); *cs = 13; // THIS is the important part of the test. // A simple null pointer can be declared and passed to a procedure (as reference &). // The procedure can then dereference the pointer (*parameter) and store the result. // Since this works, one can avoid allocating extra local result variables, // and use just a null pointer to initialize the result variable. // The result array. void* r = NULL_POINTER; // Get character from character array. get_array_elements(c, (void*) SIX_NUMBER, (void*) &r, (void*) CHARACTER_ARRAY); // Print result (character array). fprintf(stderr, "r: %s\n", (char*) r); // Destroy character array. destroy_integer((void*) &cs); }
char* integer_to_string(integer x) { int i, result_len; char* result = (char*)malloc((int)ceil(COMPONENT_BITS*x.num_components/LOG_2_10) + 2); integer ten = create_integer(1); ten.c[0] = 10; if (is_zero_integer(x)) { strcpy(result, "0"); } else { for (i = 0; !is_zero_integer(x); i++) { result[i] = (char)mod_small_integer(x, 10) + '0'; divide_small_integer(x, 10, x); } result[i] = '\0'; } result_len = strlen(result); for(i=0; i < result_len/2; i++) { char temp = result[i]; result[i] = result[result_len - i - 1]; result[result_len - i - 1] = temp; } free_integer(ten); return result; }
unsigned int integer_to_binary(unsigned char** result,integer data,int keyLenBytes){ integer base=string_to_integer("256"); integer div=create_integer(data.num_components); copy_integer(data,div); integer zero=create_integer(1); zero.c[0]=0; unsigned char* pf=new unsigned char[data.num_components]; for(int i=0; i<data.num_components; i++){ pf[i]=0; } int tpos=data.num_components-1; pf[tpos]=div.c[0]; tpos--; while(compare_integers(div,zero)==1){ integer mod=create_integer(div.num_components+1+1); mod_integer(div,base,mod); integer div_temp=create_integer(div.num_components); copy_integer(div,div_temp); divide_small_integer(div_temp,256,div); pf[tpos]=div.c[0]; tpos--; } int startpos=div.num_components-keyLenBytes; *result=new unsigned char[keyLenBytes]; for(int i=0; i<keyLenBytes; i++){ (*result)[i]=pf[i+startpos]; } return keyLenBytes; }
integer hex_to_integer(unsigned char* data, unsigned int datalenBytes, unsigned int pad){ integer base=string_to_integer("256"); int siz=datalenBytes; integer radix=create_integer(siz); set_zero_integer(radix); radix.c[0]=1; integer result=create_integer(siz*2+pad); set_zero_integer(result); integer digit=create_integer(1); for(int i=datalenBytes-1; i>=0; i--){ digit.c[0]=data[i]; integer part_res=create_integer(1+radix.num_components+1); set_zero_integer(part_res); multiply_integer(digit,radix,part_res); add_integer(result,part_res,result); free_integer(part_res); integer radix_temp=create_integer(radix.num_components); copy_integer(radix,radix_temp); multiply_integer(radix_temp,base,radix); free_integer(radix_temp); } optimize_integer(result); return result; }
void mod_integer(integer left, integer right, integer result) { integer mod_two_power = create_integer(right.num_components + 1); int i, bit; set_zero_integer(result); set_zero_integer(mod_two_power); mod_two_power.c[0] = 1; for(i=0; i<left.num_components; i++) { for(bit=0; bit<COMPONENT_BITS; bit++) { if ((left.c[i] & (1 << bit)) != 0) { add_integer(result, mod_two_power, result); if (compare_integers(result, right) >= 0) { subtract_integer(result, right, result); } } shift_left_one_integer(mod_two_power); if (compare_integers(mod_two_power, right) >= 0) { subtract_integer(mod_two_power, right, mod_two_power); } } } free_integer(mod_two_power); }
/** * Decodes the configuration node into a compound. * * @param p0 the destination (internals memory) (Hand over as reference!) * @param p1 the destination count * @param p2 the destination size * @param p3 the source (libxml2 xml node) * @param p4 the source count */ void decode_configuration_node(void* p0, void* p1, void* p2, const void* p3, const void* p4) { if (p3 != NULL_POINTER) { xmlNode* s = (xmlNode*) p3; if (p0 != NULL_POINTER) { void** d = (void**) p0; if (s != NULL_POINTER) { log_message_debug("Decode configuration node."); // Determine first child node. xmlNode* c = s->children; // The source name. void* sn = NULL_POINTER; int snc = 0; // The source channel. void* sc = NULL_POINTER; int scc = 0; // The source abstraction. void* sa = NULL_POINTER; int sac = 0; // The source model. void* sm = NULL_POINTER; int smc = 0; // The destination model. void* dm = NULL_POINTER; int* dmc = INTEGER_NULL_POINTER; int* dms = INTEGER_NULL_POINTER; // The comparison result. int r = 0; while (1) { if (c == NULL_POINTER) { break; } if (c->type == XML_ELEMENT_NODE) { // Decode child node properties. decode_cybol_property( (void*) &sn, (void*) &snc, (void*) &sc, (void*) &scc, (void*) &sa, (void*) &sac, (void*) &sm, (void*) &smc, (void*) c); fprintf(stderr, "sn: %s\n", (char*) sn); fprintf(stderr, "snc: %i\n", snc); fprintf(stderr, "sc: %s\n", (char*) sc); fprintf(stderr, "scc: %i\n", scc); fprintf(stderr, "sa: %s\n", (char*) sa); fprintf(stderr, "sac: %i\n", sac); fprintf(stderr, "sm: %s\n", (char*) sm); fprintf(stderr, "smc: %i\n", smc); if (r != 1) { compare_arrays(sn, (void*) &snc, (void*) STARTUP_CHANNEL_CONFIGURATION_NAME, (void*) STARTUP_CHANNEL_CONFIGURATION_NAME_COUNT, (void*) &r, (void*) CHARACTER_ARRAY); if (r == 1) { log_message_debug("Found startup channel configuration name."); // Create destination model. create_integer((void*) &dmc); *dmc = 0; create_integer((void*) &dms); *dms = 0; create_model((void*) &dm, (void*) dmc, (void*) dms, sm, (void*) &smc, sa, (void*) &sac, sc, (void*) &scc); // Set configuration parameter in internals memory. set_array_elements(*d, (void*) STARTUP_CHANNEL_INTERNAL, (void*) &dm, (void*) ONE_NUMBER, (void*) POINTER_ARRAY); set_array_elements(*d, (void*) STARTUP_CHANNEL_COUNT_INTERNAL, (void*) &dmc, (void*) ONE_NUMBER, (void*) POINTER_ARRAY); set_array_elements(*d, (void*) STARTUP_CHANNEL_SIZE_INTERNAL, (void*) &dms, (void*) ONE_NUMBER, (void*) POINTER_ARRAY); } } if (r != 1) { compare_arrays(sn, (void*) &snc, (void*) STARTUP_ABSTRACTION_CONFIGURATION_NAME, (void*) STARTUP_ABSTRACTION_CONFIGURATION_NAME_COUNT, (void*) &r, (void*) CHARACTER_ARRAY); if (r == 1) { log_message_debug("Found startup abstraction configuration name."); // Create destination model. create_integer((void*) &dmc); *dmc = 0; create_integer((void*) &dms); *dms = 0; create_model((void*) &dm, (void*) dmc, (void*) dms, sm, (void*) &smc, sa, (void*) &sac, sc, (void*) &scc); // Set configuration parameter in internals memory. set_array_elements(*d, (void*) STARTUP_ABSTRACTION_INTERNAL, (void*) &dm, (void*) ONE_NUMBER, (void*) POINTER_ARRAY); set_array_elements(*d, (void*) STARTUP_ABSTRACTION_COUNT_INTERNAL, (void*) &dmc, (void*) ONE_NUMBER, (void*) POINTER_ARRAY); set_array_elements(*d, (void*) STARTUP_ABSTRACTION_SIZE_INTERNAL, (void*) &dms, (void*) ONE_NUMBER, (void*) POINTER_ARRAY); } } if (r != 1) { compare_arrays(sn, (void*) &snc, (void*) STARTUP_MODEL_CONFIGURATION_NAME, (void*) STARTUP_MODEL_CONFIGURATION_NAME_COUNT, (void*) &r, (void*) CHARACTER_ARRAY); if (r == 1) { log_message_debug("Found startup model configuration name."); // Create destination model. create_integer((void*) &dmc); *dmc = 0; create_integer((void*) &dms); *dms = 0; create_model((void*) &dm, (void*) dmc, (void*) dms, sm, (void*) &smc, sa, (void*) &sac, sc, (void*) &scc); // Set configuration parameter in internals memory. set_array_elements(*d, (void*) STARTUP_MODEL_INTERNAL, (void*) &dm, (void*) ONE_NUMBER, (void*) POINTER_ARRAY); set_array_elements(*d, (void*) STARTUP_MODEL_COUNT_INTERNAL, (void*) &dmc, (void*) ONE_NUMBER, (void*) POINTER_ARRAY); set_array_elements(*d, (void*) STARTUP_MODEL_SIZE_INTERNAL, (void*) &dms, (void*) ONE_NUMBER, (void*) POINTER_ARRAY); } } if (r != 1) { compare_arrays(sn, (void*) &snc, (void*) UNIX_SERVER_SOCKET_ACTIVE_CONFIGURATION_NAME, (void*) UNIX_SERVER_SOCKET_ACTIVE_CONFIGURATION_NAME_COUNT, (void*) &r, (void*) CHARACTER_ARRAY); if (r == 1) { log_message_debug("Found unix server socket active configuration name."); // Create destination model. create_model((void*) &dm, (void*) ONE_NUMBER, (void*) ONE_NUMBER, sm, (void*) &smc, sa, (void*) &sac, sc, (void*) &scc); // Set configuration parameter in internals memory. set_array_elements(*d, (void*) UNIX_SERVER_SOCKET_ACTIVE_INTERNAL, (void*) &dm, (void*) ONE_NUMBER, (void*) POINTER_ARRAY); } } if (r != 1) { compare_arrays(sn, (void*) &snc, (void*) UNIX_SERVER_SOCKET_FILENAME_CONFIGURATION_NAME, (void*) UNIX_SERVER_SOCKET_FILENAME_CONFIGURATION_NAME_COUNT, (void*) &r, (void*) CHARACTER_ARRAY); if (r == 1) { log_message_debug("Found unix server socket filename configuration name."); // Create destination model. create_model((void*) &dm, (void*) ONE_NUMBER, (void*) ONE_NUMBER, sm, (void*) &smc, sa, (void*) &sac, sc, (void*) &scc); // Set configuration parameter in internals memory. set_array_elements(*d, (void*) UNIX_SERVER_SOCKET_FILENAME_INTERNAL, (void*) &dm, (void*) ONE_NUMBER, (void*) POINTER_ARRAY); } } if (r != 1) { compare_arrays(sn, (void*) &snc, (void*) TCP_SERVER_SOCKET_ACTIVE_CONFIGURATION_NAME, (void*) TCP_SERVER_SOCKET_ACTIVE_CONFIGURATION_NAME_COUNT, (void*) &r, (void*) CHARACTER_ARRAY); if (r == 1) { log_message_debug("Found tcp server socket active configuration name."); // Create destination model. create_model((void*) &dm, (void*) ONE_NUMBER, (void*) ONE_NUMBER, sm, (void*) &smc, sa, (void*) &sac, sc, (void*) &scc); // Set configuration parameter in internals memory. set_array_elements(*d, (void*) TCP_SERVER_SOCKET_ACTIVE_INTERNAL, (void*) &dm, (void*) ONE_NUMBER, (void*) POINTER_ARRAY); } } if (r != 1) { compare_arrays(sn, (void*) &snc, (void*) TCP_SERVER_SOCKET_PORT_CONFIGURATION_NAME, (void*) TCP_SERVER_SOCKET_PORT_CONFIGURATION_NAME_COUNT, (void*) &r, (void*) CHARACTER_ARRAY); if (r == 1) { log_message_debug("Found tcp server socket port configuration name."); // Create destination model. create_model((void*) &dm, (void*) ONE_NUMBER, (void*) ONE_NUMBER, sm, (void*) &smc, sa, (void*) &sac, sc, (void*) &scc); // Set configuration parameter in internals memory. set_array_elements(*d, (void*) TCP_SERVER_SOCKET_PORT_INTERNAL, (void*) &dm, (void*) ONE_NUMBER, (void*) POINTER_ARRAY); } } if (r != 1) { compare_arrays(sn, (void*) &snc, (void*) X_WINDOWS_SERVER_ACTIVE_CONFIGURATION_NAME, (void*) X_WINDOWS_SERVER_ACTIVE_CONFIGURATION_NAME_COUNT, (void*) &r, (void*) CHARACTER_ARRAY); if (r == 1) { log_message_debug("Found x windows server active configuration name."); // Create destination model. create_model((void*) &dm, (void*) ONE_NUMBER, (void*) ONE_NUMBER, sm, (void*) &smc, sa, (void*) &sac, sc, (void*) &scc); // Set configuration parameter in internals memory. set_array_elements(*d, (void*) X_WINDOWS_SERVER_ACTIVE_INTERNAL, (void*) &dm, (void*) ONE_NUMBER, (void*) POINTER_ARRAY); } } // Reset source name. sn = NULL_POINTER; snc = 0; // Reset source channel. sc = NULL_POINTER; scc = 0; // Reset source abstraction. sa = NULL_POINTER; sac = 0; // Reset source model. sm = NULL_POINTER; smc = 0; // Reset destination model. dm = NULL_POINTER; dmc = INTEGER_NULL_POINTER; dms = INTEGER_NULL_POINTER; // Reset comparison result. r = 0; } c = c->next; } } else { //?? log_message((void*) &ERROR_LOG_LEVEL, (void*) &"Could not translate xml node. The source is null."); } } else { //?? log_message((void*) &ERROR_LOG_LEVEL, (void*) &"Could not translate xml node. The source is null."); } } else { //?? log_message((void*) &ERROR_LOG_LEVEL, (void*) &"Could not translate xml node. The source parameter is null."); } }
/* ** Perform a reduce action and the shift that must immediately ** follow the reduce. */ static void yy_reduce( yyParser *yypParser, /* The parser */ int yyruleno /* Number of the rule by which to reduce */ ){ int yygoto; /* The next state */ int yyact; /* The next action */ YYMINORTYPE yygotominor; /* The LHS of the rule reduced */ yyStackEntry *yymsp; /* The top of the parser's stack */ int yysize; /* Amount to pop the stack */ ParseARG_FETCH; yymsp = &yypParser->yystack[yypParser->yyidx]; #ifndef NDEBUG if( yyTraceFILE && yyruleno>=0 && yyruleno<(int)(sizeof(yyRuleName)/sizeof(yyRuleName[0])) ){ yysize = yyRuleInfo[yyruleno].nrhs; fprintf(yyTraceFILE, "%sReduce [%s] -> state %d.\n", yyTracePrompt, yyRuleName[yyruleno], yymsp[-yysize].stateno); } #endif /* NDEBUG */ /* Silence complaints from purify about yygotominor being uninitialized ** in some cases when it is copied into the stack after the following ** switch. yygotominor is uninitialized when a rule reduces that does ** not set the value of its left-hand side nonterminal. Leaving the ** value of the nonterminal uninitialized is utterly harmless as long ** as the value is never used. So really the only thing this code ** accomplishes is to quieten purify. ** ** 2007-01-16: The wireshark project (www.wireshark.org) reports that ** without this code, their parser segfaults. I'm not sure what there ** parser is doing to make this happen. This is the second bug report ** from wireshark this week. Clearly they are stressing Lemon in ways ** that it has not been previously stressed... (SQLite ticket #2172) */ /*memset(&yygotominor, 0, sizeof(yygotominor));*/ yygotominor = yyzerominor; switch( yyruleno ){ /* Beginning here are the reduction cases. A typical example ** follows: ** case 0: ** #line <lineno> <grammarfile> ** { ... } // User supplied code ** #line <lineno> <thisfile> ** break; */ case 0: /* expression ::= expr */ #line 35 "/home/veei/git/calculator/expressions.grammar.y" { state->root = yymsp[0].minor.yy0; } #line 809 "/home/veei/git/calculator/expressions.grammar.cpp" break; case 1: /* identifier ::= IDENTIFIER */ #line 38 "/home/veei/git/calculator/expressions.grammar.y" { yygotominor.yy0 = create_identifier(yymsp[0].minor.yy0, state->vpool); add_to_temp_set(yygotominor.yy0, state->temp_set); } #line 817 "/home/veei/git/calculator/expressions.grammar.cpp" break; case 2: /* identifier ::= identifier DOT IDENTIFIER */ #line 44 "/home/veei/git/calculator/expressions.grammar.y" { yygotominor.yy0 = create_access_operator(yymsp[-2].minor.yy0, yymsp[0].minor.yy0); remove_from_temp_set(yymsp[-2].minor.yy0, state->temp_set); add_to_temp_set(yygotominor.yy0, state->temp_set); yy_destructor(yypParser,18,&yymsp[-1].minor); } #line 827 "/home/veei/git/calculator/expressions.grammar.cpp" break; case 3: /* term ::= identifier */ case 8: /* expr ::= term */ yytestcase(yyruleno==8); #line 50 "/home/veei/git/calculator/expressions.grammar.y" { yygotominor.yy0 = yymsp[0].minor.yy0; } #line 833 "/home/veei/git/calculator/expressions.grammar.cpp" break; case 4: /* term ::= INTEGER */ #line 53 "/home/veei/git/calculator/expressions.grammar.y" { yygotominor.yy0 = create_integer(yymsp[0].minor.yy0); add_to_temp_set(yygotominor.yy0, state->temp_set); } #line 841 "/home/veei/git/calculator/expressions.grammar.cpp" break; case 5: /* term ::= FLOAT */ #line 59 "/home/veei/git/calculator/expressions.grammar.y" { yygotominor.yy0 = create_float(yymsp[0].minor.yy0); add_to_temp_set(yygotominor.yy0, state->temp_set); } #line 849 "/home/veei/git/calculator/expressions.grammar.cpp" break; case 6: /* term ::= BOOLEAN */ #line 65 "/home/veei/git/calculator/expressions.grammar.y" { yygotominor.yy0 = create_boolean(yymsp[0].minor.yy0); add_to_temp_set(yygotominor.yy0, state->temp_set); } #line 857 "/home/veei/git/calculator/expressions.grammar.cpp" break; case 7: /* term ::= STRING */ #line 71 "/home/veei/git/calculator/expressions.grammar.y" { yygotominor.yy0 = create_string(yymsp[0].minor.yy0); add_to_temp_set(yygotominor.yy0, state->temp_set); } #line 865 "/home/veei/git/calculator/expressions.grammar.cpp" break; case 9: /* expr ::= expr PLUS expr */ #line 79 "/home/veei/git/calculator/expressions.grammar.y" { yygotominor.yy0 = create_add_operator(yymsp[-2].minor.yy0, yymsp[0].minor.yy0); add_to_temp_set(yygotominor.yy0, state->temp_set); remove_from_temp_set(yymsp[-2].minor.yy0, state->temp_set); remove_from_temp_set(yymsp[0].minor.yy0, state->temp_set); yy_destructor(yypParser,11,&yymsp[-1].minor); } #line 876 "/home/veei/git/calculator/expressions.grammar.cpp" break; case 10: /* expr ::= expr MINUS expr */ #line 87 "/home/veei/git/calculator/expressions.grammar.y" { yygotominor.yy0 = create_sub_operator(yymsp[-2].minor.yy0, yymsp[0].minor.yy0); add_to_temp_set(yygotominor.yy0, state->temp_set); remove_from_temp_set(yymsp[-2].minor.yy0, state->temp_set); remove_from_temp_set(yymsp[0].minor.yy0, state->temp_set); yy_destructor(yypParser,12,&yymsp[-1].minor); } #line 887 "/home/veei/git/calculator/expressions.grammar.cpp" break; case 11: /* expr ::= expr DIVIDE expr */ #line 95 "/home/veei/git/calculator/expressions.grammar.y" { yygotominor.yy0 = create_div_operator(yymsp[-2].minor.yy0, yymsp[0].minor.yy0); add_to_temp_set(yygotominor.yy0, state->temp_set); remove_from_temp_set(yymsp[-2].minor.yy0, state->temp_set); remove_from_temp_set(yymsp[0].minor.yy0, state->temp_set); yy_destructor(yypParser,15,&yymsp[-1].minor); } #line 898 "/home/veei/git/calculator/expressions.grammar.cpp" break; case 12: /* expr ::= expr MOD expr */ #line 103 "/home/veei/git/calculator/expressions.grammar.y" { yygotominor.yy0 = create_mod_operator(yymsp[-2].minor.yy0, yymsp[0].minor.yy0); add_to_temp_set(yygotominor.yy0, state->temp_set); remove_from_temp_set(yymsp[-2].minor.yy0, state->temp_set); remove_from_temp_set(yymsp[0].minor.yy0, state->temp_set); yy_destructor(yypParser,16,&yymsp[-1].minor); } #line 909 "/home/veei/git/calculator/expressions.grammar.cpp" break; case 13: /* expr ::= expr TIMES expr */ #line 111 "/home/veei/git/calculator/expressions.grammar.y" { yygotominor.yy0 = create_times_operator(yymsp[-2].minor.yy0, yymsp[0].minor.yy0); add_to_temp_set(yygotominor.yy0, state->temp_set); remove_from_temp_set(yymsp[-2].minor.yy0, state->temp_set); remove_from_temp_set(yymsp[0].minor.yy0, state->temp_set); yy_destructor(yypParser,14,&yymsp[-1].minor); } #line 920 "/home/veei/git/calculator/expressions.grammar.cpp" break; case 14: /* expr ::= LEFT_P expr RIGHT_P */ #line 119 "/home/veei/git/calculator/expressions.grammar.y" { yygotominor.yy0 = yymsp[-1].minor.yy0; yy_destructor(yypParser,23,&yymsp[-2].minor); yy_destructor(yypParser,24,&yymsp[0].minor); } #line 929 "/home/veei/git/calculator/expressions.grammar.cpp" break; case 15: /* expr ::= MINUS expr */ #line 124 "/home/veei/git/calculator/expressions.grammar.y" { yygotominor.yy0 = create_minus_operator(yymsp[0].minor.yy0); add_to_temp_set(yygotominor.yy0, state->temp_set); remove_from_temp_set(yymsp[0].minor.yy0, state->temp_set); yy_destructor(yypParser,12,&yymsp[-1].minor); } #line 939 "/home/veei/git/calculator/expressions.grammar.cpp" break; case 16: /* expr ::= NOT expr */ #line 131 "/home/veei/git/calculator/expressions.grammar.y" { yygotominor.yy0 = create_not_operator(yymsp[0].minor.yy0); add_to_temp_set(yygotominor.yy0, state->temp_set); remove_from_temp_set(yymsp[0].minor.yy0, state->temp_set); yy_destructor(yypParser,4,&yymsp[-1].minor); } #line 949 "/home/veei/git/calculator/expressions.grammar.cpp" break; case 17: /* expr ::= expr AND expr */ #line 138 "/home/veei/git/calculator/expressions.grammar.y" { yygotominor.yy0 = create_and_operator(yymsp[-2].minor.yy0, yymsp[0].minor.yy0); add_to_temp_set(yygotominor.yy0, state->temp_set); remove_from_temp_set(yymsp[-2].minor.yy0, state->temp_set); remove_from_temp_set(yymsp[0].minor.yy0, state->temp_set); yy_destructor(yypParser,2,&yymsp[-1].minor); } #line 960 "/home/veei/git/calculator/expressions.grammar.cpp" break; case 18: /* expr ::= expr OR expr */ #line 146 "/home/veei/git/calculator/expressions.grammar.y" { yygotominor.yy0 = create_or_operator(yymsp[-2].minor.yy0, yymsp[0].minor.yy0); add_to_temp_set(yygotominor.yy0, state->temp_set); remove_from_temp_set(yymsp[-2].minor.yy0, state->temp_set); remove_from_temp_set(yymsp[0].minor.yy0, state->temp_set); yy_destructor(yypParser,3,&yymsp[-1].minor); } #line 971 "/home/veei/git/calculator/expressions.grammar.cpp" break; case 19: /* expr ::= expr LESS expr */ #line 154 "/home/veei/git/calculator/expressions.grammar.y" { yygotominor.yy0 = create_less_operator(yymsp[-2].minor.yy0, yymsp[0].minor.yy0); add_to_temp_set(yygotominor.yy0, state->temp_set); remove_from_temp_set(yymsp[-2].minor.yy0, state->temp_set); remove_from_temp_set(yymsp[0].minor.yy0, state->temp_set); yy_destructor(yypParser,5,&yymsp[-1].minor); } #line 982 "/home/veei/git/calculator/expressions.grammar.cpp" break; case 20: /* expr ::= expr LESS_OR_EQUAL expr */ #line 162 "/home/veei/git/calculator/expressions.grammar.y" { yygotominor.yy0 = create_less_or_equal_operator(yymsp[-2].minor.yy0, yymsp[0].minor.yy0); add_to_temp_set(yygotominor.yy0, state->temp_set); remove_from_temp_set(yymsp[-2].minor.yy0, state->temp_set); remove_from_temp_set(yymsp[0].minor.yy0, state->temp_set); yy_destructor(yypParser,6,&yymsp[-1].minor); } #line 993 "/home/veei/git/calculator/expressions.grammar.cpp" break; case 21: /* expr ::= expr GREATER expr */ #line 170 "/home/veei/git/calculator/expressions.grammar.y" { yygotominor.yy0 = create_greater_operator(yymsp[-2].minor.yy0, yymsp[0].minor.yy0); add_to_temp_set(yygotominor.yy0, state->temp_set); remove_from_temp_set(yymsp[-2].minor.yy0, state->temp_set); remove_from_temp_set(yymsp[0].minor.yy0, state->temp_set); yy_destructor(yypParser,7,&yymsp[-1].minor); } #line 1004 "/home/veei/git/calculator/expressions.grammar.cpp" break; case 22: /* expr ::= expr GREATER_OR_EQUAL expr */ #line 178 "/home/veei/git/calculator/expressions.grammar.y" { yygotominor.yy0 = create_greater_or_equal_operator(yymsp[-2].minor.yy0, yymsp[0].minor.yy0); add_to_temp_set(yygotominor.yy0, state->temp_set); remove_from_temp_set(yymsp[-2].minor.yy0, state->temp_set); remove_from_temp_set(yymsp[0].minor.yy0, state->temp_set); yy_destructor(yypParser,8,&yymsp[-1].minor); } #line 1015 "/home/veei/git/calculator/expressions.grammar.cpp" break; case 23: /* expr ::= expr EQUAL expr */ #line 186 "/home/veei/git/calculator/expressions.grammar.y" { yygotominor.yy0 = create_equal_operator(yymsp[-2].minor.yy0, yymsp[0].minor.yy0); add_to_temp_set(yygotominor.yy0, state->temp_set); remove_from_temp_set(yymsp[-2].minor.yy0, state->temp_set); remove_from_temp_set(yymsp[0].minor.yy0, state->temp_set); yy_destructor(yypParser,9,&yymsp[-1].minor); } #line 1026 "/home/veei/git/calculator/expressions.grammar.cpp" break; case 24: /* expr ::= expr NOT_EQUAL expr */ #line 194 "/home/veei/git/calculator/expressions.grammar.y" { yygotominor.yy0 = create_not_equal_operator(yymsp[-2].minor.yy0, yymsp[0].minor.yy0); add_to_temp_set(yygotominor.yy0, state->temp_set); remove_from_temp_set(yymsp[-2].minor.yy0, state->temp_set); remove_from_temp_set(yymsp[0].minor.yy0, state->temp_set); yy_destructor(yypParser,10,&yymsp[-1].minor); } #line 1037 "/home/veei/git/calculator/expressions.grammar.cpp" break; case 25: /* expr ::= identifier ASSIGN expr */ #line 202 "/home/veei/git/calculator/expressions.grammar.y" { yygotominor.yy0 = create_assignment_operator(yymsp[-2].minor.yy0, yymsp[0].minor.yy0); add_to_temp_set(yygotominor.yy0, state->temp_set); remove_from_temp_set(yymsp[-2].minor.yy0, state->temp_set); remove_from_temp_set(yymsp[0].minor.yy0, state->temp_set); yy_destructor(yypParser,1,&yymsp[-1].minor); } #line 1048 "/home/veei/git/calculator/expressions.grammar.cpp" break; default: break; }; yygoto = yyRuleInfo[yyruleno].lhs; yysize = yyRuleInfo[yyruleno].nrhs; yypParser->yyidx -= yysize; yyact = yy_find_reduce_action(yymsp[-yysize].stateno,(YYCODETYPE)yygoto); if( yyact <= YY_MAX_SHIFTREDUCE ){ if( yyact>YY_MAX_SHIFT ) yyact += YY_MIN_REDUCE - YY_MIN_SHIFTREDUCE; /* If the reduce action popped at least ** one element off the stack, then we can push the new element back ** onto the stack here, and skip the stack overflow test in yy_shift(). ** That gives a significant speed improvement. */ if( yysize ){ yypParser->yyidx++; yymsp -= yysize-1; yymsp->stateno = (YYACTIONTYPE)yyact; yymsp->major = (YYCODETYPE)yygoto; yymsp->minor = yygotominor; yyTraceShift(yypParser, yyact); }else{ yy_shift(yypParser,yyact,yygoto,&yygotominor); } }else{ assert( yyact == YY_ACCEPT_ACTION ); yy_accept(yypParser); } }
int pow_mod(unsigned char** result,unsigned char* p,unsigned char* q, unsigned char* r,unsigned int keyLengthBytes){ std::set_new_handler(newh); Array<integer> factors; integer div=hex_to_integer(q,keyLengthBytes,0); int siz=keyLengthBytes; integer power_of_two=create_integer(siz); set_zero_integer(power_of_two); integer zero=create_integer(1); set_zero_integer(zero); integer two=string_to_integer("2"); integer one=string_to_integer("1"); int i=0; integer div_temp=create_integer(div.num_components); integer rem=create_integer(div.num_components+2); while(compare_integers(div, zero) == 1){ set_zero_integer(rem); mod_integer(div, two,rem); copy_integer(div,div_temp); divide_small_integer(div_temp,2,div); if(compare_integers(rem, zero) == 1){ integer ptt=create_integer(power_of_two.num_components); copy_integer(power_of_two,ptt); factors.pushBack(ptt); } add_integer(power_of_two,one,power_of_two); i++; } free_integer(rem); free_integer(div_temp); Array<integer> partial_results; integer part_res=hex_to_integer(p,keyLengthBytes,2); integer ri=hex_to_integer(r,keyLengthBytes,1); integer idx = create_integer(part_res.num_components); set_zero_integer(idx); integer part_res_temp1=create_integer(part_res.num_components); integer part_res_temp2=create_integer(part_res.num_components); integer part_res_temp3=create_integer(part_res.num_components); for(int i=0; i<factors.size(); i++){ while(compare_integers(factors[i],idx)==1){ copy_integer(part_res,part_res_temp1); copy_integer(part_res,part_res_temp2); multiply_integer(part_res_temp1,part_res_temp2,part_res); copy_integer(part_res,part_res_temp3); mod_integer(part_res_temp3,ri,part_res); add_integer(idx,one,idx); } integer ptt=create_integer(part_res.num_components); copy_integer(part_res,ptt); partial_results.pushBack(ptt); } free_integer(part_res_temp1); free_integer(part_res_temp2); free_integer(part_res_temp3); integer resulti=create_integer(ri.num_components+1); set_zero_integer(resulti); resulti.c[0]=1; integer resulti_temp=create_integer(resulti.num_components); integer resulti_temp2=create_integer(resulti.num_components); for(int i=0; i<partial_results.size(); i++){ copy_integer(resulti,resulti_temp); multiply_integer(resulti_temp,partial_results[i],resulti); copy_integer(resulti,resulti_temp2); mod_integer(resulti_temp2,ri,resulti); } free_integer(resulti_temp); free_integer(resulti_temp2); int lol=integer_to_binary(result,resulti,keyLengthBytes); return lol; }