~awuerl/blitzortung-tracker/0.9

« back to all changes in this revision

Viewing changes to source/lib/data/Events.cc

  • Committer: Andreas Wuerl
  • Date: 2012-03-08 22:02:31 UTC
  • Revision ID: andi@debian-20120308220231-8dc444kpv5b4s72p
backported most of the 1.0 features

Show diffs side-by-side

added added

removed removed

Lines of Context:
12
12
    }
13
13
 
14
14
    Events::Events(const gr::date& date, const Format::CP& dataFormat) :
 
15
      date_(date),
 
16
      dataFormat_(dataFormat),
15
17
      logger_("data.Events")
16
18
    {
17
19
      if (logger_.isDebugEnabled())
18
20
        logger_.debugStream() << "create(" << date << ", " << dataFormat << ") " << this;
19
 
      date_ = date;
20
 
      dataFormat_ = dataFormat;
21
21
    }
22
22
 
23
23
    Events::Events(const EventsHeader& header) :
 
24
      date_(header.getDate()),
 
25
      dataFormat_(header.getDataFormat()),
24
26
      logger_("data.Events")
25
27
    {
26
28
      if (logger_.isDebugEnabled())
27
29
        logger_.debugStream() << "create(header) " << this << " " << header;
28
 
      dataFormat_ = header.getDataFormat();
29
 
      date_ = header.getDate();
30
30
    }
31
31
 
32
32
    Events::~Events() {
35
35
    }
36
36
 
37
37
    void Events::add(Event* event) {
38
 
      setOrCheckDate(event->getWaveform().getTime().date());
39
 
      if (!event->getWaveform().isEmpty())
40
 
        setOrCheckDataFormat(event->getWaveform().getArray().getFormat());
41
 
 
 
38
      setOrCheckProperties(*event);
42
39
      events_.push_back(event);
43
40
    }
44
41
 
50
47
      add(event.release());
51
48
    }
52
49
 
53
 
    void Events::add(Events&) throw(exception::Base) {
 
50
    void Events::add(Events& source) throw(exception::Base) {
 
51
      transfer(end(), source);
 
52
    }
 
53
 
 
54
    void Events::setOrCheckProperties(Event& event) {
 
55
      const gr::date& date = event.getWaveform().getTime().date();
 
56
      Format::CP dataFormat;
 
57
      if (!event.getWaveform().isEmpty()) {
 
58
        dataFormat = event.getWaveform().getArray().getFormat();
 
59
      }
 
60
 
 
61
      if (size() == 0) {
 
62
        date_ = date;
 
63
        dataFormat_ = dataFormat;
 
64
      } else {
 
65
        if (date_ != date) 
 
66
          throw exception::Base("data::Events::setOrCheckProperties() date mismatch");
 
67
        if (dataFormat_ != dataFormat)
 
68
          throw exception::Base("data::Events::setOrCheckProperties() date mismatch");
 
69
      }
54
70
    }
55
71
 
56
72
    const gr::date& Events::getDate() const {
57
73
      return date_;
58
74
    }
59
75
 
60
 
    void Events::setOrCheckDate(const gr::date& date) {
61
 
      if (events_.size() == 0 || date_.is_not_a_date()) {
62
 
        date_ = date;
63
 
      } else {
64
 
        if (date_ != date)
65
 
          throw exception::Base("data::Events::setDate() event date mismatch");
66
 
      }
67
 
    }
68
 
      
69
76
    const Format::CP& Events::getDataFormat() const {
70
77
      return dataFormat_;
71
78
    }
72
79
 
73
 
    void Events::setOrCheckDataFormat(const data::Format::CP& dataFormat) {
74
 
      if ((events_.size() == 0 || dataFormat_.get() == 0) && dataFormat.get() != 0) {
75
 
          dataFormat_ = dataFormat;
76
 
      } else {
77
 
        if (!dataFormat.get() != 0 && *(dataFormat_) != *(dataFormat))
78
 
          throw exception::Base("data::Events::setOrCheckDataFormat() event dataformat mismatch");
79
 
      }
80
 
    }
81
 
 
82
80
    int Events::size() const {
83
81
      return events_.size();
84
82
    }
132
130
    }
133
131
 
134
132
    void Events::transfer(Event::VI target, Event::VI begin, Event::VI end, Events& source) {
 
133
      for (Event::VI event=begin; event != end; event++)
 
134
        setOrCheckProperties(*event);
 
135
 
135
136
      events_.transfer(target, begin, end, source.events_);
136
137
    }
137
138
 
138
139
    void Events::transfer(Event::VI target, Events& source) {
139
 
      events_.transfer(target, source.events_);
 
140
      transfer(target, source.begin(), source.end(), source);
140
141
    }
141
142
 
142
143
    Event::AP Events::release(Event::VI target) {
144
145
    }
145
146
 
146
147
    std::string Events::appendToFile(const std::string& fileName) const {
147
 
      if (events_.size() > 0) {
 
148
      if (size() > 0) {
148
149
 
149
150
        if (logger_.isDebugEnabled()) {
150
 
          logger_.debugStream() << "appendToFile() " << fileName << " (" << events_.size() << " events)";
 
151
          logger_.debugStream() << "appendToFile() " << fileName << " (" << size() << " events)";
151
152
        }
152
153
 
153
154
        EventsFile eventsFile(fileName);
154
 
 
155
155
        eventsFile.append(*this);
156
 
        
157
156
        return eventsFile.getFilename();
158
157
      }
159
158
      return "";
160
159
    }
161
160
 
162
161
    std::string Events::writeToFile(const std::string& fileName) {
163
 
      if (events_.size() > 0) {
 
162
      if (size() > 0) {
164
163
 
165
164
        if (logger_.isDebugEnabled()) {
166
 
          logger_.debugStream() << "appendToFile() " << fileName << " (" << events_.size() << " events)";
 
165
          logger_.debugStream() << "writeToFile() " << fileName << " (" << size() << " events)";
167
166
        }
168
167
 
169
168
        EventsFile eventsFile(fileName);
200
199
      date_ = source.date_;
201
200
      dataFormat_ = source.dataFormat_;
202
201
 
203
 
      events_.clear();
204
 
      events_.transfer(events_.begin(), source.events_);
 
202
      clear();
 
203
      transfer(end(), source);
205
204
    }
206
205
 
207
206