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
2469973992d531ae7df20916c6fb3034b08a6d53c4Mathias Agopian#include <cutils/log.h>
2569973992d531ae7df20916c6fb3034b08a6d53c4Mathias Agopian
26edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <utils/SortedVector.h>
27edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <utils/TypeHelpers.h>
28edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <utils/Errors.h>
29edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
30edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ---------------------------------------------------------------------------
31edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
32edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectnamespace android {
33edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
34edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttemplate <typename KEY, typename VALUE>
35edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectclass KeyedVector
36edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{
37edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectpublic:
38edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    typedef KEY    key_type;
39edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    typedef VALUE  value_type;
40edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
41edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    inline                  KeyedVector();
42edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
43edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    /*
44edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     * empty the vector
45edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     */
46edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
47edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    inline  void            clear()                     { mVector.clear(); }
48edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
49edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    /*!
50edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     * vector stats
51edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     */
52edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
53edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    //! returns number of items in the vector
54edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    inline  size_t          size() const                { return mVector.size(); }
5569973992d531ae7df20916c6fb3034b08a6d53c4Mathias Agopian    //! returns whether or not the vector is empty
56edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    inline  bool            isEmpty() const             { return mVector.isEmpty(); }
57edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    //! returns how many items can be stored without reallocating the backing store
58edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    inline  size_t          capacity() const            { return mVector.capacity(); }
5969973992d531ae7df20916c6fb3034b08a6d53c4Mathias Agopian    //! sets the capacity. capacity can never be reduced less than size()
60edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    inline ssize_t          setCapacity(size_t size)    { return mVector.setCapacity(size); }
6192a979a92c34b7de609ce2b1662c73bb8a2728b9Mathias Agopian
6292a979a92c34b7de609ce2b1662c73bb8a2728b9Mathias Agopian    // returns true if the arguments is known to be identical to this vector
6392a979a92c34b7de609ce2b1662c73bb8a2728b9Mathias Agopian    inline bool isIdenticalTo(const KeyedVector& rhs) const;
6492a979a92c34b7de609ce2b1662c73bb8a2728b9Mathias Agopian
65edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    /*!
66edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     * accessors
67edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     */
68edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            const VALUE&    valueFor(const KEY& key) const;
69edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            const VALUE&    valueAt(size_t index) const;
70edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            const KEY&      keyAt(size_t index) const;
71edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            ssize_t         indexOfKey(const KEY& key) const;
7292a979a92c34b7de609ce2b1662c73bb8a2728b9Mathias Agopian            const VALUE&    operator[] (size_t index) const;
73edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
74edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    /*!
7587548ee2b380c1e76086d21047854fa3425a8f06Glenn Kasten     * modifying the array
76edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     */
77edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
78edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            VALUE&          editValueFor(const KEY& key);
79edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            VALUE&          editValueAt(size_t index);
80edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
81edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            /*!
82edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project             * add/insert/replace items
83edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project             */
84edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
85edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            ssize_t         add(const KEY& key, const VALUE& item);
86edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            ssize_t         replaceValueFor(const KEY& key, const VALUE& item);
87edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            ssize_t         replaceValueAt(size_t index, const VALUE& item);
88edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
89edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    /*!
90edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     * remove items
91edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     */
92edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
93edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            ssize_t         removeItem(const KEY& key);
94edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            ssize_t         removeItemsAt(size_t index, size_t count = 1);
95edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
96edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectprivate:
97edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            SortedVector< key_value_pair_t<KEY, VALUE> >    mVector;
98edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project};
99edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
100e6d77c593d1a25b45c23bf9292ec7ee09fc14b6eJeff Brown// KeyedVector<KEY, VALUE> can be trivially moved using memcpy() because its
101e6d77c593d1a25b45c23bf9292ec7ee09fc14b6eJeff Brown// underlying SortedVector can be trivially moved.
102e6d77c593d1a25b45c23bf9292ec7ee09fc14b6eJeff Browntemplate<typename KEY, typename VALUE> struct trait_trivial_move<KeyedVector<KEY, VALUE> > {
103e6d77c593d1a25b45c23bf9292ec7ee09fc14b6eJeff Brown    enum { value = trait_trivial_move<SortedVector< key_value_pair_t<KEY, VALUE> > >::value };
104e6d77c593d1a25b45c23bf9292ec7ee09fc14b6eJeff Brown};
105e6d77c593d1a25b45c23bf9292ec7ee09fc14b6eJeff Brown
106e6d77c593d1a25b45c23bf9292ec7ee09fc14b6eJeff Brown
107edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ---------------------------------------------------------------------------
108edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
109edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project/**
110edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Variation of KeyedVector that holds a default value to return when
111edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * valueFor() is called with a key that doesn't exist.
112edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project */
113edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttemplate <typename KEY, typename VALUE>
114edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectclass DefaultKeyedVector : public KeyedVector<KEY, VALUE>
115edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{
116edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectpublic:
117edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    inline                  DefaultKeyedVector(const VALUE& defValue = VALUE());
118edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            const VALUE&    valueFor(const KEY& key) const;
119edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
120edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectprivate:
121edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            VALUE                                           mDefault;
122edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project};
123edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
124edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ---------------------------------------------------------------------------
125edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
126edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttemplate<typename KEY, typename VALUE> inline
127edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectKeyedVector<KEY,VALUE>::KeyedVector()
128edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{
129edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
130edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
131edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttemplate<typename KEY, typename VALUE> inline
13292a979a92c34b7de609ce2b1662c73bb8a2728b9Mathias Agopianbool KeyedVector<KEY,VALUE>::isIdenticalTo(const KeyedVector<KEY,VALUE>& rhs) const {
13392a979a92c34b7de609ce2b1662c73bb8a2728b9Mathias Agopian    return mVector.array() == rhs.mVector.array();
13492a979a92c34b7de609ce2b1662c73bb8a2728b9Mathias Agopian}
13592a979a92c34b7de609ce2b1662c73bb8a2728b9Mathias Agopian
13692a979a92c34b7de609ce2b1662c73bb8a2728b9Mathias Agopiantemplate<typename KEY, typename VALUE> inline
137edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectssize_t KeyedVector<KEY,VALUE>::indexOfKey(const KEY& key) const {
138edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    return mVector.indexOf( key_value_pair_t<KEY,VALUE>(key) );
139edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
140edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
141edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttemplate<typename KEY, typename VALUE> inline
142edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectconst VALUE& KeyedVector<KEY,VALUE>::valueFor(const KEY& key) const {
143579c2b4dc12543f53cf3c885b4a8525cfe4a533dAl Sutton    ssize_t i = this->indexOfKey(key);
14469973992d531ae7df20916c6fb3034b08a6d53c4Mathias Agopian    LOG_ALWAYS_FATAL_IF(i<0, "%s: key not found", __PRETTY_FUNCTION__);
145edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    return mVector.itemAt(i).value;
146edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
147edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
148edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttemplate<typename KEY, typename VALUE> inline
149edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectconst VALUE& KeyedVector<KEY,VALUE>::valueAt(size_t index) const {
150edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    return mVector.itemAt(index).value;
151edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
152edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
153edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttemplate<typename KEY, typename VALUE> inline
15492a979a92c34b7de609ce2b1662c73bb8a2728b9Mathias Agopianconst VALUE& KeyedVector<KEY,VALUE>::operator[] (size_t index) const {
15592a979a92c34b7de609ce2b1662c73bb8a2728b9Mathias Agopian    return valueAt(index);
15692a979a92c34b7de609ce2b1662c73bb8a2728b9Mathias Agopian}
15792a979a92c34b7de609ce2b1662c73bb8a2728b9Mathias Agopian
15892a979a92c34b7de609ce2b1662c73bb8a2728b9Mathias Agopiantemplate<typename KEY, typename VALUE> inline
159edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectconst KEY& KeyedVector<KEY,VALUE>::keyAt(size_t index) const {
160edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    return mVector.itemAt(index).key;
161edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
162edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
163edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttemplate<typename KEY, typename VALUE> inline
164edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectVALUE& KeyedVector<KEY,VALUE>::editValueFor(const KEY& key) {
165579c2b4dc12543f53cf3c885b4a8525cfe4a533dAl Sutton    ssize_t i = this->indexOfKey(key);
16669973992d531ae7df20916c6fb3034b08a6d53c4Mathias Agopian    LOG_ALWAYS_FATAL_IF(i<0, "%s: key not found", __PRETTY_FUNCTION__);
167edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    return mVector.editItemAt(i).value;
168edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
169edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
170edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttemplate<typename KEY, typename VALUE> inline
171edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectVALUE& KeyedVector<KEY,VALUE>::editValueAt(size_t index) {
172edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    return mVector.editItemAt(index).value;
173edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
174edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
175edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttemplate<typename KEY, typename VALUE> inline
176edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectssize_t KeyedVector<KEY,VALUE>::add(const KEY& key, const VALUE& value) {
177edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    return mVector.add( key_value_pair_t<KEY,VALUE>(key, value) );
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>::replaceValueFor(const KEY& key, const VALUE& value) {
182edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    key_value_pair_t<KEY,VALUE> pair(key, value);
183edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    mVector.remove(pair);
184edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    return mVector.add(pair);
185edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
186edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
187edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttemplate<typename KEY, typename VALUE> inline
188edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectssize_t KeyedVector<KEY,VALUE>::replaceValueAt(size_t index, const VALUE& item) {
189edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    if (index<size()) {
1902b2fb1a69394edd58666b89597c560442ccc3a90Mathias Agopian        mVector.editItemAt(index).value = item;
191edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project        return index;
192edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    }
193edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    return BAD_INDEX;
194edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
195edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
196edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttemplate<typename KEY, typename VALUE> inline
197edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectssize_t KeyedVector<KEY,VALUE>::removeItem(const KEY& key) {
198edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    return mVector.remove(key_value_pair_t<KEY,VALUE>(key));
199edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
200edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
201edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttemplate<typename KEY, typename VALUE> inline
202edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectssize_t KeyedVector<KEY, VALUE>::removeItemsAt(size_t index, size_t count) {
203edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    return mVector.removeItemsAt(index, count);
204edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
205edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
206edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ---------------------------------------------------------------------------
207edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
208edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttemplate<typename KEY, typename VALUE> inline
209edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectDefaultKeyedVector<KEY,VALUE>::DefaultKeyedVector(const VALUE& defValue)
210edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    : mDefault(defValue)
211edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{
212edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
213edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
214edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttemplate<typename KEY, typename VALUE> inline
215edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectconst VALUE& DefaultKeyedVector<KEY,VALUE>::valueFor(const KEY& key) const {
216579c2b4dc12543f53cf3c885b4a8525cfe4a533dAl Sutton    ssize_t i = this->indexOfKey(key);
217edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    return i >= 0 ? KeyedVector<KEY,VALUE>::valueAt(i) : mDefault;
218edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
219edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
220edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; // namespace android
221edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
222edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ---------------------------------------------------------------------------
223edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
224edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#endif // ANDROID_KEYED_VECTOR_H
225