FMT 1.2.0
Forest management tools for forest planning
Loading...
Searching...
No Matches
FMTParser.h
Go to the documentation of this file.
1/*
2Copyright (c) 2019 Gouvernement du Québec
3
4SPDX-License-Identifier: LiLiQ-R-1.1
5License-Filename: LICENSES/EN/LiLiQ-R11unicode.txt
6*/
7
8#ifndef FMTparser_Hm_included
9#define FMTparser_Hm_included
10
11#include <boost/regex.hpp>
12#include <iterator>
13#include <iostream>
14#include <fstream>
15#include <string>
16#include <vector>
17#include <queue>
18#include "FMTutility.h"
19#include <array>
20#include <ctime>
21
22
23#include <boost/thread/recursive_mutex.hpp>
24
25
26
27#include "FMTObject.h"
28#if defined FMTWITHGDAL
29 class OGRSpatialReference;
30 class GDALDataset;
31 class OGRLayer;
32 class GDALRasterBand;
33 class GDALDriver;
34 class OGRSpatialReference;
35 class OGRCoordinateTransformation;
36#endif
37
38
39
40namespace Core {
41 class FMTTheme;
42 class FMTAction;
43 class FMTYields;
44 class FMTSpec;
45 class FMTPerBounds;
46 class FMTConstants;
47 template<typename T>
48 class FMTBounds;
49}
50
51namespace Spatial
52{
53 template<typename T>
54 class FMTLayer;
55}
56
57namespace Testing
58{
59 class UnitTestFMTParser;
60}
61
62
64namespace Parser
65{
66// DocString: FMTParser
72 {
73 public:
74 // DocString: FMTParser()
79 // DocString: FMTParser(const FMTParser&)
84 FMTParser(const FMTParser& rhs);
85 // DocString: FMTParser::operator=
91 FMTParser& operator = (const FMTParser& rhs);
92 // DocString: ~FMTParser()
96 virtual ~FMTParser()=default;
97 // DocString: FMTParser::getMostRecentFiletime
102 std::time_t getMostRecentFiletime() const;
103 // DocString: FMTParser::setHeader
108 void setHeader(const std::string& header);
109 #ifdef FMTWITHGDAL
110 // DocString: FMTParser::_getWSFields
117 GDALDataset* createOGRDataset(
118 std::string location = std::string(),
119 std::string gdaldrivername = "CSV") const;
120 // DocString: FMTParser::createLayer()
128 OGRLayer* createLayer(GDALDataset* dataset,
129 const std::string& name, std::vector<std::string> creationoptions = std::vector<std::string>()) const;
130 // DocString: FMTParser::getGDALVectorDriverNames
136 std::vector<std::string>getGDALVectorDriverNames(bool testcreation = true) const;
137 // DocString: FMTParser::getGDALRasterDriverNames
143 std::vector<std::string>getGDALRasterDriverNames(bool testcreation = true) const;
144 // DocString: FMTParser::getGDALVectorDriverExtensions
150 std::vector<std::vector<std::string>>getGDALVectorDriverExtensions(bool testcreation = true) const;
151 // DocString: FMTParser::getGDALRasterDriverExtensions
157 std::vector<std::vector<std::string>>getGDALRasterDriverExtensions(bool testcreation = true) const;
158 #endif
159 // DocString: FMTParser::tryOpening
166 bool tryOpening(const std::ifstream& stream, const std::string& location) const;
167 // DocString: FMTParser::tryOpening
174 bool tryOpening(std::ofstream& stream, const std::string& location) const;
175 // DocString: FMTParser::getCleanLine
181 std::string getCleanLine(std::istream& stream) const;
182 // DocString: FMTParser::getCleanLine
188 std::string getCleanLine(const std::string& p_input) const;
189 // DocString: FMTParser::fromExtension
195 static Core::FMTsection fromExtension(const std::string& p_Extension);
196 // DocString: FMTParser::createSubDirectory
203 std::string createSubDirectory(const std::string& p_Directory, const std::string& p_SubDirectory);
204 protected:
205 // DocString: FMTParser::FMTLineInfo
210 {
211 public:
212 // DocString: FMTParser::FMTLineInfo(const std::string, int, const std::string&)
219 FMTLineInfo(const std::string p_line, int p_number, const std::string& p_file);
220 std::string m_lineValue;
222 std::string m_file;
223 };
224 // DocString: FMTParser::m_SEPARATOR
226 const static boost::regex m_SEPARATOR;
227 // DocString: FMTParser::m_MTX
229 mutable boost::recursive_mutex m_MTX;
230 // DocString: FMTParser::FMTsection
233 // DocString: FMTParser::m_AYLD
235 const static boost::regex m_AYLD;
236 // DocString: FMTParser::m_AAGE
238 const static boost::regex m_AAGE;
239 // DocString: FMTParser::m_AYLD_AGE
241 const static boost::regex m_AYLD_AGE;
242 // DocString: FMTParser::m_BOUNDS
244 const static boost::regex m_BOUNDS;
245 // DocString: FMTParser::m_OPERATORS
247 const static boost::regex m_OPERATORS;
248 // DocString: FMTParser::m_PRIMARY
250 const static boost::regex m_PRIMARY;
251 // DocString: FMTParser::m_constrePlacement
254 // DocString: FMTParser::m_line
256 mutable int m_line;
257 // DocString: FMTParser::m_comment
259 mutable std::string m_comment;
260 // DocString: FMTParser::m_location
262 mutable std::string m_location;
263 // DocString: FMTParser::m_MostRecentFile
265 mutable std::time_t m_MostRecentFile;
266 // DocString: FMTParser::_setSection
271 void _setSection(const Core::FMTsection& section) const;
272 #ifdef FMTWITHGDAL
273 // DocString: FMTParser::getallGDALdrivernames
280 std::vector<GDALDriver*> _getAllGDALDrivers(const char* spatialtype, bool testcreation = true) const;
281 // DocString: FMTParser::getGDALExtensions
288 std::vector<std::vector<std::string>>getGDALExtensions(const char* spatialtype, bool testcreation = true) const;
289 // DocString: FMTParser::_setCategories
295 void _setCategories(GDALRasterBand* band, const std::vector<std::string>& categories) const;
296 // DocString: FMTAreaParser::_getProjTransform
303 OGRCoordinateTransformation* _getProjTransform(OGRLayer* baselayer, bool fittoforel = true) const;
304 // DocString: FMTAreaParser::_getTransFormMemLayerCopy
312 GDALDataset* _getTransFormMemLayerCopy(OGRLayer* baselayer, const OGRSpatialReference* newreference, const std::string& fieldname) const;
313 // DocString: FMTParser::_getFORELSpatialRef
318 std::unique_ptr<OGRSpatialReference> _getFORELSpatialRef() const;
319 // DocString: FMTParser::_createDataset
329 template<typename T>
330 GDALDataset* _createDataset(const std::string& location, const Spatial::FMTLayer<T>& layer, const int datatypeid, std::string format = "GTiff") const;
331 // DocString: FMTParser::_getDataset
337 GDALDataset* _getDataset(const std::string& location) const;
338 // DocString: FMTParser::_getVectorDataset
344 GDALDataset* _getVectorDataset(const std::string& location) const;
345 // DocString: FMTParser::_getLayer
352 OGRLayer* _getLayer(GDALDataset* dataset, int id) const;
353 // DocString: FMTParser::_getBand
360 GDALRasterBand* _getBand(GDALDataset* dataset, int bandid = 1) const;
361 // DocString: FMTParser::_createBand
369 GDALRasterBand* _createBand(GDALDataset* dataset, const std::vector<std::string>& categories, int bandid = 1) const;
370 // DocString: FMTParser::_getCat
377 std::vector<std::string> _getCat(GDALDataset* dataset, int bandid = 1) const;
378 // DocString: FMTParser::_getOverview
385 GDALRasterBand* _getOverview(GDALRasterBand* band, int view = 1) const;
386 // DocString: FMTParser::_getWSFields
398 void _getWSFields(OGRLayer* layer, std::map<int, int>& themes, int& age, int& area, int& lock, std::string agefield = "", std::string areafield = "", std::string lockfield = "") const;
399 // DocString: FMTParser::_createVectorMemoryDs
404 GDALDataset* _createVectorMemoryDs() const;
405 #endif
406
407 // DocString: FMTParser::_isValidFile
413 bool _isValidFile(const std::string& location) const;
414 // DocString: FMTParser::_isValid
420 bool _isValid(const std::string& line) const;
421 // DocString: FMTParser::regexLoop
428 std::vector<std::string>regexLoop(const boost::regex& cutregex, std::string& str) const;
429 // DocString: FMTParser::spliter
436 std::vector<std::string>spliter(std::string strmask, const boost::regex& xspliter) const;
437 // DocString: FMTParser::_clearComments
442 void _clearComments(std::string& line) const;
443 // DocString: FMTParser::_upper
449 std::string _upper(const std::string& lowercases) const;
450 // DocString: FMTParser::returnInclude
458 virtual std::queue<FMTLineInfo> _tryInclude(const std::vector<Core::FMTTheme>& p_themes, const Core::FMTConstants& p_cons,
459 std::queue<FMTLineInfo>p_ForOut) const;
460
461 // DocString: FMTParser::_getCleanLinewfor
469 virtual std::queue<FMTLineInfo> _getCleanLinewfor(std::ifstream& p_stream, const std::vector<Core::FMTTheme>& p_themes,
470 const Core::FMTConstants& p_cons) const;
471 // DocString: FMTParser::_getAllLines
477 std::queue<FMTLineInfo> _getAllLines(std::ifstream& p_stream) const;
478 // DocString: FMTParser::_processForLoopsNInclude
486 std::queue<FMTLineInfo> _processForLoopsNInclude(
487 const std::vector<Core::FMTTheme>& p_themes,
488 const Core::FMTConstants& p_cons,
489 std::queue<FMTLineInfo>p_AllLines) const;
490 // DocString: FMTParser::_isNum
496 bool _isNum(std::string value) const;
497 // DocString: FMTParser::_isNum
505 bool _isNum(const std::string& value, const Core::FMTConstants& constant, bool throwerror = true) const;
506 // DocString: FMTParser::_getNum
515 template<typename T>
516 T _getNum(const std::string& value, const Core::FMTConstants& constant, int period = 0) const;
517 // DocString: FMTParser::_getNum
525 template<typename T>
526 T _getNum(const std::string& value, bool omitnumtest = false) const;
527 // DocString: FMTParser::_tryFillNumber
537 template<typename T>
538 bool _tryFillNumber(T& number, const std::string& value, const Core::FMTConstants& constant, int period = 0) const;
539 // DocString: FMTParser::bounds
549 template<typename T>
550 Core::FMTBounds<T>bounds(const Core::FMTConstants& constants, const std::string& value, const std::string& ope, Core::FMTsection section) const;
551 // DocString: FMTParser::getBaseOperators
556 std::array<std::string, 5>getBaseOperators() const;
557 // DocString: FMTParser::_sameAs
563 std::vector<std::string> _sameAs(const std::string& allset) const;
564 // DocString: FMTParser::_getPrimary
570 std::map<Core::FMTsection, std::string> _getPrimary(const std::string& primarylocation);
571 // DocString: FMTParser::_isYld
580 bool _isYld(const Core::FMTYields& p_ylds, const std::string& p_value,
581 Core::FMTsection pm_section, bool p_throwError = true) const;
582 // DocString: FMTParser::_isAct
590 bool _isAct(Core::FMTsection section, const std::vector<Core::FMTAction>& actions, std::string action) const;
591 // DocString: FMTParser::_setSpecs
602 std::string _setSpecs(Core::FMTsection section, Core::FMTkwor key, const Core::FMTYields& ylds, const Core::FMTConstants& constants, std::vector<Core::FMTSpec>& specs, const std::string& line);
603 // DocString: FMTParser::_setSpec
614 std::string _setSpec(Core::FMTsection section, Core::FMTkwor key, const Core::FMTYields& ylds, const Core::FMTConstants& constants, Core::FMTSpec& spec, const std::string& line);
615 // DocString: FMTParser::readCsv
622 std::vector<std::vector<std::string>>readCsv(const std::string& location, const char& separator);
623 // DocString: FMTParser::_getPerBound
631 Core::FMTPerBounds _getPerBound(const std::string& p_lower,
632 const std::string& p_upper,
633 const Core::FMTConstants& p_constants) const;
634 // DocString: FMTParser::_setPeriodWithBounds
642 void _setPeriodWithBounds(Core::FMTSpec& p_spec,
643 const std::string& p_lower,
644 const std::string& p_upper,
645 const Core::FMTConstants& p_constants) const;
646 // DocString: FMTParser::_setPeriods
654 bool _setPeriods(Core::FMTSpec& p_spec,
655 const std::string& p_periods,
656 const Core::FMTConstants& p_constants) const;
657 // DocString: FMTParser::_getForLoops
665 std::map<std::string, std::vector<std::string>> _getForLoops(const std::string& p_line,
666 const std::vector<Core::FMTTheme>& p_themes,
667 const Core::FMTConstants& p_cons) const;
668 // DocString: FMTParser::_getForLoops
675 void _processForLoops(const std::vector<Core::FMTTheme>& p_themes,
676 const Core::FMTConstants& p_constants,
677 std::queue<FMTLineInfo>& p_queue) const;
678 // DocString: FMTParser::_isForLoops
684 bool _isForLoops(const std::string& p_line) const;
685 // DocString: FMTParser::_isForLoopsEnd
691 bool _isForLoopsEnd(const std::string& p_line) const;
692 // DocString: FMTParser:::getLine
698 std::string _getLine(std::queue<FMTLineInfo>& p_Lines) const;
699 private:
700 friend class Testing::UnitTestFMTParser;
701 // DocString: FMTParser::m_VECTOR_THEME
703 const static boost::regex m_VECTOR_THEME;
704 // DocString: FMTParser::m_NUMBER
706 const static boost::regex m_NUMBER;
707 // DocString: FMTParser::m_REMOVE_COMMENT
709 const static boost::regex m_REMOVE_COMMENT;
710 // DocString: FMTParser::m_VALID
712 const static boost::regex m_VALID;
713 // DocString: FMTParser::m_INCLUDE
715 const static boost::regex m_INCLUDE;
716 // DocString: FMTParser::m_FOR
718 const static boost::regex m_FOR;
719 // DocString: FMTParser::m_END
721 const static boost::regex m_END;
722 // DocString: FMTParser::m_PERIODS
724 const static boost::regex m_PERIODS;
725 // DocString: FMTParser::primarym_sections
727 static std::map<Core::FMTsection, std::string>primarym_sections;
728 // DocString: FMTParser::m_inComment
730 mutable bool m_inComment;
731 // DocString: FMTParser::m_ForValues
733 //std::queue<std::string>m_ForValues;
734 // DocString: FMTParser::m_included
736 //std::queue<std::string>m_included;
737 // DocString: FMTParser::gdalInitialization;
739 static bool gdalInitialization;
740 // DocString: FMTParser::_safeGetline
747 std::istream& _safeGetline(std::istream& is, std::string& t) const;
748 #ifdef FMTWITHGDAL
749 // DocString: FMTParser::gdalInitialization
753 static void _initializeGDAL();
754 // DocString: FMTParser::_queryDatabase
762 std::map<std::string, std::vector<std::string>>_queryDatabase(
763 const std::string& p_DataBaseLocation,
764 const std::string& p_VariableName,
765 const std::string& p_Query) const;
766 #endif
767 // DocString: FMTParser::_getAbsolutePath
773 std::string _getAbsolutePath(std::string p_Path) const;
774 // DocString: FMTParser::_setForLoopLines
780 FMTLineInfo _setForLoopLines(std::queue<FMTLineInfo>& p_queue) const;
781 // DocString: FMTParser:: _processConstants
788 std::string _processConstants(std::string p_input,
789 const Core::FMTConstants& p_constants) const;
790 };
791
792}
793
794#endif
#define FMTEXPORT
Definition: FMTutility.h:125
Definition: FMTParser.h:48
Class holding the constants defined in the constants section of a model, used by the parsers.
Definition: FMTConstants.h:28
Base class of multiple FMT classes holding a shared exception handler pointer and logger.
Definition: FMTObject.h:49
FMTList containing multiple yield handlers as seen in the yield section, holding the information rela...
Definition: FMTYields.h:44
Helper holding a line value, its number and its file, used during parsing.
Definition: FMTParser.h:210
int m_lineNumber
Definition: FMTParser.h:221
std::string m_file
Definition: FMTParser.h:222
FMTLineInfo(const std::string p_line, int p_number, const std::string &p_file)
Construct a line info from a line, its number and its file.
std::string m_lineValue
Definition: FMTParser.h:220
Main parent class of all the parsers in FMT.
Definition: FMTParser.h:72
GDALDataset * _getDataset(const std::string &location) const
Open a GDAL dataset in read only from a location, throwing on error.
GDALRasterBand * _createBand(GDALDataset *dataset, const std::vector< std::string > &categories, int bandid=1) const
Create a GDAL raster band in a dataset with categories.
std::vector< std::string > _sameAs(const std::string &allset) const
Handle the _sameAs keyword.
std::map< Core::FMTsection, std::string > _getPrimary(const std::string &primarylocation)
Return the file locations of the different sections from a primary file.
GDALDataset * _getVectorDataset(const std::string &location) const
Open a GDAL vector dataset in read only from a location, throwing on error.
std::time_t m_MostRecentFile
The most recent file time read by this parser.
Definition: FMTParser.h:265
std::vector< std::string > spliter(std::string strmask, const boost::regex &xspliter) const
Split a string into multiple strings.
static const boost::regex m_AAGE
A regex for capturing age specificaiton.
Definition: FMTParser.h:238
std::string _setSpecs(Core::FMTsection section, Core::FMTkwor key, const Core::FMTYields &ylds, const Core::FMTConstants &constants, std::vector< Core::FMTSpec > &specs, const std::string &line)
Set the specifications of one or multiple specs and return the rest of the line.
FMTParser()
Default constructor for FMTParser.
std::string getCleanLine(const std::string &p_input) const
Clean a line and make it ready to be read by a parser.
std::vector< std::string > getGDALRasterDriverNames(bool testcreation=true) const
Return a vector of GDAL raster driver names.
GDALDataset * _createVectorMemoryDs() const
Create a vector memory dataset.
std::unique_ptr< OGRSpatialReference > _getFORELSpatialRef() const
Return the spatial reference used for FORELs in Quebec.
std::map< std::string, std::vector< std::string > > _getForLoops(const std::string &p_line, const std::vector< Core::FMTTheme > &p_themes, const Core::FMTConstants &p_cons) const
Fill up the for loops queue with the targeted variables.
Core::FMTsection m_section
The section in which the child class is in.
Definition: FMTParser.h:232
OGRCoordinateTransformation * _getProjTransform(OGRLayer *baselayer, bool fittoforel=true) const
Return a coordinate transformation for a layer, optionally fitting to FOREL.
std::vector< GDALDriver * > _getAllGDALDrivers(const char *spatialtype, bool testcreation=true) const
Return the GDAL drivers for a given spatial type.
std::vector< std::vector< std::string > > getGDALVectorDriverExtensions(bool testcreation=true) const
Return a vector of GDAL vector driver extensions organized by driver.
std::string getCleanLine(std::istream &stream) const
Clean a line and make it ready to be read by a parser.
std::string m_location
File location of the section read by the parser.
Definition: FMTParser.h:262
T _getNum(const std::string &value, const Core::FMTConstants &constant, int period=0) const
Return a numeric value from a string based on the constants and a period.
std::queue< FMTLineInfo > _getAllLines(std::ifstream &p_stream) const
Get all the lines of a file.
GDALRasterBand * _getBand(GDALDataset *dataset, int bandid=1) const
Open a GDAL raster band from a dataset.
bool _isNum(std::string value) const
Return true if the value is a number.
Core::FMTBounds< T > bounds(const Core::FMTConstants &constants, const std::string &value, const std::string &ope, Core::FMTsection section) const
Return a FMTBounds from a value based on the constants and a section.
bool _isValidFile(const std::string &location) const
Check if a file location is valid.
std::vector< std::string > _getCat(GDALDataset *dataset, int bandid=1) const
Return the categories of a dataset for a given band.
std::time_t getMostRecentFiletime() const
Return the most recent file time of the files read by the parser.
GDALDataset * _getTransFormMemLayerCopy(OGRLayer *baselayer, const OGRSpatialReference *newreference, const std::string &fieldname) const
Create a memory dataset copying a layer with a new field, optionally with a new spatial reference.
bool _setPeriods(Core::FMTSpec &p_spec, const std::string &p_periods, const Core::FMTConstants &p_constants) const
Set the periods of a spec from a parsed period string.
static const boost::regex m_AYLD
A regex for capturing age/period/yield specification.
Definition: FMTParser.h:235
bool _isValid(const std::string &line) const
Check if a line is valid and clean it.
FMTParser(const FMTParser &rhs)
Copy constructor for FMTParser.
void _processForLoops(const std::vector< Core::FMTTheme > &p_themes, const Core::FMTConstants &p_constants, std::queue< FMTLineInfo > &p_queue) const
Unroll the for loops in the queue and set the results in the queue.
virtual std::queue< FMTLineInfo > _tryInclude(const std::vector< Core::FMTTheme > &p_themes, const Core::FMTConstants &p_cons, std::queue< FMTLineInfo >p_ForOut) const
Return the next lines to be read by the parser, considering included files.
void _setSection(const Core::FMTsection &section) const
Set the section member of the parser.
bool _isYld(const Core::FMTYields &p_ylds, const std::string &p_value, Core::FMTsection pm_section, bool p_throwError=true) const
Check if a value is a valid yield.
bool tryOpening(std::ofstream &stream, const std::string &location) const
Open an output stream at a given location.
std::string _setSpec(Core::FMTsection section, Core::FMTkwor key, const Core::FMTYields &ylds, const Core::FMTConstants &constants, Core::FMTSpec &spec, const std::string &line)
Set the specification of a spec and return the rest of the line.
std::string createSubDirectory(const std::string &p_Directory, const std::string &p_SubDirectory)
Create a sub directory in directory.
bool tryOpening(const std::ifstream &stream, const std::string &location) const
Open an input stream at a given location.
static const boost::regex m_OPERATORS
A regex for capturing simple operators.
Definition: FMTParser.h:247
std::vector< std::vector< std::string > > readCsv(const std::string &location, const char &separator)
Read a CSV file from a location using a separator.
bool _isAct(Core::FMTsection section, const std::vector< Core::FMTAction > &actions, std::string action) const
Check if a value is an action.
void _setPeriodWithBounds(Core::FMTSpec &p_spec, const std::string &p_lower, const std::string &p_upper, const Core::FMTConstants &p_constants) const
Set the periods of a spec from a lower and upper bound.
std::array< std::string, 5 > getBaseOperators() const
Return the operators normally found in the different sections.
static const boost::regex m_PRIMARY
A regex for capturing the primary file.
Definition: FMTParser.h:250
std::string _upper(const std::string &lowercases) const
Convert a string to upper case.
void _getWSFields(OGRLayer *layer, std::map< int, int > &themes, int &age, int &area, int &lock, std::string agefield="", std::string areafield="", std::string lockfield="") const
Fill up the field ids of the themes, age, area and lock of a layer.
T _getNum(const std::string &value, bool omitnumtest=false) const
Return a numeric value from a string.
void _clearComments(std::string &line) const
Clear the comments from a line and fill up the comment member.
OGRLayer * createLayer(GDALDataset *dataset, const std::string &name, std::vector< std::string > creationoptions=std::vector< std::string >()) const
Create a layer in a dataset, deleting any existing layer with the same name.
std::vector< std::string > getGDALVectorDriverNames(bool testcreation=true) const
Return a vector of GDAL vector driver names.
boost::recursive_mutex m_MTX
Mutex for multi-threading.
Definition: FMTParser.h:229
bool _isForLoops(const std::string &p_line) const
Return true if a line is a for loop header.
std::vector< std::vector< std::string > > getGDALExtensions(const char *spatialtype, bool testcreation=true) const
Return the GDAL extensions organized by driver for a given spatial type.
void setHeader(const std::string &header)
Set a string as the header written when the file is opened in write mode, replacing the comment attri...
GDALRasterBand * _getOverview(GDALRasterBand *band, int view=1) const
Return an overview of a raster band.
std::vector< std::vector< std::string > > getGDALRasterDriverExtensions(bool testcreation=true) const
Return a vector of GDAL raster driver extensions organized by driver.
OGRLayer * _getLayer(GDALDataset *dataset, int id) const
Open a GDAL layer from a vector dataset by its id, throwing on error.
std::queue< FMTLineInfo > _processForLoopsNInclude(const std::vector< Core::FMTTheme > &p_themes, const Core::FMTConstants &p_cons, std::queue< FMTLineInfo >p_AllLines) const
Process the for loops and include lines.
static Core::FMTsection fromExtension(const std::string &p_Extension)
Return the FMTsection matching the extension of a file.
static const boost::regex m_AYLD_AGE
A regex for capturing age or yield specification.
Definition: FMTParser.h:241
std::vector< std::string > regexLoop(const boost::regex &cutregex, std::string &str) const
Capture a for loop from a line and return the variables to loop on.
bool _isNum(const std::string &value, const Core::FMTConstants &constant, bool throwerror=true) const
Return true if the value is a number, raising if it is not a valid number when throwerror is true.
GDALDataset * _createDataset(const std::string &location, const Spatial::FMTLayer< T > &layer, const int datatypeid, std::string format="GTiff") const
Create an empty GDAL dataset for a layer.
virtual std::queue< FMTLineInfo > _getCleanLinewfor(std::ifstream &p_stream, const std::vector< Core::FMTTheme > &p_themes, const Core::FMTConstants &p_cons) const
Get a clean line considering for loops when reading the file.
int m_constrePlacement
Number of constant replaced by a numerical number.
Definition: FMTParser.h:253
Core::FMTPerBounds _getPerBound(const std::string &p_lower, const std::string &p_upper, const Core::FMTConstants &p_constants) const
Return the period bound of an input.
void _setCategories(GDALRasterBand *band, const std::vector< std::string > &categories) const
Write the categories in the band information.
int m_line
Line id at which the parser is reading the values.
Definition: FMTParser.h:256
GDALDataset * createOGRDataset(std::string location=std::string(), std::string gdaldrivername="CSV") const
Create an OGR vector dataset based on a driver name and a location.
static const boost::regex m_BOUNDS
A regex for capturing bounds for yield or age specification.
Definition: FMTParser.h:244
std::string _getLine(std::queue< FMTLineInfo > &p_Lines) const
Get and pop the front line of a queue.
bool _tryFillNumber(T &number, const std::string &value, const Core::FMTConstants &constant, int period=0) const
Try to get a number from a string, returning false on failure.
static const boost::regex m_SEPARATOR
A regex for splitting general string.
Definition: FMTParser.h:226
bool _isForLoopsEnd(const std::string &p_line) const
Return true if a line is the end of a for loop.
std::string m_comment
Comment found in the actual line read by the parser.
Definition: FMTParser.h:259
virtual ~FMTParser()=default
Default destructor for FMTParser.
Definition: FMTParser.h:54
The Core namespace provides classes for simulating stands/strata growth/harvest through time.
Definition: FMTAction.h:34
FMTsection
Enumerator describing the sections of a Woodstock model.
Definition: FMTutility.h:32
FMTkwor
Enumerator describing the source or target keyword of a transition.
Definition: FMTutility.h:52
Namespace handling all FMT's parsers. Everything related to I/O should be located in this namespace.
Definition: FMTActionParser.h:27
Definition: FMTAreaParser.h:40
Definition: FMTParser.h:58