Ruby  1.9.3p448(2013-06-27revision41675)
conversions.h
Go to the documentation of this file.
1 #ifndef FIDDLE_CONVERSIONS_H
2 #define FIDDLE_CONVERSIONS_H
3 
4 #include <fiddle.h>
5 
6 typedef union
7 {
8  ffi_arg fffi_arg; /* rvalue smaller than unsigned long */
9  ffi_sarg fffi_sarg; /* rvalue smaller than signed long */
10  unsigned char uchar; /* ffi_type_uchar */
11  signed char schar; /* ffi_type_schar */
12  unsigned short ushort; /* ffi_type_sshort */
13  signed short sshort; /* ffi_type_ushort */
14  unsigned int uint; /* ffi_type_uint */
15  signed int sint; /* ffi_type_sint */
16  unsigned long ulong; /* ffi_type_ulong */
17  signed long slong; /* ffi_type_slong */
18  float ffloat; /* ffi_type_float */
19  double ddouble; /* ffi_type_double */
20 #if HAVE_LONG_LONG
21  unsigned LONG_LONG ulong_long; /* ffi_type_ulong_long */
22  signed LONG_LONG slong_long; /* ffi_type_ulong_long */
23 #endif
24  void * pointer; /* ffi_type_pointer */
26 
27 ffi_type * int_to_ffi_type(int type);
28 void value_to_generic(int type, VALUE src, fiddle_generic * dst);
30 
31 #define VALUE2GENERIC(_type, _src, _dst) value_to_generic((_type), (_src), (_dst))
32 #define INT2FFI_TYPE(_type) int_to_ffi_type(_type)
33 #define GENERIC2VALUE(_type, _retval) generic_to_value((_type), (_retval))
34 
35 #if SIZEOF_VOIDP == SIZEOF_LONG
36 # define PTR2NUM(x) (ULONG2NUM((unsigned long)(x)))
37 # define NUM2PTR(x) ((void*)(NUM2ULONG(x)))
38 #else
39 /* # error --->> Ruby/DL2 requires sizeof(void*) == sizeof(long) to be compiled. <<--- */
40 # define PTR2NUM(x) (ULL2NUM((unsigned long long)(x)))
41 # define NUM2PTR(x) ((void*)(NUM2ULL(x)))
42 #endif
43 
44 #endif
45