00001
00002
00003 #ifndef _GROUP_RECORDER_H_
00004 #define _GROUP_RECORDER_H_
00005
00006 #include "tape.h"
00007
00008 EXPORT void new_group_recorder(MODULE *);
00009 EXPORT int group_recorder_postroutine(OBJECT *obj, double timedbl);
00010
00011 #ifdef __cplusplus
00012
00013 class quickobjlist{
00014 public:
00015 quickobjlist(){obj = 0; next = 0; memset(&prop, 0, sizeof(PROPERTY));}
00016 quickobjlist(OBJECT *o, PROPERTY *p){obj = o; next = 0; memcpy(&prop, p, sizeof(PROPERTY));}
00017 ~quickobjlist(){if(next != 0) delete next;}
00018 void tack(OBJECT *o, PROPERTY *p){if(next){next->tack(o, p);} else {next = new quickobjlist(o, p);}}
00019 OBJECT *obj;
00020 PROPERTY prop;
00021 quickobjlist *next;
00022 };
00023
00024 class group_recorder{
00025 public:
00026 static group_recorder *defaults;
00027 static CLASS *oclass, *pclass;
00028
00029 group_recorder(MODULE *);
00030 int create();
00031 int init(OBJECT *);
00032 int isa(char *);
00033 TIMESTAMP postsync(TIMESTAMP, TIMESTAMP);
00034
00035 int commit(TIMESTAMP t1, double t1dbl, bool deltacall);
00036 public:
00037 char1024 group_def;
00038 double dInterval;
00039 double dFlush_interval;
00040 char256 property_name;
00041 int32 limit;
00042 char256 filename;
00043 bool strict;
00044 bool print_units;
00045 bool format;
00046 CPLPT complex_part;
00047 private:
00048 int write_header();
00049 int read_line();
00050 int write_line(TIMESTAMP t1, double t1dbl, bool deltacall);
00051 int flush_line();
00052 int write_footer();
00053 private:
00054 FILE *rec_file;
00055 FINDLIST *items;
00056 quickobjlist *obj_list;
00057 PROPERTY *prop_ptr;
00058 int obj_count;
00059 int write_count;
00060 TIMESTAMP next_write;
00061 TIMESTAMP last_write;
00062 TIMESTAMP last_flush;
00063 TIMESTAMP write_interval;
00064 TIMESTAMP flush_interval;
00065 int32 write_ct;
00066 TAPESTATUS tape_status;
00067 char *prev_line_buffer;
00068 char *line_buffer;
00069 size_t line_size;
00070 bool interval_write;
00071 bool deltamode_gr;
00072 };
00073
00074 #endif // C++
00075
00076 #endif // _GROUP_RECORDER_H_
00077
00078