Skip to content

Commit b083385

Browse files
committed
Add new duplicate_deep method
1 parent ed6faac commit b083385

File tree

5 files changed

+26
-1
lines changed

5 files changed

+26
-1
lines changed

kt/plugins/godot-gradle-plugin/src/main/resources/godot/gradle/godot-kotlin-graal-jni-config.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,7 @@
120120
{ "name" : "engine_call_clear", "parameterTypes" : ["long"] },
121121
{ "name" : "engine_call_count", "parameterTypes" : ["long"] },
122122
{ "name" : "engine_call_duplicate", "parameterTypes" : ["long"] },
123+
{ "name" : "engine_call_duplicate_deep", "parameterTypes" : ["long"] },
123124
{ "name" : "engine_call_erase", "parameterTypes" : ["long"] },
124125
{ "name" : "engine_call_fill", "parameterTypes" : ["long"] },
125126
{ "name" : "engine_call_filter", "parameterTypes" : ["long"] },
@@ -207,6 +208,7 @@
207208

208209
{ "name" : "engine_call_clear", "parameterTypes" : ["long"] },
209210
{ "name" : "engine_call_duplicate", "parameterTypes" : ["long"] },
211+
{ "name" : "engine_call_duplicate_deep", "parameterTypes" : ["long"] },
210212
{ "name" : "engine_call_is_empty", "parameterTypes" : ["long"] },
211213
{ "name" : "engine_call_erase", "parameterTypes" : ["long"] },
212214
{ "name" : "engine_call_find_key", "parameterTypes" : ["long"] },

src/jvm_wrapper/bridge/dictionary_bridge.cpp

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,16 @@ void DictionaryBridge::engine_call_duplicate(JNIEnv* p_raw_env, jobject p_instan
7171
TransferContext::get_instance().write_return_value(env, variant);
7272
}
7373

