diff options
Diffstat (limited to 'graphics/java/android/renderscript/FieldPacker.java')
-rw-r--r-- | graphics/java/android/renderscript/FieldPacker.java | 63 |
1 files changed, 62 insertions, 1 deletions
diff --git a/graphics/java/android/renderscript/FieldPacker.java b/graphics/java/android/renderscript/FieldPacker.java index bdda830..2739a4b8 100644 --- a/graphics/java/android/renderscript/FieldPacker.java +++ b/graphics/java/android/renderscript/FieldPacker.java @@ -25,10 +25,15 @@ package android.renderscript; public class FieldPacker { public FieldPacker(int len) { mPos = 0; + mLen = len; mData = new byte[len]; } public void align(int v) { + if ((v <= 0) || ((v & (v - 1)) != 0)) { + throw new RSIllegalArgumentException("argument must be a non-negative non-zero power of 2: " + v); + } + while ((mPos & (v - 1)) != 0) { mData[mPos++] = 0; } @@ -38,11 +43,18 @@ public class FieldPacker { mPos = 0; } public void reset(int i) { + if ((i < 0) || (i >= mLen)) { + throw new RSIllegalArgumentException("out of range argument: " + i); + } mPos = i; } public void skip(int i) { - mPos += i; + int res = mPos + i; + if ((res < 0) || (res > mLen)) { + throw new RSIllegalArgumentException("out of range argument: " + i); + } + mPos = res; } public void addI8(byte v) { @@ -153,6 +165,22 @@ public class FieldPacker { addF32(v.w); } + public void addF64(Double2 v) { + addF64(v.x); + addF64(v.y); + } + public void addF64(Double3 v) { + addF64(v.x); + addF64(v.y); + addF64(v.z); + } + public void addF64(Double4 v) { + addF64(v.x); + addF64(v.y); + addF64(v.z); + addF64(v.w); + } + public void addI8(Byte2 v) { addI8(v.x); addI8(v.y); @@ -249,6 +277,38 @@ public class FieldPacker { addU32(v.w); } + public void addI64(Long2 v) { + addI64(v.x); + addI64(v.y); + } + public void addI64(Long3 v) { + addI64(v.x); + addI64(v.y); + addI64(v.z); + } + public void addI64(Long4 v) { + addI64(v.x); + addI64(v.y); + addI64(v.z); + addI64(v.w); + } + + public void addU64(Long2 v) { + addU64(v.x); + addU64(v.y); + } + public void addU64(Long3 v) { + addU64(v.x); + addU64(v.y); + addU64(v.z); + } + public void addU64(Long4 v) { + addU64(v.x); + addU64(v.y); + addU64(v.z); + addU64(v.w); + } + public void addMatrix(Matrix4f v) { for (int i=0; i < v.mMat.length; i++) { addF32(v.mMat[i]); @@ -277,6 +337,7 @@ public class FieldPacker { private final byte mData[]; private int mPos; + private int mLen; } |