653cc0922bab15adb7c7f38912fb6e1a3f994474
Stefan Schuermans begin of config file parsing

Stefan Schuermans authored 7 years ago

1) /*
2)  * EtherPix simulator
3)  *
4)  * Copyright 2017 Stefan Schuermans <stefan schuermans info>
5)  *
6)  * This program 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, version 3 of the License.
9)  *
10)  *
11)  * This program 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 Lesser General Public License
17)  * along with this program. If not, see <http://www.gnu.org/licenses/>.
18)  */
19) 
20) #ifndef CONFIG_H
21) #define CONFIG_H
22) 
Stefan Schuermans continue implementing confi...

Stefan Schuermans authored 7 years ago

23) #include <map>
Stefan Schuermans begin of config file parsing

Stefan Schuermans authored 7 years ago

24) #include <string>
25) #include <vector>
26) 
Stefan Schuermans continue implementing confi...

Stefan Schuermans authored 7 years ago

27) #include "distri.h"
28) 
Stefan Schuermans begin of config file parsing

Stefan Schuermans authored 7 years ago

29) /// config file
30) class Config
31) {
32) public:
33)   /**
34)    * @brief constructor
35)    * @param[in] configFile name of config file
36)    */
37)   Config(std::string const &configFile);
38) 
Stefan Schuermans continue implementing confi...

Stefan Schuermans authored 7 years ago

39) protected:
40)   /// distributor map: distributor number -> distributor object
41)   typedef std::map<unsigned long, Distri> DistriMap;
42) 
Stefan Schuermans begin of config file parsing

Stefan Schuermans authored 7 years ago

43) protected:
44)   /**
45)    * @brief remove whitespace at beging and end of string
46)    * @param[in,out] str string to process
47)    */
48)   static void trim(std::string &str);
49) 
50)   /**
51)    * @brief split string at sequences of whitespace
52)    * @param[in] str string to split
53)    * @param[out] fields fields of string
54)    */
55)   static void split(std::string const &str, std::vector<std::string> &fields);
56) 
Stefan Schuermans continue implementing confi...

Stefan Schuermans authored 7 years ago

57)   /**
58)    * @brief split string at specific character
59)    * @param[in] str string to split
60)    * @param[in] delim delimiter character
61)    * @param[out] fields fields of string
62)    */
63)   static void split_chr(std::string const &str, char delim,
64)                         std::vector<std::string> &fields);
65) 
66)   /**
67)    * @brief convert string to unsigned long
68)    * @param[in] str string to convert
69)    * @return unsigned long parsed from string
70)    * @throws std::exception in case of error
71)    */
72)   static unsigned long str2ul(std::string const &str);
73) 
74)   /**
75)    * @brief convert string to two unsigned longs
76)    * @param[in] str string containing two comma-separated unsigned integers
77)    * @param[out] ul1 first unsigned long parsed from string
78)    * @param[out] ul2 second unsigned long parsed from string
79)    * @throws std::exception in case of error
80)    */
81)   static void str2ul2(std::string const &str,
82)                       unsigned long &ul1, unsigned long &ul2);
83) 
84)   /**
85)    * @brief convert string to double (using the decimal dot for any locale)
86)    * @param[in] str string to convert
87)    * @return double parsed from string
88)    * @throws std::exception in case of error
89)    */
90)   static double str2d(std::string const &str);
91) 
92)   /**
93)    * @brief convert string to three doubles (decimal dot for any locale)
94)    * @param[in] str string containing three comma-separated doubles
95)    * @param[out] d1 first double parsed from string
96)    * @param[out] d2 second double parsed from string
97)    * @param[out] d3 third double parsed from string
98)    * @throws std::exception in case of error
99)    */
100)   static void str2d3(std::string const &str,
101)                      double &d1, double &d2, double &d3);
102) 
Stefan Schuermans begin of config file parsing

Stefan Schuermans authored 7 years ago

103)   /**
104)    * @brief read config file
105)    * @param[in] configFile name of config file
106)    * @throws std::exception in case of error
107)    */
108)   void readFile(std::string const &configFile);
109) 
110)   /**
111)    * @brief process line from config file
112)    * @param[in] line line to process
113)    * @throws std::exception in case of error
114)    */
115)   void procLine(std::string line);
116) 
117)   /**
118)    * @brief process setting from config file
119)    * @param[in] setting name of the setting
120)    * @param[in] value value for setting
121)    * @throws std::exception in case of error
122)    */
123)   void procSetting(std::string const &setting, std::string const &value);
124) 
Stefan Schuermans continue implementing confi...

Stefan Schuermans authored 7 years ago

125)   /**
126)    * @brief process distributor line from config file
127)    * @param[in] setFields fields of the setting parts
128)    * @param[in] valFields fields of the value part
129)    * @throws std::exception in case of error
130)    */
131)   void proc_distributor(std::vector<std::string> const &setFields,
132)                         std::vector<std::string> const &valFields);
133) 
134)   /**
135)    * @brief process distributorAddr line from config file
136)    * @param[in] setFields fields of the setting parts
137)    * @param[in] valFields fields of the value part
138)    * @throws std::exception in case of error
139)    */
140)   void proc_distributorAddr(std::vector<std::string> const &setFields,
141)                             std::vector<std::string> const &valFields);
142) 
143)   /**
144)    * @brief process mapping line from config file
145)    * @param[in] setFields fields of the setting parts
146)    * @param[in] valFields fields of the value part
147)    * @throws std::exception in case of error
148)    */
149)   void proc_mapping(std::vector<std::string> const &setFields,
150)                     std::vector<std::string> const &valFields);
151) 
152)   /**
153)    * @brief process output line from config file
154)    * @param[in] setFields fields of the setting parts
155)    * @param[in] valFields fields of the value part
156)    * @throws std::exception in case of error
157)    */
158)   void proc_output(std::vector<std::string> const &setFields,
159)                    std::vector<std::string> const &valFields);
160) 
161)   /**
162)    * @brief get distributor
163)    * @param[in] strDistno distributor number as string
164)    * @return reference to distributor object in map
165)    * @throws std::exception in case of error
166)    */
167)   Distri & getDistri(std::string const &strDistno);
168) 
169)   /**
170)    * @brief get distributor
171)    * @param[in] distno distributor number
172)    * @return reference to distributor object in map
173)    * @throws std::exception in case of error
174)    */
175)   Distri & getDistri(unsigned long distno);
176) 
177) protected:
178)   /// distributors
179)   DistriMap m_distriMap;