Volker Birk 10 years ago
parent
commit
47d87ed4e6
  1. 59
      src/gen_cpp_Message.ysl2
  2. 15
      src/gen_java_Message.ysl2
  3. 7
      src/types_c.ysl2

59
src/gen_cpp_Message.ysl2

@ -7,17 +7,53 @@ tstylesheet {
template "struct" {
const "jname" call "CamelCase" with "text", "@name";
document("org_pEp_jniadapter_{$jname}.cc", "text")
||
#include <exception>
#include <stdint.h>
#include <assert.h>
#include <pEp/«@name».h>
#include "jniutils.hh"
#include "org_pEp_jniadapter_«$jname».h"
`` apply "*[name(.)!='enum']", mode=entry with "class" call "CamelCase" with "text", "@name";
using namespace pEp::JNIAdapter;
JNIEXPORT jlong JNICALL
Java_org_pEp_jniadapter_«$jname»_init(JNIEnv *env, jobject obj) {
::«@name» * _obj = ::new_«@name»(PEP_dir_incoming);
// BUG: test for out of memory missing
return (jlong) (int64_t) (intptr_t) _obj;
}
JNIEXPORT void JNICALL
Java_org_pEp_jniadapter_«$jname»_release(JNIEnv *env, jobject obj, jlong value) {
::«@name» *_obj = (::«@name» *) (intptr_t) (int64_t) value;
::free_«@name»(_obj);
}
static ::message *ptr(JNIEnv *env, jobject me) {
jfieldID handle;
try {
handle = getFieldID(env, "org/pEp/jniadapter/«$jname»", "handle", "J");
}
catch (std::exception& ex) {
assert(0);
return NULL;
}
return (::«@name» *) (intptr_t) (int64_t) env->GetLongField(me, handle);
}
`` apply "*[name(.)!='enum']", 0, mode=entry with "class" call "CamelCase" with "text", "@name";
||
}
template "interface" {
const "jname" call "CamelCase" with "text", "@name";
document("org_pEp_jniadapter_{$jname}.cc", "text")
||
#include "org_pEp_jniadapter_«$jname».h"
@ -27,11 +63,28 @@ tstylesheet {
template "*", mode=entry {
param "class";
const "_class" call "lcase" with "text", "$class";
const "ctype" call "toC" with "type", "name(.)";
const "jname" call "CamelCase" with "text", "name(*[1])";
const "cname" call "lcase" with "text", "name(*[1])";
||
JNIEXPORT jobject JNICALL Java_org_pEp_jniadapter_«$class»_getDir(JNIEnv *env, jobject obj) {
JNIEXPORT jobject JNICALL
Java_org_pEp_jniadapter_«$class»_get«$jname»(JNIEnv *env, jobject obj) {
«$_class» *_obj = ptr(env, obj);
jobject result = NULL;
_obj->«$cname»;
return result;
}
JNIEXPORT void JNICALL
Java_org_pEp_jniadapter_Message_set«$jname»(JNIEnv *env, jobject obj, jobject value) {
«$_class» *_obj = ptr(env, obj);
«$ctype» *_value;
_obj->«$cname»;
}
||
}
}

15
src/gen_java_Message.ysl2

@ -33,7 +33,20 @@ tstylesheet {
import java.util.Date;
import java.util.HashMap;
public class «$cname» {
public class «$cname» implements AutoCloseable {
private final long handle;
native long init();
native void release(long handle);
public «$cname»() {
handle = init();
}
public final void close() {
release(handle);
}
`` apply "enum", mode=inner
`` apply "*[name(.)!='enum']", mode=entry
}

7
src/types_c.ysl2

@ -5,13 +5,14 @@ function "toC" {
choose {
when "$type='stringlist'" > stringlist_t
when "$type='string'" > char *
when "$type='string'" > char
when "$type='identity'" > pEp_identity
when "$type='identitylist'" > identity_list_t
when "$type='identitylist'" > identity_list
when "$type='timestamp'" > timestamp
when "$type='EncFormat'" > PEP_enc_format
when "$type='bloblist'" > bloblist_t
when "$type='stringpairlist'" > stringpairlist_t
when "$type='stringpairlist'" > stringpair_list_t
when "$type='direction'" > PEP_direction
otherwise value "$type";
}

Loading…
Cancel
Save