Mon, 04 Aug 2014 03:35:25 +0300
- refactor
845
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
1 | /* |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
2 | * LDForge: LDraw parts authoring CAD |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
3 | * Copyright (C) 2013, 2014 Teemu Piippo |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
4 | * |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
5 | * This program is free software: you can redistribute it and/or modify |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
6 | * it under the terms of the GNU General Public License as published by |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
7 | * the Free Software Foundation, either version 3 of the License, or |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
8 | * (at your option) any later version. |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
9 | * |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
10 | * This program is distributed in the hope that it will be useful, |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
13 | * GNU General Public License for more details. |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
14 | * |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
15 | * You should have received a copy of the GNU General Public License |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
16 | * along with this program. If not, see <http://www.gnu.org/licenses/>. |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
17 | */ |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
18 | |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
19 | #include <sstream> |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
20 | #include <fstream> |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
21 | #include <string> |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
22 | #include <cstring> |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
23 | #include <iostream> |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
24 | #include <vector> |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
25 | #include <algorithm> |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
26 | |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
27 | using std::string; |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
28 | using std::vector; |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
29 | using std::ifstream; |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
30 | using std::size_t; |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
31 | using std::strncmp; |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
32 | using std::getline; |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
33 | using std::cout; |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
34 | using std::endl; |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
35 | |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
36 | struct entry_type |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
37 | { |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
38 | string name; |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
39 | string type; |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
40 | string defvalue; |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
41 | |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
42 | inline bool operator< (entry_type const& other) const |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
43 | { |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
44 | return name < other.name; |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
45 | } |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
46 | |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
47 | inline bool operator== (entry_type const& other) const |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
48 | { |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
49 | return name == other.name and type == other.type; |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
50 | } |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
51 | |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
52 | inline bool operator!= (entry_type const& other) const |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
53 | { |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
54 | return not operator== (other); |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
55 | } |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
56 | }; |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
57 | |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
58 | char advance_pointer (char const*& ptr) |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
59 | { |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
60 | char a = *ptr++; |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
61 | if (*ptr == '\0') |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
62 | throw false; |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
63 | |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
64 | return a; |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
65 | } |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
66 | |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
67 | void read_cfgentries (string const& filename, vector<entry_type>& entries, const char* macroname) |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
68 | { |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
69 | ifstream is (filename.c_str()); |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
70 | string line; |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
71 | size_t const macrolen = strlen (macroname); |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
72 | |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
73 | while (getline (is, line)) |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
74 | { |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
75 | try |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
76 | { |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
77 | if (strncmp (line.c_str(), macroname, macrolen) != 0) |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
78 | continue; |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
79 | |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
80 | char const* ptr = &line[macrolen]; |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
81 | entry_type entry; |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
82 | |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
83 | // Skip to paren |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
84 | while (*ptr != '(') |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
85 | advance_pointer (ptr); |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
86 | |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
87 | // Skip whitespace |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
88 | while (isspace (*ptr)) |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
89 | advance_pointer (ptr); |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
90 | |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
91 | // Skip paren |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
92 | advance_pointer (ptr); |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
93 | |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
94 | // Read type |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
95 | while (*ptr != ',') |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
96 | entry.type += advance_pointer (ptr); |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
97 | |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
98 | // Skip comma and whitespace |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
99 | for (advance_pointer (ptr); isspace (*ptr); advance_pointer (ptr)) |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
100 | ; |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
101 | |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
102 | // Read name |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
103 | while (*ptr != ',') |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
104 | entry.name += advance_pointer (ptr); |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
105 | |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
106 | // Skip comma and whitespace |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
107 | for (advance_pointer (ptr); isspace (*ptr); advance_pointer (ptr)) |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
108 | ; |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
109 | |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
110 | // Read default |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
111 | while (*ptr != ')') |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
112 | entry.defvalue += advance_pointer (ptr); |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
113 | |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
114 | entries.push_back (entry); |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
115 | } |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
116 | catch (bool) {} |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
117 | } |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
118 | } |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
119 | |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
120 | bool check_equality (vector<entry_type> a, vector<entry_type> b) |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
121 | { |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
122 | if (a.size() != b.size()) |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
123 | return false; |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
124 | |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
125 | std::sort (a.begin(), a.end()); |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
126 | std::sort (b.begin(), b.end()); |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
127 | |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
128 | for (size_t i = 0; i < a.size(); ++i) |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
129 | { |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
130 | if (a[i] != b[i]) |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
131 | return false; |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
132 | } |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
133 | |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
134 | return true; |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
135 | } |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
136 | |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
137 | int main (int argc, char* argv[]) |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
138 | { |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
139 | vector<entry_type> entries; |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
140 | vector<entry_type> oldentries; |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
141 | read_cfgentries (argv[argc - 1], oldentries, "CODEGEN_CACHE"); |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
142 | |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
143 | for (int arg = 1; arg < argc - 1; ++arg) |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
144 | read_cfgentries (argv[arg], entries, "CFGENTRY"); |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
145 | |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
146 | if (check_equality (entries, oldentries)) |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
147 | { |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
148 | cout << "Configuration options unchanged" << endl; |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
149 | } |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
150 | else |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
151 | { |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
152 | std::ofstream os (argv[argc - 1]); |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
153 | os << "#pragma once" << endl; |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
154 | os << "#define CODEGEN_CACHE(A,B,C)" << endl; |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
155 | |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
156 | for (vector<entry_type>::const_iterator it = entries.begin(); it != entries.end(); ++it) |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
157 | os << "CODEGEN_CACHE (" << it->type << ", " << it->name << ", " << it->defvalue << ")" << endl; |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
158 | |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
159 | os << endl; |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
160 | for (vector<entry_type>::const_iterator it = entries.begin(); it != entries.end(); ++it) |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
161 | os << "EXTERN_CFGENTRY (" << it->type << ", " << it->name << ")" << endl; |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
162 | |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
163 | os << endl; |
848 | 164 | os << "static void InitConfigurationEntry (AbstractConfigEntry* entry);" << endl; |
165 | os << "static void SetupConfigurationLists()" << endl; | |
845
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
166 | os << "{" << endl; |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
167 | |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
168 | for (vector<entry_type>::const_iterator it = entries.begin(); it != entries.end(); ++it) |
848 | 169 | { |
170 | os << "\tInitConfigurationEntry (new " << it->type << "ConfigEntry (&cfg::" << | |
171 | it->name << ", \"" << it->name << "\", " << it->defvalue << "));" << endl; | |
172 | } | |
173 | ||
845
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
174 | os << "}" << endl; |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
175 | |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
176 | cout << "Wrote configuration options list to " << argv[argc - 1] << "." << endl; |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
177 | } |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
178 | |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
179 | return 0; |
fec7023e91a7
- added a code generator to produce a configuration.inc which replaces the old, DIABOLIC configuration indexing mechanism
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
180 | } |