Line data Source code
1 : /**
2 : * Copyright Soramitsu Co., Ltd. 2017 All Rights Reserved.
3 : * http://soramitsu.co.jp
4 : *
5 : * Licensed under the Apache License, Version 2.0 (the "License");
6 : * you may not use this file except in compliance with the License.
7 : * You may obtain a copy of the License at
8 : *
9 : * http://www.apache.org/licenses/LICENSE-2.0
10 : *
11 : * Unless required by applicable law or agreed to in writing, software
12 : * distributed under the License is distributed on an "AS IS" BASIS,
13 : * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 : * See the License for the specific language governing permissions and
15 : * limitations under the License.
16 : */
17 :
18 : #include <algorithm>
19 : #include <iterator>
20 : #include <boost/optional.hpp>
21 : #include <sstream>
22 : #include <string>
23 : #include <vector>
24 :
25 : #ifndef IROHA_PARSER_HPP
26 : #define IROHA_PARSER_HPP
27 :
28 : namespace parser {
29 :
30 : /**
31 : * Check if string is actually the integer number
32 : * @param s
33 : * @return
34 : */
35 : bool isIntNumber(const std::string &s);
36 :
37 : /**
38 : * Parse the first command in the line
39 : * @param line string to parse
40 : * @return nullopt if no command found, string otherwise
41 : */
42 : boost::optional<std::string> parseFirstCommand(std::string line);
43 :
44 : /**
45 : * Split line into words
46 : * @param line
47 : * @return vector with words
48 : */
49 : std::vector<std::string> split(std::string line);
50 :
51 : template <typename T>
52 : boost::optional<T> parseValue(std::string word) {
53 0 : std::stringstream ss(word);
54 0 : if (not isIntNumber(word)) {
55 0 : return boost::none;
56 : }
57 : T val;
58 0 : if (ss >> val) {
59 0 : return val;
60 : } else {
61 0 : return boost::none;
62 : }
63 0 : }
64 :
65 : } // namespace parser
66 :
67 : #endif // IROHA_PARSER_HPP
|