ParserKeyword.hpp
Go to the documentation of this file.
1 /*
2  Copyright 2013 Statoil ASA.
3 
4  This file is part of the Open Porous Media project (OPM).
5 
6  OPM is free software: you can redistribute it and/or modify
7  it under the terms of the GNU General Public License as published by
8  the Free Software Foundation, either version 3 of the License, or
9  (at your option) any later version.
10 
11  OPM is distributed in the hope that it will be useful,
12  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  GNU General Public License for more details.
15 
16  You should have received a copy of the GNU General Public License
17  along with OPM. If not, see <http://www.gnu.org/licenses/>.
18  */
19 #ifndef PARSER_KEYWORD_H
20 #define PARSER_KEYWORD_H
21 
22 #include <string>
23 #include <iostream>
24 #include <memory>
25 #include <set>
26 
27 #ifdef HAVE_REGEX
28 #include <regex>
29 #else
30 #include <boost/regex.hpp>
31 #endif
32 
33 #include <opm/json/JsonObject.hpp>
34 
43 
45 
46 
47 namespace Opm {
49  typedef std::shared_ptr<ParserKeyword> ParserKeywordPtr;
50  typedef std::shared_ptr<const ParserKeyword> ParserKeywordConstPtr;
51 
52  class ParserKeyword {
53  public:
54  ParserKeyword(const std::string& name ,
55  const std::string& sizeKeyword ,
56  const std::string& sizeItem,
57  bool isTableCollection = false);
58  explicit ParserKeyword(const std::string& name);
59  explicit ParserKeyword(const Json::JsonObject& jsonConfig);
60 
61  void setFixedSize( size_t keywordSize);
62  void setSizeType( ParserKeywordSizeEnum sizeType );
64  void initSizeKeyword( const std::string& sizeKeyword, const std::string& sizeItem);
65 
66 
67  typedef std::set<std::string> DeckNameSet;
68  typedef std::set<std::string> SectionNameSet;
69 
70 
71  static std::string getDeckName(const std::string& rawString);
72  static bool validInternalName(const std::string& name);
73  static bool validDeckName(const std::string& name);
74  bool hasMatchRegex() const;
75  void setMatchRegex(const std::string& deckNameRegexp);
76  bool matches(const std::string& deckKeywordName) const;
77  bool hasDimension() const;
78  void addRecord(std::shared_ptr<ParserRecord> record);
79  void addDataRecord(std::shared_ptr<ParserRecord> record);
80  ParserRecordPtr getRecord(size_t recordIndex) const;
81  std::vector<ParserRecordPtr>::const_iterator recordBegin() const;
82  std::vector<ParserRecordPtr>::const_iterator recordEnd() const;
83  const std::string className() const;
84  const std::string& getName() const;
85  size_t getFixedSize() const;
86  bool hasFixedSize() const;
87  bool isTableCollection() const;
88  std::string getDescription() const;
89  void setDescription(const std::string &description);
90 
91  bool hasMultipleDeckNames() const;
92  void clearDeckNames();
93  void addDeckName( const std::string& deckName );
94  DeckNameSet::const_iterator deckNamesBegin() const;
95  DeckNameSet::const_iterator deckNamesEnd() const;
96 
98  void addValidSectionName(const std::string& sectionName);
99  bool isValidSection(const std::string& sectionName) const;
100  SectionNameSet::const_iterator validSectionNamesBegin() const;
101  SectionNameSet::const_iterator validSectionNamesEnd() const;
102 
103  DeckKeywordPtr parse(const ParseMode& parseMode , RawKeywordConstPtr rawKeyword) const;
104  enum ParserKeywordSizeEnum getSizeType() const;
105  const std::pair<std::string,std::string>& getSizeDefinitionPair() const;
106  bool isDataKeyword() const;
107  bool equal(const ParserKeyword& other) const;
108 
109  std::string createDeclaration(const std::string& indent) const;
110  std::string createDecl() const;
111  std::string createCode() const;
112  void applyUnitsToDeck(std::shared_ptr<const Deck> deck , std::shared_ptr<const DeckKeyword> deckKeyword) const;
113  private:
114  std::pair<std::string,std::string> m_sizeDefinitionPair;
115  std::string m_name;
116  DeckNameSet m_deckNames;
117  DeckNameSet m_validSectionNames;
118  std::string m_matchRegexString;
119 #ifdef HAVE_REGEX
120  std::regex m_matchRegex;
121 #else
122  boost::regex m_matchRegex;
123 #endif
125  enum ParserKeywordSizeEnum m_keywordSizeType;
126  size_t m_fixedSize;
127  bool m_isTableCollection;
128  std::string m_Description;
129 
130  static bool validNameStart(const std::string& name);
131  void initDeckNames( const Json::JsonObject& jsonConfig );
132  void initSectionNames( const Json::JsonObject& jsonConfig );
133  void initMatchRegex( const Json::JsonObject& jsonObject );
134  void initData( const Json::JsonObject& jsonConfig );
135  void initSize( const Json::JsonObject& jsonConfig );
136  void initSizeKeyword(const Json::JsonObject& sizeObject);
137  void commonInit(const std::string& name, ParserKeywordSizeEnum sizeType);
138  void addItems( const Json::JsonObject& jsonConfig);
139  void initDoubleItemDimension( ParserDoubleItemPtr item, const Json::JsonObject itemConfig);
140  void initFloatItemDimension( ParserFloatItemPtr item, const Json::JsonObject itemConfig);
141  };
142 }
143 
144 #endif
std::set< std::string > SectionNameSet
Definition: ParserKeyword.hpp:68
void addDeckName(const std::string &deckName)
std::shared_ptr< const RawKeyword > RawKeywordConstPtr
Definition: RawKeyword.hpp:80
static std::string getDeckName(const std::string &rawString)
SectionNameSet::const_iterator validSectionNamesBegin() const
std::shared_ptr< ParserDoubleItem > ParserDoubleItemPtr
Definition: ParserDoubleItem.hpp:67
Definition: Deck.hpp:29
bool hasMultipleDeckNames() const
SectionNameSet::const_iterator validSectionNamesEnd() const
void applyUnitsToDeck(std::shared_ptr< const Deck > deck, std::shared_ptr< const DeckKeyword > deckKeyword) const
std::set< std::string > DeckNameSet
Definition: ParserKeyword.hpp:67
void setDescription(const std::string &description)
Definition: ParserKeyword.hpp:52
bool isValidSection(const std::string &sectionName) const
void setSizeType(ParserKeywordSizeEnum sizeType)
ParserKeywordSizeEnum
Definition: ParserEnums.hpp:28
bool hasFixedSize() const
ParserKeyword(const std::string &name, const std::string &sizeKeyword, const std::string &sizeItem, bool isTableCollection=false)
ParserRecordPtr getRecord(size_t recordIndex) const
std::vector< ParserRecordPtr >::const_iterator recordBegin() const
void initSizeKeyword(const std::string &sizeKeyword, const std::string &sizeItem)
const std::string className() const
void addRecord(std::shared_ptr< ParserRecord > record)
static bool validDeckName(const std::string &name)
void setTableCollection(bool isTableCollection)
void addValidSectionName(const std::string &sectionName)
bool hasDimension() const
Definition: JsonObject.hpp:31
std::string createCode() const
DeckNameSet::const_iterator deckNamesEnd() const
const std::pair< std::string, std::string > & getSizeDefinitionPair() const
bool isTableCollection() const
Definition: ParseMode.hpp:78
bool matches(const std::string &deckKeywordName) const
void clearValidSectionNames()
std::string createDeclaration(const std::string &indent) const
void addDataRecord(std::shared_ptr< ParserRecord > record)
size_t getFixedSize() const
std::shared_ptr< ParserFloatItem > ParserFloatItemPtr
Definition: ParserFloatItem.hpp:67
void setFixedSize(size_t keywordSize)
DeckNameSet::const_iterator deckNamesBegin() const
void setMatchRegex(const std::string &deckNameRegexp)
std::string createDecl() const
std::shared_ptr< ParserRecord > ParserRecordPtr
Definition: ParserRecord.hpp:58
std::shared_ptr< const ParserKeyword > ParserKeywordConstPtr
Definition: ParserKeyword.hpp:50
std::shared_ptr< ParserKeyword > ParserKeywordPtr
Definition: ParserKeyword.hpp:48
static bool validInternalName(const std::string &name)
const std::string & getName() const
bool hasMatchRegex() const
bool equal(const ParserKeyword &other) const
std::shared_ptr< DeckKeyword > DeckKeywordPtr
Definition: DeckKeyword.hpp:70
std::string getDescription() const
std::vector< ParserRecordPtr >::const_iterator recordEnd() const
enum ParserKeywordSizeEnum getSizeType() const
DeckKeywordPtr parse(const ParseMode &parseMode, RawKeywordConstPtr rawKeyword) const
bool isDataKeyword() const