diff options
author | Mark Tiefenbruck <mark@fluxbox.org> | 2008-01-11 07:41:22 (GMT) |
---|---|---|
committer | Mark Tiefenbruck <mark@fluxbox.org> | 2008-01-11 07:41:22 (GMT) |
commit | 9f2f65a698c4cc71373a7fe9d73a0889e0d3487b (patch) | |
tree | 4ad67db771d73ea3c48f80a1244037fc9754edd2 /src/FbTk/LogicCommands.cc | |
parent | 1f01d84c080d607a91eb417efcaf5e500b5f1d7e (diff) | |
download | fluxbox-9f2f65a698c4cc71373a7fe9d73a0889e0d3487b.zip fluxbox-9f2f65a698c4cc71373a7fe9d73a0889e0d3487b.tar.bz2 |
make FbTk::Command a template class, split parsing information out of ObjectRegistry
Diffstat (limited to 'src/FbTk/LogicCommands.cc')
-rw-r--r-- | src/FbTk/LogicCommands.cc | 56 |
1 files changed, 28 insertions, 28 deletions
diff --git a/src/FbTk/LogicCommands.cc b/src/FbTk/LogicCommands.cc index fedffe9..3545b61 100644 --- a/src/FbTk/LogicCommands.cc +++ b/src/FbTk/LogicCommands.cc | |||
@@ -21,7 +21,7 @@ | |||
21 | 21 | ||
22 | #include "LogicCommands.hh" | 22 | #include "LogicCommands.hh" |
23 | 23 | ||
24 | #include "ObjectRegistry.hh" | 24 | #include "CommandParser.hh" |
25 | #include "StringUtil.hh" | 25 | #include "StringUtil.hh" |
26 | 26 | ||
27 | #include <vector> | 27 | #include <vector> |
@@ -39,11 +39,11 @@ M *addCommands(M *macro, const string &args, bool trusted) { | |||
39 | std::string blah; | 39 | std::string blah; |
40 | std::vector<std::string> cmds; | 40 | std::vector<std::string> cmds; |
41 | StringUtil::stringTokensBetween(cmds, args, blah, '{', '}'); | 41 | StringUtil::stringTokensBetween(cmds, args, blah, '{', '}'); |
42 | RefCount<BoolCommand> cmd(0); | 42 | RefCount<Command<bool> > cmd(0); |
43 | 43 | ||
44 | std::vector<std::string>::iterator it = cmds.begin(), it_end = cmds.end(); | 44 | std::vector<std::string>::iterator it = cmds.begin(), it_end = cmds.end(); |
45 | for (; it != it_end; ++it) { | 45 | for (; it != it_end; ++it) { |
46 | cmd = ObjectRegistry<BoolCommand>::instance().parse(*it, trusted); | 46 | cmd = CommandParser<bool>::instance().parse(*it, trusted); |
47 | if (*cmd) | 47 | if (*cmd) |
48 | macro->add(cmd); | 48 | macro->add(cmd); |
49 | } | 49 | } |
@@ -54,14 +54,14 @@ M *addCommands(M *macro, const string &args, bool trusted) { | |||
54 | return 0; | 54 | return 0; |
55 | } | 55 | } |
56 | 56 | ||
57 | BoolCommand *parseLogicCommand(const string &command, const string &args, | 57 | Command<bool> *parseLogicCommand(const string &command, const string &args, |
58 | bool trusted) { | 58 | bool trusted) { |
59 | if (command == "not") { | 59 | if (command == "not") { |
60 | BoolCommand *boolcmd = | 60 | Command<bool> *boolcmd = |
61 | ObjectRegistry<BoolCommand>::instance().parse(args, trusted); | 61 | CommandParser<bool>::instance().parse(args, trusted); |
62 | if (!boolcmd) | 62 | if (!boolcmd) |
63 | return 0; | 63 | return 0; |
64 | RefCount<BoolCommand> ref(boolcmd); | 64 | RefCount<Command<bool> > ref(boolcmd); |
65 | return new NotCommand(ref); | 65 | return new NotCommand(ref); |
66 | } else if (command == "and") | 66 | } else if (command == "and") |
67 | return addCommands<AndCommand>(new AndCommand(), args, trusted); | 67 | return addCommands<AndCommand>(new AndCommand(), args, trusted); |
@@ -72,41 +72,41 @@ BoolCommand *parseLogicCommand(const string &command, const string &args, | |||
72 | return 0; | 72 | return 0; |
73 | } | 73 | } |
74 | 74 | ||
75 | REGISTER_OBJECT_PARSER(not, parseLogicCommand, BoolCommand); | 75 | REGISTER_COMMAND_PARSER(not, parseLogicCommand, bool); |
76 | REGISTER_OBJECT_PARSER(and, parseLogicCommand, BoolCommand); | 76 | REGISTER_COMMAND_PARSER(and, parseLogicCommand, bool); |
77 | REGISTER_OBJECT_PARSER(or, parseLogicCommand, BoolCommand); | 77 | REGISTER_COMMAND_PARSER(or, parseLogicCommand, bool); |
78 | REGISTER_OBJECT_PARSER(xor, parseLogicCommand, BoolCommand); | 78 | REGISTER_COMMAND_PARSER(xor, parseLogicCommand, bool); |
79 | 79 | ||
80 | }; // end anonymous namespace | 80 | }; // end anonymous namespace |
81 | 81 | ||
82 | Command *IfCommand::parse(const std::string &command, const std::string &args, | 82 | Command<void> *IfCommand::parse(const std::string &command, const std::string &args, |
83 | bool trusted) { | 83 | bool trusted) { |
84 | std::string blah; | 84 | std::string blah; |
85 | std::vector<std::string> cmds; | 85 | std::vector<std::string> cmds; |
86 | RefCount<BoolCommand> cond(0); | 86 | RefCount<Command<bool> > cond(0); |
87 | RefCount<Command> t(0), f(0); | 87 | RefCount<Command<void> > t(0), f(0); |
88 | 88 | ||
89 | StringUtil::stringTokensBetween(cmds, args, blah, '{', '}'); | 89 | StringUtil::stringTokensBetween(cmds, args, blah, '{', '}'); |
90 | if (cmds.size() < 3) | 90 | if (cmds.size() < 3) |
91 | return 0; | 91 | return 0; |
92 | 92 | ||
93 | cond = ObjectRegistry<BoolCommand>::instance().parse(cmds[0], trusted); | 93 | cond = CommandParser<bool>::instance().parse(cmds[0], trusted); |
94 | if (*cond == 0) | 94 | if (*cond == 0) |
95 | return 0; | 95 | return 0; |
96 | 96 | ||
97 | t = ObjectRegistry<Command>::instance().parse(cmds[1], trusted); | 97 | t = CommandParser<void>::instance().parse(cmds[1], trusted); |
98 | if (cmds.size() >= 3) | 98 | if (cmds.size() >= 3) |
99 | f = ObjectRegistry<Command>::instance().parse(cmds[2], trusted); | 99 | f = CommandParser<void>::instance().parse(cmds[2], trusted); |
100 | if (*t == 0 && *f == 0) | 100 | if (*t == 0 && *f == 0) |
101 | return 0; | 101 | return 0; |
102 | 102 | ||
103 | return new IfCommand(cond, t, f); | 103 | return new IfCommand(cond, t, f); |
104 | } | 104 | } |
105 | 105 | ||
106 | REGISTER_OBJECT_PARSER(if, IfCommand::parse, Command); | 106 | REGISTER_COMMAND_PARSER(if, IfCommand::parse, void); |
107 | REGISTER_OBJECT_PARSER(cond, IfCommand::parse, Command); | 107 | REGISTER_COMMAND_PARSER(cond, IfCommand::parse, void); |
108 | 108 | ||
109 | void OrCommand::add(RefCount<BoolCommand> &com) { | 109 | void OrCommand::add(RefCount<Command<bool> > &com) { |
110 | m_commandlist.push_back(com); | 110 | m_commandlist.push_back(com); |
111 | } | 111 | } |
112 | 112 | ||
@@ -114,15 +114,15 @@ size_t OrCommand::size() const { | |||
114 | return m_commandlist.size(); | 114 | return m_commandlist.size(); |
115 | } | 115 | } |
116 | 116 | ||
117 | bool OrCommand::bool_execute() { | 117 | bool OrCommand::execute() { |
118 | for (size_t i=0; i < m_commandlist.size(); ++i) { | 118 | for (size_t i=0; i < m_commandlist.size(); ++i) { |
119 | if (m_commandlist[i]->bool_execute()) | 119 | if (m_commandlist[i]->execute()) |
120 | return true; | 120 | return true; |
121 | } | 121 | } |
122 | return false; | 122 | return false; |
123 | } | 123 | } |
124 | 124 | ||
125 | void AndCommand::add(RefCount<BoolCommand> &com) { | 125 | void AndCommand::add(RefCount<Command<bool> > &com) { |
126 | m_commandlist.push_back(com); | 126 | m_commandlist.push_back(com); |
127 | } | 127 | } |
128 | 128 | ||
@@ -130,15 +130,15 @@ size_t AndCommand::size() const { | |||
130 | return m_commandlist.size(); | 130 | return m_commandlist.size(); |
131 | } | 131 | } |
132 | 132 | ||
133 | bool AndCommand::bool_execute() { | 133 | bool AndCommand::execute() { |
134 | for (size_t i=0; i < m_commandlist.size(); ++i) { | 134 | for (size_t i=0; i < m_commandlist.size(); ++i) { |
135 | if (!m_commandlist[i]->bool_execute()) | 135 | if (!m_commandlist[i]->execute()) |
136 | return false; | 136 | return false; |
137 | } | 137 | } |
138 | return true; | 138 | return true; |
139 | } | 139 | } |
140 | 140 | ||
141 | void XorCommand::add(RefCount<BoolCommand> &com) { | 141 | void XorCommand::add(RefCount<Command<bool> > &com) { |
142 | m_commandlist.push_back(com); | 142 | m_commandlist.push_back(com); |
143 | } | 143 | } |
144 | 144 | ||
@@ -146,10 +146,10 @@ size_t XorCommand::size() const { | |||
146 | return m_commandlist.size(); | 146 | return m_commandlist.size(); |
147 | } | 147 | } |
148 | 148 | ||
149 | bool XorCommand::bool_execute() { | 149 | bool XorCommand::execute() { |
150 | bool ret = false; | 150 | bool ret = false; |
151 | for (size_t i=0; i < m_commandlist.size(); ++i) | 151 | for (size_t i=0; i < m_commandlist.size(); ++i) |
152 | ret ^= m_commandlist[i]->bool_execute(); | 152 | ret ^= m_commandlist[i]->execute(); |
153 | return ret; | 153 | return ret; |
154 | } | 154 | } |
155 | 155 | ||