The following commit has been merged in the master branch:
commit a6d44bc50d47af98f1aaad3a11180e378a9e2e29
Author: Miriam Ruiz <[email protected]>
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!

_______________________________________________
Pkg-games-commits mailing list
[email protected]
http://lists.alioth.debian.org/mailman/listinfo/pkg-games-commits

Reply via email to