liba 0.1.15

An algorithm library based on C/C++
Documentation
#include "a.h"
#include "a/version.h"
#include "liba_version.h"

#undef L
#define L Java_liba_version
static struct
{
    jmethodID New;
    jfieldID ctx;
} L = {NULL, NULL};

JNIEXPORT void JNICALL Java_liba_version_clinit(JNIEnv *Env, jclass Cls)
{
    jclass Nbb = (*Env)->FindClass(Env, "Ljava/nio/ByteBuffer;");
    L.New = (*Env)->GetStaticMethodID(Env, Nbb, "allocateDirect", "(I)Ljava/nio/ByteBuffer;");
    L.ctx = (*Env)->GetFieldID(Env, Cls, "ctx", "Ljava/nio/ByteBuffer;");
    (*Env)->SetStaticIntField(Env, Cls, (*Env)->GetStaticFieldID(Env, Cls, "MAJOR", "I"), A_VERSION_MAJOR);
    (*Env)->SetStaticIntField(Env, Cls, (*Env)->GetStaticFieldID(Env, Cls, "MINOR", "I"), A_VERSION_MINOR);
    (*Env)->SetStaticIntField(Env, Cls, (*Env)->GetStaticFieldID(Env, Cls, "PATCH", "I"), A_VERSION_PATCH);
    (*Env)->SetStaticIntField(Env, Cls, (*Env)->GetStaticFieldID(Env, Cls, "TWEAK", "I"), A_VERSION_TWEAK);
}

JNIEXPORT void JNICALL Java_liba_version_init__Ljava_lang_String_2(JNIEnv *Env, jobject Obj, jstring Ver)
{
    jobject Ctx = (*Env)->CallObjectMethod(Env, Obj, L.New, (jint)sizeof(a_version));
    a_version *ctx = (a_version *)(*Env)->GetDirectBufferAddress(Env, Ctx);
    char const *ver = (*Env)->GetStringUTFChars(Env, Ver, NULL);
    ctx->alpha_[0] = '.';
    a_version_parse(ctx, ver);
    (*Env)->ReleaseStringUTFChars(Env, Ver, ver);
}

JNIEXPORT void JNICALL Java_liba_version_init__IIII(JNIEnv *Env, jobject Obj, jint major, jint minor, jint third, jint extra)
{
    jobject Ctx = (*Env)->CallObjectMethod(Env, Obj, L.New, (jint)sizeof(a_version));
    a_version *ctx = (a_version *)(*Env)->GetDirectBufferAddress(Env, Ctx);
    (*Env)->SetObjectField(Env, Obj, L.ctx, Ctx);
    ctx->major = (unsigned int)major;
    ctx->minor = (unsigned int)minor;
    ctx->third = (unsigned int)third;
    ctx->extra = (unsigned int)extra;
    ctx->alpha_[0] = '.';
}

JNIEXPORT jint JNICALL Java_liba_version_check(JNIEnv *Env, jclass Cls, jint major, jint minor, jint patch)
{
    return (void)Env, (void)Cls, a_version_check((unsigned int)major, (unsigned int)minor, (unsigned int)patch);
}

JNIEXPORT jstring JNICALL Java_liba_version_toString(JNIEnv *Env, jobject Obj)
{
    char str[48];
    jobject Ctx = (*Env)->GetObjectField(Env, Obj, L.ctx);
    a_version *ctx = (a_version *)(*Env)->GetDirectBufferAddress(Env, Ctx);
    a_version_tostr(ctx, str, sizeof(str));
    return (*Env)->NewStringUTF(Env, str);
}

JNIEXPORT jint JNICALL Java_liba_version_major(JNIEnv *Env, jobject Obj)
{
    jobject Ctx = (*Env)->GetObjectField(Env, Obj, L.ctx);
    a_version *ctx = (a_version *)(*Env)->GetDirectBufferAddress(Env, Ctx);
    return (jint)ctx->major;
}

