boehm-gc: revert all CACAO-specific modifications; this is now an exact copy of the...
[cacao.git] / src / vm / package.cpp
index 5e5d3b2004ef910b911f256ce371dac47813d0a0..f5287bf15b0841dd06696348086e1ca4fb0df4f5 100644 (file)
 
 #include <stdint.h>
 
-#include "toolbox/list.h"
-
-#include "mm/memory.h"
-
-#include "native/jni.h"
+#include "mm/memory.hpp"
 
 #include "vm/options.h"
 #include "vm/package.hpp"
 #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;
-};
-
+// Package list.
 
-/* global variables ***********************************************************/
-
-static list_t *list_package = NULL;
-
-
-/**
- * Initialize the package list.
- */
-void Package::initialize(void)
-{
-       TRACESUBSYSTEMINITIALIZATION("package_init");
-
-       /* create the properties list */
-
-       list_package = list_create(OFFSET(list_package_entry_t, linkage));
-}
+std::set<utf*> Package::_packages;
 
 
 /**
@@ -73,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();
@@ -100,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);
 }
 
 
@@ -115,39 +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);
 
-void Package_initialize(void) { Package::initialize(); }
-void Package_add(utf* packagename) { Package::add(packagename); }
-utf* Package_find(utf *packagename) { return Package::find(packagename); }
+       if (it == _packages.end())
+               return NULL;
 
+       return *it;
 }