1e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman/* 2e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * Copyright (C) 2009 The Android Open Source Project 3e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * 4e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * Licensed under the Apache License, Version 2.0 (the "License"); 5e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * you may not use this file except in compliance with the License. 6e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * You may obtain a copy of the License at 7e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * 8e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * http://www.apache.org/licenses/LICENSE-2.0 9e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * 10e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * Unless required by applicable law or agreed to in writing, software 11e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * distributed under the License is distributed on an "AS IS" BASIS, 12e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * See the License for the specific language governing permissions and 14e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * limitations under the License. 15e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman */ 16e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 17e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman// 18e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman// Sortable array of strings. STL-ish, but STL-free. 19e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman// 20e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman#ifndef _LIBS_MEDIA_STRING_ARRAY_H 21e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman#define _LIBS_MEDIA_STRING_ARRAY_H 22e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 23e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman#include <stdlib.h> 24e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman#include <string.h> 25e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 26e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramannamespace android { 27e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 28e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman// 29e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman// An expanding array of strings. Add, get, sort, delete. 30e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman// 31e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramanclass StringArray { 32e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramanpublic: 33e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman StringArray(); 34e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman virtual ~StringArray(); 35e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 36e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman // 37e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman // Add a string. A copy of the string is made. 38e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman // 39e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman bool push_back(const char* str); 40e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 41e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman // 42e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman // Delete an entry. 43e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman // 44e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman void erase(int idx); 45e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 46e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman // 47e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman // Sort the array. 48e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman // 49e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman void sort(int (*compare)(const void*, const void*)); 50e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 51e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman // 52e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman // Pass this to the sort routine to do an ascending alphabetical sort. 53e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman // 54e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman static int cmpAscendingAlpha(const void* pstr1, const void* pstr2); 55e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 56e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman // 57e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman // Get the #of items in the array. 58e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman // 59e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman inline int size(void) const { return mCurrent; } 60e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 61e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman // 62e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman // Return entry N. 63e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman // [should use operator[] here] 64e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman // 65e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman const char* getEntry(int idx) const { 66e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman return (unsigned(idx) >= unsigned(mCurrent)) ? NULL : mArray[idx]; 67e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman } 68e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 69e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman // 70e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman // Set entry N to specified string. 71e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman // [should use operator[] here] 72e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman // 73e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman void setEntry(int idx, const char* str); 74e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 75e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramanprivate: 76e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman int mMax; 77e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman int mCurrent; 78e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman char** mArray; 79e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman}; 80e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 81e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman}; // namespace android 82e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 83e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman#endif // _LIBS_MEDIA_STRING_ARRAY_H 84