* src/vm/package.cpp: Rewritten to use std::set as container.
authorChristian Thalinger <twisti@complang.tuwien.ac.at>
Fri, 22 Aug 2008 14:36:13 +0000 (16:36 +0200)
committerChristian Thalinger <twisti@complang.tuwien.ac.at>
Fri, 22 Aug 2008 14:36:13 +0000 (16:36 +0200)
* src/vm/package.hpp: Likewise.
* src/vm/vm.cpp (VM::VM): Removed Package::initialize() call.

src/vm/package.cpp
src/vm/package.hpp
src/vm/vm.cpp

index 6b49e3f81b9d55ab8e2aaa045e4b259951885eb7..a112aca2f7d95045bea1a33d1acd41fabc8d4a81 100644 (file)
@@ -27,8 +27,6 @@
 
 #include <stdint.h>
 
-#include "toolbox/list.h"
-
 #include "mm/memory.h"
 
 #include "vm/options.h"
 #include "vm/utf8.h"
 
 
-/* internal property structure ************************************************/
-
-typedef struct list_package_entry_t list_package_entry_t;
-
-struct list_package_entry_t {
-/*     java_string_t *packagename; */
-       utf           *packagename;
-       listnode_t     linkage;
-};
-
-
-/* global variables ***********************************************************/
-
-static list_t *list_package = NULL;
-
-
-/**
- * Initialize the package list.
- */
-void Package::initialize(void)
-{
-       TRACESUBSYSTEMINITIALIZATION("package_init");
-
-       /* create the properties list */
+// Package list.
 
-       list_package = list_create(OFFSET(list_package_entry_t, linkage));
-}
+std::set<utf*> Package::_packages;
 
 
 /**
@@ -71,23 +45,11 @@ void Package::initialize(void)
  *
  * @param packagename Package name as Java string.
  */
-/* void package_add(java_handle_t *packagename) */
-void Package::add(utf *packagename)
+void Package::add(utf* packagename)
 {
-/*     java_string_t        *s; */
-       list_package_entry_t *lpe;
-
-       /* Intern the Java string to get a unique address. */
-
+       // Intern the Java string to get a unique address.
 /*     s = javastring_intern(packagename); */
 
-       /* Check if the package is already stored. */
-
-       if (Package::find(packagename) != NULL)
-               return;
-
-       /* Add the package. */
-
 #if !defined(NDEBUG)
        if (opt_DebugPackage) {
                log_start();
@@ -98,11 +60,8 @@ void Package::add(utf *packagename)
        }
 #endif
 
-       lpe = NEW(list_package_entry_t);
-
-       lpe->packagename = packagename;
-
-       list_add_last(list_package, lpe);
+       // Add the package name.
+       _packages.insert(packagename);
 }
 
 
@@ -113,37 +72,14 @@ void Package::add(utf *packagename)
  *
  * @return Package name as Java string.
  */
-/* java_handle_t *package_find(java_handle_t *packagename) */
-utf* Package::find(utf *packagename)
+utf* Package::find(utf* packagename)
 {
-/*     java_string_t        *s; */
-       list_t               *l;
-       list_package_entry_t *lpe;
-
-       /* Intern the Java string to get a unique address. */
-
-/*     s = javastring_intern(packagename); */
-
-       /* For convenience. */
-
-       l = list_package;
-
-       for (lpe = (list_package_entry_t*) list_first(l); lpe != NULL; lpe = (list_package_entry_t*) list_next(l, lpe)) {
-/*             if (lpe->packagename == s) */
-               if (lpe->packagename == packagename)
-                       return lpe->packagename;
-       }
-
-       return NULL;
-}
-
-
-/* Legacy C interface *********************************************************/
-
-extern "C" {
+       std::set<utf*>::iterator it = _packages.find(packagename);
 
-utf* Package_find(utf *packagename) { return Package::find(packagename); }
+       if (it == _packages.end())
+               return NULL;
 
+       return *it;
 }
 
 
index e0c44cabb56144c9e2d1574d5b438a94cc4867ac..7e7669bd0f0a01158e1922f3b31b519e19c5795f 100644 (file)
 
 #include <stdint.h>
 
-#include "vm/utf8.h"
+#include <set>
 
+#include "vm/utf8.h"
 
-#ifdef __cplusplus
 
 /**
  *
  */
 class Package {
+private:
+       static std::set<utf*> _packages;
+
 public:
-       static void initialize();
-       /* static void add(java_handle_t *packagename); */
-       static void add(utf *packagename);
-       /* static java_handle_t* find(java_handle_t *packagename); */
-       static utf* find(utf *packagename);
+       static void add (utf* packagename);
+       static utf* find(utf* packagename);
 };
 
-#else
-
-/* Legacy C interface *********************************************************/
-
-typedef struct Package Package;
-
-utf* Package_find(utf* packagename);
-
-#endif
-
 #endif // _VM_PACKAGE_HPP
 
 
index 0e232dfd7dc91c5e546a956fef8333c3d2987d2e..afdbdc97c013c101e0bf530b3edac6ce75a6f862 100644 (file)
@@ -73,7 +73,6 @@
 #include "vm/initialize.h"
 #include "vm/options.h"
 #include "vm/os.hpp"
-#include "vm/package.hpp"
 #include "vm/primitive.hpp"
 #include "vm/properties.h"
 #include "vm/signallocal.h"
@@ -1428,10 +1427,6 @@ VM::VM(JavaVMInitArgs* vm_args)
        pythonpass_init();
 #endif
 
-       /* BEFORE: loader_preinit */
-
-       Package::initialize();
-
        /* AFTER: utf8_init, classcache_init */
 
        loader_preinit();