1 | #include <frams/util/sstringutils.h>
|
---|
2 | #include <common/virtfile/stdiofile.h>
|
---|
3 | #include <frams/param/paramtree.h>
|
---|
4 | #include "paramtree_print.h"
|
---|
5 |
|
---|
6 | class EmptyParamWithGroupsForTesting : public Param
|
---|
7 | {
|
---|
8 | std::vector<ParamEntry> entries;
|
---|
9 | std::vector<std::shared_ptr<std::string>> strings; //could be a simple vector of strings, but then char* pointers can change when adding new strings and so ParamEntry structures would need updating. Therefore using "vector of string pointers" instead of "vector of strings".
|
---|
10 | public:
|
---|
11 | EmptyParamWithGroupsForTesting()
|
---|
12 | {
|
---|
13 | ParamEntry zero_ending = { 0, 0, 0, 0 };
|
---|
14 | entries.push_back(zero_ending);
|
---|
15 | setParamTab(getParamTab());
|
---|
16 | }
|
---|
17 | void addGroup(const char* name)
|
---|
18 | {
|
---|
19 | std::shared_ptr<string> str(new std::string(name));
|
---|
20 | strings.push_back(str);
|
---|
21 | ParamEntry tmp = { str.get()->c_str(), 0, 0, 0 };
|
---|
22 | entries.insert(entries.begin() + (entries.size() - 1), tmp);
|
---|
23 | entries[0].group = entries.size() - 1;
|
---|
24 | setParamTab(getParamTab());
|
---|
25 | }
|
---|
26 | ParamEntry *getParamTab()
|
---|
27 | {
|
---|
28 | return &entries[0];
|
---|
29 | }
|
---|
30 | };
|
---|
31 |
|
---|
32 | // This program tests parameter tree construction for paramtab names read from stdin.
|
---|
33 | // app_group_names.txt can be used as a sample input, because it contains a large set of paramtab objects from Framsticks GUI.
|
---|
34 | // See paramtree_paramlist_test.cpp for a demonstration of parameter tree construction for all paramtab's that are available in SDK.
|
---|
35 | // See mutableparam_test.cpp for a demonstration on how to detect (and possibly respond to) changing parameter definitions.
|
---|
36 | int main()
|
---|
37 | {
|
---|
38 | SString group_names;
|
---|
39 | StdioFILE::setStdio(); //setup VirtFILE::Vstdin/out/err
|
---|
40 | puts("(loading group names from stdin)");
|
---|
41 | loadSString(VirtFILE::Vstdin, group_names);
|
---|
42 | int pos = 0;
|
---|
43 | SString line;
|
---|
44 | EmptyParamWithGroupsForTesting param;
|
---|
45 | while (group_names.getNextToken(pos, line, '\n'))
|
---|
46 | {
|
---|
47 | if ((line.len() > 0) && (line[line.len() - 1] == '\r')) //support for reading \r\n files...
|
---|
48 | line = line.substr(0, line.len() - 1);
|
---|
49 | if (line.len() > 0 && line[0] != '#') //skip empty lines and #commment lines
|
---|
50 | param.addGroup(line.c_str());
|
---|
51 | }
|
---|
52 | printf("%d groups\n\n", param.getGroupCount());
|
---|
53 |
|
---|
54 | ParamTree tree(param);
|
---|
55 |
|
---|
56 | printTree(&tree.root);
|
---|
57 | }
|
---|