1 /*****************************************************************************
2    Major portions of this software are copyrighted by the Medical College
3    of Wisconsin, 1994-2000, and are released under the Gnu General Public
4    License, Version 2.  See the file README.Copyright for details.
5 ******************************************************************************/
6 
7 #ifndef MCW_TS_HEADER
8 #define MCW_TS_HEADER
9 
10 /** structure type to hold data from one time series file **/
11 
12 typedef struct {
13          char *fname ;    /* filename data was from (NULL=none) */
14          int   len ;      /* number of points in time series */
15          float *ts ;      /* pointer to actual data */
16    } time_series ;
17 
18 typedef struct {
19       int num , nall ;
20       time_series ** tsarr ;
21 } time_series_array ;
22 
23 #define INC_TSARR 8
24 
25 #define INIT_TSARR(name)                                                       \
26    ( (name) = (time_series_array *) malloc( sizeof(time_series_array) ) ,      \
27      (name)->num = 0 , (name)->nall = INC_TSARR ,                              \
28      (name)->tsarr = (time_series **)malloc(sizeof(time_series *)*INC_TSARR) )
29 
30 #define ADDTO_TSARR(name,tsname) \
31  do{ int nn ;                                                                               \
32      if( (name)->num == (name)->nall ){                                                     \
33        (name)->nall += INC_TSARR+(name)->nall/16; nn = sizeof(time_series *) * (name)->nall;\
34        (name)->tsarr = ((name)->tsarr == NULL) ? (time_series **)malloc(nn)                 \
35                                                : (time_series **)realloc((name)->tsarr,nn); \
36        if( name->tsarr == NULL ){                                                           \
37           fprintf(stderr,"ADDTO_TSARR malloc fails at line %d in file %s\n",                \
38                   __LINE__,__FILE__) ; exit(1) ;                                            \
39        } }                                                                                  \
40      nn = (name)->num ; (name)->tsarr[nn] = (tsname) ; (name)->num++ ; break ; } while(0)
41 
42 #define DESTROY_TSARR(name)                                                                \
43   do{ int ii ;                                                                             \
44       if( (name) != NULL )                                                                 \
45          for( ii=0 ; ii < (name)->num ; ii++ ) RWC_free_time_series((name)->tsarr[ii]) ;   \
46       free((name)->tsarr) ; free((name)) ; (name) = NULL ; break ; } while(0)
47 
48 extern time_series * RWC_read_time_series() ;   /* more declarations */
49 extern float         RWC_norm_ts() ;
50 extern float         RWC_max_ts() ;
51 extern float         RWC_min_ts() ;
52 extern void          RWC_free_time_series() ;
53 extern time_series * RWC_blank_time_series() ;
54 extern void          RWC_medfilt_time_series() ;
55 
56 #define MALLOC_ERR(str) \
57      { fprintf(stderr,"MALLOC error: %s\n",str); exit(-1); }
58 
59 #ifndef MIN
60 #  define MIN(x,y) (((x)<(y)) ? (x) : (y))
61 #endif
62 
63 #ifndef MAX
64 #  define MAX(x,y) (((x)>(y)) ? (x) : (y))
65 #endif
66 
67 #endif
68