5c70d9d85a6f690ae5c591b7d884677efad7fbaa
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) 
Stefan Schuermans implement receiving packets

Stefan Schuermans authored 7 years ago

46)   /**
47)    * @brief create sockets and listen for incoming packets
48)    * @throws std::exception in case of error
49)    */
50)   void start();
51) 
52)   /**
53)    * @brief stop listening for incoming packets and close sockets
54)    */
55)   void stop();
56) 
57)   /// get and reset packet counter of all distributors
58)   unsigned long getPacketCounterAndReset();
59) 
Stefan Schuermans implement drawing pixels

Stefan Schuermans authored 7 years ago

60)   /**
61)    * @brief draw pixels of all distributors
62)    * @param[in] cairo cairo context for drawing
63)    * @param[in] tf coordinate transformation
64)    */
65)   void draw(Cairo::RefPtr<Cairo::Context> &cairo, Transform const &tf) const;
66) 
Stefan Schuermans continue implementing confi...

Stefan Schuermans authored 7 years ago

67) protected:
68)   /// distributor map: distributor number -> distributor object
69)   typedef std::map<unsigned long, Distri> DistriMap;
70) 
Stefan Schuermans begin of config file parsing

Stefan Schuermans authored 7 years ago

71) protected:
72)   /**
73)    * @brief remove whitespace at beging and end of string
74)    * @param[in,out] str string to process
75)    */
76)   static void trim(std::string &str);
77) 
78)   /**
79)    * @brief split string at sequences of whitespace
80)    * @param[in] str string to split
81)    * @param[out] fields fields of string
82)    */
83)   static void split(std::string const &str, std::vector<std::string> &fields);
84) 
Stefan Schuermans continue implementing confi...

Stefan Schuermans authored 7 years ago

85)   /**
86)    * @brief split string at specific character
87)    * @param[in] str string to split
88)    * @param[in] delim delimiter character
89)    * @param[out] fields fields of string
90)    */
91)   static void split_chr(std::string const &str, char delim,
92)                         std::vector<std::string> &fields);
93) 
94)   /**
95)    * @brief convert string to unsigned long
96)    * @param[in] str string to convert
97)    * @return unsigned long parsed from string
98)    * @throws std::exception in case of error
99)    */
100)   static unsigned long str2ul(std::string const &str);
101) 
102)   /**
103)    * @brief convert string to two unsigned longs
104)    * @param[in] str string containing two comma-separated unsigned integers
105)    * @param[out] ul1 first unsigned long parsed from string
106)    * @param[out] ul2 second unsigned long parsed from string
107)    * @throws std::exception in case of error
108)    */
109)   static void str2ul2(std::string const &str,
110)                       unsigned long &ul1, unsigned long &ul2);
111) 
112)   /**
113)    * @brief convert string to double (using the decimal dot for any locale)
114)    * @param[in] str string to convert
115)    * @return double parsed from string
116)    * @throws std::exception in case of error
117)    */
118)   static double str2d(std::string const &str);
119) 
120)   /**
121)    * @brief convert string to three doubles (decimal dot for any locale)
122)    * @param[in] str string containing three comma-separated doubles
123)    * @param[out] d1 first double parsed from string
124)    * @param[out] d2 second double parsed from string
125)    * @param[out] d3 third double parsed from string
126)    * @throws std::exception in case of error
127)    */
128)   static void str2d3(std::string const &str,
129)                      double &d1, double &d2, double &d3);
130) 
Stefan Schuermans complete implementation of...

Stefan Schuermans authored 7 years ago

131)   /**
132)    * @brief convert string to IPv4/port address
133)    * @param[in] str string containing IPv4/port address
134)    * @throws std::exception in case of error
135)    */
136)   static void str2addr(std::string const &str, struct sockaddr_in &addr);
137) 
Stefan Schuermans begin of config file parsing

Stefan Schuermans authored 7 years ago

138)   /**
139)    * @brief read config file
140)    * @param[in] configFile name of config file
141)    * @throws std::exception in case of error
142)    */
143)   void readFile(std::string const &configFile);
144) 
145)   /**
146)    * @brief process line from config file
147)    * @param[in] line line to process
148)    * @throws std::exception in case of error
149)    */
150)   void procLine(std::string line);
151) 
152)   /**
153)    * @brief process setting from config file
154)    * @param[in] setting name of the setting
155)    * @param[in] value value for setting
156)    * @throws std::exception in case of error
157)    */
158)   void procSetting(std::string const &setting, std::string const &value);
159) 
Stefan Schuermans continue implementing confi...

Stefan Schuermans authored 7 years ago

160)   /**
161)    * @brief process distributor line from config file
162)    * @param[in] setFields fields of the setting parts
163)    * @param[in] valFields fields of the value part
164)    * @throws std::exception in case of error
165)    */
166)   void proc_distributor(std::vector<std::string> const &setFields,
167)                         std::vector<std::string> const &valFields);
168) 
169)   /**
170)    * @brief process distributorAddr line from config file
171)    * @param[in] setFields fields of the setting parts
172)    * @param[in] valFields fields of the value part
173)    * @throws std::exception in case of error
174)    */
175)   void proc_distributorAddr(std::vector<std::string> const &setFields,
176)                             std::vector<std::string> const &valFields);
177) 
178)   /**
179)    * @brief process mapping line from config file
180)    * @param[in] setFields fields of the setting parts
181)    * @param[in] valFields fields of the value part
182)    * @throws std::exception in case of error
183)    */
184)   void proc_mapping(std::vector<std::string> const &setFields,
185)                     std::vector<std::string> const &valFields);
186) 
187)   /**
188)    * @brief process output line from config file
189)    * @param[in] setFields fields of the setting parts
190)    * @param[in] valFields fields of the value part
191)    * @throws std::exception in case of error
192)    */
193)   void proc_output(std::vector<std::string> const &setFields,
194)                    std::vector<std::string> const &valFields);
195) 
196)   /**
197)    * @brief get distributor
198)    * @param[in] strDistno distributor number as string
199)    * @return reference to distributor object in map
200)    * @throws std::exception in case of error
201)    */
202)   Distri & getDistri(std::string const &strDistno);
203) 
204)   /**
205)    * @brief get distributor
206)    * @param[in] distno distributor number
207)    * @return reference to distributor object in map
208)    * @throws std::exception in case of error
209)    */
210)   Distri & getDistri(unsigned long distno);
211) 
Stefan Schuermans implement drawing pixels

Stefan Schuermans authored 7 years ago

212)   /// update internal data
213)   void update();
214) 
Stefan Schuermans continue implementing confi...

Stefan Schuermans authored 7 years ago

215) protected:
216)   /// distributors
217)   DistriMap m_distriMap;
Stefan Schuermans implement drawing pixels

Stefan Schuermans authored 7 years ago

218)   /// bounding box of all pixels
219)   BBox m_bb;