5bca604f0c06d7d3c0c8d746e2aabefb53d2bb43
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 complete implementation of...

Stefan Schuermans authored 7 years ago

23) #include <arpa/inet.h>
Stefan Schuermans implement drawing pixels

Stefan Schuermans authored 7 years ago

24) #include <gtkmm.h>
Stefan Schuermans continue implementing confi...

Stefan Schuermans authored 7 years ago

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

Stefan Schuermans authored 7 years ago

26) #include <string>
27) #include <vector>
28) 
Stefan Schuermans implement drawing pixels

Stefan Schuermans authored 7 years ago

29) #include "bbox.h"
Stefan Schuermans continue implementing confi...

Stefan Schuermans authored 7 years ago

30) #include "distri.h"
Stefan Schuermans implement drawing pixels

Stefan Schuermans authored 7 years ago

31) #include "transform.h"
Stefan Schuermans continue implementing confi...

Stefan Schuermans authored 7 years ago

32) 
Stefan Schuermans begin of config file parsing

Stefan Schuermans authored 7 years ago

33) /// config file
34) class Config
35) {
36) public:
37)   /**
38)    * @brief constructor
39)    * @param[in] configFile name of config file
40)    */
41)   Config(std::string const &configFile);
42) 
Stefan Schuermans implement drawing pixels

Stefan Schuermans authored 7 years ago

43)   /// get bounding box
44)   BBox const &getBBox() const { return m_bb; }
45) 
46)   /**
47)    * @brief draw pixels of all distributors
48)    * @param[in] cairo cairo context for drawing
49)    * @param[in] tf coordinate transformation
50)    */
51)   void draw(Cairo::RefPtr<Cairo::Context> &cairo, Transform const &tf) const;
52) 
Stefan Schuermans continue implementing confi...

Stefan Schuermans authored 7 years ago

53) protected:
54)   /// distributor map: distributor number -> distributor object
55)   typedef std::map<unsigned long, Distri> DistriMap;
56) 
Stefan Schuermans begin of config file parsing

Stefan Schuermans authored 7 years ago

57) protected:
58)   /**
59)    * @brief remove whitespace at beging and end of string
60)    * @param[in,out] str string to process
61)    */
62)   static void trim(std::string &str);
63) 
64)   /**
65)    * @brief split string at sequences of whitespace
66)    * @param[in] str string to split
67)    * @param[out] fields fields of string
68)    */
69)   static void split(std::string const &str, std::vector<std::string> &fields);
70) 
Stefan Schuermans continue implementing confi...

Stefan Schuermans authored 7 years ago

71)   /**
72)    * @brief split string at specific character
73)    * @param[in] str string to split
74)    * @param[in] delim delimiter character
75)    * @param[out] fields fields of string
76)    */
77)   static void split_chr(std::string const &str, char delim,
78)                         std::vector<std::string> &fields);
79) 
80)   /**
81)    * @brief convert string to unsigned long
82)    * @param[in] str string to convert
83)    * @return unsigned long parsed from string
84)    * @throws std::exception in case of error
85)    */
86)   static unsigned long str2ul(std::string const &str);
87) 
88)   /**
89)    * @brief convert string to two unsigned longs
90)    * @param[in] str string containing two comma-separated unsigned integers
91)    * @param[out] ul1 first unsigned long parsed from string
92)    * @param[out] ul2 second unsigned long parsed from string
93)    * @throws std::exception in case of error
94)    */
95)   static void str2ul2(std::string const &str,
96)                       unsigned long &ul1, unsigned long &ul2);
97) 
98)   /**
99)    * @brief convert string to double (using the decimal dot for any locale)
100)    * @param[in] str string to convert
101)    * @return double parsed from string
102)    * @throws std::exception in case of error
103)    */
104)   static double str2d(std::string const &str);
105) 
106)   /**
107)    * @brief convert string to three doubles (decimal dot for any locale)
108)    * @param[in] str string containing three comma-separated doubles
109)    * @param[out] d1 first double parsed from string
110)    * @param[out] d2 second double parsed from string
111)    * @param[out] d3 third double parsed from string
112)    * @throws std::exception in case of error
113)    */
114)   static void str2d3(std::string const &str,
115)                      double &d1, double &d2, double &d3);
116) 
Stefan Schuermans complete implementation of...

Stefan Schuermans authored 7 years ago

117)   /**
118)    * @brief convert string to IPv4/port address
119)    * @param[in] str string containing IPv4/port address
120)    * @throws std::exception in case of error
121)    */
122)   static void str2addr(std::string const &str, struct sockaddr_in &addr);
123) 
Stefan Schuermans begin of config file parsing

Stefan Schuermans authored 7 years ago

124)   /**
125)    * @brief read config file
126)    * @param[in] configFile name of config file
127)    * @throws std::exception in case of error
128)    */
129)   void readFile(std::string const &configFile);
130) 
131)   /**
132)    * @brief process line from config file
133)    * @param[in] line line to process
134)    * @throws std::exception in case of error
135)    */
136)   void procLine(std::string line);
137) 
138)   /**
139)    * @brief process setting from config file
140)    * @param[in] setting name of the setting
141)    * @param[in] value value for setting
142)    * @throws std::exception in case of error
143)    */
144)   void procSetting(std::string const &setting, std::string const &value);
145) 
Stefan Schuermans continue implementing confi...

Stefan Schuermans authored 7 years ago

146)   /**
147)    * @brief process distributor line from config file
148)    * @param[in] setFields fields of the setting parts
149)    * @param[in] valFields fields of the value part
150)    * @throws std::exception in case of error
151)    */
152)   void proc_distributor(std::vector<std::string> const &setFields,
153)                         std::vector<std::string> const &valFields);
154) 
155)   /**
156)    * @brief process distributorAddr line from config file
157)    * @param[in] setFields fields of the setting parts
158)    * @param[in] valFields fields of the value part
159)    * @throws std::exception in case of error
160)    */
161)   void proc_distributorAddr(std::vector<std::string> const &setFields,
162)                             std::vector<std::string> const &valFields);
163) 
164)   /**
165)    * @brief process mapping line from config file
166)    * @param[in] setFields fields of the setting parts
167)    * @param[in] valFields fields of the value part
168)    * @throws std::exception in case of error
169)    */
170)   void proc_mapping(std::vector<std::string> const &setFields,
171)                     std::vector<std::string> const &valFields);
172) 
173)   /**
174)    * @brief process output line from config file
175)    * @param[in] setFields fields of the setting parts
176)    * @param[in] valFields fields of the value part
177)    * @throws std::exception in case of error
178)    */
179)   void proc_output(std::vector<std::string> const &setFields,
180)                    std::vector<std::string> const &valFields);
181) 
182)   /**
183)    * @brief get distributor
184)    * @param[in] strDistno distributor number as string
185)    * @return reference to distributor object in map
186)    * @throws std::exception in case of error
187)    */
188)   Distri & getDistri(std::string const &strDistno);
189) 
190)   /**
191)    * @brief get distributor
192)    * @param[in] distno distributor number
193)    * @return reference to distributor object in map
194)    * @throws std::exception in case of error
195)    */
196)   Distri & getDistri(unsigned long distno);
197) 
Stefan Schuermans implement drawing pixels

Stefan Schuermans authored 7 years ago

198)   /// update internal data
199)   void update();
200) 
Stefan Schuermans continue implementing confi...

Stefan Schuermans authored 7 years ago

201) protected:
202)   /// distributors
203)   DistriMap m_distriMap;
Stefan Schuermans implement drawing pixels

Stefan Schuermans authored 7 years ago

204)   /// bounding box of all pixels
205)   BBox m_bb;