[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