org.chromium.debug.core/src/org/chromium/debug/core/model/ArrayValue.java
changeset 2 e4420d2515f1
child 52 f577ea64429e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.chromium.debug.core/src/org/chromium/debug/core/model/ArrayValue.java	Wed Dec 23 17:13:18 2009 -0800
@@ -0,0 +1,67 @@
+// Copyright (c) 2009 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.debug.core.model;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.SortedMap;
+
+import org.chromium.sdk.JsArray;
+import org.chromium.sdk.JsVariable;
+import org.eclipse.debug.core.DebugException;
+import org.eclipse.debug.core.model.IIndexedValue;
+import org.eclipse.debug.core.model.IVariable;
+
+/**
+ * An IIndexedValue implementation for an array element range using a JsArray
+ * instance.
+ */
+public class ArrayValue extends Value implements IIndexedValue {
+
+  private final IVariable[] elements;
+
+  public ArrayValue(IChromiumDebugTarget debugTarget, JsArray array) {
+    super(debugTarget, array);
+    this.elements = createElements();
+  }
+
+  private IVariable[] createElements() {
+    SortedMap<Integer, ? extends JsVariable> elements = ((JsArray) getJsValue()).toSparseArray();
+    List<IVariable> variables = new ArrayList<IVariable>(elements.size());
+    for (JsVariable jsVar : elements.values()) {
+      variables.add(new Variable(getDebugTarget(), jsVar, false));
+    }
+    return variables.toArray(new IVariable[variables.size()]);
+  }
+
+  public int getInitialOffset() {
+    return 0;
+  }
+
+  public int getSize() throws DebugException {
+    return elements.length;
+  }
+
+  public IVariable getVariable(int offset) throws DebugException {
+    return elements[offset];
+  }
+
+  public IVariable[] getVariables(int offset, int length) throws DebugException {
+    IVariable[] result = new IVariable[length];
+    System.arraycopy(elements, offset, result, 0, length);
+    return result;
+  }
+
+  @Override
+  public IVariable[] getVariables() throws DebugException {
+    return elements;
+  }
+
+  @Override
+  public boolean hasVariables() throws DebugException {
+    return elements.length > 0;
+  }
+
+}