1919#include < iostream>
2020#include < boost/algorithm/string.hpp>
2121
22+ static const int DefaultTimeSet = 1 ;
23+
2224//
2325// Constructor
2426//
@@ -172,22 +174,21 @@ int CaseFile::getGeoTsIdx() const
172174
173175void CaseFile::addTimeSet (TimeSet *ts)
174176{
175- timeSets_.push_back (ts);
176177 int idx = ts->getIdx ();
177178 if (idx < 0 ) {
178179 std::cerr << " CaseFile::addTimeSet: invalid time set index " << idx << std::endl;
179- idx = 0 ;
180180 return ;
181181 }
182- if (idx >= 0 && idx >= timeSets_.size ()) {
183- timeSets_.resize (idx + 1 );
184- }
182+ lastTimeSet_ = ts;
185183 timeSets_[idx] = ts;
186184}
187185
188- const TimeSet *CaseFile::getTimeSet (int idx) const
186+ TimeSet *CaseFile::getTimeSet (int idx) const
189187{
190- return timeSets_[idx];
188+ auto it = timeSets_.find (idx);
189+ if (it == timeSets_.end ())
190+ return nullptr ;
191+ return it->second ;
191192}
192193
193194const TimeSet *CaseFile::getTimeSet (const std::string &field) const
@@ -198,45 +199,30 @@ const TimeSet *CaseFile::getTimeSet(const std::string &field) const
198199 << std::endl;
199200 return nullptr ;
200201 }
201- std::cerr << " CaseFile::getTimeSet: field " << field << " : mapping to idx " << it->second << std::endl;
202- if (it->second < 0 ) {
203- return nullptr ;
204- }
205- if (it->second >= timeSets_.size ()) {
206- return nullptr ;
202+ auto ts = it->second ;
203+ std::cerr << " CaseFile::getTimeSet: field " << field << " : mapping to idx " << ts << std::endl;
204+ if (ts < 0 ) {
205+ ts = DefaultTimeSet;
207206 }
208- return timeSets_[it-> second ] ;
207+ return getTimeSet (ts) ;
209208}
210209
211210const TimeSet *CaseFile::getGeoTimeSet () const
212211{
213- if (geoTsIdx_ < 0 )
214- return nullptr ;
215- if (geoTsIdx_ >= timeSets_.size ())
216- return nullptr ;
217- return timeSets_[geoTsIdx_];
212+ auto ts = geoTsIdx_;
213+ if (ts < 0 )
214+ ts = DefaultTimeSet;
215+ return getTimeSet (ts);
218216}
219217
220218const TimeSet *CaseFile::getLastTimeSet () const
221219{
222- return timeSets_. back () ;
220+ return lastTimeSet_ ;
223221}
224222
225223TimeSet *CaseFile::getLastTimeSet ()
226224{
227- return timeSets_.back ();
228- }
229-
230- std::vector<float > CaseFile::getAllRealTimes () const
231- {
232- std::set<float > times;
233- for (auto ts = timeSets_.begin (); ts != timeSets_.end (); ts++) {
234- std::vector<float > rts = (*ts)->getRealTimes ();
235- times.insert (rts.begin (), rts.end ());
236- }
237- std::vector<float > ret;
238- std::copy (times.begin (), times.end (), std::back_inserter (ret));
239- return ret;
225+ return lastTimeSet_;
240226}
241227
242228std::vector<std::string> CaseFile::makeFileNames (const std::string &baseName, const TimeSet *refts) const
@@ -267,13 +253,31 @@ std::vector<std::string> CaseFile::makeFileNames(const std::string &baseName, co
267253
268254TimeSets CaseFile::getAllTimeSets () const
269255{
256+ auto used = usedTimeSets_;
257+ used.insert (DefaultTimeSet);
270258 TimeSets ts;
271- for (int idx: usedTimeSets_) {
272- ts.push_back (timeSets_[idx]);
259+ for (int idx: used) {
260+ auto t = getTimeSet (idx);
261+ if (t)
262+ ts.push_back (getTimeSet (idx));
273263 }
274264 return ts;
275265}
276266
267+ std::vector<float > CaseFile::getAllRealTimes () const
268+ {
269+ std::set<float > times;
270+ auto timesets = getAllTimeSets ();
271+ for (auto ts = timesets.begin (); ts != timesets.end (); ts++) {
272+ std::vector<float > rts = (*ts)->getRealTimes ();
273+ times.insert (rts.begin (), rts.end ());
274+ }
275+ std::vector<float > ret;
276+ std::copy (times.begin (), times.end (), std::back_inserter (ret));
277+ return ret;
278+ }
279+
280+
277281//
278282// Destructor
279283//
0 commit comments