Mercurial > irccd
annotate extern/vera/src/plugins/Parameters.cpp @ 655:cda30ca5bb76
Irccd: style (controller) #782
author | David Demelier <markand@malikania.fr> |
---|---|
date | Tue, 27 Mar 2018 20:30:59 +0200 |
parents | a7c0eb100760 |
children |
rev | line source |
---|---|
548
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
1 // |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
2 // Copyright (C) 2006-2007 Maciej Sobczak |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
3 // Distributed under the Boost Software License, Version 1.0. |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
4 // (See accompanying file LICENSE_1_0.txt or copy at |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
5 // http://www.boost.org/LICENSE_1_0.txt) |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
6 // |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
7 |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
8 #include "Parameters.h" |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
9 #include <fstream> |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
10 #include <sstream> |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
11 #include <map> |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
12 #include <cstring> |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
13 #include <cerrno> |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
14 |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
15 |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
16 namespace // unnamed |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
17 { |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
18 |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
19 typedef std::map<Vera::Plugins::Parameters::ParamName, Vera::Plugins::Parameters::ParamValue> |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
20 ParametersCollection; |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
21 |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
22 ParametersCollection parameters_; |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
23 |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
24 } // unnamed namespace |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
25 |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
26 namespace Vera |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
27 { |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
28 namespace Plugins |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
29 { |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
30 |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
31 void Parameters::set(const ParamAssoc & assoc) |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
32 { |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
33 std::string::size_type pos = assoc.find("="); |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
34 if (pos != std::string::npos) |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
35 { |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
36 ParamName name = assoc.substr(0, pos); |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
37 ParamValue value = assoc.substr(pos + 1); |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
38 |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
39 parameters_[name] = value; |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
40 } |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
41 else |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
42 { |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
43 std::ostringstream ss; |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
44 ss << "Invalid parameter association: " << assoc; |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
45 throw ParametersError(ss.str()); |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
46 } |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
47 } |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
48 |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
49 |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
50 Parameters::ParamValue Parameters::get(const ParamName & name, const ParamValue & defaultValue) |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
51 { |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
52 ParametersCollection::iterator it = parameters_.find(name); |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
53 if (it != parameters_.end()) |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
54 { |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
55 return it->second; |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
56 } |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
57 else |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
58 { |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
59 return defaultValue; |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
60 } |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
61 } |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
62 |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
63 |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
64 void Parameters::readFromFile(const FileName & name) |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
65 { |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
66 std::ifstream file(name.c_str()); |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
67 if (file.is_open() == false) |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
68 { |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
69 std::ostringstream ss; |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
70 ss << "Cannot open parameters file " << name << ": " |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
71 << strerror(errno); |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
72 throw ParametersError(ss.str()); |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
73 } |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
74 |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
75 std::string line; |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
76 int lineNumber = 0; |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
77 while (getline(file, line)) |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
78 { |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
79 ++lineNumber; |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
80 |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
81 if (line.empty()) |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
82 { |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
83 continue; |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
84 } |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
85 |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
86 if (line[0] != '#') |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
87 { |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
88 set(line); |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
89 } |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
90 } |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
91 if (file.bad()) |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
92 { |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
93 throw std::runtime_error( |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
94 "Cannot read from " + name + ": " + strerror(errno)); |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
95 } |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
96 file.close(); |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
97 } |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
98 |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
99 } |
a7c0eb100760
CMake: import vera++ 1.3.0, closes #729
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
100 } |