summaryrefslogtreecommitdiff
path: root/graphics/java/android/renderscript/FieldPacker.java
diff options
context:
space:
mode:
authorJason Sams <rjsams@android.com>2010-02-02 15:26:40 -0800
committerJason Sams <rjsams@android.com>2010-02-02 15:26:40 -0800
commit25430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4e (patch)
tree71d43c3e77e12054d4ed7b5c82ec4dd368743f74 /graphics/java/android/renderscript/FieldPacker.java
parent5dbfe93b3f15f3a837836d024958635fd8f9ad14 (diff)
Implement holders for Matrix and Vector data.
Diffstat (limited to 'graphics/java/android/renderscript/FieldPacker.java')
-rw-r--r--graphics/java/android/renderscript/FieldPacker.java125
1 files changed, 125 insertions, 0 deletions
diff --git a/graphics/java/android/renderscript/FieldPacker.java b/graphics/java/android/renderscript/FieldPacker.java
new file mode 100644
index 000000000000..fc79caf040b1
--- /dev/null
+++ b/graphics/java/android/renderscript/FieldPacker.java
@@ -0,0 +1,125 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.renderscript;
+
+
+public class FieldPacker {
+ public FieldPacker(int len) {
+ mPos = 0;
+ mData = new byte[len];
+ }
+
+ public void align(int v) {
+ while ((mPos & (v - 1)) != 0) {
+ mData[mPos++] = 0;
+ }
+ }
+
+ void reset() {
+ mPos = 0;
+ }
+
+ void addI8(byte v) {
+ mData[mPos++] = v;
+ }
+
+ void addI16(short v) {
+ align(2);
+ mData[mPos++] = (byte)(v & 0xff);
+ mData[mPos++] = (byte)(v >> 8);
+ }
+
+ void addI32(int v) {
+ align(4);
+ mData[mPos++] = (byte)(v & 0xff);
+ mData[mPos++] = (byte)((v >> 8) & 0xff);
+ mData[mPos++] = (byte)((v >> 16) & 0xff);
+ mData[mPos++] = (byte)((v >> 24) & 0xff);
+ }
+
+ void addI64(long v) {
+ align(8);
+ mData[mPos++] = (byte)(v & 0xff);
+ mData[mPos++] = (byte)((v >> 8) & 0xff);
+ mData[mPos++] = (byte)((v >> 16) & 0xff);
+ mData[mPos++] = (byte)((v >> 24) & 0xff);
+ mData[mPos++] = (byte)((v >> 32) & 0xff);
+ mData[mPos++] = (byte)((v >> 40) & 0xff);
+ mData[mPos++] = (byte)((v >> 48) & 0xff);
+ mData[mPos++] = (byte)((v >> 56) & 0xff);
+ }
+
+ void addU8(short v) {
+ if ((v < 0) || (v > 0xff)) {
+ throw new IllegalArgumentException("Saving value out of range for type");
+ }
+ mData[mPos++] = (byte)v;
+ }
+
+ void addU16(int v) {
+ if ((v < 0) || (v > 0xffff)) {
+ throw new IllegalArgumentException("Saving value out of range for type");
+ }
+ align(2);
+ mData[mPos++] = (byte)(v & 0xff);
+ mData[mPos++] = (byte)(v >> 8);
+ }
+
+ void addU32(long v) {
+ if ((v < 0) || (v > 0xffffffff)) {
+ throw new IllegalArgumentException("Saving value out of range for type");
+ }
+ align(4);
+ mData[mPos++] = (byte)(v & 0xff);
+ mData[mPos++] = (byte)((v >> 8) & 0xff);
+ mData[mPos++] = (byte)((v >> 16) & 0xff);
+ mData[mPos++] = (byte)((v >> 24) & 0xff);
+ }
+
+ void addU64(long v) {
+ if (v < 0) {
+ throw new IllegalArgumentException("Saving value out of range for type");
+ }
+ align(8);
+ mData[mPos++] = (byte)(v & 0xff);
+ mData[mPos++] = (byte)((v >> 8) & 0xff);
+ mData[mPos++] = (byte)((v >> 16) & 0xff);
+ mData[mPos++] = (byte)((v >> 24) & 0xff);
+ mData[mPos++] = (byte)((v >> 32) & 0xff);
+ mData[mPos++] = (byte)((v >> 40) & 0xff);
+ mData[mPos++] = (byte)((v >> 48) & 0xff);
+ mData[mPos++] = (byte)((v >> 56) & 0xff);
+ }
+
+ void addF32(float v) {
+ addI32(Float.floatToRawIntBits(v));
+ }
+
+ void addF64(float v) {
+ addI64(Double.doubleToRawLongBits(v));
+ }
+
+ final byte[] getData() {
+ return mData;
+ }
+
+ private final byte mData[];
+ private int mPos;
+
+}
+
+