aboutsummaryrefslogtreecommitdiff
path: root/eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/state/GLSparseArrayProperty.java
diff options
context:
space:
mode:
Diffstat (limited to 'eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/state/GLSparseArrayProperty.java')
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/state/GLSparseArrayProperty.java170
1 files changed, 170 insertions, 0 deletions
diff --git a/eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/state/GLSparseArrayProperty.java b/eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/state/GLSparseArrayProperty.java
new file mode 100644
index 000000000..c45002857
--- /dev/null
+++ b/eclipse/plugins/com.android.ide.eclipse.gldebugger/src/com/android/ide/eclipse/gltrace/state/GLSparseArrayProperty.java
@@ -0,0 +1,170 @@
+/*
+ * Copyright (C) 2012 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 com.android.ide.eclipse.gltrace.state;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Locale;
+
+import com.android.utils.SparseArray;
+
+public class GLSparseArrayProperty implements IGLProperty {
+ private final GLStateType mType;
+ private final IGLProperty mDefaultValue;
+ private final boolean mCreateOnAccess;
+ private final SparseArray<IGLProperty> mSparseArray;
+ private IGLProperty mParent;
+
+ public GLSparseArrayProperty(GLStateType type, IGLProperty defaultValue) {
+ this(type, defaultValue, false);
+ }
+
+ /**
+ * Constructs a sparse array property.
+ * @param type GL state corresponding to this property
+ * @param defaultValue default value of each item
+ * @param createOnAccess create an item on access if it is not present
+ */
+ public GLSparseArrayProperty(GLStateType type, IGLProperty defaultValue,
+ boolean createOnAccess) {
+ mType = type;
+ mDefaultValue = defaultValue;
+ mCreateOnAccess = createOnAccess;
+ mSparseArray = new SparseArray<IGLProperty>(20);
+ }
+
+ private GLSparseArrayProperty(GLStateType type, IGLProperty defaultValue,
+ boolean createOnAccess, SparseArray<IGLProperty> contents) {
+ mType = type;
+ mDefaultValue = defaultValue;
+ mCreateOnAccess = createOnAccess;
+ mSparseArray = contents;
+ }
+
+ public List<IGLProperty> getValues() {
+ List<IGLProperty> values = new ArrayList<IGLProperty>(mSparseArray.size());
+
+ for (int i = 0; i < mSparseArray.size(); i++) {
+ values.add(mSparseArray.valueAt(i));
+ }
+
+ return values;
+ }
+
+ public IGLProperty getProperty(int key) {
+ IGLProperty p = mSparseArray.get(key);
+ if (p == null && mCreateOnAccess) {
+ add(key);
+ p = mSparseArray.get(key);
+ }
+ return p;
+ }
+
+ public int keyFor(IGLProperty element) {
+ int index = mSparseArray.indexOfValue(element);
+ return mSparseArray.keyAt(index);
+ }
+
+ public void put(int key, IGLProperty element) {
+ element.setParent(this);
+ mSparseArray.put(key, element);
+ }
+
+ public void add(int key) {
+ IGLProperty prop = mDefaultValue.clone();
+ prop.setParent(this);
+ mSparseArray.put(key, prop);
+ }
+
+ public void delete(int key) {
+ mSparseArray.delete(key);
+ }
+
+ @Override
+ public GLStateType getType() {
+ return mType;
+ }
+
+ @Override
+ public boolean isComposite() {
+ return true;
+ }
+
+ @Override
+ public boolean isDefault() {
+ return false;
+ }
+
+ @Override
+ public IGLProperty getParent() {
+ return mParent;
+ }
+
+ @Override
+ public void setParent(IGLProperty parent) {
+ mParent = parent;
+ }
+
+ @Override
+ public GLSparseArrayProperty clone() {
+ SparseArray<IGLProperty> copy = new SparseArray<IGLProperty>(mSparseArray.size());
+ for (int i = 0; i < mSparseArray.size(); i++) {
+ int key = mSparseArray.keyAt(i);
+ IGLProperty value = mSparseArray.get(key);
+ copy.put(key, value);
+ }
+
+ return new GLSparseArrayProperty(mType, mDefaultValue, mCreateOnAccess, copy);
+ }
+
+ @Override
+ public String getStringValue() {
+ // This method is called for displaying objects in the UI.
+ // We do not display any values for composites in the UI as they are only intermediate
+ // nodes in the tree.
+ return "";
+ }
+
+ @Override
+ public void setValue(Object value) {
+ throw new UnsupportedOperationException(
+ "Values cannot be set for composite properties."); //$NON-NLS-1$
+ }
+
+ @Override
+ public Object getValue() {
+ throw new UnsupportedOperationException(
+ "Values cannot be obtained for composite properties."); //$NON-NLS-1$
+ }
+
+ @Override
+ public void prettyPrint(StatePrettyPrinter pp) {
+ pp.prettyPrint(mType, null);
+ pp.incrementIndentLevel();
+ for (int i = 0; i < mSparseArray.size(); i++) {
+ int key = mSparseArray.keyAt(i);
+ pp.prettyPrint(String.format(Locale.US, "Index %d:", key));
+ IGLProperty prop = mSparseArray.get(key);
+
+ assert prop != null;
+ if (prop != null) {
+ prop.prettyPrint(pp);
+ }
+ }
+ pp.decrementIndentLevel();
+ }
+}