#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;
/**
*
* @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();
}
#endif
- lpe = NEW(list_package_entry_t);
-
- lpe->packagename = packagename;
-
- list_add_last(list_package, lpe);
+ // Add the package name.
+ _packages.insert(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;
}
#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