Git-Url: 
http://git.frugalware.org/gitweb/gitweb.cgi?p=cfpm.git;a=commitdiff;h=fe01aa608480905bcf3a4b975f4c9fe38f41b00c

commit fe01aa608480905bcf3a4b975f4c9fe38f41b00c
Author: Priyank <priy...@frugalware.org>
Date:   Mon Jun 8 12:27:33 2009 +0530

major changes in class List
* List is now a generic class representing PM_LIST
* Added new classes PackageList and GroupList as specializations of List
for Package and Group classes
* Database::getGroupCache() and Database::getPackageCache() now return
GroupList* and PackageList* respectively

diff --git a/pm.cc b/pm.cc
index cd3ce74..0301e0b 100644
--- a/pm.cc
+++ b/pm.cc
@@ -32,6 +32,8 @@ using PM::Database;
using PM::Package;
using PM::Group;
using PM::List;
+using PM::PackageList;
+using PM::GroupList;

bool PM::initialize(const string &root)
{
@@ -149,26 +151,26 @@ bool Database::readGroup(Group& g,const string gname)
return ret;
}

-List* Database::getGroupCache()
+GroupList* Database::getGroupCache()
{
-       List *ret = NULL;
+       GroupList       *ret = NULL;

if ( isRegistered() )
{
PM_LIST *l = pacman_db_getgrpcache(db);
-               ( l ) && ( ret = new List(l) );
+               ( l ) && ( ret = new GroupList(l) );
}
return ret;
}

-List* Database::getPackageCache()
+PackageList* Database::getPackageCache()
{
-       List *ret = NULL;
+       PackageList     *ret = NULL;

if ( isRegistered() )
{
PM_LIST *l = pacman_db_getpkgcache(db);
-               ( l ) && ( ret = new List(l) );
+               ( l ) && ( ret = new PackageList(l) );
}
return ret;
}
@@ -373,11 +375,11 @@ string Group::getName()
List::List()
{
list = NULL;
+
}

List::List(PM_LIST *l)
{
-       List();
list = l;
}

@@ -391,32 +393,28 @@ int List::count()
return pacman_list_count(list);
}

-List* List::getFirst()
+bool List::first()
{
-       List *ret = NULL;
+       bool    ret = false;
+       PM_LIST *tmp = NULL;

-       if ( list )
+       if ( (tmp=pacman_list_first(list)) != NULL )
{
-               PM_LIST *l = pacman_list_first(list);
-               if (l)
-               {
-                       ret = new List(l);
-               }
+               list = tmp;
+               ret = true;
}
return ret;
}

-List* List::getNext()
+bool List::next()
{
-       List *ret = NULL;
+       bool    ret = false;
+       PM_LIST *tmp = NULL;

-       if ( list )
+       if ( (tmp=pacman_list_next(list)) != NULL )
{
-               PM_LIST *l = pacman_list_next(list);
-               if (l)
-               {
-                       ret = new List(l);
-               }
+               list = tmp;
+               ret = true;
}
return ret;
}
@@ -436,3 +434,48 @@ void List::free()
{
pacman_list_free(list);
}
+
+PackageList::PackageList()
+{
+       list = NULL;
+}
+
+PackageList::PackageList(PM_LIST *l)
+{
+       list = l;
+}
+
+Package* PackageList::getData()
+{
+       Package *ret = NULL;
+       PM_PKG  *data = (PM_PKG*) getData();
+
+       if ( data )
+       {
+               ret = new Package((PM_PKG*)data);
+       }
+       return ret;
+}
+
+GroupList::GroupList()
+{
+       list = NULL;
+}
+
+GroupList::GroupList(PM_LIST *l)
+{
+       list = l;
+}
+
+Group* GroupList::getData()
+{
+       Group   *ret = NULL;
+       PM_GRP  *data = (PM_GRP*) getData();
+
+       if ( data )
+       {
+               ret = new Group((PM_GRP*)data);
+       }
+       return ret;
+}
+
diff --git a/pm.hh b/pm.hh
index 56d2fab..1f9dff0 100644
--- a/pm.hh
+++ b/pm.hh
@@ -12,6 +12,8 @@ namespace PM
class Package;
class Group;
class List;
+       class PackageList;
+       class GroupList;

class Shared
{
@@ -41,8 +43,8 @@ namespace PM
bool isRegistered();
bool readGroup(Group& g,const std::string gname);
bool readPackage(Package& p,const std::string pname);
-                       List *getGroupCache();
-                       List *getPackageCache();
+                       GroupList* getGroupCache();
+                       PackageList* getPackageCache();
};

class Package : public Shared
@@ -90,19 +92,37 @@ namespace PM
std::string getName();
};

+       /* generic pacman list */
class List
{
-               PM_LIST *list;
+               protected:
+                       PM_LIST *list;

public:
List();
-                       List(PM_LIST *list);
+                       List(PM_LIST *l);
~List();
int count();
-                       List *getFirst();
-                       List *getNext();
+                       bool first();
+                       bool next();
void *getData();
void free();
};
+
+       class PackageList : public List
+       {
+               public:
+                       PackageList();
+                       PackageList(PM_LIST *l);
+                       Package *getData();
+       };
+
+       class GroupList : public List
+       {
+               public:
+                       GroupList();
+                       GroupList(PM_LIST *l);
+                       Group *getData();
+       };
}
#endif
_______________________________________________
Frugalware-git mailing list
Frugalware-git@frugalware.org
http://frugalware.org/mailman/listinfo/frugalware-git

Reply via email to