FileSpec.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 
44 #ifndef GNSSTK_FILESPEC_HPP
45 #define GNSSTK_FILESPEC_HPP
46 
47 #include <vector>
48 #include <functional>
49 #include <map>
50 #include <set>
51 
52 #include "CommonTime.hpp"
53 
54 #ifdef WIN32
55 const char slash = '\\';
56 #else
57 const char slash = '/';
58 #endif
59 
60 namespace gnsstk
61 {
65  NEW_EXCEPTION_CLASS(FileSpecException, gnsstk::Exception);
66 
68 
69 
80  class FileSpec
81  {
82  public:
94  {
98  prn,
102  fixed,
106 
108 
109  // see CommonTime for more information on the following elements
121  mjd,
123  day,
130 
132  };
133 
136  typedef std::map<FileSpecType, std::string> FSTStringMap;
137 
138 
142  {
145  };
146 
148  FileSpec() {}
149 
152  FileSpec(const std::string& fileSpec)
153  {init(fileSpec);}
154 
156  virtual ~FileSpec() {}
157 
160  virtual FileSpec& newSpec(const std::string& fileSpec)
161  {init(fileSpec); return *this;}
162 
164  virtual std::string getSpecString(void) const
165  {return fileSpecString;}
166 
173  virtual std::string createSearchString() const;
174 
184  virtual std::string extractField(const std::string& filename,
185  const FileSpecType) const;
186 
190  virtual bool hasField(FileSpecType fst) const
191  { return fileSpecSet.count(fst) != 0; }
192 
194  bool hasTimeField() const
195  { return fileSpecSet.lower_bound(firstTime) != fileSpecSet.end(); }
196 
198  bool hasNonTimeField() const
199  { return (!fileSpecSet.empty() && ((*fileSpecSet.begin()) < firstTime)); }
200 
209  virtual gnsstk::CommonTime extractCommonTime(const std::string& filename)
210  const;
211 
224  virtual std::string toString(const gnsstk::CommonTime& dt,
225  const FSTStringMap& fstsMap = FSTStringMap())
226  const;
227 
239  virtual void sortList(std::vector<std::string>& fileList,
240  const FileSpecSortType fsst = ascending) const;
241 
243  virtual void dump(std::ostream& o) const;
244 
245  protected:
249  virtual void init(const std::string& fileSpec);
250 
251  public:
257  static std::string convertFileSpecType(const FileSpecType);
258 
264  static FileSpecType convertFileSpecType(const std::string&);
265 
266  protected:
270  {
271  public:
273  FileSpecElement(const std::string::size_type numChars = 0,
274  const std::string::size_type offs = 0,
275  const FileSpecType fst = unknown,
276  const std::string& fld = std::string())
277  : numCh(numChars), offset(offs), type(fst), field(fld)
278  {}
279 
281  std::string::size_type numCh;
283  std::string::size_type offset;
289  std::string field;
290  };
291 
292  struct FileSpecSort :
293  public std::binary_function<std::string,std::string,bool>
294  {
295  public:
297  : fileSpec(fs), sortDir(s) {}
301  bool operator() (const std::string& l, const std::string& r) const;
302  private:
307  };
308 
310  std::vector<FileSpecElement> fileSpecList;
312  std::set<FileSpecType> fileSpecSet;
314  std::string fileSpecString;
315 
316  friend struct FileSpecSort;
317 
318  }; // class FileSpec
319 
324 
326 
327 } // namespace gnsstk
328 
329 #endif
gnsstk::FileSpec::FSTStringMap
std::map< FileSpecType, std::string > FSTStringMap
Definition: FileSpec.hpp:136
gnsstk::FileSpec::fullgpsweek
@ fullgpsweek
'F' A field for full GPS weeks
Definition: FileSpec.hpp:119
gnsstk::FileSpec::fullzcount
@ fullzcount
'C' or 'c' A field for Full GPS Z-count
Definition: FileSpec.hpp:129
gnsstk::FileSpec::FileSpecSort::FileSpecSort
FileSpecSort(const FileSpec &fs, const FileSpecSortType s)
Definition: FileSpec.hpp:296
gnsstk::FileSpec::clock
@ clock
'k' A field for the clock number
Definition: FileSpec.hpp:104
gnsstk::FileSpec::FileSpecSort::sortDir
FileSpecSortType sortDir
ascending or descending
Definition: FileSpec.hpp:304
gnsstk::FileSpec::ascending
@ ascending
Definition: FileSpec.hpp:143
gnsstk::FileSpec::FileSpecElement
Definition: FileSpec.hpp:269
gnsstk::FileSpec::hasTimeField
bool hasTimeField() const
Return true if this FileSpec has any time fields.
Definition: FileSpec.hpp:194
gnsstk::FileSpec::FileSpecSort
Definition: FileSpec.hpp:292
gnsstk::FileSpec::FileSpecSort::operator()
bool operator()(const std::string &l, const std::string &r) const
Definition: FileSpec.cpp:71
slash
const char slash
Definition: FileSpec.hpp:57
gnsstk::FileSpec::end
@ end
A place holder for the end of this list.
Definition: FileSpec.hpp:131
gnsstk::FileSpec::selected
@ selected
't' A field for selected/unselected receiver
Definition: FileSpec.hpp:99
gnsstk::FileSpec::gpsweek
@ gpsweek
'G' A field for 10 bit GPS weeks
Definition: FileSpec.hpp:118
gnsstk::FileSpec::init
virtual void init(const std::string &fileSpec)
Definition: FileSpec.cpp:420
gnsstk::FileSpec::FileSpecElement::type
FileSpecType type
The type which this field corresponds to.
Definition: FileSpec.hpp:285
gnsstk::FileSpec::descending
@ descending
Definition: FileSpec.hpp:144
gnsstk::FileSpec::fileSpecString
std::string fileSpecString
Holds the string that the fileSpecList was generated from.
Definition: FileSpec.hpp:314
gnsstk
For Sinex::InputHistory.
Definition: BasicFramework.cpp:50
gnsstk::FileSpec::unknown
@ unknown
Unknown type.
Definition: FileSpec.hpp:95
gnsstk::FileSpec
Definition: FileSpec.hpp:80
gnsstk::Exception
Definition: Exception.hpp:151
gnsstk::NEW_EXCEPTION_CLASS
NEW_EXCEPTION_CLASS(FileSpecException, gnsstk::Exception)
gnsstk::FileSpec::minute
@ minute
'M' A field for minutes (out of 60)
Definition: FileSpec.hpp:115
gnsstk::FileSpec::firstTime
@ firstTime
First enumeration value pertaining to time.
Definition: FileSpec.hpp:111
gnsstk::FileSpec::sequence
@ sequence
'I' A sequence number, as in part 1, part 2, etc..
Definition: FileSpec.hpp:100
gnsstk::FileSpec::FileSpecSortType
FileSpecSortType
Definition: FileSpec.hpp:141
gnsstk::FileSpec::extractCommonTime
virtual gnsstk::CommonTime extractCommonTime(const std::string &filename) const
Definition: FileSpec.cpp:247
gnsstk::FileSpec::FileSpec
FileSpec(const std::string &fileSpec)
Definition: FileSpec.hpp:152
gnsstk::FileSpec::unixusec
@ unixusec
'u' A field for UNIX microseconds
Definition: FileSpec.hpp:128
gnsstk::FileSpec::fsecond
@ fsecond
'f' A field for seconds (float)
Definition: FileSpec.hpp:117
gnsstk::FileSpec::zcount
@ zcount
'Z' A field for GPS Z-count
Definition: FileSpec.hpp:125
gnsstk::FileSpec::hasNonTimeField
bool hasNonTimeField() const
Return true if this FileSpec has any non-time fields.
Definition: FileSpec.hpp:198
gnsstk::FileSpec::extractField
virtual std::string extractField(const std::string &filename, const FileSpecType) const
Definition: FileSpec.cpp:216
gnsstk::FileSpec::fileSpecList
std::vector< FileSpecElement > fileSpecList
Holds all of the FileSpecElements for this FileSpec.
Definition: FileSpec.hpp:310
gnsstk::FileSpec::dayofmonth
@ dayofmonth
'd' A field for day-of-month
Definition: FileSpec.hpp:113
gnsstk::FileSpec::createSearchString
virtual std::string createSearchString() const
Definition: FileSpec.cpp:184
gnsstk::operator--
FileSpec::FileSpecType & operator--(FileSpec::FileSpecType &fst, int)
Operator– for FileSpecType.
Definition: FileSpec.cpp:57
gnsstk::FileSpec::month
@ month
'm' A field for month (numeric)
Definition: FileSpec.hpp:112
gnsstk::CommonTime
Definition: CommonTime.hpp:84
gnsstk::FileSpec::getSpecString
virtual std::string getSpecString(void) const
Returns the string of the filespec.
Definition: FileSpec.hpp:164
gnsstk::FileSpec::doysecond
@ doysecond
's' a field for second-of-day (float)
Definition: FileSpec.hpp:124
gnsstk::FileSpec::~FileSpec
virtual ~FileSpec()
Destructor.
Definition: FileSpec.hpp:156
gnsstk::FileSpec::hasField
virtual bool hasField(FileSpecType fst) const
Definition: FileSpec.hpp:190
gnsstk::FileSpec::FileSpecElement::offset
std::string::size_type offset
The offset in the string where this field begins.
Definition: FileSpec.hpp:283
gnsstk::FileSpec::year
@ year
'y' or 'Y' A field for a year
Definition: FileSpec.hpp:110
gnsstk::FileSpec::receiver
@ receiver
'r' A field for the receiver number
Definition: FileSpec.hpp:97
gnsstk::FileSpec::FileSpecElement::FileSpecElement
FileSpecElement(const std::string::size_type numChars=0, const std::string::size_type offs=0, const FileSpecType fst=unknown, const std::string &fld=std::string())
This is the default constructor too.
Definition: FileSpec.hpp:273
gnsstk::FileSpec::FileSpec
FileSpec()
Default constructor.
Definition: FileSpec.hpp:148
gnsstk::FileSpec::station
@ station
'n' A field for station numbers
Definition: FileSpec.hpp:96
gnsstk::FileSpec::day
@ day
'j' A field for day of year
Definition: FileSpec.hpp:123
gnsstk::FileSpec::text
@ text
Definition: FileSpec.hpp:105
gnsstk::FileSpec::FileSpecType
FileSpecType
Definition: FileSpec.hpp:93
gnsstk::FileSpec::toString
virtual std::string toString(const gnsstk::CommonTime &dt, const FSTStringMap &fstsMap=FSTStringMap()) const
Definition: FileSpec.cpp:278
gnsstk::FileSpec::sortList
virtual void sortList(std::vector< std::string > &fileList, const FileSpecSortType fsst=ascending) const
Definition: FileSpec.cpp:336
CommonTime.hpp
gnsstk::FileSpec::mjd
@ mjd
'Q' A field for Modified Julian Date
Definition: FileSpec.hpp:121
gnsstk::FileSpec::zcountfloor
@ zcountfloor
'z' A field for GPS Z-count rounded down
Definition: FileSpec.hpp:126
gnsstk::FileSpec::unixsec
@ unixsec
'U' A field for UNIX seconds
Definition: FileSpec.hpp:127
gnsstk::FileSpec::fixed
@ fixed
A field for fixed characters.
Definition: FileSpec.hpp:103
gnsstk::FileSpec::dayofweek
@ dayofweek
'w' A field for day-of-week (numeric)
Definition: FileSpec.hpp:122
gnsstk::FileSpec::version
@ version
Definition: FileSpec.hpp:101
gnsstk::FileSpec::dump
virtual void dump(std::ostream &o) const
semi-nicely print the FileSpec to the stream.
Definition: FileSpec.cpp:402
gnsstk::FileSpec::fileSpecSet
std::set< FileSpecType > fileSpecSet
Set of all FileSpecType values present in this FileSpec.
Definition: FileSpec.hpp:312
gnsstk::FileSpec::newSpec
virtual FileSpec & newSpec(const std::string &fileSpec)
Definition: FileSpec.hpp:160
gnsstk::FileSpec::hour
@ hour
'H' A field for hours (out of 24)
Definition: FileSpec.hpp:114
gnsstk::FileSpec::gpssecond
@ gpssecond
'g' A field for GPS second-of-week
Definition: FileSpec.hpp:120
gnsstk::operator++
FileSpec::FileSpecType & operator++(FileSpec::FileSpecType &fst, int)
Operator++ for FileSpecType.
Definition: FileSpec.cpp:64
gnsstk::FileSpec::FileSpecElement::field
std::string field
Definition: FileSpec.hpp:289
gnsstk::FileSpec::second
@ second
'S' A field for seconds (out of 60)
Definition: FileSpec.hpp:116
gnsstk::FileSpec::prn
@ prn
'p' A field for PRN number
Definition: FileSpec.hpp:98
gnsstk::FileSpec::FileSpecSort::fileSpec
const FileSpec & fileSpec
The FileSpec doing the sorting.
Definition: FileSpec.hpp:306
gnsstk::FileSpec::convertFileSpecType
static std::string convertFileSpecType(const FileSpecType)
Definition: FileSpec.cpp:106
gnsstk::FileSpec::FileSpecElement::numCh
std::string::size_type numCh
The number of characters this field is in the file name.
Definition: FileSpec.hpp:281


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