37 lines
		
	
	
		
			805 B
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			37 lines
		
	
	
		
			805 B
		
	
	
	
		
			C
		
	
	
	
	
	
|   | #ifndef TAI_H
 | ||
|  | #define TAI_H
 | ||
|  | 
 | ||
|  | #ifdef __WINDOWS__
 | ||
|  | typedef __int64 int64_t; | ||
|  | typedef unsigned __int64 uint64_t; | ||
|  | #else
 | ||
|  | #include <inttypes.h>			/* more portable than stdint.h */
 | ||
|  | #endif
 | ||
|  | 
 | ||
|  | #if defined(__WINDOWS__) && !defined(__GNUC__)
 | ||
|  | #define LL(x)  x ## i64
 | ||
|  | #define ULL(x) x ## ui64
 | ||
|  | #else
 | ||
|  | #define LL(x)  x ## LL
 | ||
|  | #define ULL(x) x ## ULL
 | ||
|  | #endif
 | ||
|  | 
 | ||
|  | struct tai { | ||
|  |   uint64_t x; | ||
|  | } ; | ||
|  | 
 | ||
|  | extern void tai_now(struct tai *t); | ||
|  | 
 | ||
|  | /* JW: MSVC cannot convert unsigned to double :-( */ | ||
|  | #define tai_approx(t) ((double) ((int64_t)(t)->x))
 | ||
|  | 
 | ||
|  | extern void tai_add(struct tai *t, struct tai *u, struct tai *v); | ||
|  | extern void tai_sub(struct tai *t, struct tai *u, struct tai *v); | ||
|  | #define tai_less(t,u) ((t)->x < (u)->x)
 | ||
|  | 
 | ||
|  | #define TAI_PACK 8
 | ||
|  | extern void tai_pack(char *s, struct tai *t); | ||
|  | extern void tai_unpack(char *s, struct tai *t); | ||
|  | 
 | ||
|  | #endif
 |