KeyedVector.h revision 92a979a92c34b7de609ce2b1662c73bb8a2728b9
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); }
5992a979a92c34b7de609ce2b1662c73bb8a2728b9Mathias Agopian
6092a979a92c34b7de609ce2b1662c73bb8a2728b9Mathias Agopian    // returns true if the arguments is known to be identical to this vector
6192a979a92c34b7de609ce2b1662c73bb8a2728b9Mathias Agopian    inline bool isIdenticalTo(const KeyedVector& rhs) const;
6292a979a92c34b7de609ce2b1662c73bb8a2728b9Mathias Agopian
63edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    /*!
64edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     * accessors
65edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     */
66edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            const VALUE&    valueFor(const KEY& key) const;
67edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            const VALUE&    valueAt(size_t index) const;
68edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            const KEY&      keyAt(size_t index) const;
69edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            ssize_t         indexOfKey(const KEY& key) const;
7092a979a92c34b7de609ce2b1662c73bb8a2728b9Mathias Agopian            const VALUE&    operator[] (size_t index) const;
71edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
72edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    /*!
7387548ee2b380c1e76086d21047854fa3425a8f06Glenn Kasten     * modifying the array
74edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     */
75edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
76edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            VALUE&          editValueFor(const KEY& key);
77edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            VALUE&          editValueAt(size_t index);
78edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
79edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            /*!
80edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project             * add/insert/replace items
81edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project             */
82edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
83edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            ssize_t         add(const KEY& key, const VALUE& item);
84edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            ssize_t         replaceValueFor(const KEY& key, const VALUE& item);
85edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            ssize_t         replaceValueAt(size_t index, const VALUE& item);
86edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
87edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    /*!
88edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     * remove items
89edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     */
90edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
91edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            ssize_t         removeItem(const KEY& key);
92edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            ssize_t         removeItemsAt(size_t index, size_t count = 1);
93edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
94edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectprivate:
95edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            SortedVector< key_value_pair_t<KEY, VALUE> >    mVector;
96edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project};
97edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
98e6d77c593d1a25b45c23bf9292ec7ee09fc14b6eJeff Brown// KeyedVector<KEY, VALUE> can be trivially moved using memcpy() because its
99e6d77c593d1a25b45c23bf9292ec7ee09fc14b6eJeff Brown// underlying SortedVector can be trivially moved.
100e6d77c593d1a25b45c23bf9292ec7ee09fc14b6eJeff Browntemplate<typename KEY, typename VALUE> struct trait_trivial_move<KeyedVector<KEY, VALUE> > {
101e6d77c593d1a25b45c23bf9292ec7ee09fc14b6eJeff Brown    enum { value = trait_trivial_move<SortedVector< key_value_pair_t<KEY, VALUE> > >::value };
102e6d77c593d1a25b45c23bf9292ec7ee09fc14b6eJeff Brown};
103e6d77c593d1a25b45c23bf9292ec7ee09fc14b6eJeff Brown
104e6d77c593d1a25b45c23bf9292ec7ee09fc14b6eJeff Brown
105edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ---------------------------------------------------------------------------
106edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
107edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project/**
108edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Variation of KeyedVector that holds a default value to return when
109edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * valueFor() is called with a key that doesn't exist.
110edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project */
111edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttemplate <typename KEY, typename VALUE>
112edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectclass DefaultKeyedVector : public KeyedVector<KEY, VALUE>
113edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{
114edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectpublic:
115edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    inline                  DefaultKeyedVector(const VALUE& defValue = VALUE());
116edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            const VALUE&    valueFor(const KEY& key) const;
117edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
118edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectprivate:
119edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            VALUE                                           mDefault;
120edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project};
121edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
122edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ---------------------------------------------------------------------------
123edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
124edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttemplate<typename KEY, typename VALUE> inline
125edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectKeyedVector<KEY,VALUE>::KeyedVector()
126edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{
127edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
128edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
129edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttemplate<typename KEY, typename VALUE> inline
13092a979a92c34b7de609ce2b1662c73bb8a2728b9Mathias Agopianbool KeyedVector<KEY,VALUE>::isIdenticalTo(const KeyedVector<KEY,VALUE>& rhs) const {
13192a979a92c34b7de609ce2b1662c73bb8a2728b9Mathias Agopian    return mVector.array() == rhs.mVector.array();
13292a979a92c34b7de609ce2b1662c73bb8a2728b9Mathias Agopian}
13392a979a92c34b7de609ce2b1662c73bb8a2728b9Mathias Agopian
13492a979a92c34b7de609ce2b1662c73bb8a2728b9Mathias Agopiantemplate<typename KEY, typename VALUE> inline
135edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectssize_t KeyedVector<KEY,VALUE>::indexOfKey(const KEY& key) const {
136edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    return mVector.indexOf( key_value_pair_t<KEY,VALUE>(key) );
137edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
138edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
139edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttemplate<typename KEY, typename VALUE> inline
140edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectconst VALUE& KeyedVector<KEY,VALUE>::valueFor(const KEY& key) const {
141579c2b4dc12543f53cf3c885b4a8525cfe4a533dAl Sutton    ssize_t i = this->indexOfKey(key);
142edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    assert(i>=0);
143edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    return mVector.itemAt(i).value;
144edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
145edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
146edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttemplate<typename KEY, typename VALUE> inline
147edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectconst VALUE& KeyedVector<KEY,VALUE>::valueAt(size_t index) const {
148edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    return mVector.itemAt(index).value;
149edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
150edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
151edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttemplate<typename KEY, typename VALUE> inline
15292a979a92c34b7de609ce2b1662c73bb8a2728b9Mathias Agopianconst VALUE& KeyedVector<KEY,VALUE>::operator[] (size_t index) const {
15392a979a92c34b7de609ce2b1662c73bb8a2728b9Mathias Agopian    return valueAt(index);
15492a979a92c34b7de609ce2b1662c73bb8a2728b9Mathias Agopian}
15592a979a92c34b7de609ce2b1662c73bb8a2728b9Mathias Agopian
15692a979a92c34b7de609ce2b1662c73bb8a2728b9Mathias Agopiantemplate<typename KEY, typename VALUE> inline
157edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectconst KEY& KeyedVector<KEY,VALUE>::keyAt(size_t index) const {
158edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    return mVector.itemAt(index).key;
159edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
160edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
161edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttemplate<typename KEY, typename VALUE> inline
162edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectVALUE& KeyedVector<KEY,VALUE>::editValueFor(const KEY& key) {
163579c2b4dc12543f53cf3c885b4a8525cfe4a533dAl Sutton    ssize_t i = this->indexOfKey(key);
164edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    assert(i>=0);
165edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    return mVector.editItemAt(i).value;
166edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
167edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
168edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttemplate<typename KEY, typename VALUE> inline
169edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectVALUE& KeyedVector<KEY,VALUE>::editValueAt(size_t index) {
170edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    return mVector.editItemAt(index).value;
171edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
172edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
173edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttemplate<typename KEY, typename VALUE> inline
174edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectssize_t KeyedVector<KEY,VALUE>::add(const KEY& key, const VALUE& value) {
175edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    return mVector.add( key_value_pair_t<KEY,VALUE>(key, value) );
176edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
177edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
178edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttemplate<typename KEY, typename VALUE> inline
179edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectssize_t KeyedVector<KEY,VALUE>::replaceValueFor(const KEY& key, const VALUE& value) {
180edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    key_value_pair_t<KEY,VALUE> pair(key, value);
181edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    mVector.remove(pair);
182edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    return mVector.add(pair);
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>::replaceValueAt(size_t index, const VALUE& item) {
187edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    if (index<size()) {
1882b2fb1a69394edd58666b89597c560442ccc3a90Mathias Agopian        mVector.editItemAt(index).value = item;
189edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project        return index;
190edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    }
191edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    return BAD_INDEX;
192edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
193edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
194edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttemplate<typename KEY, typename VALUE> inline
195edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectssize_t KeyedVector<KEY,VALUE>::removeItem(const KEY& key) {
196edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    return mVector.remove(key_value_pair_t<KEY,VALUE>(key));
197edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
198edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
199edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttemplate<typename KEY, typename VALUE> inline
200edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectssize_t KeyedVector<KEY, VALUE>::removeItemsAt(size_t index, size_t count) {
201edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    return mVector.removeItemsAt(index, count);
202edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
203edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
204edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ---------------------------------------------------------------------------
205edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
206edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttemplate<typename KEY, typename VALUE> inline
207edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectDefaultKeyedVector<KEY,VALUE>::DefaultKeyedVector(const VALUE& defValue)
208edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    : mDefault(defValue)
209edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{
210edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
211edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
212edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttemplate<typename KEY, typename VALUE> inline
213edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectconst VALUE& DefaultKeyedVector<KEY,VALUE>::valueFor(const KEY& key) const {
214579c2b4dc12543f53cf3c885b4a8525cfe4a533dAl Sutton    ssize_t i = this->indexOfKey(key);
215edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    return i >= 0 ? KeyedVector<KEY,VALUE>::valueAt(i) : mDefault;
216edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
217edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
218edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; // namespace android
219edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
220edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ---------------------------------------------------------------------------
221edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
222edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#endif // ANDROID_KEYED_VECTOR_H
223