[SCM] Development fot GoFind! branch, master, updated. a6d44bc50d47af98f1aaad3a11180e378a9e2e29
Miriam Ruiz
miriam at debian.org
Tue Apr 28 20:51:41 UTC 2009
The following commit has been merged in the master branch:
commit a6d44bc50d47af98f1aaad3a11180e378a9e2e29
Author: Miriam Ruiz <miriam at debian.org>
Date: Tue Apr 28 22:57:22 2009 +0200
Finished filter loader
diff --git a/filter.cpp b/filter.cpp
index 1e485ff..11decd0 100644
--- a/filter.cpp
+++ b/filter.cpp
@@ -223,7 +223,7 @@ bool PackageFilter::Load(const char *filename)
std::cout << rid->name() << " = " << rid->value() << std::endl;
std::cout << condition->name() << " = " << condition->value() << std::endl;
if (!AddLast(
- rid ? rid->name() : tid ? tid->name() : "?" ,
+ rid ? rid->value() : tid ? tid->value() : "?" ,
PackageFilter::Unknown,
condition->value()
))
@@ -286,6 +286,75 @@ int PackageFilter::TagsValue(const TagSet &tags)
return PackageFilter::Unknown;
}
+
+bool PackageFilter::AddLastAndHelper(ResultList *element, boolstuff::BoolExpr<std::string> *expr)
+{
+ bool success = true;
+
+ //std::cout << "and = " << expr << std::endl;
+
+ switch (expr->getType())
+ {
+ case boolstuff::BoolExpr<std::string>::VALUE:
+ tagdata.SetTag(&element->positive, expr->getValue());
+ break;
+ case boolstuff::BoolExpr<std::string>::NOT:
+ if (expr->getRight() &&
+ expr->getRight()->getType()==boolstuff::BoolExpr<std::string>::VALUE)
+ {
+ tagdata.SetTag(&element->negative, expr->getRight()->getValue());
+ }
+ else success=false;
+ break;
+ case boolstuff::BoolExpr<std::string>::AND:
+ if (!success) break;
+ if (expr->getLeft())
+ success &= AddLastAndHelper(element, expr->getLeft());
+ if (expr->getRight())
+ success &= AddLastAndHelper(element, expr->getRight());
+ break;
+ case boolstuff::BoolExpr<std::string>::OR:
+ default:
+ success = false;
+ break;
+ }
+
+ return success;
+}
+
+bool PackageFilter::AddLastOrHelper(const std::string str, Type t, boolstuff::BoolExpr<std::string> *expr)
+{
+ bool success = true;
+
+ //std::cout << "or = " << expr << std::endl;
+
+ ResultList *element = NULL;
+ switch (expr->getType())
+ {
+ case boolstuff::BoolExpr<std::string>::VALUE:
+ case boolstuff::BoolExpr<std::string>::NOT:
+ case boolstuff::BoolExpr<std::string>::AND:
+ if (!success) break;
+ element = new ResultList(str, t);
+ success &= AddLastAndHelper(element, expr);
+ if (success) AddLast(element);
+ else delete element;
+ break;
+ case boolstuff::BoolExpr<std::string>::OR:
+ if (!success) break;
+ if (expr->getLeft())
+ success &= AddLastOrHelper(str, t, expr->getLeft());
+ if (expr->getRight())
+ success &= AddLastOrHelper(str, t, expr->getRight());
+ break;
+ default:
+ success = false;
+ break;
+ }
+
+ return success;
+}
+
bool PackageFilter::AddLast(const std::string str, Type t, const std::string &bool_expr)
{
bool success = true;
@@ -303,23 +372,8 @@ bool PackageFilter::AddLast(const std::string str, Type t, const std::string &bo
}
else
{
- //std::cout << expr << std::endl;
- switch (expr->getType())
- {
- case boolstuff::BoolExpr<std::string>::VALUE:
- std::cerr << expr->getValue() << std::endl;
- break;
- case boolstuff::BoolExpr<std::string>::AND:
- break;
- case boolstuff::BoolExpr<std::string>::OR:
- break;
- case boolstuff::BoolExpr<std::string>::NOT:
- if (expr->getRight()->getType()==boolstuff::BoolExpr<std::string>::VALUE)
- std::cerr << "!" << expr->getRight()->getValue() << std::endl;
- break;
- default:
- break;
- }
+ //std::cout << "expr = " << expr << std::endl;
+ success &= AddLastOrHelper(str, t, expr);
}
delete expr;
diff --git a/filter.h b/filter.h
index c2bcdcf..f6e3660 100644
--- a/filter.h
+++ b/filter.h
@@ -25,6 +25,8 @@
#include <iostream>
#include <ept/debtags/tag.h>
+#include <boolstuff/BoolExpr.h>
+
class PackageFilter
{
public:
@@ -89,6 +91,8 @@ protected:
list->GetLast()->next = old_list;
}
+ bool AddLastAndHelper(ResultList *element, boolstuff::BoolExpr<std::string> *expr);
+ bool AddLastOrHelper(const std::string str, Type t, boolstuff::BoolExpr<std::string> *expr);
bool AddLast(const std::string str, Type t, const std::string &bool_expr);
inline void AddLast(PackageFilter::ResultList *new_list) {
--
Development fot GoFind!
More information about the Pkg-games-commits
mailing list