示例#1
0
int func_optimize(tree* my_tree, bool* is_optimized)
{
	assert(my_tree);
	if (my_tree -> type != TR_F) return TREE_OK;
	
	assert(is_optimized);
	assert(my_tree -> right);

	

	int argc = 0;
	int ret = 0;
	int number_of_func = 0;

	CALL(count_args(my_tree, &argc));
	CALL(verify_func(my_tree, argc, &number_of_func));

	if (is_possible_func_optimize(my_tree, argc) == false) return TREE_OK;

	double argv[MAXVARS] = {};

	CALL(get_args(my_tree, argv, (const int)argc));

	double value = 0;

	CALL((math_funcs[number_of_func].func)(argv, &value));
	
	CALL(tree_destr(my_tree -> right));
	CALL(tree_clear(my_tree));
	CALL(tree_burn(my_tree, TR_N, value));
	*is_optimized = true;

	return TREE_OK;
}
示例#2
0
void cam_sig_verify(u8* start, u32 len)
{
    u32 i;
    s32 j;
    mpsa_ac_result_s* ac_result;
    u32 ac_result_count;
    u32 is_verified;
    cam_sig_verify_function_2_t verify_func;
    u32 dependent_id;
    u32 dependent_dir;

    ac_result = cam_get_ac_result_data();
    ac_result_count = cam_get_ac_result_num();
    
    for(i = 0; i < ac_result_count; i++)
    {
        if(NULL == g_cam_sig_list[ac_result[i].id]->verification)
        {
            is_verified = CAM_SIG_VERIFIED;
            continue;
        }

        is_verified = CAM_SIG_NOT_VERIFIED;
        
        if(g_cam_sig_list[ac_result[i].id]->verification->dependent_dir == CAM_VERIFY_DIR_FORWARD)
        {
            for(j = (s32)i; j < (s32)ac_result_count; j++)
            {
                if(g_cam_sig_list[ac_result[i].id]->verification->dependency == ac_result[j].id)
                {
                    is_verified = CAM_SIG_VERIFIED;
                    break;
                }
            }            
        }
        else
        {
            for(j = (s32)i; j >= 0; j--)
            {
                if(g_cam_sig_list[ac_result[i].id]->verification->dependency == ac_result[j].id)
                {
                    is_verified = CAM_SIG_VERIFIED;
                    break;
                }
            }
        }

        verify_func = g_cam_sig_list[ac_result[i].id]->verification->verify_func;
        dependent_id = g_cam_sig_list[ac_result[i].id]->verification->dependency;
        dependent_dir = g_cam_sig_list[ac_result[i].id]->verification->dependent_dir;
            
        if(NULL != verify_func)
        {
            is_verified = verify_func(start, len, i, dependent_id, dependent_dir, g_cam_sig_list[ac_result[i].id]->verification->data);
        }
        
        if(is_verified == CAM_SIG_NOT_VERIFIED)
        {
            memset(&(ac_result[i]), 0x0, sizeof(mpsa_ac_result_s));
        }
    }
}