JNIEXPORT jobject JNICALL Java_liba_version_set_1major(JNIEnv *Env, jobject Obj, jint major)
{
    jobject Ctx = (*Env)->GetObjectField(Env, Obj, L.ctx);
    a_version *ctx = (a_version *)(*Env)->GetDirectBufferAddress(Env, Ctx);
    ctx->major = (unsigned int)major;
    return Obj;
}

JNIEXPORT jint JNICALL Java_liba_version_minor(JNIEnv *Env, jobject Obj)
{
    jobject Ctx = (*Env)->GetObjectField(Env, Obj, L.ctx);
    a_version *ctx = (a_version *)(*Env)->GetDirectBufferAddress(Env, Ctx);
    return (jint)ctx->minor;
}

JNIEXPORT jobject JNICALL Java_liba_version_set_1minor(JNIEnv *Env, jobject Obj, jint minor)
{
    jobject Ctx = (*Env)->GetObjectField(Env, Obj, L.ctx);
    a_version *ctx = (a_version *)(*Env)->GetDirectBufferAddress(Env, Ctx);
    ctx->minor = (unsigned int)minor;
    return Obj;
}

JNIEXPORT jint JNICALL Java_liba_version_third(JNIEnv *Env, jobject Obj)
{
    jobject Ctx = (*Env)->GetObjectField(Env, Obj, L.ctx);
    a_version *ctx = (a_version *)(*Env)->GetDirectBufferAddress(Env, Ctx);
    return (jint)ctx->third;
}

JNIEXPORT jobject JNICALL Java_liba_version_set_1third(JNIEnv *Env, jobject Obj, jint third)
{
    jobject Ctx = (*Env)->GetObjectField(Env, Obj, L.ctx);
    a_version *ctx = (a_version *)(*Env)->GetDirectBufferAddress(Env, Ctx);
    ctx->third = (unsigned int)third;
    return Obj;
}

JNIEXPORT jint JNICALL Java_liba_version_extra(JNIEnv *Env, jobject Obj)
{
    jobject Ctx = (*Env)->GetObjectField(Env, Obj, L.ctx);
    a_version *ctx = (a_version *)(*Env)->GetDirectBufferAddress(Env, Ctx);
    return (jint)ctx->extra;
}

JNIEXPORT jobject JNICALL Java_liba_version_set_1extra(JNIEnv *Env, jobject Obj, jint extra)
{
    jobject Ctx = (*Env)->GetObjectField(Env, Obj, L.ctx);
    a_version *ctx = (a_version *)(*Env)->GetDirectBufferAddress(Env, Ctx);
    ctx->extra = (unsigned int)extra;
    return Obj;
}

JNIEXPORT jstring JNICALL Java_liba_version_alpha(JNIEnv *Env, jobject Obj)
{
    jobject Ctx = (*Env)->GetObjectField(Env, Obj, L.ctx);
    a_version *ctx = (a_version *)(*Env)->GetDirectBufferAddress(Env, Ctx);
    char alpha[sizeof(ctx->alpha_) + 1];
    a_version_alpha(ctx, alpha);
    return (*Env)->NewStringUTF(Env, alpha);
}

JNIEXPORT jobject JNICALL Java_liba_version_set_1alpha(JNIEnv *Env, jobject Obj, jstring Alpha)
{
    jobject Ctx = (*Env)->GetObjectField(Env, Obj, L.ctx);
    a_version *ctx = (a_version *)(*Env)->GetDirectBufferAddress(Env, Ctx);
    char const *alpha = (*Env)->GetStringUTFChars(Env, Alpha, 0);
    a_version_set_alpha(ctx, alpha);
    (*Env)->ReleaseStringUTFChars(Env, Alpha, alpha);
    return Obj;
}

JNIEXPORT jobject JNICALL Java_liba_version_parse(JNIEnv *Env, jobject Obj, jstring Ver)
{
    jobject Ctx = (*Env)->GetObjectField(Env, Obj, L.ctx);
    a_version *ctx = (a_version *)(*Env)->GetDirectBufferAddress(Env, Ctx);
    char const *ver = (*Env)->GetStringUTFChars(Env, Ver, NULL);
    a_version_parse(ctx, ver);
    (*Env)->ReleaseStringUTFChars(Env, Ver, ver);
    return Obj;
}

