1861aa2f0c9136298380496bd78d6a18e69331c53Mathias Agopian/* 2861aa2f0c9136298380496bd78d6a18e69331c53Mathias Agopian * Copyright (C) 2009 The Android Open Source Project 3861aa2f0c9136298380496bd78d6a18e69331c53Mathias Agopian * 4861aa2f0c9136298380496bd78d6a18e69331c53Mathias Agopian * Licensed under the Apache License, Version 2.0 (the "License"); 5861aa2f0c9136298380496bd78d6a18e69331c53Mathias Agopian * you may not use this file except in compliance with the License. 6861aa2f0c9136298380496bd78d6a18e69331c53Mathias Agopian * You may obtain a copy of the License at 7861aa2f0c9136298380496bd78d6a18e69331c53Mathias Agopian * 8861aa2f0c9136298380496bd78d6a18e69331c53Mathias Agopian * http://www.apache.org/licenses/LICENSE-2.0 9861aa2f0c9136298380496bd78d6a18e69331c53Mathias Agopian * 10861aa2f0c9136298380496bd78d6a18e69331c53Mathias Agopian * Unless required by applicable law or agreed to in writing, software 11861aa2f0c9136298380496bd78d6a18e69331c53Mathias Agopian * distributed under the License is distributed on an "AS IS" BASIS, 12861aa2f0c9136298380496bd78d6a18e69331c53Mathias Agopian * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13861aa2f0c9136298380496bd78d6a18e69331c53Mathias Agopian * See the License for the specific language governing permissions and 14861aa2f0c9136298380496bd78d6a18e69331c53Mathias Agopian * limitations under the License. 15861aa2f0c9136298380496bd78d6a18e69331c53Mathias Agopian */ 16861aa2f0c9136298380496bd78d6a18e69331c53Mathias Agopian 17861aa2f0c9136298380496bd78d6a18e69331c53Mathias Agopian// 18861aa2f0c9136298380496bd78d6a18e69331c53Mathias Agopian// Sortable array of strings. STL-ish, but STL-free. 19861aa2f0c9136298380496bd78d6a18e69331c53Mathias Agopian// 20861aa2f0c9136298380496bd78d6a18e69331c53Mathias Agopian#ifndef _LIBS_UTILS_STRING_ARRAY_H 21861aa2f0c9136298380496bd78d6a18e69331c53Mathias Agopian#define _LIBS_UTILS_STRING_ARRAY_H 22861aa2f0c9136298380496bd78d6a18e69331c53Mathias Agopian 23861aa2f0c9136298380496bd78d6a18e69331c53Mathias Agopian#include <stdlib.h> 24861aa2f0c9136298380496bd78d6a18e69331c53Mathias Agopian#include <string.h> 25861aa2f0c9136298380496bd78d6a18e69331c53Mathias Agopian 26861aa2f0c9136298380496bd78d6a18e69331c53Mathias Agopiannamespace android { 27861aa2f0c9136298380496bd78d6a18e69331c53Mathias Agopian 28861aa2f0c9136298380496bd78d6a18e69331c53Mathias Agopian// 29861aa2f0c9136298380496bd78d6a18e69331c53Mathias Agopian// An expanding array of strings. Add, get, sort, delete. 30861aa2f0c9136298380496bd78d6a18e69331c53Mathias Agopian// 31861aa2f0c9136298380496bd78d6a18e69331c53Mathias Agopianclass StringArray { 32861aa2f0c9136298380496bd78d6a18e69331c53Mathias Agopianpublic: 33861aa2f0c9136298380496bd78d6a18e69331c53Mathias Agopian StringArray(); 34861aa2f0c9136298380496bd78d6a18e69331c53Mathias Agopian virtual ~StringArray(); 35861aa2f0c9136298380496bd78d6a18e69331c53Mathias Agopian 36861aa2f0c9136298380496bd78d6a18e69331c53Mathias Agopian // 37861aa2f0c9136298380496bd78d6a18e69331c53Mathias Agopian // Add a string. A copy of the string is made. 38861aa2f0c9136298380496bd78d6a18e69331c53Mathias Agopian // 39861aa2f0c9136298380496bd78d6a18e69331c53Mathias Agopian bool push_back(const char* str); 40861aa2f0c9136298380496bd78d6a18e69331c53Mathias Agopian 41861aa2f0c9136298380496bd78d6a18e69331c53Mathias Agopian // 42861aa2f0c9136298380496bd78d6a18e69331c53Mathias Agopian // Delete an entry. 43861aa2f0c9136298380496bd78d6a18e69331c53Mathias Agopian // 44861aa2f0c9136298380496bd78d6a18e69331c53Mathias Agopian void erase(int idx); 45861aa2f0c9136298380496bd78d6a18e69331c53Mathias Agopian 46861aa2f0c9136298380496bd78d6a18e69331c53Mathias Agopian // 47861aa2f0c9136298380496bd78d6a18e69331c53Mathias Agopian // Sort the array. 48861aa2f0c9136298380496bd78d6a18e69331c53Mathias Agopian // 49861aa2f0c9136298380496bd78d6a18e69331c53Mathias Agopian void sort(int (*compare)(const void*, const void*)); 50861aa2f0c9136298380496bd78d6a18e69331c53Mathias Agopian 51861aa2f0c9136298380496bd78d6a18e69331c53Mathias Agopian // 52861aa2f0c9136298380496bd78d6a18e69331c53Mathias Agopian // Pass this to the sort routine to do an ascending alphabetical sort. 53861aa2f0c9136298380496bd78d6a18e69331c53Mathias Agopian // 54861aa2f0c9136298380496bd78d6a18e69331c53Mathias Agopian static int cmpAscendingAlpha(const void* pstr1, const void* pstr2); 55861aa2f0c9136298380496bd78d6a18e69331c53Mathias Agopian 56861aa2f0c9136298380496bd78d6a18e69331c53Mathias Agopian // 57861aa2f0c9136298380496bd78d6a18e69331c53Mathias Agopian // Get the #of items in the array. 58861aa2f0c9136298380496bd78d6a18e69331c53Mathias Agopian // 59861aa2f0c9136298380496bd78d6a18e69331c53Mathias Agopian inline int size(void) const { return mCurrent; } 60861aa2f0c9136298380496bd78d6a18e69331c53Mathias Agopian 61861aa2f0c9136298380496bd78d6a18e69331c53Mathias Agopian // 62861aa2f0c9136298380496bd78d6a18e69331c53Mathias Agopian // Return entry N. 63861aa2f0c9136298380496bd78d6a18e69331c53Mathias Agopian // [should use operator[] here] 64861aa2f0c9136298380496bd78d6a18e69331c53Mathias Agopian // 65861aa2f0c9136298380496bd78d6a18e69331c53Mathias Agopian const char* getEntry(int idx) const { 66861aa2f0c9136298380496bd78d6a18e69331c53Mathias Agopian return (unsigned(idx) >= unsigned(mCurrent)) ? NULL : mArray[idx]; 67861aa2f0c9136298380496bd78d6a18e69331c53Mathias Agopian } 68861aa2f0c9136298380496bd78d6a18e69331c53Mathias Agopian 69861aa2f0c9136298380496bd78d6a18e69331c53Mathias Agopian // 70861aa2f0c9136298380496bd78d6a18e69331c53Mathias Agopian // Set entry N to specified string. 71861aa2f0c9136298380496bd78d6a18e69331c53Mathias Agopian // [should use operator[] here] 72861aa2f0c9136298380496bd78d6a18e69331c53Mathias Agopian // 73861aa2f0c9136298380496bd78d6a18e69331c53Mathias Agopian void setEntry(int idx, const char* str); 74861aa2f0c9136298380496bd78d6a18e69331c53Mathias Agopian 75861aa2f0c9136298380496bd78d6a18e69331c53Mathias Agopianprivate: 76861aa2f0c9136298380496bd78d6a18e69331c53Mathias Agopian int mMax; 77861aa2f0c9136298380496bd78d6a18e69331c53Mathias Agopian int mCurrent; 78861aa2f0c9136298380496bd78d6a18e69331c53Mathias Agopian char** mArray; 79861aa2f0c9136298380496bd78d6a18e69331c53Mathias Agopian}; 80861aa2f0c9136298380496bd78d6a18e69331c53Mathias Agopian 81861aa2f0c9136298380496bd78d6a18e69331c53Mathias Agopian}; // namespace android 82861aa2f0c9136298380496bd78d6a18e69331c53Mathias Agopian 83861aa2f0c9136298380496bd78d6a18e69331c53Mathias Agopian#endif // _LIBS_UTILS_STRING_ARRAY_H 84