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