JNIEXPORT jboolean JNICALL Java_liba_version_lt(JNIEnv *Env, jobject Obj, jobject Ver)
{
    jobject Ctx = (*Env)->GetObjectField(Env, Obj, L.ctx);
    jobject Rhs = (*Env)->GetObjectField(Env, Ver, L.ctx);
    a_version *ctx = (a_version *)(*Env)->GetDirectBufferAddress(Env, Ctx);
    a_version *rhs = (a_version *)(*Env)->GetDirectBufferAddress(Env, Rhs);
    return a_version_lt(ctx, rhs);
}

JNIEXPORT jboolean JNICALL Java_liba_version_gt(JNIEnv *Env, jobject Obj, jobject Ver)
{
    jobject Ctx = (*Env)->GetObjectField(Env, Obj, L.ctx);
    jobject Rhs = (*Env)->GetObjectField(Env, Ver, L.ctx);
    a_version *ctx = (a_version *)(*Env)->GetDirectBufferAddress(Env, Ctx);
    a_version *rhs = (a_version *)(*Env)->GetDirectBufferAddress(Env, Rhs);
    return a_version_gt(ctx, rhs);
}

JNIEXPORT jboolean JNICALL Java_liba_version_le(JNIEnv *Env, jobject Obj, jobject Ver)
{
    jobject Ctx = (*Env)->GetObjectField(Env, Obj, L.ctx);
    jobject Rhs = (*Env)->GetObjectField(Env, Ver, L.ctx);
    a_version *ctx = (a_version *)(*Env)->GetDirectBufferAddress(Env, Ctx);
    a_version *rhs = (a_version *)(*Env)->GetDirectBufferAddress(Env, Rhs);
    return a_version_le(ctx, rhs);
}

JNIEXPORT jboolean JNICALL Java_liba_version_ge(JNIEnv *Env, jobject Obj, jobject Ver)
{
    jobject Ctx = (*Env)->GetObjectField(Env, Obj, L.ctx);
    jobject Rhs = (*Env)->GetObjectField(Env, Ver, L.ctx);
    a_version *ctx = (a_version *)(*Env)->GetDirectBufferAddress(Env, Ctx);
    a_version *rhs = (a_version *)(*Env)->GetDirectBufferAddress(Env, Rhs);
    return a_version_ge(ctx, rhs);
}

JNIEXPORT jboolean JNICALL Java_liba_version_eq(JNIEnv *Env, jobject Obj, jobject Ver)
{
    jobject Ctx = (*Env)->GetObjectField(Env, Obj, L.ctx);
    jobject Rhs = (*Env)->GetObjectField(Env, Ver, L.ctx);
    a_version *ctx = (a_version *)(*Env)->GetDirectBufferAddress(Env, Ctx);
    a_version *rhs = (a_version *)(*Env)->GetDirectBufferAddress(Env, Rhs);
    return a_version_eq(ctx, rhs);
}

JNIEXPORT jboolean JNICALL Java_liba_version_ne(JNIEnv *Env, jobject Obj, jobject Ver)
{
    jobject Ctx = (*Env)->GetObjectField(Env, Obj, L.ctx);
    jobject Rhs = (*Env)->GetObjectField(Env, Ver, L.ctx);
    a_version *ctx = (a_version *)(*Env)->GetDirectBufferAddress(Env, Ctx);
    a_version *rhs = (a_version *)(*Env)->GetDirectBufferAddress(Env, Rhs);
    return a_version_ne(ctx, rhs);
}

JNIEXPORT jint JNICALL Java_liba_version_cmp(JNIEnv *Env, jobject Obj, jobject Ver)
{
    jobject Ctx = (*Env)->GetObjectField(Env, Obj, L.ctx);
    jobject Rhs = (*Env)->GetObjectField(Env, Ver, L.ctx);
    a_version *ctx = (a_version *)(*Env)->GetDirectBufferAddress(Env, Ctx);
    a_version *rhs = (a_version *)(*Env)->GetDirectBufferAddress(Env, Rhs);
    return a_version_cmp(ctx, rhs);
}