MCPcopy Create free account
hub / github.com/cactus-compute/cactus / Java_com_cactus_CactusJNI_nativeIndexAdd

Function Java_com_cactus_CactusJNI_nativeIndexAdd

android/cactus_jni.cpp:651–704  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

649}
650
651JNIEXPORT jint JNICALL
652Java_com_cactus_CactusJNI_nativeIndexAdd(JNIEnv* env, jobject, jlong handle,
653 jintArray ids, jobjectArray documents,
654 jobjectArray metadatas, jobjectArray embeddings,
655 jlong embeddingDim) {
656 if (handle == 0) return -1;
657
658 jsize count = env->GetArrayLength(ids);
659 jint* idData = env->GetIntArrayElements(ids, nullptr);
660
661 std::vector<const char*> docPtrs(count);
662 std::vector<const char*> metaPtrs(count);
663 std::vector<const float*> embPtrs(count);
664 std::vector<jstring> docStrings(count);
665 std::vector<jstring> metaStrings(count);
666 std::vector<jfloatArray> embArrays(count);
667
668 for (jsize i = 0; i < count; i++) {
669 docStrings[i] = static_cast<jstring>(env->GetObjectArrayElement(documents, i));
670 docPtrs[i] = jstring_to_cstr(env, docStrings[i]);
671
672 if (metadatas != nullptr) {
673 metaStrings[i] = static_cast<jstring>(env->GetObjectArrayElement(metadatas, i));
674 metaPtrs[i] = jstring_to_cstr(env, metaStrings[i]);
675 } else {
676 metaPtrs[i] = nullptr;
677 }
678
679 embArrays[i] = static_cast<jfloatArray>(env->GetObjectArrayElement(embeddings, i));
680 embPtrs[i] = env->GetFloatArrayElements(embArrays[i], nullptr);
681 }
682
683 int result = cactus_index_add(
684 reinterpret_cast<cactus_index_t>(handle),
685 reinterpret_cast<const int*>(idData),
686 docPtrs.data(),
687 metadatas != nullptr ? metaPtrs.data() : nullptr,
688 embPtrs.data(),
689 static_cast<size_t>(count),
690 static_cast<size_t>(embeddingDim)
691 );
692
693 for (jsize i = 0; i < count; i++) {
694 release_jstring(env, docStrings[i], docPtrs[i]);
695 if (metadatas != nullptr) {
696 release_jstring(env, metaStrings[i], metaPtrs[i]);
697 }
698 env->ReleaseFloatArrayElements(embArrays[i], const_cast<jfloat*>(embPtrs[i]), JNI_ABORT);
699 }
700
701 env->ReleaseIntArrayElements(ids, idData, JNI_ABORT);
702 if (result < 0) { throwOnError(env); return -1; }
703 return result;
704}
705
706JNIEXPORT jint JNICALL
707Java_com_cactus_CactusJNI_nativeIndexDelete(JNIEnv* env, jobject, jlong handle, jintArray ids) {

Callers

nothing calls this directly

Calls 5

jstring_to_cstrFunction · 0.85
release_jstringFunction · 0.85
throwOnErrorFunction · 0.85
dataMethod · 0.80
cactus_index_addFunction · 0.50

Tested by

no test coverage detected