* Removed all Id tags.
[cacao.git] / src / native / native.h
index 3df0504f9e42249fc64454d68c6046c0c6187ec1..ee0403283c7a7a7e42e985590d6241005f7ee3bf 100644 (file)
@@ -1,6 +1,6 @@
 /* src/native/native.h - table of native functions
 
-   Copyright (C) 1996-2005, 2006 R. Grafl, A. Krall, C. Kruegel,
+   Copyright (C) 1996-2005, 2006, 2007 R. Grafl, A. Krall, C. Kruegel,
    C. Oates, R. Obermaisser, M. Platter, M. Probst, S. Ring,
    E. Steiner, C. Thalinger, D. Thuernbeck, P. Tomsich, C. Ullrich,
    J. Wenninger, Institut f. Computersprachen - TU Wien
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301, USA.
 
-   Contact: cacao@cacaojvm.org
-
-   Authors: Reinhard Grafl
-
-   Changes: Christian Thalinger
-
-   $Id: native.h 4530 2006-02-21 09:11:53Z twisti $
-
 */
 
 
 
 #include "config.h"
 
-#if !defined(WITH_STATIC_CLASSPATH)
+#if defined(ENABLE_LTDL) && defined(HAVE_LTDL_H)
 # include <ltdl.h>
 #endif
 
-#include "vm/class.h"
-#include "vm/global.h"
-#include "vm/method.h"
-#include "vm/utf8.h"
+#include <stdint.h>
+
 #include "native/jni.h"
-#include "native/include/java_lang_String.h"
-#include "native/include/java_lang_ClassLoader.h"
-#include "native/include/java_lang_Throwable.h"
+
+#include "vm/global.h"
+
+#include "vmcore/class.h"
+#include "vmcore/method.h"
+#include "vmcore/utf8.h"
+
+
+/* defines ********************************************************************/
+
+#define NATIVE_METHODS_COUNT    sizeof(methods) / sizeof(JNINativeMethod)
 
 
 /* table for locating native methods */
 
+#if defined(WITH_STATIC_CLASSPATH)
 typedef struct nativeref nativeref;
 typedef struct nativecompref nativecompref;
+#endif
 
 
-#if !defined(WITH_STATIC_CLASSPATH)
-typedef struct hashtable_library_loader_entry hashtable_library_loader_entry;
-typedef struct hashtable_library_name_entry hashtable_library_name_entry;
+/* native_methods_node_t ******************************************************/
+
+typedef struct native_methods_node_t native_methods_node_t;
+
+struct native_methods_node_t {
+       utf         *classname;             /* class name                         */
+       utf         *name;                  /* method name                        */
+       utf         *descriptor;            /* descriptor name                    */
+       functionptr  function;              /* pointer to the implementation      */
+};
 
 
 /* hashtable_library_loader_entry *********************************************/
 
+#if defined(ENABLE_LTDL)
+typedef struct hashtable_library_loader_entry hashtable_library_loader_entry;
+typedef struct hashtable_library_name_entry   hashtable_library_name_entry;
+
 struct hashtable_library_loader_entry {
-       java_objectheader              *loader;  /* class loader                  */
+       classloader                    *loader;  /* class loader                  */
        hashtable_library_name_entry   *namelink;/* libs loaded by this loader    */
        hashtable_library_loader_entry *hashlink;/* link for external chaining    */
 };
+#endif
 
 
 /* hashtable_library_name_entry ***********************************************/
 
+#if defined(ENABLE_LTDL)
 struct hashtable_library_name_entry {
        utf                          *name;      /* library name                  */
        lt_dlhandle                   handle;    /* libtool library handle        */
@@ -101,48 +114,35 @@ struct nativecompref {
 };
 
 
-/* initialize native subsystem */
+/* function prototypes ********************************************************/
+
 bool native_init(void);
 
+void native_method_register(utf *classname, const JNINativeMethod *methods,
+                                                       int32_t count);
+
 #if defined(WITH_STATIC_CLASSPATH)
 
-/* find native function */
 functionptr native_findfunction(utf *cname, utf *mname, utf *desc,
                                                                bool isstatic);
 
 #else /* defined(WITH_STATIC_CLASSPATH) */
 
-/* add a library to the library hash */
-void native_hashtable_library_add(utf *filename, java_objectheader *loader,
-                                                                 lt_dlhandle handle);
-
-/* find a library entry in the library hash */
-hashtable_library_name_entry *native_hashtable_library_find(utf *filename,
-                                                                                                                       java_objectheader *loader);
+# if defined(ENABLE_LTDL)
+lt_dlhandle native_library_open(utf *filename);
+void        native_library_add(utf *filename, classloader *loader,
+                                                          lt_dlhandle handle);
+hashtable_library_name_entry *native_library_find(utf *filename,
+                                                                                                 classloader *loader);
+# endif
 
-/* resolve native function */
 functionptr native_resolve_function(methodinfo *m);
 
 #endif /* defined(WITH_STATIC_CLASSPATH) */
 
-/* create new object on the heap and call the initializer */
-java_objectheader *native_new_and_init(classinfo *c);
-
-/* create new object on the heap and call the initializer 
-   mainly used for exceptions with a message */
-java_objectheader *native_new_and_init_string(classinfo *c, java_lang_String *s);
-
-/* create new object on the heap and call the initializer 
-   mainly used for exceptions with an index */
-java_objectheader *native_new_and_init_int(classinfo *c, s4 i);
-
-/* create new object on the heap and call the initializer 
-   mainly used for exceptions with cause */
-java_objectheader *native_new_and_init_throwable(classinfo *c, java_lang_Throwable *t);
+java_handle_t *native_new_and_init(classinfo *c);
 
-java_objectarray *native_get_parametertypes(methodinfo *m);
-java_objectarray *native_get_exceptiontypes(methodinfo *m);
-classinfo *native_get_returntype(methodinfo *m);
+java_handle_t *native_new_and_init_string(classinfo *c, java_handle_t *s);
 
 #endif /* _NATIVE_H */