#include<stdio.h>
#include<stdlib.h>
typedef void (*FNTYPE)(void);
FNTYPE fn_arr[5];
void fun1(void){
}
void fun2(void){
}
int decidefunc(char* inp){
if(inp == NULL){
return 0;
}
else if(*inp == 'a'){
return 1;
}
else if(*inp == 'b'){
return 0;
}
else if(*inp == 'c'){
return 1;
}
else{
return 0;
}
}
void callMyFunc(char* inp){
int idx = decidefunc(inp);
fn_arr[idx]();
}
void do_lengthy_op(char* inp,void (*call)(char *inp)){
printf("\n do_lengthy_operation! \n"); call(inp);
}
int main(){
fn_arr[0] = &fun1;
fn_arr[1] = &fun2;
do_lengthy_op("b",callMyFunc);
return 0;
}
I2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGU8c3RkbGliLmg+Cgp0eXBlZGVmIHZvaWQgKCpGTlRZUEUpKHZvaWQpOwpGTlRZUEUgZm5fYXJyWzVdOwoKdm9pZCBmdW4xKHZvaWQpewoJcHJpbnRmKCJcbiBJJ20gZnVuYyAxIFxuIik7Cn0KCnZvaWQgZnVuMih2b2lkKXsKCXByaW50ZigiXG4gSSdtIGZ1bmMgMiBcbiIpOwp9CgoKCgppbnQgZGVjaWRlZnVuYyhjaGFyKiBpbnApewoJaWYoaW5wID09IE5VTEwpewoJCXJldHVybiAwOwoJfQoJZWxzZSBpZigqaW5wID09ICdhJyl7CgkJcmV0dXJuIDE7Cgl9CgllbHNlIGlmKCppbnAgPT0gJ2InKXsKCQlyZXR1cm4gMDsKCX0KCWVsc2UgaWYoKmlucCA9PSAnYycpewoJCXJldHVybiAxOwoJfQoJZWxzZXsKCQlyZXR1cm4gMDsKCX0KfQoKdm9pZCBjYWxsTXlGdW5jKGNoYXIqIGlucCl7CglwcmludGYoIlxuICVzIFxuIixfX2Z1bmNfXyk7CglpbnQgaWR4ID0gZGVjaWRlZnVuYyhpbnApOwoJZm5fYXJyW2lkeF0oKTsKfQoKdm9pZCBkb19sZW5ndGh5X29wKGNoYXIqIGlucCx2b2lkICgqY2FsbCkoY2hhciAqaW5wKSl7CglwcmludGYoIlxuIGRvX2xlbmd0aHlfb3BlcmF0aW9uISBcbiIpOwoJY2FsbChpbnApOwp9CgppbnQgbWFpbigpewoJZm5fYXJyWzBdID0gJmZ1bjE7Cglmbl9hcnJbMV0gPSAmZnVuMjsKCglkb19sZW5ndGh5X29wKCJiIixjYWxsTXlGdW5jKTsKCXJldHVybiAwOwp9