source: git/factory/timing.h @ 9c6887

spielwiese
Last change on this file since 9c6887 was 9c6887, checked in by Hans Schoenemann <hannes@…>, 13 years ago
make include cstdio/cstdlib dependant on ifndef NOSTREAMIO
  • Property mode set to 100644
File size: 2.9 KB
RevLine 
[ba1fde]1/* emacs edit mode for this file is -*- C++ -*- */
[341696]2/* $Id$ */
[ba1fde]3
4/* It should be possible to include this file multiple times for different */
[68873b]5/* settings of TIMING */
[ba1fde]6
7#undef TIMING_START
8#undef TIMING_END
[68873b]9#undef TIMING_END_AND_PRINT
[ba1fde]10#undef TIMING_DEFINE_PRINT
11#undef TIMING_DEFINE_PRINTPROTO
12#undef TIMING_PRINT
13
14#ifdef TIMING
15#include <time.h>
[fe8859f]16#if ! defined(WINNT) || defined(__GNUC__)
[ba1fde]17#include <sys/times.h>
[68873b]18#include <sys/param.h>
[9c9e2a4]19#endif
[9c6887]20#ifndef NOSTREAMIO
[4dfcb1]21#ifdef HAVE_CSTDIO
22#include <cstdio>
23#else
[68873b]24#include <stdio.h>
[4dfcb1]25#endif
[9c6887]26#endif
[68873b]27
28// need to be adjusted on your machine:
29// the number of ticks per second: HZ
30#if ! defined (HZ) && defined (CLOCKS_PER_SEC)
31#define HZ CLOCKS_PER_SEC
32#endif
33#if ! defined (HZ)  && defined (CLK_TCK)
34#define HZ CLK_TCK
35#endif
36#ifndef HZ
37#ifdef sun
38#define HZ 60.0
39#else
40#define HZ 100.0
41#endif
42#endif
43
[049c4f]44#if defined(WINNT) && ! defined(__GNUC__)
[6f5db8]45
[9c9e2a4]46#define TIMING_START(t) { clock_t timing_ ## t ## _start, timing_ ## t ## _end; \
47  timing_ ## t ## _start = clock();
48#define TIMING_END(t) timing_ ## t ## _end = clock(); \
49timing_ ## t ## _time += timing_ ## t ## _end - timing_ ## t ## _start; }
[6f5db8]50#define TIMING_END_AND_PRINT(t, msg) times( &timing_ ## t ## _end ); \
51  fprintf( stderr, "%s%.2f sec\n", msg, \
52           float( timing_ ## t ## _end - timing_ ## t ## _start ) / HZ ); \
53  timing_ ## t ## _time += timing_ ## t ## _end - timing_ ## t ## _start; }
[9c9e2a4]54#define TIMING_DEFINE_PRINT(t) clock_t timing_ ## t ## _time; \
55void timing_print_ ## t ( char * msg ) { \
56  fprintf( stderr, "%s%.2f sec\n", msg, float(timing_ ## t ## _time) / HZ ); \
[6f5db8]57} \
58void timing_reset_ ## t () { \
59  timing_ ## t ## _time = 0; \
[9c9e2a4]60}
[6f5db8]61
62#else /* ! WINNT */
63
[ba1fde]64#define TIMING_START(t) { struct tms timing_ ## t ## _start, timing_ ## t ## _end; \
65  times( &timing_ ## t ## _start );
66#define TIMING_END(t) times( &timing_ ## t ## _end ); \
67  timing_ ## t ## _time += timing_ ## t ## _end.tms_utime - timing_ ## t ## _start.tms_utime; }
[68873b]68#define TIMING_END_AND_PRINT(t, msg) times( &timing_ ## t ## _end ); \
69  fprintf( stderr, "%s%.2f sec\n", msg, \
70           float( timing_ ## t ## _end.tms_utime - timing_ ## t ## _start.tms_utime ) / HZ ); \
71  timing_ ## t ## _time += timing_ ## t ## _end.tms_utime - timing_ ## t ## _start.tms_utime; }
[ba1fde]72#define TIMING_DEFINE_PRINT(t) long timing_ ## t ## _time; \
[68873b]73void timing_print_ ## t ( char * msg ) { \
74  fprintf( stderr, "%s%.2f sec\n", msg, float(timing_ ## t ## _time) / HZ ); \
[6f5db8]75} \
76void timing_reset_ ## t () { \
77  timing_ ## t ## _time = 0; \
[68873b]78}
[6f5db8]79#endif /* ! WINNT */
80
81/* macros common to all platforms */
82#define TIMING_DEFINE_PRINTPROTO(t) void timing_print_ ## t ( char * ); \
83  void timing_reset_ ## t ();
[68873b]84#define TIMING_PRINT(t, msg) timing_print_ ## t ( msg );
[6f5db8]85#define TIMING_RESET(t) timing_reset_ ## t ();
86
[68873b]87#else /* TIMING */
[ba1fde]88#define TIMING_START(t)
89#define TIMING_END(t)
[68873b]90#define TIMING_END_AND_PRINT(t, msg)
[ba1fde]91#define TIMING_DEFINE_PRINT(t)
92#define TIMING_DEFINE_PRINTPROTO(t)
[68873b]93#define TIMING_PRINT(t, msg)
[6f5db8]94#define TIMING_RESET(t)
[ba1fde]95#endif /* TIMING */
Note: See TracBrowser for help on using the repository browser.