diff options
Diffstat (limited to 'src/api/java/jni/cvc5_Stat.cpp')
-rw-r--r-- | src/api/java/jni/cvc5_Stat.cpp | 223 |
1 files changed, 223 insertions, 0 deletions
diff --git a/src/api/java/jni/cvc5_Stat.cpp b/src/api/java/jni/cvc5_Stat.cpp new file mode 100644 index 000000000..9345729cb --- /dev/null +++ b/src/api/java/jni/cvc5_Stat.cpp @@ -0,0 +1,223 @@ +/****************************************************************************** + * Top contributors (to current version): + * Mudathir Mohamed + * + * This file is part of the cvc5 project. + * + * Copyright (c) 2009-2021 by the authors listed in the file AUTHORS + * in the top-level source directory and their institutional affiliations. + * All rights reserved. See the file COPYING in the top-level source + * directory for licensing information. + * **************************************************************************** + * + * The cvc5 Java API. + */ + +#include "cvc5_Stat.h" + +#include "api/cpp/cvc5.h" +#include "cvc5JavaApi.h" + +using namespace cvc5::api; + +/* + * Class: cvc5_Stat + * Method: deletePointer + * Signature: (J)V + */ +JNIEXPORT void JNICALL Java_cvc5_Stat_deletePointer(JNIEnv*, + jclass, + jlong pointer) +{ + delete reinterpret_cast<Stat*>(pointer); +} + +/* + * Class: cvc5_Stat + * Method: toString + * Signature: (J)Ljava/lang/String; + */ +JNIEXPORT jstring JNICALL Java_cvc5_Stat_toString(JNIEnv* env, + jobject, + jlong pointer) +{ + CVC5_JAVA_API_TRY_CATCH_BEGIN; + + Stat* current = reinterpret_cast<Stat*>(pointer); + std::stringstream ss; + ss << *current; + return env->NewStringUTF(ss.str().c_str()); + CVC5_JAVA_API_TRY_CATCH_END_RETURN(env, nullptr); +} + +/* + * Class: cvc5_Stat + * Method: isExpert + * Signature: (J)Z + */ +JNIEXPORT jboolean JNICALL Java_cvc5_Stat_isExpert(JNIEnv* env, + jobject, + jlong pointer) +{ + CVC5_JAVA_API_TRY_CATCH_BEGIN; + Stat* current = reinterpret_cast<Stat*>(pointer); + return static_cast<jboolean>(current->isExpert()); + CVC5_JAVA_API_TRY_CATCH_END_RETURN(env, static_cast<jboolean>(false)); +} + +/* + * Class: cvc5_Stat + * Method: isDefault + * Signature: (J)Z + */ +JNIEXPORT jboolean JNICALL Java_cvc5_Stat_isDefault(JNIEnv* env, + jobject, + jlong pointer) +{ + CVC5_JAVA_API_TRY_CATCH_BEGIN; + Stat* current = reinterpret_cast<Stat*>(pointer); + return static_cast<jboolean>(current->isDefault()); + CVC5_JAVA_API_TRY_CATCH_END_RETURN(env, static_cast<jboolean>(false)); +} + +/* + * Class: cvc5_Stat + * Method: isInt + * Signature: (J)Z + */ +JNIEXPORT jboolean JNICALL Java_cvc5_Stat_isInt(JNIEnv* env, + jobject, + jlong pointer) +{ + CVC5_JAVA_API_TRY_CATCH_BEGIN; + Stat* current = reinterpret_cast<Stat*>(pointer); + return static_cast<jboolean>(current->isInt()); + CVC5_JAVA_API_TRY_CATCH_END_RETURN(env, static_cast<jboolean>(false)); +} + +/* + * Class: cvc5_Stat + * Method: getInt + * Signature: (J)J + */ +JNIEXPORT jlong JNICALL Java_cvc5_Stat_getInt(JNIEnv* env, + jobject, + jlong pointer) +{ + CVC5_JAVA_API_TRY_CATCH_BEGIN; + Stat* current = reinterpret_cast<Stat*>(pointer); + return static_cast<jlong>(current->getInt()); + CVC5_JAVA_API_TRY_CATCH_END_RETURN(env, static_cast<jlong>(0)); +} + +/* + * Class: cvc5_Stat + * Method: isDouble + * Signature: (J)Z + */ +JNIEXPORT jboolean JNICALL Java_cvc5_Stat_isDouble(JNIEnv* env, + jobject, + jlong pointer) +{ + CVC5_JAVA_API_TRY_CATCH_BEGIN; + Stat* current = reinterpret_cast<Stat*>(pointer); + return static_cast<jboolean>(current->isDouble()); + CVC5_JAVA_API_TRY_CATCH_END_RETURN(env, static_cast<jboolean>(false)); +} + +/* + * Class: cvc5_Stat + * Method: getDouble + * Signature: (J)D + */ +JNIEXPORT jdouble JNICALL Java_cvc5_Stat_getDouble(JNIEnv* env, + jobject, + jlong pointer) +{ + CVC5_JAVA_API_TRY_CATCH_BEGIN; + Stat* current = reinterpret_cast<Stat*>(pointer); + return static_cast<jdouble>(current->getDouble()); + CVC5_JAVA_API_TRY_CATCH_END_RETURN(env, static_cast<jdouble>(0)); +} + +/* + * Class: cvc5_Stat + * Method: isString + * Signature: (J)Z + */ +JNIEXPORT jboolean JNICALL Java_cvc5_Stat_isString(JNIEnv* env, + jobject, + jlong pointer) +{ + CVC5_JAVA_API_TRY_CATCH_BEGIN; + Stat* current = reinterpret_cast<Stat*>(pointer); + return static_cast<jboolean>(current->isString()); + CVC5_JAVA_API_TRY_CATCH_END_RETURN(env, static_cast<jboolean>(false)); +} + +/* + * Class: cvc5_Stat + * Method: getString + * Signature: (J)Ljava/lang/String; + */ +JNIEXPORT jstring JNICALL Java_cvc5_Stat_getString(JNIEnv* env, + jobject, + jlong pointer) +{ + CVC5_JAVA_API_TRY_CATCH_BEGIN; + Stat* current = reinterpret_cast<Stat*>(pointer); + return env->NewStringUTF(current->getString().c_str()); + CVC5_JAVA_API_TRY_CATCH_END_RETURN(env, nullptr); +} + +/* + * Class: cvc5_Stat + * Method: isHistogram + * Signature: (J)Z + */ +JNIEXPORT jboolean JNICALL Java_cvc5_Stat_isHistogram(JNIEnv* env, + jobject, + jlong pointer) +{ + CVC5_JAVA_API_TRY_CATCH_BEGIN; + Stat* current = reinterpret_cast<Stat*>(pointer); + return static_cast<jboolean>(current->isHistogram()); + CVC5_JAVA_API_TRY_CATCH_END_RETURN(env, static_cast<jboolean>(false)); +} + +/* + * Class: cvc5_Stat + * Method: getHistogram + * Signature: (J)Ljava/util/Map; + */ +JNIEXPORT jobject JNICALL Java_cvc5_Stat_getHistogram(JNIEnv* env, + jobject, + jlong pointer) +{ + CVC5_JAVA_API_TRY_CATCH_BEGIN; + Stat* current = reinterpret_cast<Stat*>(pointer); + std::map<std::string, uint64_t> histogram = current->getHistogram(); + // HashMap hashMap = new HashMap(); + jclass hashMapClass = env->FindClass("Ljava/util/HashMap;"); + jmethodID constructor = env->GetMethodID(hashMapClass, "<init>", "()V"); + jobject hashMap = env->NewObject(hashMapClass, constructor); + jmethodID putMethod = env->GetMethodID( + hashMapClass, + "put", + "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"); + + // Long longObject = new Long(statPointer) + jclass longClass = env->FindClass("Ljava/lang/Long;"); + jmethodID longConstructor = env->GetMethodID(longClass, "<init>", "(J)V"); + + for (const std::pair<const std::basic_string<char>, uint64_t>& it : histogram) + { + // hashmap.put(key, value); + jstring key = env->NewStringUTF(it.first.c_str()); + jobject value = env->NewObject( + longClass, longConstructor, static_cast<jlong>(it.second)); + env->CallObjectMethod(hashMap, putMethod, key, value); + } + return hashMap; + CVC5_JAVA_API_TRY_CATCH_END_RETURN(env, nullptr); +} |