198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams/*
298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Copyright (C) 2012 The Android Open Source Project
398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams *
498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Licensed under the Apache License, Version 2.0 (the "License");
598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * you may not use this file except in compliance with the License.
698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * You may obtain a copy of the License at
798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams *
898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams *      http://www.apache.org/licenses/LICENSE-2.0
998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams *
1098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Unless required by applicable law or agreed to in writing, software
1198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * distributed under the License is distributed on an "AS IS" BASIS,
1298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * See the License for the specific language governing permissions and
1498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * limitations under the License.
1598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams */
1698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
1798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Samspackage android.support.v8.renderscript;
1898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
1998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
2098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams/**
2198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Utility class for packing arguments and structures from Android system objects to
2298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Renderscript objects.
2398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams *
2498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams **/
2598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Samspublic class FieldPacker {
2698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    public FieldPacker(int len) {
2798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        mPos = 0;
2898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        mLen = len;
2998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        mData = new byte[len];
3098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
3198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
3298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    public void align(int v) {
3398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        if ((v <= 0) || ((v & (v - 1)) != 0)) {
3498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            throw new RSIllegalArgumentException("argument must be a non-negative non-zero power of 2: " + v);
3598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        }
3698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
3798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        while ((mPos & (v - 1)) != 0) {
3898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            mData[mPos++] = 0;
3998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        }
4098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
4198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
4298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    public void reset() {
4398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        mPos = 0;
4498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
4598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    public void reset(int i) {
4698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        if ((i < 0) || (i >= mLen)) {
4798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            throw new RSIllegalArgumentException("out of range argument: " + i);
4898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        }
4998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        mPos = i;
5098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
5198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
5298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    public void skip(int i) {
5398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        int res = mPos + i;
5498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        if ((res < 0) || (res > mLen)) {
5598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            throw new RSIllegalArgumentException("out of range argument: " + i);
5698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        }
5798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        mPos = res;
5898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
5998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
6098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    public void addI8(byte v) {
6198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        mData[mPos++] = v;
6298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
6398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
6498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    public void addI16(short v) {
6598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        align(2);
6698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        mData[mPos++] = (byte)(v & 0xff);
6798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        mData[mPos++] = (byte)(v >> 8);
6898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
6998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
7098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    public void addI32(int v) {
7198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        align(4);
7298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        mData[mPos++] = (byte)(v & 0xff);
7398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        mData[mPos++] = (byte)((v >> 8) & 0xff);
7498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        mData[mPos++] = (byte)((v >> 16) & 0xff);
7598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        mData[mPos++] = (byte)((v >> 24) & 0xff);
7698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
7798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
7898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    public void addI64(long v) {
7998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        align(8);
8098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        mData[mPos++] = (byte)(v & 0xff);
8198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        mData[mPos++] = (byte)((v >> 8) & 0xff);
8298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        mData[mPos++] = (byte)((v >> 16) & 0xff);
8398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        mData[mPos++] = (byte)((v >> 24) & 0xff);
8498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        mData[mPos++] = (byte)((v >> 32) & 0xff);
8598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        mData[mPos++] = (byte)((v >> 40) & 0xff);
8698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        mData[mPos++] = (byte)((v >> 48) & 0xff);
8798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        mData[mPos++] = (byte)((v >> 56) & 0xff);
8898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
8998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
9098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    public void addU8(short v) {
9198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        if ((v < 0) || (v > 0xff)) {
9298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            android.util.Log.e("rs", "FieldPacker.addU8( " + v + " )");
9398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            throw new IllegalArgumentException("Saving value out of range for type");
9498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        }
9598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        mData[mPos++] = (byte)v;
9698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
9798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
9898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    public void addU16(int v) {
9998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        if ((v < 0) || (v > 0xffff)) {
10098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            android.util.Log.e("rs", "FieldPacker.addU16( " + v + " )");
10198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            throw new IllegalArgumentException("Saving value out of range for type");
10298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        }
10398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        align(2);
10498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        mData[mPos++] = (byte)(v & 0xff);
10598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        mData[mPos++] = (byte)(v >> 8);
10698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
10798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
10898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    public void addU32(long v) {
10998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        if ((v < 0) || (v > 0xffffffffL)) {
11098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            android.util.Log.e("rs", "FieldPacker.addU32( " + v + " )");
11198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            throw new IllegalArgumentException("Saving value out of range for type");
11298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        }
11398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        align(4);
11498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        mData[mPos++] = (byte)(v & 0xff);
11598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        mData[mPos++] = (byte)((v >> 8) & 0xff);
11698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        mData[mPos++] = (byte)((v >> 16) & 0xff);
11798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        mData[mPos++] = (byte)((v >> 24) & 0xff);
11898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
11998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
12098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    public void addU64(long v) {
12198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        if (v < 0) {
12298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            android.util.Log.e("rs", "FieldPacker.addU64( " + v + " )");
12398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            throw new IllegalArgumentException("Saving value out of range for type");
12498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        }
12598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        align(8);
12698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        mData[mPos++] = (byte)(v & 0xff);
12798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        mData[mPos++] = (byte)((v >> 8) & 0xff);
12898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        mData[mPos++] = (byte)((v >> 16) & 0xff);
12998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        mData[mPos++] = (byte)((v >> 24) & 0xff);
13098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        mData[mPos++] = (byte)((v >> 32) & 0xff);
13198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        mData[mPos++] = (byte)((v >> 40) & 0xff);
13298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        mData[mPos++] = (byte)((v >> 48) & 0xff);
13398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        mData[mPos++] = (byte)((v >> 56) & 0xff);
13498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
13598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
13698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    public void addF32(float v) {
13798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addI32(Float.floatToRawIntBits(v));
13898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
13998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
14098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    public void addF64(double v) {
14198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addI64(Double.doubleToRawLongBits(v));
14298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
14398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
14498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    public void addObj(BaseObj obj) {
14598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        if (obj != null) {
14698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            addI32(obj.getID(null));
14798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        } else {
14898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            addI32(0);
14998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        }
15098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
15198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
15298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    public void addF32(Float2 v) {
15398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addF32(v.x);
15498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addF32(v.y);
15598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
15698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    public void addF32(Float3 v) {
15798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addF32(v.x);
15898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addF32(v.y);
15998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addF32(v.z);
16098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
16198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    public void addF32(Float4 v) {
16298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addF32(v.x);
16398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addF32(v.y);
16498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addF32(v.z);
16598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addF32(v.w);
16698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
16798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
16898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    public void addF64(Double2 v) {
16998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addF64(v.x);
17098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addF64(v.y);
17198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
17298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    public void addF64(Double3 v) {
17398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addF64(v.x);
17498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addF64(v.y);
17598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addF64(v.z);
17698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
17798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    public void addF64(Double4 v) {
17898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addF64(v.x);
17998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addF64(v.y);
18098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addF64(v.z);
18198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addF64(v.w);
18298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
18398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
18498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    public void addI8(Byte2 v) {
18598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addI8(v.x);
18698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addI8(v.y);
18798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
18898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    public void addI8(Byte3 v) {
18998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addI8(v.x);
19098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addI8(v.y);
19198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addI8(v.z);
19298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
19398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    public void addI8(Byte4 v) {
19498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addI8(v.x);
19598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addI8(v.y);
19698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addI8(v.z);
19798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addI8(v.w);
19898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
19998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
20098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    public void addU8(Short2 v) {
20198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addU8(v.x);
20298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addU8(v.y);
20398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
20498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    public void addU8(Short3 v) {
20598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addU8(v.x);
20698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addU8(v.y);
20798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addU8(v.z);
20898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
20998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    public void addU8(Short4 v) {
21098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addU8(v.x);
21198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addU8(v.y);
21298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addU8(v.z);
21398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addU8(v.w);
21498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
21598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
21698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    public void addI16(Short2 v) {
21798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addI16(v.x);
21898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addI16(v.y);
21998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
22098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    public void addI16(Short3 v) {
22198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addI16(v.x);
22298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addI16(v.y);
22398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addI16(v.z);
22498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
22598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    public void addI16(Short4 v) {
22698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addI16(v.x);
22798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addI16(v.y);
22898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addI16(v.z);
22998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addI16(v.w);
23098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
23198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
23298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    public void addU16(Int2 v) {
23398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addU16(v.x);
23498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addU16(v.y);
23598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
23698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    public void addU16(Int3 v) {
23798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addU16(v.x);
23898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addU16(v.y);
23998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addU16(v.z);
24098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
24198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    public void addU16(Int4 v) {
24298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addU16(v.x);
24398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addU16(v.y);
24498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addU16(v.z);
24598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addU16(v.w);
24698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
24798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
24898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    public void addI32(Int2 v) {
24998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addI32(v.x);
25098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addI32(v.y);
25198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
25298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    public void addI32(Int3 v) {
25398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addI32(v.x);
25498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addI32(v.y);
25598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addI32(v.z);
25698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
25798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    public void addI32(Int4 v) {
25898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addI32(v.x);
25998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addI32(v.y);
26098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addI32(v.z);
26198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addI32(v.w);
26298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
26398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
26498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    public void addU32(Long2 v) {
26598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addU32(v.x);
26698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addU32(v.y);
26798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
26898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    public void addU32(Long3 v) {
26998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addU32(v.x);
27098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addU32(v.y);
27198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addU32(v.z);
27298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
27398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    public void addU32(Long4 v) {
27498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addU32(v.x);
27598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addU32(v.y);
27698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addU32(v.z);
27798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addU32(v.w);
27898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
27998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
28098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    public void addI64(Long2 v) {
28198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addI64(v.x);
28298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addI64(v.y);
28398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
28498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    public void addI64(Long3 v) {
28598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addI64(v.x);
28698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addI64(v.y);
28798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addI64(v.z);
28898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
28998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    public void addI64(Long4 v) {
29098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addI64(v.x);
29198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addI64(v.y);
29298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addI64(v.z);
29398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addI64(v.w);
29498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
29598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
29698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    public void addU64(Long2 v) {
29798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addU64(v.x);
29898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addU64(v.y);
29998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
30098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    public void addU64(Long3 v) {
30198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addU64(v.x);
30298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addU64(v.y);
30398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addU64(v.z);
30498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
30598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    public void addU64(Long4 v) {
30698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addU64(v.x);
30798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addU64(v.y);
30898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addU64(v.z);
30998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addU64(v.w);
31098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
31198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
31298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    public void addMatrix(Matrix4f v) {
31398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        for (int i=0; i < v.mMat.length; i++) {
31498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            addF32(v.mMat[i]);
31598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        }
31698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
31798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
31898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    public void addMatrix(Matrix3f v) {
31998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        for (int i=0; i < v.mMat.length; i++) {
32098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            addF32(v.mMat[i]);
32198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        }
32298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
32398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
32498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    public void addMatrix(Matrix2f v) {
32598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        for (int i=0; i < v.mMat.length; i++) {
32698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams            addF32(v.mMat[i]);
32798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        }
32898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
32998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
33098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    public void addBoolean(boolean v) {
33198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        addI8((byte)(v ? 1 : 0));
33298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
33398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
33498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    public final byte[] getData() {
33598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams        return mData;
33698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    }
33798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
33898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    private final byte mData[];
33998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    private int mPos;
34098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams    private int mLen;
34198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
34298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams}
34398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
34498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams
345