145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams/* 245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * Copyright (C) 2012 The Android Open Source Project 345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * 445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * you may not use this file except in compliance with the License. 645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * You may obtain a copy of the License at 745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * 845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * http://www.apache.org/licenses/LICENSE-2.0 945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * 1045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * Unless required by applicable law or agreed to in writing, software 1145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * distributed under the License is distributed on an "AS IS" BASIS, 1245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * See the License for the specific language governing permissions and 1445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * limitations under the License. 1545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams */ 1645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 1745d443665f5ce7efa934706a89883f0cc87f3513Jason Samspackage android.support.v8.renderscript; 1845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 19257cecb5e24c9af71ba4d621887e88e46b0ac411Stephen Hinesimport android.support.v8.renderscript.RenderScript; 20bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wangimport java.util.BitSet; 2145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 2245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams/** 2345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * Utility class for packing arguments and structures from Android system objects to 24032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * RenderScript objects. 25032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * 26032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * This class is only intended to be used to support the 27032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * reflected code generated by the RS tool chain. It should not 28032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * be called directly. 2945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * 3045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams **/ 3145d443665f5ce7efa934706a89883f0cc87f3513Jason Samspublic class FieldPacker { 3245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public FieldPacker(int len) { 3345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mPos = 0; 3445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mLen = len; 3545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mData = new byte[len]; 36bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang mAlignment = new BitSet(); 3745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 3845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 398352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang public FieldPacker(byte[] data) { 408352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang // Advance mPos to the end of the buffer, since we are copying in the 418352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang // full data input. 428352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang mPos = data.length; 438352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang mLen = data.length; 448352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang mData = data; 458352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang mAlignment = new BitSet(); 468352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang // TODO: We should either have an actual FieldPacker copy constructor 478352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang // or drop support for computing alignment like this. As it stands, 488352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang // subAlign() can never work correctly for copied FieldPacker objects. 498352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 508352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 51f90ba2cc2cbb5a5dbcfaa97f2ee6f0c6a74a78a5Miao Wang static FieldPacker createFromArray(Object[] args) { 52f90ba2cc2cbb5a5dbcfaa97f2ee6f0c6a74a78a5Miao Wang FieldPacker fp = new FieldPacker(RenderScript.sPointerSize * 8); 53f90ba2cc2cbb5a5dbcfaa97f2ee6f0c6a74a78a5Miao Wang for (Object arg : args) { 54f90ba2cc2cbb5a5dbcfaa97f2ee6f0c6a74a78a5Miao Wang fp.addSafely(arg); 55f90ba2cc2cbb5a5dbcfaa97f2ee6f0c6a74a78a5Miao Wang } 56f90ba2cc2cbb5a5dbcfaa97f2ee6f0c6a74a78a5Miao Wang fp.resize(fp.mPos); 57f90ba2cc2cbb5a5dbcfaa97f2ee6f0c6a74a78a5Miao Wang return fp; 58f90ba2cc2cbb5a5dbcfaa97f2ee6f0c6a74a78a5Miao Wang } 59f90ba2cc2cbb5a5dbcfaa97f2ee6f0c6a74a78a5Miao Wang 6045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public void align(int v) { 6145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if ((v <= 0) || ((v & (v - 1)) != 0)) { 6245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams throw new RSIllegalArgumentException("argument must be a non-negative non-zero power of 2: " + v); 6345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 6445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 6545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams while ((mPos & (v - 1)) != 0) { 66bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang mAlignment.flip(mPos); 6745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mData[mPos++] = 0; 6845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 6945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 7045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 718352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang public void subalign(int v) { 728352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang if ((v & (v - 1)) != 0) { 738352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang throw new RSIllegalArgumentException("argument must be a non-negative non-zero power of 2: " + v); 748352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 758352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 768352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang while ((mPos & (v - 1)) != 0) { 778352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang mPos--; 788352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 798352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 808352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang if (mPos > 0) { 818352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang while (mAlignment.get(mPos - 1) == true) { 828352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang mPos--; 838352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang mAlignment.flip(mPos); 848352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 858352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 868352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 878352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 888352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 8945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public void reset() { 9045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mPos = 0; 9145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 9245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public void reset(int i) { 938352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang if ((i < 0) || (i > mLen)) { 9445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams throw new RSIllegalArgumentException("out of range argument: " + i); 9545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 9645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mPos = i; 9745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 9845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 9945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public void skip(int i) { 10045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams int res = mPos + i; 10145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if ((res < 0) || (res > mLen)) { 10245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams throw new RSIllegalArgumentException("out of range argument: " + i); 10345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 10445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mPos = res; 10545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 10645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 10745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public void addI8(byte v) { 10845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mData[mPos++] = v; 10945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 11045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 1118352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang public byte subI8() { 1128352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang subalign(1); 1138352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return mData[--mPos]; 1148352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 1158352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 11645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public void addI16(short v) { 11745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams align(2); 11845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mData[mPos++] = (byte)(v & 0xff); 11945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mData[mPos++] = (byte)(v >> 8); 12045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 12145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 1228352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang public short subI16() { 1238352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang subalign(2); 1248352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang short v = 0; 1258352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang v = (short)((mData[--mPos] & 0xff) << 8); 1268352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang v = (short)(v | (short)(mData[--mPos] & 0xff)); 1278352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return v; 1288352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 1298352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 1308352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 13145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public void addI32(int v) { 13245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams align(4); 13345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mData[mPos++] = (byte)(v & 0xff); 13445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mData[mPos++] = (byte)((v >> 8) & 0xff); 13545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mData[mPos++] = (byte)((v >> 16) & 0xff); 13645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mData[mPos++] = (byte)((v >> 24) & 0xff); 13745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 13845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 1398352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang public int subI32() { 1408352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang subalign(4); 1418352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang int v = 0; 1428352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang v = ((mData[--mPos] & 0xff) << 24); 1438352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang v = v | ((mData[--mPos] & 0xff) << 16); 1448352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang v = v | ((mData[--mPos] & 0xff) << 8); 1458352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang v = v | ((mData[--mPos] & 0xff)); 1468352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return v; 1478352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 1488352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 1498352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 15045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public void addI64(long v) { 15145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams align(8); 15245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mData[mPos++] = (byte)(v & 0xff); 15345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mData[mPos++] = (byte)((v >> 8) & 0xff); 15445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mData[mPos++] = (byte)((v >> 16) & 0xff); 15545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mData[mPos++] = (byte)((v >> 24) & 0xff); 15645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mData[mPos++] = (byte)((v >> 32) & 0xff); 15745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mData[mPos++] = (byte)((v >> 40) & 0xff); 15845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mData[mPos++] = (byte)((v >> 48) & 0xff); 15945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mData[mPos++] = (byte)((v >> 56) & 0xff); 16045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 16145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 1628352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang public long subI64() { 1638352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang subalign(8); 1648352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang long v = 0; 1658352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang byte x = 0; 1668352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang x = ((mData[--mPos])); 1678352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang v = (long)(v | (((long)x) & 0xff) << 56l); 1688352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang x = ((mData[--mPos])); 1698352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang v = (long)(v | (((long)x) & 0xff) << 48l); 1708352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang x = ((mData[--mPos])); 1718352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang v = (long)(v | (((long)x) & 0xff) << 40l); 1728352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang x = ((mData[--mPos])); 1738352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang v = (long)(v | (((long)x) & 0xff) << 32l); 1748352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang x = ((mData[--mPos])); 1758352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang v = (long)(v | (((long)x) & 0xff) << 24l); 1768352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang x = ((mData[--mPos])); 1778352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang v = (long)(v | (((long)x) & 0xff) << 16l); 1788352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang x = ((mData[--mPos])); 1798352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang v = (long)(v | (((long)x) & 0xff) << 8l); 1808352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang x = ((mData[--mPos])); 1818352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang v = (long)(v | (((long)x) & 0xff)); 1828352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return v; 1838352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 1848352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 18545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public void addU8(short v) { 18645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if ((v < 0) || (v > 0xff)) { 1878352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang android.util.Log.e("rs", "FieldPacker.addU8( " + v + " )"); 18845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams throw new IllegalArgumentException("Saving value out of range for type"); 18945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 19045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mData[mPos++] = (byte)v; 19145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 19245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 19345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public void addU16(int v) { 19445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if ((v < 0) || (v > 0xffff)) { 19545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams android.util.Log.e("rs", "FieldPacker.addU16( " + v + " )"); 19645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams throw new IllegalArgumentException("Saving value out of range for type"); 19745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 19845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams align(2); 19945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mData[mPos++] = (byte)(v & 0xff); 20045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mData[mPos++] = (byte)(v >> 8); 20145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 20245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 20345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public void addU32(long v) { 20445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if ((v < 0) || (v > 0xffffffffL)) { 20545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams android.util.Log.e("rs", "FieldPacker.addU32( " + v + " )"); 20645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams throw new IllegalArgumentException("Saving value out of range for type"); 20745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 20845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams align(4); 20945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mData[mPos++] = (byte)(v & 0xff); 21045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mData[mPos++] = (byte)((v >> 8) & 0xff); 21145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mData[mPos++] = (byte)((v >> 16) & 0xff); 21245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mData[mPos++] = (byte)((v >> 24) & 0xff); 21345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 21445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 21545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public void addU64(long v) { 21645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if (v < 0) { 21745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams android.util.Log.e("rs", "FieldPacker.addU64( " + v + " )"); 21845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams throw new IllegalArgumentException("Saving value out of range for type"); 21945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 22045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams align(8); 22145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mData[mPos++] = (byte)(v & 0xff); 22245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mData[mPos++] = (byte)((v >> 8) & 0xff); 22345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mData[mPos++] = (byte)((v >> 16) & 0xff); 22445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mData[mPos++] = (byte)((v >> 24) & 0xff); 22545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mData[mPos++] = (byte)((v >> 32) & 0xff); 22645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mData[mPos++] = (byte)((v >> 40) & 0xff); 22745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mData[mPos++] = (byte)((v >> 48) & 0xff); 22845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mData[mPos++] = (byte)((v >> 56) & 0xff); 22945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 23045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 23145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public void addF32(float v) { 23245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addI32(Float.floatToRawIntBits(v)); 23345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 23445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 2358352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang public float subF32() { 2368352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return Float.intBitsToFloat(subI32()); 2378352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 2388352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 23945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public void addF64(double v) { 24045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addI64(Double.doubleToRawLongBits(v)); 24145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 24245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 2438352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang public double subF64() { 2448352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return Double.longBitsToDouble(subI64()); 2458352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 2468352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 24745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public void addObj(BaseObj obj) { 24845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if (obj != null) { 249bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang if (RenderScript.sPointerSize == 8) { 250bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang addI64(obj.getID(null)); 251bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang addI64(0); 252bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang addI64(0); 253bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang addI64(0); 254f90ba2cc2cbb5a5dbcfaa97f2ee6f0c6a74a78a5Miao Wang } else { 255bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang addI32((int)obj.getID(null)); 256bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang } 25745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } else { 258bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang if (RenderScript.sPointerSize == 8) { 259bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang addI64(0); 260bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang addI64(0); 261bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang addI64(0); 262bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang addI64(0); 263bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang } else { 264bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang addI32(0); 265bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang } 26645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 26745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 26845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 26945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public void addF32(Float2 v) { 27045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addF32(v.x); 27145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addF32(v.y); 27245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 27345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public void addF32(Float3 v) { 27445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addF32(v.x); 27545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addF32(v.y); 27645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addF32(v.z); 27745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 27845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public void addF32(Float4 v) { 27945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addF32(v.x); 28045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addF32(v.y); 28145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addF32(v.z); 28245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addF32(v.w); 28345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 28445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 28545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public void addF64(Double2 v) { 28645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addF64(v.x); 28745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addF64(v.y); 28845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 28945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public void addF64(Double3 v) { 29045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addF64(v.x); 29145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addF64(v.y); 29245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addF64(v.z); 29345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 29445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public void addF64(Double4 v) { 29545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addF64(v.x); 29645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addF64(v.y); 29745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addF64(v.z); 29845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addF64(v.w); 29945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 30045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 30145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public void addI8(Byte2 v) { 30245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addI8(v.x); 30345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addI8(v.y); 30445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 30545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public void addI8(Byte3 v) { 30645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addI8(v.x); 30745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addI8(v.y); 30845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addI8(v.z); 30945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 31045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public void addI8(Byte4 v) { 31145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addI8(v.x); 31245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addI8(v.y); 31345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addI8(v.z); 31445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addI8(v.w); 31545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 31645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 31745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public void addU8(Short2 v) { 31845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addU8(v.x); 31945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addU8(v.y); 32045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 32145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public void addU8(Short3 v) { 32245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addU8(v.x); 32345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addU8(v.y); 32445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addU8(v.z); 32545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 32645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public void addU8(Short4 v) { 32745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addU8(v.x); 32845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addU8(v.y); 32945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addU8(v.z); 33045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addU8(v.w); 33145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 33245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 33345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public void addI16(Short2 v) { 33445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addI16(v.x); 33545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addI16(v.y); 33645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 33745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public void addI16(Short3 v) { 33845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addI16(v.x); 33945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addI16(v.y); 34045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addI16(v.z); 34145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 34245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public void addI16(Short4 v) { 34345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addI16(v.x); 34445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addI16(v.y); 34545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addI16(v.z); 34645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addI16(v.w); 34745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 34845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 34945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public void addU16(Int2 v) { 35045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addU16(v.x); 35145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addU16(v.y); 35245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 35345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public void addU16(Int3 v) { 35445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addU16(v.x); 35545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addU16(v.y); 35645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addU16(v.z); 35745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 35845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public void addU16(Int4 v) { 35945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addU16(v.x); 36045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addU16(v.y); 36145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addU16(v.z); 36245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addU16(v.w); 36345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 36445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 36545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public void addI32(Int2 v) { 36645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addI32(v.x); 36745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addI32(v.y); 36845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 36945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public void addI32(Int3 v) { 37045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addI32(v.x); 37145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addI32(v.y); 37245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addI32(v.z); 37345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 37445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public void addI32(Int4 v) { 37545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addI32(v.x); 37645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addI32(v.y); 37745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addI32(v.z); 37845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addI32(v.w); 37945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 38045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 38145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public void addU32(Long2 v) { 38245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addU32(v.x); 38345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addU32(v.y); 38445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 38545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public void addU32(Long3 v) { 38645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addU32(v.x); 38745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addU32(v.y); 38845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addU32(v.z); 38945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 39045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public void addU32(Long4 v) { 39145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addU32(v.x); 39245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addU32(v.y); 39345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addU32(v.z); 39445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addU32(v.w); 39545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 39645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 39745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public void addI64(Long2 v) { 39845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addI64(v.x); 39945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addI64(v.y); 40045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 40145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public void addI64(Long3 v) { 40245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addI64(v.x); 40345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addI64(v.y); 40445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addI64(v.z); 40545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 40645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public void addI64(Long4 v) { 40745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addI64(v.x); 40845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addI64(v.y); 40945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addI64(v.z); 41045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addI64(v.w); 41145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 41245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 41345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public void addU64(Long2 v) { 41445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addU64(v.x); 41545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addU64(v.y); 41645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 41745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public void addU64(Long3 v) { 41845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addU64(v.x); 41945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addU64(v.y); 42045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addU64(v.z); 42145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 42245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public void addU64(Long4 v) { 42345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addU64(v.x); 42445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addU64(v.y); 42545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addU64(v.z); 42645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addU64(v.w); 42745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 42845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 4298352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 4308352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang public Float2 subFloat2() { 4318352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang Float2 v = new Float2(); 4328352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang v.y = subF32(); 4338352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang v.x = subF32(); 4348352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return v; 4358352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 4368352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang public Float3 subFloat3() { 4378352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang Float3 v = new Float3(); 4388352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang v.z = subF32(); 4398352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang v.y = subF32(); 4408352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang v.x = subF32(); 4418352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return v; 4428352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 4438352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang public Float4 subFloat4() { 4448352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang Float4 v = new Float4(); 4458352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang v.w = subF32(); 4468352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang v.z = subF32(); 4478352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang v.y = subF32(); 4488352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang v.x = subF32(); 4498352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return v; 4508352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 4518352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 4528352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang public Double2 subDouble2() { 4538352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang Double2 v = new Double2(); 4548352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang v.y = subF64(); 4558352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang v.x = subF64(); 4568352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return v; 4578352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 4588352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang public Double3 subDouble3() { 4598352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang Double3 v = new Double3(); 4608352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang v.z = subF64(); 4618352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang v.y = subF64(); 4628352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang v.x = subF64(); 4638352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return v; 4648352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 4658352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang public Double4 subDouble4() { 4668352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang Double4 v = new Double4(); 4678352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang v.w = subF64(); 4688352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang v.z = subF64(); 4698352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang v.y = subF64(); 4708352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang v.x = subF64(); 4718352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return v; 4728352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 4738352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 4748352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang public Byte2 subByte2() { 4758352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang Byte2 v = new Byte2(); 4768352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang v.y = subI8(); 4778352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang v.x = subI8(); 4788352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return v; 4798352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 4808352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang public Byte3 subByte3() { 4818352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang Byte3 v = new Byte3(); 4828352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang v.z = subI8(); 4838352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang v.y = subI8(); 4848352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang v.x = subI8(); 4858352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return v; 4868352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 4878352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang public Byte4 subByte4() { 4888352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang Byte4 v = new Byte4(); 4898352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang v.w = subI8(); 4908352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang v.z = subI8(); 4918352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang v.y = subI8(); 4928352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang v.x = subI8(); 4938352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return v; 4948352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 4958352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 4968352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang public Short2 subShort2() { 4978352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang Short2 v = new Short2(); 4988352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang v.y = subI16(); 4998352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang v.x = subI16(); 5008352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return v; 5018352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 5028352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang public Short3 subShort3() { 5038352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang Short3 v = new Short3(); 5048352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang v.z = subI16(); 5058352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang v.y = subI16(); 5068352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang v.x = subI16(); 5078352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return v; 5088352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 5098352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang public Short4 subShort4() { 5108352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang Short4 v = new Short4(); 5118352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang v.w = subI16(); 5128352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang v.z = subI16(); 5138352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang v.y = subI16(); 5148352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang v.x = subI16(); 5158352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return v; 5168352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 5178352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 5188352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang public Int2 subInt2() { 5198352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang Int2 v = new Int2(); 5208352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang v.y = subI32(); 5218352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang v.x = subI32(); 5228352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return v; 5238352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 5248352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang public Int3 subInt3() { 5258352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang Int3 v = new Int3(); 5268352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang v.z = subI32(); 5278352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang v.y = subI32(); 5288352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang v.x = subI32(); 5298352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return v; 5308352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 5318352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang public Int4 subInt4() { 5328352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang Int4 v = new Int4(); 5338352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang v.w = subI32(); 5348352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang v.z = subI32(); 5358352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang v.y = subI32(); 5368352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang v.x = subI32(); 5378352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return v; 5388352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 5398352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 5408352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang public Long2 subLong2() { 5418352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang Long2 v = new Long2(); 5428352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang v.y = subI64(); 5438352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang v.x = subI64(); 5448352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return v; 5458352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 5468352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang public Long3 subLong3() { 5478352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang Long3 v = new Long3(); 5488352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang v.z = subI64(); 5498352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang v.y = subI64(); 5508352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang v.x = subI64(); 5518352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return v; 5528352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 5538352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang public Long4 subLong4() { 5548352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang Long4 v = new Long4(); 5558352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang v.w = subI64(); 5568352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang v.z = subI64(); 5578352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang v.y = subI64(); 5588352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang v.x = subI64(); 5598352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return v; 5608352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 5618352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 5628352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 5638352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 56445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public void addMatrix(Matrix4f v) { 56545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams for (int i=0; i < v.mMat.length; i++) { 56645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addF32(v.mMat[i]); 56745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 56845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 56945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 5708352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang public Matrix4f subMatrix4f() { 5718352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang Matrix4f v = new Matrix4f(); 5728352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang for (int i = v.mMat.length - 1; i >= 0; i--) { 5738352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang v.mMat[i] = subF32(); 5748352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 5758352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return v; 5768352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 5778352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 57845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public void addMatrix(Matrix3f v) { 57945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams for (int i=0; i < v.mMat.length; i++) { 58045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addF32(v.mMat[i]); 58145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 58245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 58345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 5848352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang public Matrix3f subMatrix3f() { 5858352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang Matrix3f v = new Matrix3f(); 5868352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang for (int i = v.mMat.length - 1; i >= 0; i--) { 5878352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang v.mMat[i] = subF32(); 5888352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 5898352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return v; 5908352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 5918352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 59245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public void addMatrix(Matrix2f v) { 59345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams for (int i=0; i < v.mMat.length; i++) { 59445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addF32(v.mMat[i]); 59545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 59645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 59745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 5988352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang public Matrix2f subMatrix2f() { 5998352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang Matrix2f v = new Matrix2f(); 6008352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang for (int i = v.mMat.length - 1; i >= 0; i--) { 6018352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang v.mMat[i] = subF32(); 6028352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 6038352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return v; 6048352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 6058352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 60645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public void addBoolean(boolean v) { 60745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams addI8((byte)(v ? 1 : 0)); 60845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 60945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 6108352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang public boolean subBoolean() { 6118352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang byte v = subI8(); 6128352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang if (v == 1) { 6138352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return true; 6148352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 6158352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return false; 6168352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 6178352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 61845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public final byte[] getData() { 61945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return mData; 62045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 62145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 6228352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang /** 6238352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang * Get the actual length used for the FieldPacker. 6248352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang * 6258352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang * @hide 6268352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang */ 627908f238ae73283a7f3d49ddf7a562ccbd1a9ac44Stephen Hines public int getPos() { 628908f238ae73283a7f3d49ddf7a562ccbd1a9ac44Stephen Hines return mPos; 629908f238ae73283a7f3d49ddf7a562ccbd1a9ac44Stephen Hines } 630908f238ae73283a7f3d49ddf7a562ccbd1a9ac44Stephen Hines 6318352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang private static void addToPack(FieldPacker fp, Object obj) { 6328352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang if (obj instanceof Boolean) { 6338352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang fp.addBoolean(((Boolean)obj).booleanValue()); 6348352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return; 6358352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 6368352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 6378352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang if (obj instanceof Byte) { 6388352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang fp.addI8(((Byte)obj).byteValue()); 6398352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return; 6408352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 6418352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 6428352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang if (obj instanceof Short) { 6438352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang fp.addI16(((Short)obj).shortValue()); 6448352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return; 6458352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 6468352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 6478352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang if (obj instanceof Integer) { 6488352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang fp.addI32(((Integer)obj).intValue()); 6498352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return; 6508352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 6518352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 6528352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang if (obj instanceof Long) { 6538352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang fp.addI64(((Long)obj).longValue()); 6548352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return; 6558352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 6568352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 6578352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang if (obj instanceof Float) { 6588352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang fp.addF32(((Float)obj).floatValue()); 6598352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return; 6608352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 6618352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 6628352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang if (obj instanceof Double) { 6638352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang fp.addF64(((Double)obj).doubleValue()); 6648352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return; 6658352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 6668352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 6678352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang if (obj instanceof Byte2) { 6688352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang fp.addI8((Byte2)obj); 6698352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return; 6708352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 6718352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 6728352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang if (obj instanceof Byte3) { 6738352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang fp.addI8((Byte3)obj); 6748352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return; 6758352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 6768352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 6778352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang if (obj instanceof Byte4) { 6788352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang fp.addI8((Byte4)obj); 6798352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return; 6808352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 6818352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 6828352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang if (obj instanceof Short2) { 6838352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang fp.addI16((Short2)obj); 6848352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return; 6858352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 6868352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 6878352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang if (obj instanceof Short3) { 6888352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang fp.addI16((Short3)obj); 6898352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return; 6908352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 6918352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 6928352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang if (obj instanceof Short4) { 6938352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang fp.addI16((Short4)obj); 6948352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return; 6958352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 6968352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 6978352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang if (obj instanceof Int2) { 6988352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang fp.addI32((Int2)obj); 6998352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return; 7008352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 7018352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 7028352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang if (obj instanceof Int3) { 7038352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang fp.addI32((Int3)obj); 7048352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return; 7058352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 7068352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 7078352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang if (obj instanceof Int4) { 7088352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang fp.addI32((Int4)obj); 7098352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return; 7108352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 7118352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 7128352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang if (obj instanceof Long2) { 7138352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang fp.addI64((Long2)obj); 7148352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return; 7158352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 7168352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 7178352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang if (obj instanceof Long3) { 7188352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang fp.addI64((Long3)obj); 7198352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return; 7208352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 7218352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 7228352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang if (obj instanceof Long4) { 7238352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang fp.addI64((Long4)obj); 7248352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return; 7258352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 7268352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 7278352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang if (obj instanceof Float2) { 7288352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang fp.addF32((Float2)obj); 7298352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return; 7308352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 7318352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 7328352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang if (obj instanceof Float3) { 7338352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang fp.addF32((Float3)obj); 7348352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return; 7358352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 7368352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 7378352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang if (obj instanceof Float4) { 7388352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang fp.addF32((Float4)obj); 7398352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return; 7408352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 7418352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 7428352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang if (obj instanceof Double2) { 7438352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang fp.addF64((Double2)obj); 7448352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return; 7458352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 7468352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 7478352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang if (obj instanceof Double3) { 7488352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang fp.addF64((Double3)obj); 7498352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return; 7508352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 7518352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 7528352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang if (obj instanceof Double4) { 7538352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang fp.addF64((Double4)obj); 7548352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return; 7558352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 7568352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 7578352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang if (obj instanceof Matrix2f) { 7588352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang fp.addMatrix((Matrix2f)obj); 7598352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return; 7608352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 7618352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 7628352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang if (obj instanceof Matrix3f) { 7638352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang fp.addMatrix((Matrix3f)obj); 7648352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return; 7658352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 7668352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 7678352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang if (obj instanceof Matrix4f) { 7688352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang fp.addMatrix((Matrix4f)obj); 7698352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return; 7708352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 7718352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 7728352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang if (obj instanceof BaseObj) { 7738352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang fp.addObj((BaseObj)obj); 7748352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return; 7758352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 7768352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 7778352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 7788352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang private static int getPackedSize(Object obj) { 7798352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang if (obj instanceof Boolean) { 7808352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return 1; 7818352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 7828352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 7838352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang if (obj instanceof Byte) { 7848352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return 1; 7858352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 7868352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 7878352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang if (obj instanceof Short) { 7888352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return 2; 7898352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 7908352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 7918352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang if (obj instanceof Integer) { 7928352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return 4; 7938352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 7948352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 7958352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang if (obj instanceof Long) { 7968352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return 8; 7978352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 7988352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 7998352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang if (obj instanceof Float) { 8008352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return 4; 8018352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 8028352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 8038352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang if (obj instanceof Double) { 8048352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return 8; 8058352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 8068352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 8078352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang if (obj instanceof Byte2) { 8088352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return 2; 8098352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 8108352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 8118352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang if (obj instanceof Byte3) { 8128352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return 3; 8138352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 8148352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 8158352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang if (obj instanceof Byte4) { 8168352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return 4; 8178352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 8188352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 8198352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang if (obj instanceof Short2) { 8208352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return 4; 8218352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 8228352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 8238352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang if (obj instanceof Short3) { 8248352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return 6; 8258352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 8268352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 8278352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang if (obj instanceof Short4) { 8288352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return 8; 8298352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 8308352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 8318352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang if (obj instanceof Int2) { 8328352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return 8; 8338352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 8348352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 8358352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang if (obj instanceof Int3) { 8368352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return 12; 8378352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 8388352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 8398352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang if (obj instanceof Int4) { 8408352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return 16; 8418352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 8428352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 8438352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang if (obj instanceof Long2) { 8448352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return 16; 8458352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 8468352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 8478352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang if (obj instanceof Long3) { 8488352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return 24; 8498352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 8508352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 8518352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang if (obj instanceof Long4) { 8528352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return 32; 8538352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 8548352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 8558352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang if (obj instanceof Float2) { 8568352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return 8; 8578352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 8588352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 8598352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang if (obj instanceof Float3) { 8608352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return 12; 8618352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 8628352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 8638352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang if (obj instanceof Float4) { 8648352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return 16; 8658352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 8668352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 8678352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang if (obj instanceof Double2) { 8688352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return 16; 8698352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 8708352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 8718352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang if (obj instanceof Double3) { 8728352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return 24; 8738352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 8748352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 8758352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang if (obj instanceof Double4) { 8768352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return 32; 8778352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 8788352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 8798352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang if (obj instanceof Matrix2f) { 8808352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return 16; 8818352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 8828352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 8838352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang if (obj instanceof Matrix3f) { 8848352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return 36; 8858352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 8868352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 8878352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang if (obj instanceof Matrix4f) { 8888352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return 64; 8898352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 8908352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 8918352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang if (obj instanceof BaseObj) { 8928352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang if (RenderScript.sPointerSize == 8) { 8938352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return 32; 8948352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } else { 8958352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return 4; 8968352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 8978352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 8988352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 8998352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return 0; 9008352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 9018352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 9028352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang static FieldPacker createFieldPack(Object[] args) { 9038352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang int len = 0; 9048352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang for (Object arg : args) { 9058352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang len += getPackedSize(arg); 9068352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 9078352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang FieldPacker fp = new FieldPacker(len); 9088352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang for (Object arg : args) { 9098352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang addToPack(fp, arg); 9108352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 9118352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang return fp; 9128352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang } 9138352bdceb7f0030593db04a06ba8caebf81eaeeaMiao Wang 914f90ba2cc2cbb5a5dbcfaa97f2ee6f0c6a74a78a5Miao Wang 915f90ba2cc2cbb5a5dbcfaa97f2ee6f0c6a74a78a5Miao Wang private boolean resize(int newSize) { 916f90ba2cc2cbb5a5dbcfaa97f2ee6f0c6a74a78a5Miao Wang if (newSize == mLen) { 917f90ba2cc2cbb5a5dbcfaa97f2ee6f0c6a74a78a5Miao Wang return false; 918f90ba2cc2cbb5a5dbcfaa97f2ee6f0c6a74a78a5Miao Wang } 919f90ba2cc2cbb5a5dbcfaa97f2ee6f0c6a74a78a5Miao Wang 920f90ba2cc2cbb5a5dbcfaa97f2ee6f0c6a74a78a5Miao Wang byte[] newData = new byte[newSize]; 921f90ba2cc2cbb5a5dbcfaa97f2ee6f0c6a74a78a5Miao Wang System.arraycopy(mData, 0, newData, 0, mPos); 922f90ba2cc2cbb5a5dbcfaa97f2ee6f0c6a74a78a5Miao Wang mData = newData; 923f90ba2cc2cbb5a5dbcfaa97f2ee6f0c6a74a78a5Miao Wang mLen = newSize; 924f90ba2cc2cbb5a5dbcfaa97f2ee6f0c6a74a78a5Miao Wang return true; 925f90ba2cc2cbb5a5dbcfaa97f2ee6f0c6a74a78a5Miao Wang } 926f90ba2cc2cbb5a5dbcfaa97f2ee6f0c6a74a78a5Miao Wang 927f90ba2cc2cbb5a5dbcfaa97f2ee6f0c6a74a78a5Miao Wang private void addSafely(Object obj) { 928f90ba2cc2cbb5a5dbcfaa97f2ee6f0c6a74a78a5Miao Wang boolean retry; 929f90ba2cc2cbb5a5dbcfaa97f2ee6f0c6a74a78a5Miao Wang final int oldPos = mPos; 930f90ba2cc2cbb5a5dbcfaa97f2ee6f0c6a74a78a5Miao Wang do { 931f90ba2cc2cbb5a5dbcfaa97f2ee6f0c6a74a78a5Miao Wang retry = false; 932f90ba2cc2cbb5a5dbcfaa97f2ee6f0c6a74a78a5Miao Wang try { 933f90ba2cc2cbb5a5dbcfaa97f2ee6f0c6a74a78a5Miao Wang addToPack(this, obj); 934f90ba2cc2cbb5a5dbcfaa97f2ee6f0c6a74a78a5Miao Wang } catch (ArrayIndexOutOfBoundsException e) { 935f90ba2cc2cbb5a5dbcfaa97f2ee6f0c6a74a78a5Miao Wang mPos = oldPos; 936f90ba2cc2cbb5a5dbcfaa97f2ee6f0c6a74a78a5Miao Wang resize(mLen * 2); 937f90ba2cc2cbb5a5dbcfaa97f2ee6f0c6a74a78a5Miao Wang retry = true; 938f90ba2cc2cbb5a5dbcfaa97f2ee6f0c6a74a78a5Miao Wang } 939f90ba2cc2cbb5a5dbcfaa97f2ee6f0c6a74a78a5Miao Wang } while (retry); 940f90ba2cc2cbb5a5dbcfaa97f2ee6f0c6a74a78a5Miao Wang } 941f90ba2cc2cbb5a5dbcfaa97f2ee6f0c6a74a78a5Miao Wang 942f90ba2cc2cbb5a5dbcfaa97f2ee6f0c6a74a78a5Miao Wang private byte mData[]; 94345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams private int mPos; 94445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams private int mLen; 945bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang private BitSet mAlignment; 94645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams} 947