From c963c7d768c4e73e75c85ff31515b0c42b1bdf4a Mon Sep 17 00:00:00 2001 From: Joakim Hove Date: Thu, 9 May 2013 12:17:00 +0200 Subject: [PATCH] Changed to use only enum for ItemSize. FIXED -> SCALAR with value 1 --- opm/parser/eclipse/CMakeLists.txt | 1 - opm/parser/eclipse/Parser/ParserBoolItem.hpp | 8 +-- .../eclipse/Parser/ParserDoubleItem.hpp | 7 +-- opm/parser/eclipse/Parser/ParserEnums.hpp | 2 +- opm/parser/eclipse/Parser/ParserIntItem.cpp | 51 ++++++++++++------- opm/parser/eclipse/Parser/ParserIntItem.hpp | 12 +++-- opm/parser/eclipse/Parser/ParserItem.cpp | 8 +-- opm/parser/eclipse/Parser/ParserItem.hpp | 10 ++-- .../eclipse/Parser/ParserStringItem.hpp | 11 ++-- .../eclipse/Parser/tests/CMakeLists.txt | 3 -- 10 files changed, 69 insertions(+), 44 deletions(-) diff --git a/opm/parser/eclipse/CMakeLists.txt b/opm/parser/eclipse/CMakeLists.txt index 2c03b1d6e..cc2532354 100644 --- a/opm/parser/eclipse/CMakeLists.txt +++ b/opm/parser/eclipse/CMakeLists.txt @@ -17,7 +17,6 @@ set( parser_source Parser/ParserRecordSize.cpp Parser/ParserKW.cpp Parser/Parser.cpp -Parser/ParserItemSize.cpp Parser/ParserRecord.cpp Parser/ParserItem.cpp Parser/ParserIntItem.cpp diff --git a/opm/parser/eclipse/Parser/ParserBoolItem.hpp b/opm/parser/eclipse/Parser/ParserBoolItem.hpp index 709fd370b..b67ac6b2e 100644 --- a/opm/parser/eclipse/Parser/ParserBoolItem.hpp +++ b/opm/parser/eclipse/Parser/ParserBoolItem.hpp @@ -19,18 +19,20 @@ #ifndef PARSERBOOLITEM_HPP -#define PARSERBOOLITEM_HPP +#define PARSERBOOLITEM_HPP #include +#include + namespace Opm { class ParserBoolItem : public ParserItem { public: - ParserBoolItem(const std::string& itemName, ParserItemSizeConstPtr itemSize) : ParserItem(itemName, itemSize) {}; + ParserBoolItem(const std::string& itemName, ParserItemSizeEnum sizeType) : ParserItem(itemName, sizeType) {}; private: }; } -#endif /* PARSERBOOLITEM_HPP */ +#endif /* PARSERBOOLITEM_HPP */ diff --git a/opm/parser/eclipse/Parser/ParserDoubleItem.hpp b/opm/parser/eclipse/Parser/ParserDoubleItem.hpp index d891fca52..46f03e810 100644 --- a/opm/parser/eclipse/Parser/ParserDoubleItem.hpp +++ b/opm/parser/eclipse/Parser/ParserDoubleItem.hpp @@ -19,17 +19,18 @@ #ifndef PARSERDOUBLEITEM_HPP -#define PARSERDOUBLEITEM_HPP +#define PARSERDOUBLEITEM_HPP #include +#include namespace Opm { class ParserDoubleItem : public ParserItem { public: - ParserDoubleItem(const std::string& itemName, ParserItemSizeConstPtr itemSize) : ParserItem(itemName, itemSize) {}; + ParserDoubleItem(const std::string& itemName, ParserItemSizeEnum sizeType) : ParserItem(itemName, sizeType) {}; private: }; } -#endif /* PARSERDOUBLEITEM_HPP */ +#endif /* PARSERDOUBLEITEM_HPP */ diff --git a/opm/parser/eclipse/Parser/ParserEnums.hpp b/opm/parser/eclipse/Parser/ParserEnums.hpp index 037e8a49b..2fcd8da06 100644 --- a/opm/parser/eclipse/Parser/ParserEnums.hpp +++ b/opm/parser/eclipse/Parser/ParserEnums.hpp @@ -34,7 +34,7 @@ namespace Opm { enum ParserItemSizeEnum { UNSPECIFIED = 0, - ITEM_FIXED = 1, + SCALAR = 1, ITEM_BOX = 2 }; diff --git a/opm/parser/eclipse/Parser/ParserIntItem.cpp b/opm/parser/eclipse/Parser/ParserIntItem.cpp index 02589ad80..3bb14addc 100644 --- a/opm/parser/eclipse/Parser/ParserIntItem.cpp +++ b/opm/parser/eclipse/Parser/ParserIntItem.cpp @@ -18,37 +18,54 @@ */ #include + #include +#include namespace Opm { + + + /// Scans the rawRecords data according to the ParserItems definition. /// returns a DeckIntItem object. /// NOTE: data are popped from the rawRecords deque! - DeckIntItemPtr ParserIntItem::scan(RawRecordPtr rawRecord) { - DeckIntItemPtr deckItem(new DeckIntItem()); + DeckIntItemPtr ParserIntItem::scan(size_t expectedItems , RawRecordPtr rawRecord) { + if (sizeType() == SCALAR && expectedItems > 1) + throw std::invalid_argument("Can only ask for one item when sizeType == SCALAR"); - if (size()->sizeType() == ITEM_FIXED) { - std::vector intsPreparedForDeckItem; + { + DeckIntItemPtr deckItem(new DeckIntItem()); - do { - std::string token = rawRecord->pop_front(); - fillIntVectorFromStringToken(token, intsPreparedForDeckItem); - } while (intsPreparedForDeckItem.size() < size()->sizeValue() && rawRecord->getItems().size() > 0U); - - if (intsPreparedForDeckItem.size() != size()->sizeValue()) { - std::string preparedInts = boost::lexical_cast(intsPreparedForDeckItem.size()); - std::string parserSizeValue = boost::lexical_cast(size()->sizeValue()); - throw std::invalid_argument("The number of parsed ints (" + preparedInts + ") did not correspond to the fixed size of the ParserItem (" + parserSizeValue + ")"); + if (expectedItems) { + std::vector intsPreparedForDeckItem; + + do { + std::string token = rawRecord->pop_front(); + fillIntVectorFromStringToken(token, intsPreparedForDeckItem); + } while ((intsPreparedForDeckItem.size() < expectedItems) && (rawRecord->getItems().size() > 0U)); + + if (intsPreparedForDeckItem.size() != expectedItems) { + std::string preparedInts = boost::lexical_cast(intsPreparedForDeckItem.size()); + std::string parserSizeValue = boost::lexical_cast(expectedItems); + throw std::invalid_argument("The number of parsed ints (" + preparedInts + ") did not correspond to the expected number of items:(" + parserSizeValue + ")"); + } + deckItem->push_back(intsPreparedForDeckItem); } - deckItem->push_back(intsPreparedForDeckItem); - } else { - throw std::invalid_argument("Unsupported size type, only support ITEM_FIXED"); + return deckItem; } - return deckItem; } + + + DeckIntItemPtr ParserIntItem::scan(RawRecordPtr rawRecord) { + if (sizeType() == SCALAR) + return scan(1U , rawRecord); + else + throw std::invalid_argument("Unsupported size type, only support SCALAR. Use scan( numTokens , rawRecord) instead "); + } + void ParserIntItem::fillIntVectorFromStringToken(std::string token, std::vector& dataVector) { try { diff --git a/opm/parser/eclipse/Parser/ParserIntItem.hpp b/opm/parser/eclipse/Parser/ParserIntItem.hpp index 98494cc69..99343d91d 100644 --- a/opm/parser/eclipse/Parser/ParserIntItem.hpp +++ b/opm/parser/eclipse/Parser/ParserIntItem.hpp @@ -19,16 +19,22 @@ #ifndef PARSERINTITEM_HPP -#define PARSERINTITEM_HPP +#define PARSERINTITEM_HPP #include +#include + #include #include + + namespace Opm { class ParserIntItem : public ParserItem { public: - ParserIntItem(const std::string& itemName, ParserItemSizeConstPtr itemSize) : ParserItem(itemName, itemSize) {}; + ParserIntItem(const std::string& itemName, ParserItemSizeEnum sizeType) : ParserItem(itemName, sizeType) {}; + + DeckIntItemPtr scan(size_t expectedItems , RawRecordPtr rawRecord); DeckIntItemPtr scan(RawRecordPtr rawRecord); private: @@ -36,5 +42,5 @@ namespace Opm { }; } -#endif /* PARSERINTITEM_HPP */ +#endif /* PARSERINTITEM_HPP */ diff --git a/opm/parser/eclipse/Parser/ParserItem.cpp b/opm/parser/eclipse/Parser/ParserItem.cpp index b60539959..c93e00fac 100644 --- a/opm/parser/eclipse/Parser/ParserItem.cpp +++ b/opm/parser/eclipse/Parser/ParserItem.cpp @@ -21,16 +21,16 @@ namespace Opm { - ParserItem::ParserItem(const std::string& itemName, ParserItemSizeConstPtr itemSize) { + ParserItem::ParserItem(const std::string& itemName, ParserItemSizeEnum sizeType) { m_name.assign(itemName); - m_itemSize = itemSize; + m_sizeType = sizeType; } std::string ParserItem::name() { return m_name; } - ParserItemSizeConstPtr ParserItem::size() { - return m_itemSize; + ParserItemSizeEnum ParserItem::sizeType() { + return m_sizeType; } } diff --git a/opm/parser/eclipse/Parser/ParserItem.hpp b/opm/parser/eclipse/Parser/ParserItem.hpp index f7ac61e97..385bdd26e 100644 --- a/opm/parser/eclipse/Parser/ParserItem.hpp +++ b/opm/parser/eclipse/Parser/ParserItem.hpp @@ -25,19 +25,19 @@ #include #include -#include +#include namespace Opm { class ParserItem { public: - ParserItem(const std::string& itemName, ParserItemSizeConstPtr itemSize); + ParserItem(const std::string& itemName, ParserItemSizeEnum sizeType); std::string name(); - ParserItemSizeConstPtr size(); - + ParserItemSizeEnum sizeType(); + private: std::string m_name; - ParserItemSizeConstPtr m_itemSize; + ParserItemSizeEnum m_sizeType; }; } diff --git a/opm/parser/eclipse/Parser/ParserStringItem.hpp b/opm/parser/eclipse/Parser/ParserStringItem.hpp index 2fe82e3ea..ab43b9e6c 100644 --- a/opm/parser/eclipse/Parser/ParserStringItem.hpp +++ b/opm/parser/eclipse/Parser/ParserStringItem.hpp @@ -19,18 +19,21 @@ #ifndef PARSERSTRINGITEM_HPP -#define PARSERSTRINGITEM_HPP +#define PARSERSTRINGITEM_HPP #include +#include + namespace Opm { class ParserStringItem : public ParserItem { public: - ParserStringItem(const std::string& itemName, ParserItemSizeConstPtr itemSize) : ParserItem(itemName, itemSize) {}; + ParserStringItem(const std::string& itemName, ParserItemSizeEnum sizeType) : ParserItem(itemName, sizeType) {}; + private: - }; + }; } -#endif /* PARSERSTRINGITEM_HPP */ +#endif /* PARSERSTRINGITEM_HPP */ diff --git a/opm/parser/eclipse/Parser/tests/CMakeLists.txt b/opm/parser/eclipse/Parser/tests/CMakeLists.txt index 027ec9aea..bdf7e25ad 100644 --- a/opm/parser/eclipse/Parser/tests/CMakeLists.txt +++ b/opm/parser/eclipse/Parser/tests/CMakeLists.txt @@ -4,7 +4,6 @@ add_executable(runParserKWTests ParserKWTests.cpp) add_executable(runParserRecordTests ParserRecordTests.cpp) add_executable(runParserRecordSizeTests ParserRecordSizeTests.cpp) add_executable(runParserItemTests ParserItemTests.cpp) -add_executable(runParserItemSizeTests ParserItemSizeTests.cpp) target_link_libraries(runParserTests Parser Logger ${Boost_LIBRARIES}) target_link_libraries(runParserTestsInternalData Parser Logger ${Boost_LIBRARIES}) @@ -12,7 +11,6 @@ target_link_libraries(runParserKWTests Parser Logger ${Boost_LIBRARIES}) target_link_libraries(runParserRecordSizeTests Parser Logger ${Boost_LIBRARIES}) target_link_libraries(runParserRecordTests Parser Logger ${Boost_LIBRARIES}) target_link_libraries(runParserItemTests Parser Logger ${Boost_LIBRARIES}) -target_link_libraries(runParserItemSizeTests Parser Logger ${Boost_LIBRARIES}) add_test(NAME runParserTests WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} COMMAND ${EXECUTABLE_OUTPUT_PATH}/runParserTests ) add_test(NAME runParserTestsInternalData WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} COMMAND ${EXECUTABLE_OUTPUT_PATH}/runParserTestsInternalData) @@ -20,7 +18,6 @@ add_test(NAME runParserKWTests COMMAND ${EXECUTABLE_OUTPUT_PATH}/runParserKWTest add_test(NAME runParserRecordSizeTests COMMAND ${EXECUTABLE_OUTPUT_PATH}/runParserRecordSizeTests ) add_test(NAME runParserRecordTests COMMAND ${EXECUTABLE_OUTPUT_PATH}/runParserRecordTests ) add_test(NAME runParserItemTests COMMAND ${EXECUTABLE_OUTPUT_PATH}/runParserItemTests ) -add_test(NAME runParserItemSizeTests COMMAND ${EXECUTABLE_OUTPUT_PATH}/runParserItemSizeTests ) set_tests_properties(runParserTestsInternalData PROPERTIES LABELS Statoil)