FileFilterFrameWithHeader.hpp
Go to the documentation of this file.
1 //==============================================================================
2 //
3 // This file is part of GNSSTk, the ARL:UT GNSS Toolkit.
4 //
5 // The GNSSTk is free software; you can redistribute it and/or modify
6 // it under the terms of the GNU Lesser General Public License as published
7 // by the Free Software Foundation; either version 3.0 of the License, or
8 // any later version.
9 //
10 // The GNSSTk is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 // GNU Lesser General Public License for more details.
14 //
15 // You should have received a copy of the GNU Lesser General Public
16 // License along with GNSSTk; if not, write to the Free Software Foundation,
17 // Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
18 //
19 // This software was developed by Applied Research Laboratories at the
20 // University of Texas at Austin.
21 // Copyright 2004-2022, The Board of Regents of The University of Texas System
22 //
23 //==============================================================================
24 
25 //==============================================================================
26 //
27 // This software was developed by Applied Research Laboratories at the
28 // University of Texas at Austin, under contract to an agency or agencies
29 // within the U.S. Department of Defense. The U.S. Government retains all
30 // rights to use, duplicate, distribute, disclose, or release this software.
31 //
32 // Pursuant to DoD Directive 523024
33 //
34 // DISTRIBUTION STATEMENT A: This software has been approved for public
35 // release, distribution is unlimited.
36 //
37 //==============================================================================
38 
45 #ifndef GNSSTK_FILEFILTERFRAMEWITHHEADER_HPP
46 #define GNSSTK_FILEFILTERFRAMEWITHHEADER_HPP
47 
48 #include "Rinex3ObsData.hpp"
49 #include "FileFilterFrame.hpp"
50 #include <math.h>
51 
52 namespace gnsstk
53 {
55 
56 
73  template <class FileStream, class FileData, class FileHeader>
75  public FileFilterFrame<FileStream, FileData>
76  {
77  public:
82  const gnsstk::CommonTime& end =
84  : FileFilterFrame<FileStream, FileData>(start, end)
85  {}
86 
89  FileFilterFrameWithHeader(const std::vector<std::string>& fileList,
90  const gnsstk::CommonTime& start =
92  const gnsstk::CommonTime& end =
94  : FileFilterFrame<FileStream, FileData>(fileList, start, end)
95  {
96  std::vector<std::string>::const_iterator itr = fileList.begin();
97  while (itr != fileList.end())
98  {
99  this->fs.newSpec(*itr);
100  init();
101  itr++;
102  }
103  }
104 
107  FileFilterFrameWithHeader(const std::string& filename,
108  const gnsstk::CommonTime& start =
110  const gnsstk::CommonTime& end =
112  : FileFilterFrame<FileStream, FileData>(filename, start, end)
113  {init();}
114 
119  const gnsstk::CommonTime& start =
121  const gnsstk::CommonTime& end =
125  : FileFilterFrame<FileStream, FileData>(spec, start, end, filter)
126  {init(filter);}
127 
133  newSource(const FileSpec& filespec,
134  const gnsstk::CommonTime& start =
136  const gnsstk::CommonTime& end =
140  {
142  end, filter);
143  init(filter);
144  return *this;
145  }
146 
150  newSource(const std::string& filename,
151  const gnsstk::CommonTime& start =
153  const gnsstk::CommonTime& end =
155  {
157  end);
158  init();
159  return *this;
160  }
161 
165  newSource(const std::vector<std::string>& fileList,
166  const gnsstk::CommonTime& start =
168  const gnsstk::CommonTime& end =
170  {
172  end);
173  typename std::vector<std::string>::const_iterator itr;
174  for (itr = fileList.begin(); itr != fileList.end(); itr++)
175  {
176  this->fs.newSpec(*itr);
177  init();
178  }
179  return *this;
180  }
181 
183 
192  bool writeFile(const std::string& outputFile,
193  const FileHeader& fh) const;
194 
196  template <class BinaryPredicate>
197  std::list<FileData>
199  BinaryPredicate p,
200  int precision) const
201  {
202  long double epsilon = 1 / std::pow((long double)10,precision);
203  std::list<FileData> toReturn;
204 
205  typename std::list<FileData>::const_iterator dvIt = this->dataVec.begin();
206  typename std::list<FileData>::const_iterator rdvIt = r.dataVec.begin();
207  while(dvIt != this->dataVec.end())
208  {
209  if (rdvIt == r.dataVec.end() ||
210  p( *dvIt, this->headerList.front(),
211  *rdvIt, r.headerList.front(),
212  epsilon)) //dv less than
213  {
214  toReturn.push_back(*dvIt);
215  dvIt++;
216  }
217  else if (p(*rdvIt, r.headerList.front(),
218  *dvIt, this->headerList.front(),
219  epsilon)) //rdv less than
220  {
221  rdvIt++;
222  }
223  else //equal
224  {
225  dvIt++;
226  rdvIt++;
227  }
228  }
229  return toReturn;
230  }
231 
233  template <class Operation>
235  {
236  typename std::list<FileHeader>::iterator itr = headerList.begin();
237 
238  while (itr != headerList.end())
239  {
240  op(*itr);
241  itr++;
242  }
243 
244  return *this;
245  }
246 
248  std::list<FileHeader>& getHeaderData(void) {return headerList;}
249 
251  std::list<FileHeader> getHeaderData(void) const {return headerList;}
252 
254  typename std::list<FileHeader>::size_type getHeaderCount(void) const
255  { return headerList.size(); }
256 
260  typename std::list<FileHeader>::const_iterator beginHeader() const;
261 
265  typename std::list<FileHeader>::const_iterator endHeader() const;
266 
270  typename std::list<FileHeader>::iterator beginHeader();
271 
275  typename std::list<FileHeader>::iterator endHeader();
276 
277  bool emptyHeader() const
278  { return headerList.empty(); }
279 
280  typename std::list<FileHeader>::size_type sizeHeader()
281  { return headerList.size(); }
282 
286  FileHeader& frontHeader();
287 
291  const FileHeader& frontHeader() const;
292 
296  FileHeader& backHeader();
297 
301  const FileHeader& backHeader() const;
302 
303  protected:
307 
310  inline void chl(const std::string& req)
311  {
312  gnsstk::InvalidRequest exc("Header list is empty attempting to"
313  " satisfy "+req+" request.");
314  if (headerList.empty())
315  {
316  GNSSTK_THROW(exc);
317  }
318  }
319 
320  protected:
321  std::list<FileHeader> headerList;
322  };
323 
325 
326  template <class FileStream, class FileData, class FileHeader>
328  writeFile(const std::string& outputFile,
329  const FileHeader& fh) const
330  {
331  // make the directory (if needed)
332  std::string::size_type pos = outputFile.rfind('/');
333 
334  if (pos != std::string::npos)
335  gnsstk::FileUtils::makeDir(outputFile.substr(0,pos).c_str(), 0755);
336 
337  FileStream stream(outputFile.c_str(), std::ios::out|std::ios::trunc);
338  stream.exceptions(std::ios::failbit);
339 
340  stream << fh;
341 
342  typename std::list<FileData>::const_iterator index;
343  for(index = this->dataVec.begin(); index != this->dataVec.end(); index++)
344  stream << (*index);
345  return true;
346  }
347 
348  template <class FileStream, class FileData, class FileHeader>
349  typename std::list<FileHeader>::const_iterator
351  const
352  {
353  try { chl("beginHeader"); }
354  catch(gnsstk::InvalidRequest exc)
355  { GNSSTK_RETHROW(exc); }
356  return headerList.begin();
357  }
358 
359  template <class FileStream, class FileData, class FileHeader>
360  typename std::list<FileHeader>::const_iterator
362  const
363  {
364  try { chl("endHeader"); }
365  catch(gnsstk::InvalidRequest exc)
366  { GNSSTK_RETHROW(exc); }
367  return headerList.end();
368  }
369 
370  template <class FileStream, class FileData, class FileHeader>
371  typename std::list<FileHeader>::iterator
373  {
374  try { chl("beginHeader"); }
375  catch(gnsstk::InvalidRequest exc)
376  { GNSSTK_RETHROW(exc); }
377  return headerList.begin();
378  }
379 
380 
381  template <class FileStream, class FileData, class FileHeader>
382  typename std::list<FileHeader>::iterator
384  {
385  try { chl("endHeader"); }
386  catch(gnsstk::InvalidRequest exc)
387  { GNSSTK_RETHROW(exc); }
388  return headerList.end();
389  }
390 
391  template <class FileStream, class FileData, class FileHeader>
392  FileHeader&
394  {
395  try { chl("frontHeader"); }
396  catch(gnsstk::InvalidRequest exc)
397  { GNSSTK_RETHROW(exc); }
398  return headerList.front();
399  }
400 
401 
402  template <class FileStream, class FileData, class FileHeader>
403  const FileHeader&
405  const
406  {
407  try { chl("frontHeader"); }
408  catch(gnsstk::InvalidRequest exc)
409  { GNSSTK_RETHROW(exc); }
410  return headerList.front();
411  }
412 
413 
414  template <class FileStream, class FileData, class FileHeader>
415  FileHeader&
417  {
418  try { chl("backHeader"); }
419  catch(gnsstk::InvalidRequest exc)
420  { GNSSTK_RETHROW(exc); }
421  return headerList.back();
422  }
423 
424 
425  template <class FileStream, class FileData, class FileHeader>
426  const FileHeader&
428  const
429  {
430  try { chl("backHeader"); }
431  catch(gnsstk::InvalidRequest exc)
432  { GNSSTK_RETHROW(exc); }
433  return headerList.back();
434  }
435 
436  template <class FileStream, class FileData, class FileHeader>
437  void
440  {
441  // find the files
442  std::list<std::string> listOfFiles =
443  FileSpecFind::find(this->fs, this->startTime, this->endTime, filter);
444 
445  // for each file, just read the header
446  for (const auto& i : listOfFiles)
447  {
448  FileStream s(i.c_str());
449 
450  if (s.good())
451  {
452  s.exceptions(std::ios::failbit);
453 
454  FileHeader header;
455  s >> header;
456  headerList.push_back(header);
457  }
458  }
459  }
460 
461 } // namespace gnsstk
462 
463 #endif //GNSSTK_FILEFILTERFRAMEWITHHEADER_HPP
gnsstk::FileFilterFrameWithHeader
Definition: FileFilterFrameWithHeader.hpp:74
gnsstk::FileSpecFind::Filter
std::multimap< FileSpec::FileSpecType, std::string > Filter
Data type for storing desired FileSpec values.
Definition: FileSpecFind.hpp:87
gnsstk::FileFilterFrameWithHeader::newSource
FileFilterFrameWithHeader & newSource(const FileSpec &filespec, const gnsstk::CommonTime &start=gnsstk::CommonTime::BEGINNING_OF_TIME, const gnsstk::CommonTime &end=gnsstk::CommonTime::END_OF_TIME, const FileSpecFind::Filter &filter=FileSpecFind::Filter())
Definition: FileFilterFrameWithHeader.hpp:133
gnsstk::FileFilterFrameWithHeader::touchHeader
FileFilterFrameWithHeader & touchHeader(Operation &op)
Definition: FileFilterFrameWithHeader.hpp:234
example3.header
header
Definition: example3.py:22
gnsstk::FileFilterFrameWithHeader::getHeaderData
std::list< FileHeader > getHeaderData(void) const
Returns the contents of the header data list, const.
Definition: FileFilterFrameWithHeader.hpp:251
gnsstk::FileFilterFrameWithHeader::getHeaderData
std::list< FileHeader > & getHeaderData(void)
Returns the contents of the header data list.
Definition: FileFilterFrameWithHeader.hpp:248
gnsstk::FileFilterFrameWithHeader::FileFilterFrameWithHeader
FileFilterFrameWithHeader(const std::string &filename, const gnsstk::CommonTime &start=gnsstk::CommonTime::BEGINNING_OF_TIME, const gnsstk::CommonTime &end=gnsstk::CommonTime::END_OF_TIME)
Definition: FileFilterFrameWithHeader.hpp:107
gnsstk::FileFilterFrameWithHeader::sizeHeader
std::list< FileHeader >::size_type sizeHeader()
Definition: FileFilterFrameWithHeader.hpp:280
gnsstk::FileFilterFrameWithHeader::frontHeader
FileHeader & frontHeader()
Definition: FileFilterFrameWithHeader.hpp:393
gnsstk::FileFilterFrameWithHeader::writeFile
bool writeFile(const std::string &outputFile, const FileHeader &fh) const
Definition: FileFilterFrameWithHeader.hpp:328
FileFilterFrame.hpp
gnsstk::FileFilterFrameWithHeader::backHeader
FileHeader & backHeader()
Definition: FileFilterFrameWithHeader.hpp:416
gnsstk::CommonTime::BEGINNING_OF_TIME
static const GNSSTK_EXPORT CommonTime BEGINNING_OF_TIME
earliest representable CommonTime
Definition: CommonTime.hpp:102
gnsstk::FileFilterFrameWithHeader::FileFilterFrameWithHeader
FileFilterFrameWithHeader(const FileSpec &spec, const gnsstk::CommonTime &start=gnsstk::CommonTime::BEGINNING_OF_TIME, const gnsstk::CommonTime &end=gnsstk::CommonTime::END_OF_TIME, const FileSpecFind::Filter &filter=FileSpecFind::Filter())
Definition: FileFilterFrameWithHeader.hpp:118
gnsstk
For Sinex::InputHistory.
Definition: BasicFramework.cpp:50
gnsstk::FileSpecFind::find
static std::list< std::string > find(const std::string &fileSpec, const CommonTime &start, const CommonTime &end, const FileSpec::FSTStringMap &fsts=FileSpec::FSTStringMap())
Definition: FileSpecFind.cpp:225
gnsstk::FileFilterFrameWithHeader::beginHeader
std::list< FileHeader >::const_iterator beginHeader() const
Definition: FileFilterFrameWithHeader.hpp:350
gnsstk::FileFilterFrameWithHeader::getHeaderCount
std::list< FileHeader >::size_type getHeaderCount(void) const
Returns the number of data items in the header list.
Definition: FileFilterFrameWithHeader.hpp:254
gnsstk::FileSpec
Definition: FileSpec.hpp:80
gnsstk::CommonTime::END_OF_TIME
static const GNSSTK_EXPORT CommonTime END_OF_TIME
latest representable CommonTime
Definition: CommonTime.hpp:104
gnsstk::FileFilterFrameWithHeader::FileFilterFrameWithHeader
FileFilterFrameWithHeader(const std::vector< std::string > &fileList, const gnsstk::CommonTime &start=gnsstk::CommonTime::BEGINNING_OF_TIME, const gnsstk::CommonTime &end=gnsstk::CommonTime::END_OF_TIME)
Definition: FileFilterFrameWithHeader.hpp:89
gnsstk::FileFilter::begin
std::list< FileData >::const_iterator begin() const
Definition: FileFilter.hpp:310
gnsstk::CommonTime
Definition: CommonTime.hpp:84
gnsstk::FileFilterFrameWithHeader::chl
void chl(const std::string &req)
Definition: FileFilterFrameWithHeader.hpp:310
gnsstk::FileFilterFrameWithHeader::FileFilterFrameWithHeader
FileFilterFrameWithHeader(const gnsstk::CommonTime &start=gnsstk::CommonTime::BEGINNING_OF_TIME, const gnsstk::CommonTime &end=gnsstk::CommonTime::END_OF_TIME)
Definition: FileFilterFrameWithHeader.hpp:80
gnsstk::FileFilterFrameWithHeader::newSource
FileFilterFrameWithHeader & newSource(const std::vector< std::string > &fileList, const gnsstk::CommonTime &start=gnsstk::CommonTime::BEGINNING_OF_TIME, const gnsstk::CommonTime &end=gnsstk::CommonTime::END_OF_TIME)
Definition: FileFilterFrameWithHeader.hpp:165
Rinex3ObsData.hpp
GNSSTK_RETHROW
#define GNSSTK_RETHROW(exc)
Definition: Exception.hpp:369
example4.pos
pos
Definition: example4.py:125
gnsstk::FileFilterFrameWithHeader::newSource
FileFilterFrameWithHeader & newSource(const std::string &filename, const gnsstk::CommonTime &start=gnsstk::CommonTime::BEGINNING_OF_TIME, const gnsstk::CommonTime &end=gnsstk::CommonTime::END_OF_TIME)
Definition: FileFilterFrameWithHeader.hpp:150
gnsstk::FileFilter::end
std::list< FileData >::const_iterator end() const
Definition: FileFilter.hpp:313
gnsstk::FileUtils::makeDir
int makeDir(const std::string &path, unsigned mode)
Definition: FileUtils.hpp:106
gnsstk::FileFilterFrame::fs
FileSpec fs
The file spec for this filter.
Definition: FileFilterFrame.hpp:177
gnsstk::FileFilterFrameWithHeader::emptyHeader
bool emptyHeader() const
Definition: FileFilterFrameWithHeader.hpp:277
gnsstk::FileFilterFrameWithHeader::endHeader
std::list< FileHeader >::const_iterator endHeader() const
Definition: FileFilterFrameWithHeader.hpp:361
gnsstk::FileFilterFrameWithHeader::halfDiff
std::list< FileData > halfDiff(const FileFilterFrameWithHeader< FileStream, FileData, FileHeader > &r, BinaryPredicate p, int precision) const
Returns a list of the data in *this that isn't in r.
Definition: FileFilterFrameWithHeader.hpp:198
GNSSTK_THROW
#define GNSSTK_THROW(exc)
Definition: Exception.hpp:366
gnsstk::FileFilterFrameWithHeader::headerList
std::list< FileHeader > headerList
Definition: FileFilterFrameWithHeader.hpp:321
gnsstk::FileFilterFrame
Definition: FileFilterFrame.hpp:73
gnsstk::FileFilterFrame::newSource
FileFilterFrame & newSource(const FileSpec &filespec, const gnsstk::CommonTime &start=gnsstk::CommonTime::BEGINNING_OF_TIME, const gnsstk::CommonTime &end=gnsstk::CommonTime::END_OF_TIME, const FileSpecFind::Filter &filter=FileSpecFind::Filter())
Definition: FileFilterFrame.hpp:231
gnsstk::FileSpec::newSpec
virtual FileSpec & newSpec(const std::string &fileSpec)
Definition: FileSpec.hpp:160
gnsstk::FileFilter::filter
FileFilter & filter(Predicate up)
Definition: FileFilter.hpp:199
gnsstk::FileFilterFrameWithHeader::~FileFilterFrameWithHeader
virtual ~FileFilterFrameWithHeader()
Definition: FileFilterFrameWithHeader.hpp:182
gnsstk::FileFilterFrameWithHeader::init
void init(const FileSpecFind::Filter &filter=FileSpecFind::Filter())
Definition: FileFilterFrameWithHeader.hpp:439
gnsstk::FileFilter::dataVec
lType dataVec
Definition: FileFilter.hpp:358


gnsstk
Author(s):
autogenerated on Wed Oct 25 2023 02:40:39