You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							78 lines
						
					
					
						
							2.3 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							78 lines
						
					
					
						
							2.3 KiB
						
					
					
				| // Timing tools. | |
|  | |
| #ifndef _CL_TIMING_H | |
| #define _CL_TIMING_H | |
|  | |
| #include "cln/config.h" | |
| #include "cln/intparam.h" | |
| #include "cln/types.h" | |
|  | |
| #include "cln/io.h" | |
|  | |
| namespace cln { | |
| 
 | |
| struct cl_timespec { | |
| 	uintL tv_sec;	// seconds since 1970-01-01 | |
| 	sintL tv_nsec;	// nanoseconds, >= 0, < 1000000000 | |
| 	// Constructors. | |
| 	cl_timespec () {} | |
| 	cl_timespec (uintL sec, sintL nsec) | |
| 		: tv_sec (sec), tv_nsec (nsec) {} | |
| }; | |
| 
 | |
| struct cl_time_duration { | |
| 	uintL tv_sec;	// seconds | |
| 	uintL tv_nsec;	// nanoseconds | |
| 	// Constructors. | |
| 	cl_time_duration () {} | |
| 	cl_time_duration (uintL sec) | |
| 		: tv_sec (sec), tv_nsec (0) {} | |
| 	cl_time_duration (uintL sec, uintL nsec) | |
| 		: tv_sec (sec), tv_nsec (nsec) {} | |
| }; | |
| 
 | |
| struct cl_time_consumption { | |
| 	cl_time_duration realtime;	// elapsed time | |
| 	cl_time_duration usertime;	// system's notion of user time/run time | |
| }; | |
| 
 | |
| extern const cl_time_duration operator- (const cl_timespec&, const cl_timespec&); | |
| extern const cl_timespec operator+ (const cl_timespec&, const cl_time_duration&); | |
| extern const cl_timespec operator- (const cl_timespec&, const cl_time_duration&); | |
| extern const cl_time_duration operator+ (const cl_time_duration&, const cl_time_duration&); | |
| extern const cl_time_duration operator- (const cl_time_duration&, const cl_time_duration&); | |
| 
 | |
| extern const cl_timespec cl_current_time (); | |
| extern const cl_time_consumption cl_current_time_consumption (); | |
| 
 | |
| // Report a time consumption. | |
| // (Should better be a virtual member function of `cl_time_consumption'). | |
| extern void cl_timing_report (std::ostream&, const cl_time_consumption&); | |
| 
 | |
| struct cl_timing { | |
| 	// Constructor, starts the time interval. | |
| 	cl_timing (cl_time_consumption& accumulator); | |
| 	cl_timing (std::ostream& destination = std::cerr); | |
| 	cl_timing (const char *, std::ostream& destination = std::cerr); | |
| 	// Destructor, closes the time interval and does a report. | |
| 	~cl_timing ();	 | |
| //private: | |
| 	cl_time_consumption tmp; | |
| 	void (*report_fn) (const cl_timing&); | |
| 	void* report_destination; | |
| 	const char * comment; | |
| }; | |
| 
 | |
| // Macro for timing. | |
| // Usage: | |
| //     { CL_TIMING; computation(); } | |
| // or  { CL_TIMING(accumulator); computation(); } | |
| // or  { CL_TIMING(cout); computation(); } | |
| // The timing interval starts immediately and ends at the closing brace. | |
| #define CL_TIMING  CL_TIMING1(__LINE__) | |
| #define CL_TIMING1(line)  CL_TIMING2(line) | |
| #define CL_TIMING2(line)  cl_timing cl_timing_dummy_##line | |
|  | |
| }  // namespace cln | |
|  | |
| #endif /* _CL_TIMING_H */
 |