74-
// TODO/4.0: modify naming in jvm code
74+
75+
void DictionaryBridge::engine_call_duplicate_deep(JNIEnv* p_raw_env, jobject p_instance, jlong p_raw_ptr) {
76+
jni::Env env {p_raw_env};
77+
Variant args[1] = {};
78+
TransferContext::get_instance().read_args(env, args);
79+
ResourceDeepDuplicateMode mode = args[0].operator ResourceDeepDuplicateMode();
80+
Variant variant {from_uint_to_ptr<Dictionary>(p_raw_ptr)->duplicate_deep(mode)};
81+
TransferContext::get_instance().write_return_value(env, variant);
82+
}
83+
7584
void DictionaryBridge::engine_call_is_empty(JNIEnv* p_raw_env, jobject p_instance, jlong p_raw_ptr) {
7685
jni::Env env {p_raw_env};
7786
Variant variant {from_uint_to_ptr<Dictionary>(p_raw_ptr)->is_empty()};

src/jvm_wrapper/bridge/dictionary_bridge.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ namespace bridges {
1414
INIT_NATIVE_METHOD("engine_call_constructor_typed","()J", DictionaryBridge::engine_call_constructor_typed)
1515
INIT_NATIVE_METHOD("engine_call_clear", "(J)V", DictionaryBridge::engine_call_clear)
1616
INIT_NATIVE_METHOD("engine_call_duplicate", "(J)V", DictionaryBridge::engine_call_duplicate)
17+
INIT_NATIVE_METHOD("engine_call_duplicate_deep", "(J)V", DictionaryBridge::engine_call_duplicate_deep)
1718
INIT_NATIVE_METHOD("engine_call_is_empty","(J)V", DictionaryBridge::engine_call_is_empty)
1819
INIT_NATIVE_METHOD("engine_call_erase", "(J)V", DictionaryBridge::engine_call_erase)
1920
INIT_NATIVE_METHOD("engine_call_find_key", "(J)V", DictionaryBridge::engine_call_find_key)
@@ -39,6 +40,7 @@ namespace bridges {
3940
static uintptr_t engine_call_constructor_typed(JNIEnv* p_raw_env, jobject p_instance);
4041
static void engine_call_clear(JNIEnv* p_raw_env, jobject p_instance, jlong p_raw_ptr);
4142
static void engine_call_duplicate(JNIEnv* p_raw_env, jobject p_instance, jlong p_raw_ptr);
43+
static void engine_call_duplicate_deep(JNIEnv* p_raw_env, jobject p_instance, jlong p_raw_ptr);
4244
static void engine_call_is_empty(JNIEnv* p_raw_env, jobject p_instance, jlong p_raw_ptr);
4345
static void engine_call_erase(JNIEnv* p_raw_env, jobject p_instance, jlong p_raw_ptr);
4446
static void engine_call_find_key(JNIEnv* p_raw_env, jobject p_instance, jlong p_raw_ptr);

src/jvm_wrapper/bridge/variant_array_bridge.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,16 @@ void VariantArrayBridge::engine_call_duplicate(JNIEnv* p_raw_env, jobject p_inst
135135
transfer_context.write_return_value(env, variant);
136136
}
137137

138+
void VariantArrayBridge::engine_call_duplicate_deep(JNIEnv* p_raw_env, jobject p_instance, jlong p_raw_ptr) {
139+
jni::Env env {p_raw_env};
140+
Variant args[1] = {};
141+
TransferContext& transfer_context = TransferContext::get_instance();
142+
transfer_context.read_args(env, args);
143+
ResourceDeepDuplicateMode mode = args[0].operator ResourceDeepDuplicateMode();
144+
Variant variant {from_uint_to_ptr<Array>(p_raw_ptr)->duplicate(mode)};
145+
transfer_context.write_return_value(env, variant);
146+
}
147+
138148
void VariantArrayBridge::engine_call_erase(JNIEnv* p_raw_env, jobject p_instance, jlong p_raw_ptr) {
139149
jni::Env env {p_raw_env};
140150
Variant args[1] = {};

src/jvm_wrapper/bridge/variant_array_bridge.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ namespace bridges {
2727
INIT_NATIVE_METHOD("engine_call_bsearchCustom","(J)V", VariantArrayBridge::engine_call_bsearchCustom)
2828
INIT_NATIVE_METHOD("engine_call_count","(J)V", VariantArrayBridge::engine_call_count)
2929
INIT_NATIVE_METHOD("engine_call_duplicate","(J)V", VariantArrayBridge::engine_call_duplicate)
30+
INIT_NATIVE_METHOD("engine_call_duplicate_deep","(J)V", VariantArrayBridge::engine_call_duplicate_deep)
3031
INIT_NATIVE_METHOD("engine_call_erase","(J)V", VariantArrayBridge::engine_call_erase)
3132
INIT_NATIVE_METHOD("engine_call_find","(J)V", VariantArrayBridge::engine_call_find)
3233
INIT_NATIVE_METHOD("engine_call_front","(J)V", VariantArrayBridge::engine_call_front)
@@ -78,6 +79,7 @@ namespace bridges {
7879
static void engine_call_bsearchCustom(JNIEnv* p_raw_env, jobject p_instance, jlong p_raw_ptr);
7980
static void engine_call_count(JNIEnv* p_raw_env, jobject p_instance, jlong p_raw_ptr);
8081
static void engine_call_duplicate(JNIEnv* p_raw_env, jobject p_instance, jlong p_raw_ptr);
82+
static void engine_call_duplicate_deep(JNIEnv* p_raw_env, jobject p_instance, jlong p_raw_ptr);
8183
static void engine_call_erase(JNIEnv* p_raw_env, jobject p_instance, jlong p_raw_ptr);
8284
static void engine_call_find(JNIEnv* p_raw_env, jobject p_instance, jlong p_raw_ptr);
8385
static void engine_call_front(JNIEnv* p_raw_env, jobject p_instance, jlong p_raw_ptr);

0 commit comments

Comments
 (0)