1
1
use std:: { fmt, ops} ;
2
2
use std:: num:: Int ;
3
- use std:: i64;
4
3
use libc:: { time_t, suseconds_t} ;
5
4
6
5
#[ repr( C ) ]
@@ -14,15 +13,13 @@ const MICROS_PER_SEC: i64 = 1_000_000;
14
13
const SECS_PER_MINUTE : i64 = 60 ;
15
14
const SECS_PER_HOUR : i64 = 3600 ;
16
15
17
- const MIN : TimeVal = TimeVal {
18
- tv_sec : -( i64:: MAX / MICROS_PER_SEC - 1 ) ,
19
- tv_usec : ( -( MICROS_PER_SEC - 1 ) ) as suseconds_t ,
20
- } ;
16
+ #[ cfg( target_pointer_width = "64" ) ]
17
+ const MAX_SECONDS : i64 = ( :: std:: i64:: MAX / MICROS_PER_SEC ) - 1 ;
21
18
22
- const MAX : TimeVal = TimeVal {
23
- tv_sec : i64 :: MAX / MICROS_PER_SEC - 1 ,
24
- tv_usec : ( MICROS_PER_SEC - 1 ) as suseconds_t ,
25
- } ;
19
+ # [ cfg ( target_pointer_width = "32" ) ]
20
+ const MAX_SECONDS : i64 = :: std :: isize :: MAX as i64 ;
21
+
22
+ const MIN_SECONDS : i64 = - MAX_SECONDS ;
26
23
27
24
impl TimeVal {
28
25
#[ inline]
@@ -48,9 +45,8 @@ impl TimeVal {
48
45
49
46
#[ inline]
50
47
pub fn seconds ( seconds : i64 ) -> TimeVal {
51
- let ret = TimeVal { tv_sec : seconds, tv_usec : 0 } ;
52
- assert ! ( ret >= MIN && ret <= MAX , "TimeVal out of bounds" ) ;
53
- ret
48
+ assert ! ( seconds >= MIN_SECONDS && seconds <= MAX_SECONDS , "TimeVal out of bounds; seconds={}" , seconds) ;
49
+ TimeVal { tv_sec : seconds as time_t , tv_usec : 0 }
54
50
}
55
51
56
52
#[ inline]
@@ -66,9 +62,8 @@ impl TimeVal {
66
62
#[ unstable( feature = "std_misc" ) ]
67
63
pub fn microseconds ( microseconds : i64 ) -> TimeVal {
68
64
let ( secs, micros) = div_mod_floor_64 ( microseconds, MICROS_PER_SEC ) ;
69
- let ret = TimeVal { tv_sec : secs, tv_usec : micros as suseconds_t } ;
70
- assert ! ( ret >= MIN && ret <= MAX , "TimeVal out of bounds" ) ;
71
- ret
65
+ assert ! ( secs >= MIN_SECONDS && secs <= MAX_SECONDS , "TimeVal out of bounds" ) ;
66
+ TimeVal { tv_sec : secs as time_t , tv_usec : micros as suseconds_t }
72
67
}
73
68
74
69
pub fn num_hours ( & self ) -> i64 {
@@ -81,9 +76,9 @@ impl TimeVal {
81
76
82
77
pub fn num_seconds ( & self ) -> i64 {
83
78
if self . tv_sec < 0 && self . tv_usec > 0 {
84
- self . tv_sec + 1
79
+ ( self . tv_sec + 1 ) as i64
85
80
} else {
86
- self . tv_sec
81
+ self . tv_sec as i64
87
82
}
88
83
}
89
84
0 commit comments