1 /* 2 struct timeval * 3 time_t 4 5 Ruby has builtin class Time. INPUT/OUTPUT typemap for timeval and 6 time_t is provided. 7 8 */ 9 %{ 10 #ifdef __cplusplus 11 extern "C" { 12 #endif 13 #ifdef HAVE_SYS_TIME_H 14 # include <sys/time.h> 15 struct timeval rb_time_timeval(VALUE); 16 #endif 17 #ifdef __cplusplus 18 } 19 #endif 20 %} 21 22 %typemap(in) struct timeval *INPUT (struct timeval temp) 23 { 24 if (NIL_P($input)) 25 $1 = NULL; 26 else { 27 temp = rb_time_timeval($input); 28 $1 = &temp; 29 } 30 } 31 32 %typemap(in,numinputs=0) struct timeval *OUTPUT(struct timeval temp) 33 { 34 $1 = &temp; 35 } 36 37 %typemap(argout) struct timeval *OUTPUT 38 { 39 $result = rb_time_new($1->tv_sec, $1->tv_usec); 40 } 41 42 %typemap(out) struct timeval * 43 { 44 $result = rb_time_new($1->tv_sec, $1->tv_usec); 45 } 46 47 %typemap(out) struct timespec * 48 { 49 $result = rb_time_new($1->tv_sec, $1->tv_nsec / 1000); 50 } 51 52 // time_t 53 %typemap(in) time_t 54 { 55 if (NIL_P($input)) 56 $1 = (time_t)-1; 57 else 58 $1 = NUM2LONG(rb_funcall($input, rb_intern("tv_sec"), 0)); 59 } 60 61 %typemap(typecheck) time_t 62 { 63 $1 = (NIL_P($input) || TYPE(rb_funcall($input, rb_intern("respond_to?"), 1, ID2SYM(rb_intern("tv_sec")))) == T_TRUE); 64 } 65 66 %typemap(out) time_t 67 { 68 $result = rb_time_new($1, 0); 69 } 70