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