--- /dev/null
+#ifndef BOOLEANEVALUATOR_H_
+#define BOOLEANEVALUATOR_H_
+
+#include <string>
+#include <vector>
+#include <sigc++/slot.h>
+
+class BooleanEvaluator
+{
+public:
+ typedef sigc::slot<bool, const std::string &, const std::string *> Slot;
+
+private:
+ Slot slot;
+ std::string ops;
+ std::vector<std::string> var_stack;
+ std::vector<unsigned char> value_stack;
+ std::vector<char> op_stack;
+ bool last_was_op;
+
+public:
+ BooleanEvaluator(const Slot &, bool = true);
+
+ bool evaluate(const std::string &);
+private:
+ void push_op(char);
+ bool pop_value();
+ void collapse(unsigned);
+ unsigned precedence(char);
+ bool is_unary(char);
+ bool is_logic(char);
+};
+
+#endif