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