15dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak/* 25dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak * Copyright (c) 1999, 2000, Oracle and/or its affiliates. All rights reserved. 35dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 45dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak * 55dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak * This code is free software; you can redistribute it and/or modify it 65dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak * under the terms of the GNU General Public License version 2 only, as 75dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak * published by the Free Software Foundation. Oracle designates this 85dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak * particular file as subject to the "Classpath" exception as provided 95dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak * by Oracle in the LICENSE file that accompanied this code. 105dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak * 115dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak * This code is distributed in the hope that it will be useful, but WITHOUT 125dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 135dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 145dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak * version 2 for more details (a copy is included in the LICENSE file that 155dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak * accompanied this code). 165dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak * 175dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak * You should have received a copy of the GNU General Public License version 185dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak * 2 along with this work; if not, write to the Free Software Foundation, 195dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 205dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak * 215dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 225dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak * or visit www.oracle.com if you need additional information or have any 235dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak * questions. 245dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak */ 255dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak 265dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak#include "jni.h" 275dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak#include "jvm.h" 285dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak#include "jni_util.h" 295dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak#include "jlong.h" 305dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak 31cab01ac294bb8ded259851673baa4c6ca226f828Steven Moreland#include <nativehelper/JNIHelp.h> 3209d3f41f4a3098ba355ee1e25a937d49e38b8fa8Narayan Kamath 3309d3f41f4a3098ba355ee1e25a937d49e38b8fa8Narayan Kamath#define NATIVE_METHOD(className, functionName, signature) \ 3409d3f41f4a3098ba355ee1e25a937d49e38b8fa8Narayan Kamath{ #functionName, signature, (void*)(Java_java_io_ ## className ## _ ## functionName) } 3509d3f41f4a3098ba355ee1e25a937d49e38b8fa8Narayan Kamath 365dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak 375dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak/* 385dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak * Class: java_io_ObjectOutputStream 395dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak * Method: floatsToBytes 405dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak * Signature: ([FI[BII)V 415dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak * 425dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak * Convert nfloats float values to their byte representations. Float values 435dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak * are read from array src starting at offset srcpos and written to array 445dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak * dst starting at offset dstpos. 455dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak */ 465dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw SzczepaniakJNIEXPORT void JNICALL 475dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw SzczepaniakJava_java_io_ObjectOutputStream_floatsToBytes(JNIEnv *env, 485dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak jclass this, 495dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak jfloatArray src, 505dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak jint srcpos, 515dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak jbyteArray dst, 525dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak jint dstpos, 535dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak jint nfloats) 545dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak{ 555dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak union { 565dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak int i; 575dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak float f; 585dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak } u; 595dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak jfloat *floats; 605dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak jbyte *bytes; 615dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak jsize srcend; 625dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak jint ival; 635dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak float fval; 645dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak 655dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak if (nfloats == 0) 665dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak return; 675dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak 685dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak /* fetch source array */ 695dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak if (src == NULL) { 705dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak JNU_ThrowNullPointerException(env, NULL); 715dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak return; 725dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak } 735dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak floats = (*env)->GetPrimitiveArrayCritical(env, src, NULL); 745dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak if (floats == NULL) /* exception thrown */ 755dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak return; 765dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak 775dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak /* fetch dest array */ 785dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak if (dst == NULL) { 795dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak (*env)->ReleasePrimitiveArrayCritical(env, src, floats, JNI_ABORT); 805dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak JNU_ThrowNullPointerException(env, NULL); 815dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak return; 825dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak } 835dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak bytes = (*env)->GetPrimitiveArrayCritical(env, dst, NULL); 845dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak if (bytes == NULL) { /* exception thrown */ 855dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak (*env)->ReleasePrimitiveArrayCritical(env, src, floats, JNI_ABORT); 865dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak return; 875dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak } 885dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak 895dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak /* do conversion */ 905dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak srcend = srcpos + nfloats; 915dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak for ( ; srcpos < srcend; srcpos++) { 925dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak fval = (float) floats[srcpos]; 935dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak if (JVM_IsNaN(fval)) { /* collapse NaNs */ 945dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak ival = 0x7fc00000; 955dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak } else { 965dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak u.f = fval; 975dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak ival = (jint) u.i; 985dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak } 995dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak bytes[dstpos++] = (ival >> 24) & 0xFF; 1005dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak bytes[dstpos++] = (ival >> 16) & 0xFF; 1015dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak bytes[dstpos++] = (ival >> 8) & 0xFF; 1025dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak bytes[dstpos++] = (ival >> 0) & 0xFF; 1035dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak } 1045dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak 1055dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak (*env)->ReleasePrimitiveArrayCritical(env, src, floats, JNI_ABORT); 1065dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak (*env)->ReleasePrimitiveArrayCritical(env, dst, bytes, 0); 1075dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak} 1085dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak 1095dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak/* 1105dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak * Class: java_io_ObjectOutputStream 1115dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak * Method: doublesToBytes 1125dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak * Signature: ([DI[BII)V 1135dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak * 1145dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak * Convert ndoubles double values to their byte representations. Double 1155dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak * values are read from array src starting at offset srcpos and written to 1165dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak * array dst starting at offset dstpos. 1175dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak */ 1185dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw SzczepaniakJNIEXPORT void JNICALL 1195dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw SzczepaniakJava_java_io_ObjectOutputStream_doublesToBytes(JNIEnv *env, 1205dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak jclass this, 1215dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak jdoubleArray src, 1225dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak jint srcpos, 1235dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak jbyteArray dst, 1245dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak jint dstpos, 1255dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak jint ndoubles) 1265dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak{ 1275dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak union { 1285dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak jlong l; 1295dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak double d; 1305dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak } u; 1315dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak jdouble *doubles; 1325dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak jbyte *bytes; 1335dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak jsize srcend; 1345dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak jdouble dval; 1355dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak jlong lval; 1365dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak 1375dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak if (ndoubles == 0) 1385dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak return; 1395dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak 1405dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak /* fetch source array */ 1415dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak if (src == NULL) { 1425dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak JNU_ThrowNullPointerException(env, NULL); 1435dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak return; 1445dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak } 1455dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak doubles = (*env)->GetPrimitiveArrayCritical(env, src, NULL); 1465dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak if (doubles == NULL) /* exception thrown */ 1475dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak return; 1485dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak 1495dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak /* fetch dest array */ 1505dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak if (dst == NULL) { 1515dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak (*env)->ReleasePrimitiveArrayCritical(env, src, doubles, JNI_ABORT); 1525dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak JNU_ThrowNullPointerException(env, NULL); 1535dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak return; 1545dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak } 1555dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak bytes = (*env)->GetPrimitiveArrayCritical(env, dst, NULL); 1565dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak if (bytes == NULL) { /* exception thrown */ 1575dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak (*env)->ReleasePrimitiveArrayCritical(env, src, doubles, JNI_ABORT); 1585dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak return; 1595dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak } 1605dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak 1615dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak /* do conversion */ 1625dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak srcend = srcpos + ndoubles; 1635dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak for ( ; srcpos < srcend; srcpos++) { 1645dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak dval = doubles[srcpos]; 1655dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak if (JVM_IsNaN((double) dval)) { /* collapse NaNs */ 1665dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak lval = jint_to_jlong(0x7ff80000); 1675dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak lval = jlong_shl(lval, 32); 1685dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak } else { 1695dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak jdouble_to_jlong_bits(&dval); 1705dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak u.d = (double) dval; 1715dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak lval = u.l; 1725dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak } 1735dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak bytes[dstpos++] = (lval >> 56) & 0xFF; 1745dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak bytes[dstpos++] = (lval >> 48) & 0xFF; 1755dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak bytes[dstpos++] = (lval >> 40) & 0xFF; 1765dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak bytes[dstpos++] = (lval >> 32) & 0xFF; 1775dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak bytes[dstpos++] = (lval >> 24) & 0xFF; 1785dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak bytes[dstpos++] = (lval >> 16) & 0xFF; 1795dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak bytes[dstpos++] = (lval >> 8) & 0xFF; 1805dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak bytes[dstpos++] = (lval >> 0) & 0xFF; 1815dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak } 1825dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak 1835dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak (*env)->ReleasePrimitiveArrayCritical(env, src, doubles, JNI_ABORT); 1845dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak (*env)->ReleasePrimitiveArrayCritical(env, dst, bytes, 0); 1855dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak} 18609d3f41f4a3098ba355ee1e25a937d49e38b8fa8Narayan Kamath 18709d3f41f4a3098ba355ee1e25a937d49e38b8fa8Narayan Kamathstatic JNINativeMethod gMethods[] = { 18809d3f41f4a3098ba355ee1e25a937d49e38b8fa8Narayan Kamath NATIVE_METHOD(ObjectOutputStream, floatsToBytes, "([FI[BII)V"), 18909d3f41f4a3098ba355ee1e25a937d49e38b8fa8Narayan Kamath NATIVE_METHOD(ObjectOutputStream, doublesToBytes, "([DI[BII)V"), 19009d3f41f4a3098ba355ee1e25a937d49e38b8fa8Narayan Kamath}; 19109d3f41f4a3098ba355ee1e25a937d49e38b8fa8Narayan Kamath 19209d3f41f4a3098ba355ee1e25a937d49e38b8fa8Narayan Kamathvoid register_java_io_ObjectOutputStream(JNIEnv* env) { 19309d3f41f4a3098ba355ee1e25a937d49e38b8fa8Narayan Kamath jniRegisterNativeMethods(env, "java/io/ObjectOutputStream", gMethods, NELEM(gMethods)); 19409d3f41f4a3098ba355ee1e25a937d49e38b8fa8Narayan Kamath} 195