+2002-07-09 Robert Collins <rbtcollins@hotmail.com>
+
+ Change custom container code for packagedb::packages to STL containers
+ throughout.
+ * IniDBBuilderPackage.cc: Ditto.
+ * PickView.cc: Ditto.
+ * choose.cc: Ditto.
+ * desktop.cc: Ditto.
+ * download.cc: Ditto.
+ * install.cc: Ditto.
+ * package_db.cc: Ditto.
+ * package_db.h: Ditto.
+ * Makefile.am: Remove list.h references.
+ * list.h: Remove.
+
2002-07-08 Max Bowsher <maxb@ukf.net>
* PickView.cc (PickView::PickView): Set font of package list header to
}
#endif
packagedb db;
- cp = &db.packages.registerbykey(name);
+ cp = db.findBinary (PackageSpecification(name));
+ if (!cp)
+ {
+ cp = new packagemeta (name);
+ db.packages.push_back (cp);
+ }
cbpv = cygpackage::createInstance (name);
cspv = packageversion ();
currentSpec = NULL;
io_stream_memory.cc \
io_stream_memory.h \
IOStreamProvider.h \
- list.h \
localdir.cc \
localdir.h \
log.cc \
io_stream_memory.cc \
io_stream_memory.h \
IOStreamProvider.h \
- list.h \
localdir.cc \
localdir.h \
log.cc \
for (packagedb::categoriesType::iterator n = packagedb::categories.begin();
n != packagedb::categories.end(); ++n)
note_width (headers, dc, String ("+ ")+n->first, HMARGIN, cat_col);
- for (size_t n = 1; n <= db.packages.number (); n++)
+ for (vector <packagemeta *>::iterator n = db.packages.begin ();
+ n != db.packages.end (); ++n)
{
- packagemeta & pkg = *db.packages[n];
+ packagemeta & pkg = **n;
if (pkg.installed)
note_width (headers, dc, pkg.installed.Canonical_version (),
HMARGIN, current_col);
/* binary packages */
/* Remove packages that are in the db, not installed, and have no
mirror info and are not cached for both binary and source packages. */
- size_t n = 1;
- while (n <= db.packages.number ())
+ vector <packagemeta *>::iterator i = db.packages.begin ();
+ while (i != db.packages.end ())
{
- packagemeta & pkg = *db.packages[n];
+ packagemeta & pkg = **i;
if (!pkg.installed && !pkg.accessible() &&
!pkg.sourceAccessible() )
{
- packagemeta *pkgm = db.packages.removebyindex (n);
+ packagemeta *pkgm = *i;
delete pkgm;
+ i = db.packages.erase (i);
}
else
- ++n;
+ ++i;
}
#if 0
/* remove any source packages which are not accessible */
fill_missing_category ()
{
packagedb db;
- for (size_t n = 1; n <= db.packages.number (); n++)
+ for (vector <packagemeta *>::iterator i = db.packages.begin ();
+ i != db.packages.end (); ++i)
{
- packagemeta & pkg = *db.packages[n];
+ packagemeta & pkg = **i;
if (!pkg.categories.size ())
pkg.add_category ("Misc");
pkg.add_category ("All");
{
chooser->deftrust = trust;
packagedb db;
- for (size_t n = 1; n <= db.packages.number (); n++)
+ for (vector <packagemeta *>::iterator i = db.packages.begin ();
+ i != db.packages.end (); ++i)
{
- packagemeta & pkg = *db.packages[n];
+ packagemeta & pkg = **i;
if (pkg.installed
|| pkg.categories.find ("Base") != pkg.categories.end ()
|| pkg.categories.find ("Misc") != pkg.categories.end ())
packagedb db;
if (chooser->get_view_mode () == PickView::views::Package)
{
- for (size_t n = 1; n <= db.packages.number (); n++)
+ for (vector <packagemeta *>::iterator i = db.packages.begin ();
+ i != db.packages.end (); ++i)
{
- packagemeta & pkg = *db.packages[n];
+ packagemeta & pkg = **i;
if ((!pkg.desired && pkg.installed)
|| (pkg.desired && (pkg.desired.picked ()
|| pkg.desired.sourcePackage().picked())))
}
else if (chooser->get_view_mode () == PickView::views::PackageFull)
{
- for (size_t n = 1; n <= db.packages.number (); n++)
- {
- packagemeta & pkg = *db.packages[n];
- chooser->insert_pkg (pkg);
- }
+ for (vector <packagemeta *>::iterator i = db.packages.begin ();
+ i != db.packages.end (); ++i)
+ chooser->insert_pkg (**i);
}
else if (chooser->get_view_mode () == PickView::views::Category)
{
if (!SetDlgItemText (dlg, IDC_CHOOSE_VIEWCAPTION, chooser->mode_caption ()))
log (LOG_BABBLE) << "Failed to set View button caption %ld" <<
GetLastError () << endLog;
- for (size_t n = 1; n <= db.packages.number (); n++)
+ for (vector <packagemeta *>::iterator i = db.packages.begin ();
+ i != db.packages.end (); ++i)
{
- packagemeta & pkg = *db.packages[n];
+ packagemeta & pkg = **i;
pkg.set_requirements (chooser->deftrust);
}
/* FIXME: do we need to init the desired fields ? */
* and fill in the Cached attribute if it exists.
*/
packagedb db;
- for (size_t n = 1; n <= db.packages.number (); ++n)
+ for (vector <packagemeta *>::iterator n = db.packages.begin ();
+ n != db.packages.end (); ++n)
{
- packagemeta & pkg = *db.packages[n];
+ packagemeta & pkg = **n;
for (set<packageversion>::iterator i = pkg.versions.begin ();
i != pkg.versions.end (); ++i)
{
log (LOG_BABBLE) << "Chooser results..." << endLog;
packagedb db;
- for (size_t n = 1; n <= db.packages.number (); n++)
+ for (vector <packagemeta *>::iterator i = db.packages.begin ();
+ i != db.packages.end (); ++i)
{
- packagemeta & pkg = *db.packages[n];
-// static const char *infos[] = { "nada", "prev", "curr", "test" };
+ packagemeta & pkg = **i;
const char *trust = ((pkg.desired == pkg.prev) ? "prev"
: (pkg.desired == pkg.curr) ? "curr"
: (pkg.desired == pkg.exp) ? "test" : "unknown");
if (IsDlgButtonChecked (GetHWND (), id))
{
default_trust (lv, TRUST_PREV);
- for (size_t n = 1; n <= db.packages.number (); n++)
+ for (vector <packagemeta *>::iterator i = db.packages.begin ();
+ i != db.packages.end (); ++i)
{
- packagemeta & pkg = *db.packages[n];
+ packagemeta & pkg = **i;
pkg.set_requirements (TRUST_PREV);
}
set_view_mode (lv, chooser->get_view_mode ());
if (IsDlgButtonChecked (GetHWND (), id))
{
default_trust (lv, TRUST_CURR);
- for (size_t n = 1; n <= db.packages.number (); n++)
+ for (vector <packagemeta *>::iterator i = db.packages.begin ();
+ i != db.packages.end (); ++i)
{
- packagemeta & pkg = *db.packages[n];
+ packagemeta & pkg = **i;
pkg.set_requirements (TRUST_CURR);
}
set_view_mode (lv, chooser->get_view_mode ());
if (IsDlgButtonChecked (GetHWND (), id))
{
default_trust (lv, TRUST_TEST);
- for (size_t n = 1; n <= db.packages.number (); n++)
+ for (vector <packagemeta *>::iterator i = db.packages.begin ();
+ i != db.packages.end (); ++i)
{
- packagemeta & pkg = *db.packages[n];
+ packagemeta & pkg = **i;
pkg.set_requirements (TRUST_TEST);
}
set_view_mode (lv, chooser->get_view_mode ());
#include "win32.h"
#include <shlobj.h>
+#include "desktop.h"
#include <stdio.h>
#include <stdlib.h>
#include "String++.h"
#include "io_stream.h"
-#include "desktop.h"
#include "getopt++/BoolOption.h"
+#include "PackageSpecification.h"
+
static BoolOption NoShortcutsOption (false, 'n', "no-shortcuts", "Disable creation of desktop and start menu shortcuts");
static OSVERSIONINFO verinfo;
if (verinfo.dwPlatformId != VER_PLATFORM_WIN32_NT)
{
packagedb db;
- packagemeta *pkg = db.packages.getbykey ("cygwin");
+ packagemeta *pkg = db.findBinary (PackageSpecification("cygwin"));
if (pkg && pkg->installed)
{
/* mkpasswd and mkgroup are not working on 9x/ME up to 1.1.5-4 */
packagedb db;
/* calculate the amount needed */
- for (size_t n = 1; n <= db.packages.number (); n++)
+ for (vector <packagemeta *>::iterator i = db.packages.begin ();
+ i != db.packages.end (); ++i)
{
- packagemeta & pkg = *db.packages[n];
+ packagemeta & pkg = **i;
if (pkg.desired.changeRequested())
{
packageversion version = pkg.desired;
/* and do the download. FIXME: This here we assign a new name for the cached version
* and check that above.
*/
- for (size_t n = 1; n <= db.packages.number (); n++)
+ for (vector <packagemeta *>::iterator i = db.packages.begin ();
+ i != db.packages.end (); ++i)
{
- packagemeta & pkg = *db.packages[n];
+ packagemeta & pkg = **i;
if (pkg.desired.changeRequested())
{
int e = 0;
init_run_script ();
packagedb db;
- for (size_t n = 1; n <= db.packages.number (); n++)
+ for (vector <packagemeta *>::iterator i = db.packages.begin ();
+ i != db.packages.end (); ++i)
{
- packagemeta & pkg = *db.packages[n];
+ packagemeta & pkg = **i;
if (pkg.desired.changeRequested())
{
}
/* start with uninstalls - remove files that new packages may replace */
- for (size_t n = 1; n <= db.packages.number (); n++)
+ for (vector <packagemeta *>::iterator i = db.packages.begin ();
+ i != db.packages.end (); ++i)
{
- packagemeta & pkg = *db.packages[n];
+ packagemeta & pkg = **i;
if (pkg.installed && (!pkg.desired || pkg.desired != pkg.installed))
uninstall_one (pkg);
}
* that have been moved into new packages
*/
- for (size_t n = 1; n <= db.packages.number (); n++)
+ for (vector <packagemeta *>::iterator i = db.packages.begin ();
+ i != db.packages.end (); ++i)
{
- packagemeta & pkg = *db.packages[n];
+ packagemeta & pkg = **i;
if (pkg.installed && pkg.desired.picked())
{
try {
}
}
- for (size_t n = 1; n <= db.packages.number (); n++)
+ for (vector <packagemeta *>::iterator i = db.packages.begin ();
+ i != db.packages.end (); ++i)
{
- packagemeta & pkg = *db.packages[n];
+ packagemeta & pkg = **i;
if (pkg.desired && pkg.desired.changeRequested())
{
+++ /dev/null
-/*
- * Copyright (c) 2001, Robert Collins.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * A copy of the GNU General Public License can be found at
- * http://www.gnu.org/
- *
- * Written by Robert Collins <rbtcollins@hotmail.com>
- *
- */
-
-#ifndef _LIST_H_
-#define _LIST_H_
-
-#include "stdlib.h"
-#include "sys/types.h"
-
-#include "LogSingleton.h"
-
-/* Creates a list/array of type T (must have a field key of type U),
- * with index type U and U comparison Ucmp.
- */
-template < class T, class U, int
-Ucmp (U, U) >
-class list
-{
- T **pointerblock;
- size_t _number;
- size_t _space;
-
-public:
-list ():pointerblock (0), _number (0), _space (0)
- {
- };
- // ~list () ...
- /* get an element if it exists */
- T *getbykey (const U);
- /* add an element if it does not exist and return a reference */
- T & registerbykey (U);
- /* add an element if one with the same key does not exist */
- T & registerbyobject (T &);
- /* remove by index */
- T *removebyindex (size_t);
- size_t number () const
- {
- return _number;
- };
- /* get by offset - not thread safe - starts at 1 */
- T *operator [] (size_t n) const
- {
- return n && n <= _number ? pointerblock[n - 1] : 0;
- };
- /* TODO: delete */
-private:
- // ensure there is enough array space.
- void checksize (void);
- // perform an insertion.
- void insert (size_t, T *);
- // find the index for a given element.
- // if the element is not present, return the index of an element beside
- // where it should be inserted. This may be above or below the actual
- // insertion point
- size_t findindex (const U) const;
-};
-
-template < class T, class U, int
-Ucmp (U, U) >
-T * list < T, U, Ucmp >::getbykey (const U key)
-{
- /* trivial corner case */
- if (_number == 0)
- return 0;
- size_t index = findindex (key);
- if (index < _number && Ucmp (pointerblock[index]->key, key) == 0)
- return pointerblock[index];
- return 0;
-}
-
-
-template < class T, class U, int
-Ucmp (U, U) >
-T & list < T, U, Ucmp >::registerbykey (U key)
-{
- T *tempT = getbykey (key);
- if (!tempT)
- {
- tempT = new T (key);
-
- size_t index = _number ? findindex (tempT->key) : 0;
- insert (index, tempT);
- }
- return *tempT;
-}
-
-/* TODO: factor both insertion routines into one */
-template < class T, class U, int
-Ucmp (U, U) >
-T & list < T, U, Ucmp >::registerbyobject (T & newobj)
-{
- T *tempT = getbykey (newobj.key);
- if (!tempT)
- {
- tempT = &newobj;
- size_t index = _number ? findindex (tempT->key) : 0;
- insert (index, tempT);
- }
- return *tempT;
-}
-
-template < class T, class U, int
-Ucmp (U, U) >
-T * list < T, U, Ucmp >::removebyindex (size_t index)
-{
- if (index && index <= _number)
- {
- T *rv = pointerblock[index - 1];
- /* remove from index - 1 */
- for (size_t i = index; i < _number; ++i)
- pointerblock[i - 1] = pointerblock[i];
- --_number;
- return rv;
- }
- return 0;
-}
-
-template < class T, class U, int
- Ucmp (U, U) > void
- list < T, U, Ucmp >::checksize ()
-{
- if (_number == _space)
- {
- T **newptr = new (T *)[_space + 20];
- if (!newptr)
- {
- //die - todo enable exceptions
- exit (100);
- }
- for (size_t i = 0; i < _number; ++i)
- newptr[i] = pointerblock[i];
- delete[]pointerblock;
- pointerblock = newptr;
- /* TODO: Parameterise this too */
- _space += 20;
- }
-}
-template < class T, class U, int
- Ucmp (U, U) > void
- list < T, U, Ucmp >::insert (size_t where, T * someT)
-{
- // doesn't change where
- checksize ();
- /* insert at where */
- for (size_t i = _number; where < i; --i)
- pointerblock[i] = pointerblock[i - 1];
- pointerblock[where] = someT;
- ++_number;
-}
-
-
-/* Precondition: _number != 0 */
-template < class T, class U, int
-Ucmp (U, U) >
-size_t list < T, U, Ucmp >::findindex (const U key) const
-{
- for (size_t n = _number - 1; n < _number; --n)
- {
- int direction = Ucmp (key, pointerblock[n]->key);
- if (!direction)
- return n;
- else if (direction > 0)
- return n+1;
- }
- return 0;
-}
-
-#endif /* _LIST_H_ */
if (!parseable)
continue;
- packagemeta *pkg = packages.getbykey (pkgname);
+ packagemeta *pkg = findBinary (PackageSpecification(pkgname));
if (!pkg)
{
pkg = new packagemeta (pkgname, inst);
+ packages.push_back (pkg);
/* we should install a new handler then not check this...
*/
//if (!pkg)
pkg->add_version (binary);
pkg->set_installed (binary);
pkg->desired = pkg->installed;
- packages.registerbyobject (*pkg);
-
}
delete db;
db = 0;
return errno ? errno : 1;
ndb->write ("INSTALLED.DB 2\n", strlen ("INSTALLED.DB 2\n"));
- for (size_t n = 1; n <= packages.number (); n++)
+ for (vector <packagemeta *>::iterator i = packages.begin ();
+ i != packages.end (); ++i)
{
- packagemeta & pkgm = *packages[n];
+ packagemeta & pkgm = **i;
if (pkgm.installed)
{
/* size here is irrelevant - as we can assume that this install source
packagemeta *
packagedb::findBinary (PackageSpecification const &spec) const
{
- for (size_t n = 1; n <= packages.number (); ++n)
+ for (vector <packagemeta *>::iterator n = packages.begin ();
+ n != packages.end (); ++n)
{
- packagemeta & pkgm = *packages[n];
+ packagemeta & pkgm = **n;
for (set<packageversion>::iterator i=pkgm.versions.begin();
i != pkgm.versions.end(); ++i)
if (spec.satisfies (*i))
int
packagedb::installeddbread =
0;
-list < packagemeta, String,
- String::casecompare >
- packagedb::packages;
+vector < packagemeta * > packagedb::packages;
packagedb::categoriesType
packagedb::categories;
vector <packagemeta *> packagedb::sourcePackages;
#include <String++.h>
#include <vector>
#include <map>
-#include "list.h"
#include "category.h"
class packagemeta;
class io_stream;
packagemeta * findBinary (PackageSpecification const &) const;
packagemeta * findSource (PackageSpecification const &) const;
/* all seen binary packages */
- static list < packagemeta, String, String::casecompare > packages;
+ static vector < packagemeta *> packages;
/* all seen source packages */
static vector <packagemeta *> sourcePackages;
/* all seen categories */