forked from ssmall41/asynch
-
Notifications
You must be signed in to change notification settings - Fork 0
/
data_types.c
54 lines (43 loc) · 1.15 KB
/
data_types.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include "data_types.h"
data_types* Init_DataTypes()
{
unsigned int i,num_data_types = 5;
data_types* dt_info = (data_types*) malloc(sizeof(data_types));
dt_info->is_equal = (int (**)(void*,void*)) malloc(num_data_types*sizeof(int (*)(void*,void*)));
dt_info->is_equal[ASYNCH_CHAR] = &IsEqualChar;
dt_info->is_equal[ASYNCH_SHORT] = &IsEqualShort;
dt_info->is_equal[ASYNCH_INT] = &IsEqualInt;
dt_info->is_equal[ASYNCH_FLOAT] = &IsEqualFloat;
dt_info->is_equal[ASYNCH_DOUBLE] = &IsEqualDouble;
return dt_info;
}
void Free_DataTypes(data_types** dt_info)
{
if(*dt_info)
{
free((*dt_info)->is_equal);
free(*dt_info);
*dt_info = NULL;
}
}
//Comparison functions ***********************************************************************************************
int IsEqualInt(void* a,void* b)
{
return *(int*)a == *(int*)b;
}
int IsEqualShort(void* a,void* b)
{
return *(short int*)a == *(short int*)b;
}
int IsEqualDouble(void* a,void* b)
{
return (fabs( *(double*)a - *(double*)b ) < 1e-10);
}
int IsEqualFloat(void* a,void* b)
{
return (fabs( *(float*)a == *(float*)b ) < 1e-10);
}
int IsEqualChar(void* a,void* b)
{
return *(char*)a == *(char*)b;
}