/*
 * Class:     ai_madara_knowledge_Variables
 * Method:    jni_evaluate
 * Signature: (JJJ)J
 */
jlong JNICALL Java_ai_madara_knowledge_Variables_jni_1evaluate__JJJ(
    JNIEnv* env, jobject, jlong cptr, jlong expression, jlong evalSettings)
{
  KnowledgeRecord* result(0);
  Variables* vars = (Variables*)cptr;
  CompiledExpression* compiled = (CompiledExpression*)expression;
  EvalSettings* settings = (EvalSettings*)evalSettings;

  if (vars && compiled && settings)
  {
    result = new KnowledgeRecord(vars->evaluate(*compiled, *settings));
  }
  else
  {
    // user has tried to use a deleted object. Clean up and throw

    madara::utility::java::throw_dead_obj_exception(env,
        "Variables::evaluate: "
        "Variables, CompiledExpression, or EvalSettings objects"
        " are released already");
  }

  return (jlong)result;
}