#define ARRAY_SIZE(a) (sizeof(a)/sizeof(a[0]))
typedef int (*parse_func)(const char *data,size_t len);
struct parse_handler{
int type;
parse_func func;
}
static int parse_temperature(const char *data,size_t len)
{
assert(len == 4);
int value = *(int *)data;
printf("temperature = %d\n",value);
}
static int parse_humidity(const char *data,size_t len)
{
assert(len==4);
int value = *(int *)data;
printf("humidity = %d\n",value);
}
static struct parse_handler handlers = {
{1,parse_tmepeature},
{2,parse_humidity},
};
static parse_func parse_func_find(int type)
{
int i;
for(i=0;i<ARRAY_SIZE(handlers);i++){
if(handlers[i].type == type)
return handlers[i].func;
}
return NULL;
}
static int parse(const char *data,size_t len)
{
int data_len = data[0];
int data_type = data[1];
parse_func func = parse_func_find(data_type);
if(func != NULL)
func(data+2,data_len-2);
}