]> cygwin.com Git - cygwin-apps/setup.git/commitdiff
2002-07-09 Robert Collins <rbtcollins@hotmail.com>
authorRobert Collins <rbtcollins@hotmail.com>
Tue, 9 Jul 2002 06:57:41 +0000 (06:57 +0000)
committerRobert Collins <rbtcollins@hotmail.com>
Tue, 9 Jul 2002 06:57:41 +0000 (06:57 +0000)
        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.

12 files changed:
ChangeLog
IniDBBuilderPackage.cc
Makefile.am
Makefile.in
PickView.cc
choose.cc
desktop.cc
download.cc
install.cc
list.h [deleted file]
package_db.cc
package_db.h

index d1291ef99ae0282a5f44a17b35a0ae4e0c76ab79..8c3a857d6e204669abc304591ac9ecf8639ab46d 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,18 @@
+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
index a99fb9080130d30e87ce70c1010b68c822ecdb84..5949a75dc2e4f1d922c6d66a3c27607a5c5a7131 100644 (file)
@@ -68,7 +68,12 @@ IniDBBuilderPackage::buildPackage (String const &name)
     }
 #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;
index ba7afb5505c5ca7dce4d0e1c5332f1754d593635..fe91ae519072e97d656ba4995768aa1b56071407 100644 (file)
@@ -183,7 +183,6 @@ setup_SOURCES = \
        io_stream_memory.cc \
        io_stream_memory.h \
        IOStreamProvider.h \
-       list.h \
        localdir.cc \
        localdir.h \
        log.cc \
index e90d6c469677c6d52472c56f552d4814006c27fa..959d8cab8591db2e5914109c8ae696d197363dab 100644 (file)
@@ -279,7 +279,6 @@ setup_SOURCES = \
        io_stream_memory.cc \
        io_stream_memory.h \
        IOStreamProvider.h \
-       list.h \
        localdir.cc \
        localdir.h \
        log.cc \
index 0d253c03063dd48a1f425aa5b7cad00c5708c7fc..da36e12cba6430e2180d54f0fe4ba54b583939d0 100644 (file)
@@ -322,9 +322,10 @@ PickView::init_headers (HDC dc)
   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);
index fc535ed557ba894d0277bd43441511a3a0f8085c..17d0d371f4f1e33975542062515dd767c66e337a 100644 (file)
--- a/choose.cc
+++ b/choose.cc
@@ -271,18 +271,19 @@ set_existence ()
   /* 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 */
@@ -306,9 +307,10 @@ static void
 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");
@@ -320,9 +322,10 @@ default_trust (HWND h, trusts trust)
 {
   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 ())
@@ -357,9 +360,10 @@ set_view_mode (HWND h, PickView::views mode)
   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())))
@@ -368,11 +372,9 @@ set_view_mode (HWND h, PickView::views mode)
     }
   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)
     {
@@ -426,9 +428,10 @@ create_listview (HWND dlg, RECT * r)
   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 ? */
@@ -473,9 +476,10 @@ scan_downloaded_files ()
    * 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)
        {
@@ -553,10 +557,10 @@ ChooserPage::OnNext ()
 
   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");
@@ -638,9 +642,10 @@ ChooserPage::OnMessageCmd (int id, HWND hwndctl, UINT code)
       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 ());
@@ -652,9 +657,10 @@ ChooserPage::OnMessageCmd (int id, HWND hwndctl, UINT code)
       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 ());
@@ -666,9 +672,10 @@ ChooserPage::OnMessageCmd (int id, HWND hwndctl, UINT code)
       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 ());
index 0617fc4a41e948ba8f8021d1f3c48426b9ecc3cd..f2523b5e20a3cd6c217a795164b111d099078abe 100644 (file)
@@ -25,6 +25,7 @@ static const char *cvsid =
 
 #include "win32.h"
 #include <shlobj.h>
+#include "desktop.h"
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -49,9 +50,10 @@ static const char *cvsid =
 #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;
@@ -288,7 +290,7 @@ make_passwd_group ()
   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 */
index 83d9b9caeb44f8ff10591422a177fdffe6c4842a..a4914ae1610dd910e6756ed9fe8bd2d0a7ede077 100644 (file)
@@ -225,9 +225,10 @@ do_download_thread (HINSTANCE h, HWND owner)
 
   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;
@@ -254,9 +255,10 @@ do_download_thread (HINSTANCE h, HWND owner)
   /* 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;
index b12e41c817a8fce7affe9057f015b88537cb44ae..a187764edeedff0e105d5f292b42e5d6023f7428 100644 (file)
@@ -503,9 +503,10 @@ do_install_thread (HINSTANCE h, HWND owner)
   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())
        {
@@ -517,9 +518,10 @@ do_install_thread (HINSTANCE h, HWND owner)
     }
 
   /* 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);
     }
@@ -528,9 +530,10 @@ do_install_thread (HINSTANCE h, HWND owner)
    * 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 {
@@ -551,9 +554,10 @@ do_install_thread (HINSTANCE h, HWND owner)
        }
     }
 
-  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())
        {
diff --git a/list.h b/list.h
deleted file mode 100644 (file)
index c90c625..0000000
--- a/list.h
+++ /dev/null
@@ -1,180 +0,0 @@
-/*
- * 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_ */
index a25e5bb431eaeb3a05dc64097099918c421c4a1b..040adf918d6fae10cbc528062da349c02d1a8340 100644 (file)
@@ -92,10 +92,11 @@ packagedb::packagedb ()
                  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)
@@ -110,8 +111,6 @@ packagedb::packagedb ()
                  pkg->add_version (binary);
                  pkg->set_installed (binary);
                  pkg->desired = pkg->installed;
-                 packages.registerbyobject (*pkg);
-
                }
              delete db;
              db = 0;
@@ -140,9 +139,10 @@ packagedb::flush ()
     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
@@ -169,9 +169,10 @@ packagedb::flush ()
 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))
@@ -197,9 +198,7 @@ packagedb::findSource (PackageSpecification const &spec) const
 int
   packagedb::installeddbread =
   0;
-list < packagemeta, String,
-  String::casecompare >
-  packagedb::packages;
+vector < packagemeta * > packagedb::packages;
 packagedb::categoriesType
   packagedb::categories;
 vector <packagemeta *> packagedb::sourcePackages;
index dc8af9c9014b495e829f907d9656879c06161ee6..e44b13cf9c8c28ebdf86fc1acc121e88d86a7991 100644 (file)
@@ -20,7 +20,6 @@
 #include <String++.h>
 #include <vector>
 #include <map>
-#include "list.h"
 #include "category.h"
 class packagemeta;
 class io_stream;
@@ -41,7 +40,7 @@ public:
   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 */
This page took 0.056081 seconds and 5 git commands to generate.