From 13f862a0e80adb5fdb24f3b3a9ad472cf3a2802a Mon Sep 17 00:00:00 2001 From: alemi Date: Tue, 6 Aug 2024 23:55:57 +0200 Subject: [PATCH] chore: some glue code for jni made the simple ones :p --- src/ffi/java/buffer_controller.rs | 87 +++++++++++++++++++++++++++++++ src/ffi/java/cursor_controller.rs | 44 ++++++++++++++++ src/ffi/java/mod.rs | 3 ++ 3 files changed, 134 insertions(+) create mode 100644 src/ffi/java/buffer_controller.rs create mode 100644 src/ffi/java/cursor_controller.rs diff --git a/src/ffi/java/buffer_controller.rs b/src/ffi/java/buffer_controller.rs new file mode 100644 index 0000000..6e1dc69 --- /dev/null +++ b/src/ffi/java/buffer_controller.rs @@ -0,0 +1,87 @@ +use jni::{objects::{JClass, JObject}, sys::{jlong, jobject, jstring}, JNIEnv}; + +use crate::{api::Controller, buffer::Controller}; + +use super::util::JExceptable; + +/* + * Class: mp_code_BufferController + * Method: get_name + * Signature: (J)Ljava/lang/String; + */ +#[no_mangle] +pub extern "system" fn Java_mp_code_BufferController_get_1name<'local>( + env: JNIEnv, + _class: JClass<'local>, + self_ptr: jlong, +) -> jstring { + let controller = unsafe { Box::leak(Box::from_raw(self_ptr as *mut crate::buffer::Controller)) }; + let content = controller.name(); + env.new_string(content) + .expect("could not create jstring") + .as_raw() +} + +/* + * Class: mp_code_BufferController + * Method: get_content + * Signature: (J)Ljava/lang/String; + */ +#[no_mangle] +pub extern "system" fn Java_mp_code_BufferController_get_1content<'local>( + env: JNIEnv, + _class: JClass<'local>, + self_ptr: jlong, +) -> jstring { + let controller = unsafe { Box::leak(Box::from_raw(self_ptr as *mut crate::buffer::Controller)) }; + let content = controller.content(); + env.new_string(content) + .expect("could not create jstring") + .as_raw() +} + +/* + * Class: mp_code_BufferController + * Method: try_recv + * Signature: (J)Lmp/code/data/TextChange; + */ +#[no_mangle] +pub extern "system" fn Java_mp_code_BufferController_try_1recv<'local>( + mut env: JNIEnv, + _class: JClass<'local>, + self_ptr: jlong, +) -> jobject { + let controller = unsafe { Box::leak(Box::from_raw(self_ptr as *mut crate::buffer::Controller)) }; + let change = controller.try_recv().jexcept(&mut env); + todo!() +} + +/* + * Class: mp_code_BufferController + * Method: send + * Signature: (JLmp/code/data/TextChange;)V + */ +#[no_mangle] +pub extern "system" fn Java_mp_code_BufferController_send<'local>( + mut env: JNIEnv, + _class: JClass<'local>, + self_ptr: jlong, + input: JObject<'local> +) { + todo!() +} + +/* + * Class: mp_code_BufferController + * Method: free + * Signature: (J)V + */ +#[no_mangle] +pub extern "system" fn Java_mp_code_BufferController_free<'local>( + _env: JNIEnv, + _class: JClass<'local>, + self_ptr: jlong, +) { + unsafe { Box::from_raw(self_ptr as *mut crate::cursor::Controller) }; +} + diff --git a/src/ffi/java/cursor_controller.rs b/src/ffi/java/cursor_controller.rs new file mode 100644 index 0000000..04e1f35 --- /dev/null +++ b/src/ffi/java/cursor_controller.rs @@ -0,0 +1,44 @@ +use jni::{objects::{JClass, JObject}, sys::{jlong, jobject}, JNIEnv}; + +/* + * Class: mp_code_CursorController + * Method: recv + * Signature: (J)Lmp/code/data/Cursor; + */ +#[no_mangle] +pub extern "system" fn Java_mp_code_CursorController_recv<'local>( + mut env: JNIEnv, + _class: JClass<'local>, + self_ptr: jlong, +) -> jobject { + todo!() +} + +/* + * Class: mp_code_CursorController + * Method: send + * Signature: (JLmp/code/data/Cursor;)V + */ +#[no_mangle] +pub extern "system" fn Java_mp_code_CursorController_send<'local>( + mut env: JNIEnv, + _class: JClass<'local>, + self_ptr: jlong, + input: JObject<'local>, +) { + +} + +/* + * Class: mp_code_CursorController + * Method: free + * Signature: (J)V + */ +#[no_mangle] +pub extern "system" fn Java_mp_code_CursorController_free<'local>( + _env: JNIEnv, + _class: JClass<'local>, + self_ptr: jlong, +) { + unsafe { Box::from_raw(self_ptr as *mut crate::cursor::Controller) }; +} diff --git a/src/ffi/java/mod.rs b/src/ffi/java/mod.rs index 3fb5f40..1e9a3d5 100644 --- a/src/ffi/java/mod.rs +++ b/src/ffi/java/mod.rs @@ -2,6 +2,9 @@ pub mod client; pub mod workspace; pub mod util; +pub mod cursor_controller; +pub mod buffer_controller; + lazy_static::lazy_static! { pub(crate) static ref RT: tokio::runtime::Runtime = tokio::runtime::Runtime::new().expect("could not create tokio runtime"); }