Sha256: 9272960428d5d2f2636ffca9280a896685cd20ae37ee0b04e524f54e76c7236a

Contents?: true

Size: 1.54 KB

Versions: 26

Compression:

Stored size: 1.54 KB

Contents

#include <sys/param.h>
#include <sys/types.h>
#include <stdint.h>
#include <stdbool.h>
#include <ruby.h>
#include <ctype.h>
#include "endian.h"
#include "Platform.h"

static VALUE PlatformModule = Qnil;

/*
 * Determine the cpu type at compile time - useful for MacOSX where the the
 * system installed ruby incorrectly reports 'host_cpu' as 'powerpc' when running
 * on intel.
 */
#ifdef __i386__
#define CPU "i386"
#elif defined(__ppc__) || defined(__powerpc__)
#define CPU "powerpc"
#elif defined(__x86_64__)
#define CPU "x86_64"
#elif defined(__sparc__)
#define CPU "sparc"
#elif defined(__sparcv9__)
#define CPU "sparcv9"
#else
#error "Unknown cpu type"
#endif

static void
export_primitive_types(VALUE module)
{
#define S(name, T) do { \
    typedef struct { char c; T v; } s; \
    rb_define_const(module, #name "_ALIGN", INT2NUM((sizeof(s) - sizeof(T)) * 8)); \
    rb_define_const(module, #name "_SIZE", INT2NUM(sizeof(T)* 8)); \
} while(0)
    S(INT8, char);
    S(INT16, short);
    S(INT32, int);
    S(INT64, long long);
    S(LONG, long);
    S(FLOAT, float);
    S(DOUBLE, double);
    S(ADDRESS, void*);
#undef S
}

void
rbffi_Platform_Init(VALUE moduleFFI)
{
    PlatformModule = rb_define_module_under(moduleFFI, "Platform");
    rb_define_const(PlatformModule, "BYTE_ORDER", INT2FIX(BYTE_ORDER));
    rb_define_const(PlatformModule, "LITTLE_ENDIAN", INT2FIX(LITTLE_ENDIAN));
    rb_define_const(PlatformModule, "BIG_ENDIAN", INT2FIX(BIG_ENDIAN));
    rb_define_const(PlatformModule, "CPU", rb_str_new2(CPU));
    export_primitive_types(PlatformModule);
}

Version data entries

26 entries across 26 versions & 5 rubygems

Version Path
ffi-ffi-0.5.0 ext/ffi_c/Platform.c
remogatto-ffi-0.5.0 ext/ffi_c/Platform.c
ffi-0.6.4 ext/ffi_c/Platform.c
resque-pool-0.3.0 vendor/bundle/ruby/1.8/gems/ffi-0.6.3/ext/ffi_c/Platform.c
resque-pool-0.3.0.beta.2 vendor/bundle/ruby/1.8/gems/ffi-0.6.3/ext/ffi_c/Platform.c
ffi-0.6.3-x86-mingw32 ext/ffi_c/Platform.c
ffi-0.6.3-x86-mswin32 ext/ffi_c/Platform.c
ffi-0.6.3 ext/ffi_c/Platform.c
ffi-0.6.2 ext/ffi_c/Platform.c
ffi-0.6.1 ext/ffi_c/Platform.c
ffi-0.6.0 ext/ffi_c/Platform.c
ffi-0.5.4-x86-mswin32 ext/ffi_c/Platform.c
ffi-0.5.4-x86-mingw32 ext/ffi_c/Platform.c
ffi-0.5.4 ext/ffi_c/Platform.c
ffi-0.5.3-x86-mswin32 ext/ffi_c/Platform.c
ffi-0.5.3 ext/ffi_c/Platform.c
ffi-0.5.3-x86-mingw32 ext/ffi_c/Platform.c
minilab-1.1.0-x86-mswin32-60 vendor/ffi-0.4.0-x86-mswin32/ext/ffi_c/Platform.c
ffi-0.5.1-x86-mswin32 ext/ffi_c/Platform.c
ffi-0.5.1 ext/ffi_c/Platform.c