6 #define L Java_liba_crc8
13 JNIEXPORT
void JNICALL
Java_liba_crc8_clinit(JNIEnv
*_env
, jclass _cls
)
15 jclass _nbb
= (*_env
)->FindClass(_env
, "Ljava/nio/ByteBuffer;");
16 L
._new
= (*_env
)->GetStaticMethodID(_env
, _nbb
, "allocateDirect", "(I)Ljava/nio/ByteBuffer;");
17 L
.ctx
= (*_env
)->GetFieldID(_env
, _cls
, "ctx", "Ljava/nio/ByteBuffer;");
25 JNIEXPORT
void JNICALL
Java_liba_crc8_init(JNIEnv
*_env
, jobject _obj
, jbyte poly
, jboolean reversed
)
27 jobject _ctx
= (*_env
)->CallObjectMethod(_env
, _obj
, L
._new
, (jint
)sizeof(struct crc8
));
28 struct crc8
*ctx
= (struct crc8
*)(*_env
)->GetDirectBufferAddress(_env
, _ctx
);
29 (*_env
)->SetObjectField(_env
, _obj
, L
.ctx
, _ctx
);
30 reversed
? a_crc8l_init(ctx
->table
, (a_u8
)poly
)
31 : a_crc8m_init(ctx
->table
, (a_u8
)poly
);
34 JNIEXPORT jbyteArray JNICALL
Java_liba_crc8_table(JNIEnv
*_env
, jobject _obj
)
36 jobject _ctx
= (*_env
)->GetObjectField(_env
, _obj
, L
.ctx
);
37 struct crc8
*ctx
= (struct crc8
*)(*_env
)->GetDirectBufferAddress(_env
, _ctx
);
38 jbyteArray table
= (*_env
)->NewByteArray(_env
, A_LEN(ctx
->table
));
39 (*_env
)->SetByteArrayRegion(_env
, table
, 0, A_LEN(ctx
->table
), (jbyte
*)ctx
->table
);
43 JNIEXPORT jobject JNICALL
Java_liba_crc8_gen(JNIEnv
*_env
, jobject _obj
, jbyte poly
, jboolean reversed
)
45 jobject _ctx
= (*_env
)->GetObjectField(_env
, _obj
, L
.ctx
);
46 struct crc8
*ctx
= (struct crc8
*)(*_env
)->GetDirectBufferAddress(_env
, _ctx
);
47 reversed
? a_crc8l_init(ctx
->table
, (a_u8
)poly
)
48 : a_crc8m_init(ctx
->table
, (a_u8
)poly
);
52 JNIEXPORT jbyte JNICALL
Java_liba_crc8_eval(JNIEnv
*_env
, jobject _obj
, jbyteArray block
, jbyte value
)
54 jobject _ctx
= (*_env
)->GetObjectField(_env
, _obj
, L
.ctx
);
55 struct crc8
*ctx
= (struct crc8
*)(*_env
)->GetDirectBufferAddress(_env
, _ctx
);
56 jsize n
= (*_env
)->GetArrayLength(_env
, block
);
57 jbyte
*p
= (*_env
)->GetByteArrayElements(_env
, block
, NULL
);
58 value
= (jbyte
)a_crc8(ctx
->table
, p
, (a_size
)n
, (a_u8
)value
);
59 (*_env
)->ReleaseByteArrayElements(_env
, block
, p
, JNI_ABORT
);
63 JNIEXPORT jbyteArray JNICALL
Java_liba_crc8_pack(JNIEnv
*_env
, jobject _obj
, jbyteArray block
, jbyte value
)
65 jobject _ctx
= (*_env
)->GetObjectField(_env
, _obj
, L
.ctx
);
66 struct crc8
*ctx
= (struct crc8
*)(*_env
)->GetDirectBufferAddress(_env
, _ctx
);
67 jsize block_n
= (*_env
)->GetArrayLength(_env
, block
);
68 jbyteArray res
= (*_env
)->NewByteArray(_env
, block_n
+ 1);
69 jbyte
*block_p
= (*_env
)->GetByteArrayElements(_env
, block
, NULL
);
70 value
= (jbyte
)a_crc8(ctx
->table
, block_p
, (a_size
)block_n
, (a_u8
)value
);
71 (*_env
)->SetByteArrayRegion(_env
, res
, 0, block_n
, block_p
);
72 (*_env
)->ReleaseByteArrayElements(_env
, block
, block_p
, JNI_ABORT
);
73 (*_env
)->SetByteArrayRegion(_env
, res
, block_n
, 1, &value
);