LongSparseLongArray.java revision dda73b5dcd92006762a1c71e2fb352e64fa265ef
1dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey/*
2dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey * Copyright (C) 2007 The Android Open Source Project
3dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey *
4dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey * Licensed under the Apache License, Version 2.0 (the "License");
5dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey * you may not use this file except in compliance with the License.
6dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey * You may obtain a copy of the License at
7dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey *
8dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey *      http://www.apache.org/licenses/LICENSE-2.0
9dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey *
10dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey * Unless required by applicable law or agreed to in writing, software
11dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey * distributed under the License is distributed on an "AS IS" BASIS,
12dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey * See the License for the specific language governing permissions and
14dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey * limitations under the License.
15dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey */
16dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey
17dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkeypackage android.util;
18dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey
19dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkeyimport com.android.internal.util.ArrayUtils;
20dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey
21dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkeyimport java.util.Arrays;
22dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey
23dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey/**
24dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey * Map of {@code long} to {@code long}. Unlike a normal array of longs, there
25dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey * can be gaps in the indices. It is intended to be more efficient than using a
26dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey * {@code HashMap}.
27dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey *
28dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey * @hide
29dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey */
30dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkeypublic class LongSparseLongArray implements Cloneable {
31dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    private long[] mKeys;
32dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    private long[] mValues;
33dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    private int mSize;
34dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey
35dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    /**
36dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     * Creates a new SparseLongArray containing no mappings.
37dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     */
38dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    public LongSparseLongArray() {
39dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        this(10);
40dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    }
41dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey
42dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    /**
43dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     * Creates a new SparseLongArray containing no mappings that will not
44dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     * require any additional memory allocation to store the specified
45dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     * number of mappings.
46dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     */
47dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    public LongSparseLongArray(int initialCapacity) {
48dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        initialCapacity = ArrayUtils.idealLongArraySize(initialCapacity);
49dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey
50dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        mKeys = new long[initialCapacity];
51dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        mValues = new long[initialCapacity];
52dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        mSize = 0;
53dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    }
54dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey
55dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    @Override
56dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    public LongSparseLongArray clone() {
57dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        LongSparseLongArray clone = null;
58dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        try {
59dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey            clone = (LongSparseLongArray) super.clone();
60dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey            clone.mKeys = mKeys.clone();
61dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey            clone.mValues = mValues.clone();
62dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        } catch (CloneNotSupportedException cnse) {
63dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey            /* ignore */
64dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        }
65dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        return clone;
66dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    }
67dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey
68dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    /**
69dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     * Gets the long mapped from the specified key, or <code>0</code>
70dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     * if no such mapping has been made.
71dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     */
72dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    public long get(long key) {
73dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        return get(key, 0);
74dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    }
75dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey
76dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    /**
77dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     * Gets the long mapped from the specified key, or the specified value
78dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     * if no such mapping has been made.
79dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     */
80dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    public long get(long key, long valueIfKeyNotFound) {
81dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        int i = Arrays.binarySearch(mKeys, 0, mSize, key);
82dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey
83dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        if (i < 0) {
84dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey            return valueIfKeyNotFound;
85dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        } else {
86dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey            return mValues[i];
87dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        }
88dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    }
89dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey
90dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    /**
91dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     * Removes the mapping from the specified key, if there was any.
92dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     */
93dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    public void delete(long key) {
94dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        int i = Arrays.binarySearch(mKeys, 0, mSize, key);
95dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey
96dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        if (i >= 0) {
97dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey            removeAt(i);
98dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        }
99dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    }
100dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey
101dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    /**
102dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     * Removes the mapping at the given index.
103dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     */
104dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    public void removeAt(int index) {
105dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        System.arraycopy(mKeys, index + 1, mKeys, index, mSize - (index + 1));
106dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        System.arraycopy(mValues, index + 1, mValues, index, mSize - (index + 1));
107dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        mSize--;
108dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    }
109dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey
110dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    /**
111dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     * Adds a mapping from the specified key to the specified value,
112dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     * replacing the previous mapping from the specified key if there
113dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     * was one.
114dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     */
115dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    public void put(long key, long value) {
116dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        int i = Arrays.binarySearch(mKeys, 0, mSize, key);
117dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey
118dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        if (i >= 0) {
119dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey            mValues[i] = value;
120dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        } else {
121dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey            i = ~i;
122dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey
123dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey            if (mSize >= mKeys.length) {
124dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey                growKeyAndValueArrays(mSize + 1);
125dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey            }
126dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey
127dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey            if (mSize - i != 0) {
128dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey                System.arraycopy(mKeys, i, mKeys, i + 1, mSize - i);
129dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey                System.arraycopy(mValues, i, mValues, i + 1, mSize - i);
130dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey            }
131dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey
132dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey            mKeys[i] = key;
133dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey            mValues[i] = value;
134dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey            mSize++;
135dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        }
136dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    }
137dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey
138dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    /**
139dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     * Returns the number of key-value mappings that this SparseIntArray
140dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     * currently stores.
141dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     */
142dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    public int size() {
143dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        return mSize;
144dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    }
145dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey
146dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    /**
147dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     * Given an index in the range <code>0...size()-1</code>, returns
148dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     * the key from the <code>index</code>th key-value mapping that this
149dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     * SparseLongArray stores.
150dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     */
151dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    public long keyAt(int index) {
152dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        return mKeys[index];
153dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    }
154dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey
155dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    /**
156dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     * Given an index in the range <code>0...size()-1</code>, returns
157dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     * the value from the <code>index</code>th key-value mapping that this
158dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     * SparseLongArray stores.
159dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     */
160dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    public long valueAt(int index) {
161dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        return mValues[index];
162dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    }
163dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey
164dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    /**
165dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     * Returns the index for which {@link #keyAt} would return the
166dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     * specified key, or a negative number if the specified
167dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     * key is not mapped.
168dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     */
169dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    public int indexOfKey(long key) {
170dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        return Arrays.binarySearch(mKeys, 0, mSize, key);
171dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    }
172dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey
173dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    /**
174dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     * Returns an index for which {@link #valueAt} would return the
175dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     * specified key, or a negative number if no keys map to the
176dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     * specified value.
177dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     * Beware that this is a linear search, unlike lookups by key,
178dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     * and that multiple keys can map to the same value and this will
179dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     * find only one of them.
180dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     */
181dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    public int indexOfValue(long value) {
182dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        for (int i = 0; i < mSize; i++)
183dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey            if (mValues[i] == value)
184dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey                return i;
185dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey
186dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        return -1;
187dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    }
188dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey
189dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    /**
190dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     * Removes all key-value mappings from this SparseIntArray.
191dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     */
192dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    public void clear() {
193dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        mSize = 0;
194dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    }
195dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey
196dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    /**
197dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     * Puts a key/value pair into the array, optimizing for the case where
198dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     * the key is greater than all existing keys in the array.
199dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     */
200dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    public void append(long key, long value) {
201dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        if (mSize != 0 && key <= mKeys[mSize - 1]) {
202dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey            put(key, value);
203dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey            return;
204dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        }
205dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey
206dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        int pos = mSize;
207dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        if (pos >= mKeys.length) {
208dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey            growKeyAndValueArrays(pos + 1);
209dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        }
210dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey
211dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        mKeys[pos] = key;
212dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        mValues[pos] = value;
213dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        mSize = pos + 1;
214dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    }
215dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey
216dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    private void growKeyAndValueArrays(int minNeededSize) {
217dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        int n = ArrayUtils.idealLongArraySize(minNeededSize);
218dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey
219dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        long[] nkeys = new long[n];
220dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        long[] nvalues = new long[n];
221dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey
222dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        System.arraycopy(mKeys, 0, nkeys, 0, mKeys.length);
223dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        System.arraycopy(mValues, 0, nvalues, 0, mValues.length);
224dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey
225dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        mKeys = nkeys;
226dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        mValues = nvalues;
227dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    }
228dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey}
229