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