StringArray.h revision 1f7d356fa094b975ad2ebf9217be6abba2c70825
11f7d356fa094b975ad2ebf9217be6abba2c70825Mathias Agopian/* 21f7d356fa094b975ad2ebf9217be6abba2c70825Mathias Agopian * Copyright (C) 2009 The Android Open Source Project 31f7d356fa094b975ad2ebf9217be6abba2c70825Mathias Agopian * 41f7d356fa094b975ad2ebf9217be6abba2c70825Mathias Agopian * Licensed under the Apache License, Version 2.0 (the "License"); 51f7d356fa094b975ad2ebf9217be6abba2c70825Mathias Agopian * you may not use this file except in compliance with the License. 61f7d356fa094b975ad2ebf9217be6abba2c70825Mathias Agopian * You may obtain a copy of the License at 71f7d356fa094b975ad2ebf9217be6abba2c70825Mathias Agopian * 81f7d356fa094b975ad2ebf9217be6abba2c70825Mathias Agopian * http://www.apache.org/licenses/LICENSE-2.0 91f7d356fa094b975ad2ebf9217be6abba2c70825Mathias Agopian * 101f7d356fa094b975ad2ebf9217be6abba2c70825Mathias Agopian * Unless required by applicable law or agreed to in writing, software 111f7d356fa094b975ad2ebf9217be6abba2c70825Mathias Agopian * distributed under the License is distributed on an "AS IS" BASIS, 121f7d356fa094b975ad2ebf9217be6abba2c70825Mathias Agopian * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131f7d356fa094b975ad2ebf9217be6abba2c70825Mathias Agopian * See the License for the specific language governing permissions and 141f7d356fa094b975ad2ebf9217be6abba2c70825Mathias Agopian * limitations under the License. 151f7d356fa094b975ad2ebf9217be6abba2c70825Mathias Agopian */ 161f7d356fa094b975ad2ebf9217be6abba2c70825Mathias Agopian 171f7d356fa094b975ad2ebf9217be6abba2c70825Mathias Agopian// 181f7d356fa094b975ad2ebf9217be6abba2c70825Mathias Agopian// Sortable array of strings. STL-ish, but STL-free. 191f7d356fa094b975ad2ebf9217be6abba2c70825Mathias Agopian// 201f7d356fa094b975ad2ebf9217be6abba2c70825Mathias Agopian#ifndef _LIBS_MEDIA_STRING_ARRAY_H 211f7d356fa094b975ad2ebf9217be6abba2c70825Mathias Agopian#define _LIBS_MEDIA_STRING_ARRAY_H 221f7d356fa094b975ad2ebf9217be6abba2c70825Mathias Agopian 231f7d356fa094b975ad2ebf9217be6abba2c70825Mathias Agopian#include <stdlib.h> 241f7d356fa094b975ad2ebf9217be6abba2c70825Mathias Agopian#include <string.h> 251f7d356fa094b975ad2ebf9217be6abba2c70825Mathias Agopian 261f7d356fa094b975ad2ebf9217be6abba2c70825Mathias Agopiannamespace android { 271f7d356fa094b975ad2ebf9217be6abba2c70825Mathias Agopian 281f7d356fa094b975ad2ebf9217be6abba2c70825Mathias Agopian// 291f7d356fa094b975ad2ebf9217be6abba2c70825Mathias Agopian// An expanding array of strings. Add, get, sort, delete. 301f7d356fa094b975ad2ebf9217be6abba2c70825Mathias Agopian// 311f7d356fa094b975ad2ebf9217be6abba2c70825Mathias Agopianclass StringArray { 321f7d356fa094b975ad2ebf9217be6abba2c70825Mathias Agopianpublic: 331f7d356fa094b975ad2ebf9217be6abba2c70825Mathias Agopian StringArray(); 341f7d356fa094b975ad2ebf9217be6abba2c70825Mathias Agopian virtual ~StringArray(); 351f7d356fa094b975ad2ebf9217be6abba2c70825Mathias Agopian 361f7d356fa094b975ad2ebf9217be6abba2c70825Mathias Agopian // 371f7d356fa094b975ad2ebf9217be6abba2c70825Mathias Agopian // Add a string. A copy of the string is made. 381f7d356fa094b975ad2ebf9217be6abba2c70825Mathias Agopian // 391f7d356fa094b975ad2ebf9217be6abba2c70825Mathias Agopian bool push_back(const char* str); 401f7d356fa094b975ad2ebf9217be6abba2c70825Mathias Agopian 411f7d356fa094b975ad2ebf9217be6abba2c70825Mathias Agopian // 421f7d356fa094b975ad2ebf9217be6abba2c70825Mathias Agopian // Delete an entry. 431f7d356fa094b975ad2ebf9217be6abba2c70825Mathias Agopian // 441f7d356fa094b975ad2ebf9217be6abba2c70825Mathias Agopian void erase(int idx); 451f7d356fa094b975ad2ebf9217be6abba2c70825Mathias Agopian 461f7d356fa094b975ad2ebf9217be6abba2c70825Mathias Agopian // 471f7d356fa094b975ad2ebf9217be6abba2c70825Mathias Agopian // Sort the array. 481f7d356fa094b975ad2ebf9217be6abba2c70825Mathias Agopian // 491f7d356fa094b975ad2ebf9217be6abba2c70825Mathias Agopian void sort(int (*compare)(const void*, const void*)); 501f7d356fa094b975ad2ebf9217be6abba2c70825Mathias Agopian 511f7d356fa094b975ad2ebf9217be6abba2c70825Mathias Agopian // 521f7d356fa094b975ad2ebf9217be6abba2c70825Mathias Agopian // Pass this to the sort routine to do an ascending alphabetical sort. 531f7d356fa094b975ad2ebf9217be6abba2c70825Mathias Agopian // 541f7d356fa094b975ad2ebf9217be6abba2c70825Mathias Agopian static int cmpAscendingAlpha(const void* pstr1, const void* pstr2); 551f7d356fa094b975ad2ebf9217be6abba2c70825Mathias Agopian 561f7d356fa094b975ad2ebf9217be6abba2c70825Mathias Agopian // 571f7d356fa094b975ad2ebf9217be6abba2c70825Mathias Agopian // Get the #of items in the array. 581f7d356fa094b975ad2ebf9217be6abba2c70825Mathias Agopian // 591f7d356fa094b975ad2ebf9217be6abba2c70825Mathias Agopian inline int size(void) const { return mCurrent; } 601f7d356fa094b975ad2ebf9217be6abba2c70825Mathias Agopian 611f7d356fa094b975ad2ebf9217be6abba2c70825Mathias Agopian // 621f7d356fa094b975ad2ebf9217be6abba2c70825Mathias Agopian // Return entry N. 631f7d356fa094b975ad2ebf9217be6abba2c70825Mathias Agopian // [should use operator[] here] 641f7d356fa094b975ad2ebf9217be6abba2c70825Mathias Agopian // 651f7d356fa094b975ad2ebf9217be6abba2c70825Mathias Agopian const char* getEntry(int idx) const { 661f7d356fa094b975ad2ebf9217be6abba2c70825Mathias Agopian return (unsigned(idx) >= unsigned(mCurrent)) ? NULL : mArray[idx]; 671f7d356fa094b975ad2ebf9217be6abba2c70825Mathias Agopian } 681f7d356fa094b975ad2ebf9217be6abba2c70825Mathias Agopian 691f7d356fa094b975ad2ebf9217be6abba2c70825Mathias Agopian // 701f7d356fa094b975ad2ebf9217be6abba2c70825Mathias Agopian // Set entry N to specified string. 711f7d356fa094b975ad2ebf9217be6abba2c70825Mathias Agopian // [should use operator[] here] 721f7d356fa094b975ad2ebf9217be6abba2c70825Mathias Agopian // 731f7d356fa094b975ad2ebf9217be6abba2c70825Mathias Agopian void setEntry(int idx, const char* str); 741f7d356fa094b975ad2ebf9217be6abba2c70825Mathias Agopian 751f7d356fa094b975ad2ebf9217be6abba2c70825Mathias Agopianprivate: 761f7d356fa094b975ad2ebf9217be6abba2c70825Mathias Agopian int mMax; 771f7d356fa094b975ad2ebf9217be6abba2c70825Mathias Agopian int mCurrent; 781f7d356fa094b975ad2ebf9217be6abba2c70825Mathias Agopian char** mArray; 791f7d356fa094b975ad2ebf9217be6abba2c70825Mathias Agopian}; 801f7d356fa094b975ad2ebf9217be6abba2c70825Mathias Agopian 811f7d356fa094b975ad2ebf9217be6abba2c70825Mathias Agopian}; // namespace android 821f7d356fa094b975ad2ebf9217be6abba2c70825Mathias Agopian 831f7d356fa094b975ad2ebf9217be6abba2c70825Mathias Agopian#endif // _LIBS_MEDIA_STRING_ARRAY_H 84