KeyedVector.h revision e6d77c593d1a25b45c23bf9292ec7ee09fc14b6e
1edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project/*
2edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Copyright (C) 2005 The Android Open Source Project
3edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project *
4edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
5edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * you may not use this file except in compliance with the License.
6edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * You may obtain a copy of the License at
7edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project *
8edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
9edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project *
10edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
11edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
12edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * See the License for the specific language governing permissions and
14edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * limitations under the License.
15edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project */
16edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
17edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#ifndef ANDROID_KEYED_VECTOR_H
18edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#define ANDROID_KEYED_VECTOR_H
19edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
20edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <assert.h>
21edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <stdint.h>
22edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <sys/types.h>
23edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
24edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <utils/SortedVector.h>
25edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <utils/TypeHelpers.h>
26edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <utils/Errors.h>
27edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
28edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ---------------------------------------------------------------------------
29edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
30edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectnamespace android {
31edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
32edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttemplate <typename KEY, typename VALUE>
33edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectclass KeyedVector
34edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{
35edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectpublic:
36edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    typedef KEY    key_type;
37edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    typedef VALUE  value_type;
38edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
39edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    inline                  KeyedVector();
40edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
41edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    /*
42edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     * empty the vector
43edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     */
44edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
45edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    inline  void            clear()                     { mVector.clear(); }
46edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
47edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    /*!
48edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     * vector stats
49edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     */
50edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
51edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    //! returns number of items in the vector
52edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    inline  size_t          size() const                { return mVector.size(); }
53edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    //! returns wether or not the vector is empty
54edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    inline  bool            isEmpty() const             { return mVector.isEmpty(); }
55edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    //! returns how many items can be stored without reallocating the backing store
56edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    inline  size_t          capacity() const            { return mVector.capacity(); }
57edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    //! setst the capacity. capacity can never be reduced less than size()
58edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    inline ssize_t          setCapacity(size_t size)    { return mVector.setCapacity(size); }
59edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
60edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    /*!
61edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     * accessors
62edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     */
63edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            const VALUE&    valueFor(const KEY& key) const;
64edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            const VALUE&    valueAt(size_t index) const;
65edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            const KEY&      keyAt(size_t index) const;
66edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            ssize_t         indexOfKey(const KEY& key) const;
67edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
68edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    /*!
6987548ee2b380c1e76086d21047854fa3425a8f06Glenn Kasten     * modifying the array
70edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     */
71edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
72edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            VALUE&          editValueFor(const KEY& key);
73edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            VALUE&          editValueAt(size_t index);
74edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
75edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            /*!
76edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project             * add/insert/replace items
77edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project             */
78edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
79edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            ssize_t         add(const KEY& key, const VALUE& item);
80edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            ssize_t         replaceValueFor(const KEY& key, const VALUE& item);
81edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            ssize_t         replaceValueAt(size_t index, const VALUE& item);
82edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
83edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    /*!
84edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     * remove items
85edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     */
86edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
87edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            ssize_t         removeItem(const KEY& key);
88edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            ssize_t         removeItemsAt(size_t index, size_t count = 1);
89edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
90edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectprivate:
91edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            SortedVector< key_value_pair_t<KEY, VALUE> >    mVector;
92edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project};
93edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
94e6d77c593d1a25b45c23bf9292ec7ee09fc14b6eJeff Brown// KeyedVector<KEY, VALUE> can be trivially moved using memcpy() because its
95e6d77c593d1a25b45c23bf9292ec7ee09fc14b6eJeff Brown// underlying SortedVector can be trivially moved.
96e6d77c593d1a25b45c23bf9292ec7ee09fc14b6eJeff Browntemplate<typename KEY, typename VALUE> struct trait_trivial_move<KeyedVector<KEY, VALUE> > {
97e6d77c593d1a25b45c23bf9292ec7ee09fc14b6eJeff Brown    enum { value = trait_trivial_move<SortedVector< key_value_pair_t<KEY, VALUE> > >::value };
98e6d77c593d1a25b45c23bf9292ec7ee09fc14b6eJeff Brown};
99e6d77c593d1a25b45c23bf9292ec7ee09fc14b6eJeff Brown
100e6d77c593d1a25b45c23bf9292ec7ee09fc14b6eJeff Brown
101edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ---------------------------------------------------------------------------
102edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
103edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project/**
104edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Variation of KeyedVector that holds a default value to return when
105edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * valueFor() is called with a key that doesn't exist.
106edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project */
107edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttemplate <typename KEY, typename VALUE>
108edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectclass DefaultKeyedVector : public KeyedVector<KEY, VALUE>
109edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{
110edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectpublic:
111edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    inline                  DefaultKeyedVector(const VALUE& defValue = VALUE());
112edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            const VALUE&    valueFor(const KEY& key) const;
113edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
114edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectprivate:
115edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            VALUE                                           mDefault;
116edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project};
117edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
118edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ---------------------------------------------------------------------------
119edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
120edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttemplate<typename KEY, typename VALUE> inline
121edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectKeyedVector<KEY,VALUE>::KeyedVector()
122edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{
123edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
124edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
125edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttemplate<typename KEY, typename VALUE> inline
126edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectssize_t KeyedVector<KEY,VALUE>::indexOfKey(const KEY& key) const {
127edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    return mVector.indexOf( key_value_pair_t<KEY,VALUE>(key) );
128edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
129edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
130edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttemplate<typename KEY, typename VALUE> inline
131edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectconst VALUE& KeyedVector<KEY,VALUE>::valueFor(const KEY& key) const {
132579c2b4dc12543f53cf3c885b4a8525cfe4a533dAl Sutton    ssize_t i = this->indexOfKey(key);
133edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    assert(i>=0);
134edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    return mVector.itemAt(i).value;
135edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
136edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
137edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttemplate<typename KEY, typename VALUE> inline
138edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectconst VALUE& KeyedVector<KEY,VALUE>::valueAt(size_t index) const {
139edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    return mVector.itemAt(index).value;
140edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
141edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
142edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttemplate<typename KEY, typename VALUE> inline
143edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectconst KEY& KeyedVector<KEY,VALUE>::keyAt(size_t index) const {
144edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    return mVector.itemAt(index).key;
145edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
146edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
147edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttemplate<typename KEY, typename VALUE> inline
148edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectVALUE& KeyedVector<KEY,VALUE>::editValueFor(const KEY& key) {
149579c2b4dc12543f53cf3c885b4a8525cfe4a533dAl Sutton    ssize_t i = this->indexOfKey(key);
150edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    assert(i>=0);
151edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    return mVector.editItemAt(i).value;
152edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
153edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
154edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttemplate<typename KEY, typename VALUE> inline
155edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectVALUE& KeyedVector<KEY,VALUE>::editValueAt(size_t index) {
156edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    return mVector.editItemAt(index).value;
157edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
158edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
159edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttemplate<typename KEY, typename VALUE> inline
160edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectssize_t KeyedVector<KEY,VALUE>::add(const KEY& key, const VALUE& value) {
161edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    return mVector.add( key_value_pair_t<KEY,VALUE>(key, value) );
162edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
163edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
164edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttemplate<typename KEY, typename VALUE> inline
165edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectssize_t KeyedVector<KEY,VALUE>::replaceValueFor(const KEY& key, const VALUE& value) {
166edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    key_value_pair_t<KEY,VALUE> pair(key, value);
167edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    mVector.remove(pair);
168edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    return mVector.add(pair);
169edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
170edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
171edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttemplate<typename KEY, typename VALUE> inline
172edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectssize_t KeyedVector<KEY,VALUE>::replaceValueAt(size_t index, const VALUE& item) {
173edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    if (index<size()) {
1742b2fb1a69394edd58666b89597c560442ccc3a90Mathias Agopian        mVector.editItemAt(index).value = item;
175edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project        return index;
176edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    }
177edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    return BAD_INDEX;
178edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
179edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
180edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttemplate<typename KEY, typename VALUE> inline
181edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectssize_t KeyedVector<KEY,VALUE>::removeItem(const KEY& key) {
182edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    return mVector.remove(key_value_pair_t<KEY,VALUE>(key));
183edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
184edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
185edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttemplate<typename KEY, typename VALUE> inline
186edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectssize_t KeyedVector<KEY, VALUE>::removeItemsAt(size_t index, size_t count) {
187edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    return mVector.removeItemsAt(index, count);
188edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
189edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
190edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ---------------------------------------------------------------------------
191edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
192edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttemplate<typename KEY, typename VALUE> inline
193edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectDefaultKeyedVector<KEY,VALUE>::DefaultKeyedVector(const VALUE& defValue)
194edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    : mDefault(defValue)
195edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{
196edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
197edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
198edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttemplate<typename KEY, typename VALUE> inline
199edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectconst VALUE& DefaultKeyedVector<KEY,VALUE>::valueFor(const KEY& key) const {
200579c2b4dc12543f53cf3c885b4a8525cfe4a533dAl Sutton    ssize_t i = this->indexOfKey(key);
201edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    return i >= 0 ? KeyedVector<KEY,VALUE>::valueAt(i) : mDefault;
202edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
203edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
204edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; // namespace android
205edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
206edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ---------------------------------------------------------------------------
207edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
208edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#endif // ANDROID_KEYED_VECTOR_H
209