/*
 * Copyright (C) 2007 Esmertec AG.
 * Copyright (C) 2007 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#ifndef WBXML_STL_H
#define WBXML_STL_H

#ifdef PLATFORM_ANDROID

#include <utils/String8.h>
#include <utils/Vector.h>
using android::String8;
using android::Vector;

class string: public String8
{
public:
    string() {}
    string(const string& o) :
        String8(o)
    {
    }
    string(const char* o) :
        String8(o)
    {
    }
    string(const char* o, size_t len) :
        String8(o, len)
    {
    }
    string & operator=(const char* other)
    {
        setTo(other);
        return *this;
    }
    string & assign(const char* other, int len)
    {
        setTo(other, len);
        return *this;
    }
    bool empty(void) const
    {
        return size() == 0;
    }
    const char *c_str(void) const
    {
        return String8::string();
    }
    string & operator+=(const string & o)
    {
        append(o);
        return *this;
    }
    string & operator+=(const char * other)
    {
        append(other);
        return *this;
    }
    string & operator+=(char ch)
    {
        char c[2] = {ch, 0};    // temporary workaround for String8.append(str, len) bug
        append(c, 1);
        return *this;
    }
    void clear(void)
    {
        setTo("");
    }
};

template <class T>
class vector: public Vector<T>
{
public:
    T & back(void)
    {
        return Vector<T>::editTop();
    }
    const T & back(void) const
    {
        return Vector<T>::top();
    }
    void push_back(const T& val)
    {
        Vector<T>::push(val);
    }
    void pop_back(void)
    {
        Vector<T>::pop();
    }
    bool empty(void) const
    {
        return Vector<T>::isEmpty();
    }
};

#else

#include <string>
#include <vector>
using std::string;
using std::vector;

#endif

#endif