// std.h --
// This is part of Metakit, see http://www.equi4.com/metakit.html

/** @file
 * Configuration header for STL-based builds
 */

#define q4_STD 1

#include "mk4str.h"

#include <vector>

/////////////////////////////////////////////////////////////////////////////

template <class T> class c4_ArrayT
{
#if defined(_MSC_VER) || defined(__BORLANDC__)
    d4_std::vector<T, d4_std::allocator<T> > _vector;
#else
    d4_std::vector<T, d4_std::alloc> _vector;
#endif

public:
    c4_ArrayT() {}
    ~c4_ArrayT() {}

    int GetSize()const
    {
        return _vector.size();
    }
    void SetSize(int nNewSize, int =  - 1)
    {
        _vector.resize(nNewSize);
    }

    T GetAt(int nIndex)const
    {
        return _vector[nIndex];
    }
    T &ElementAt(int nIndex)
    {
        return _vector[nIndex];
    }

    void SetAt(int nIndex, const T &newElement)
    {
        _vector[nIndex] = newElement;
    }

    int Add(const T &newElement)
    {
        int n = _vector.size();
        _vector.push_back(newElement);
        return n;
    }

    void InsertAt(int nIndex, const T &newElement, int nCount = 1)
    {
        _vector.insert(&_vector[nIndex], nCount, newElement);
    }

    void RemoveAt(int nIndex, int nCount = 1)
    {
        _vector.erase(&_vector[nIndex], &_vector[nIndex + nCount]);
    }
};

typedef c4_ArrayT < t4_i32 > c4_DWordArray;
typedef c4_ArrayT < void * > c4_PtrArray;
typedef c4_ArrayT < c4_String > c4_StringArray;

/////////////////////////////////////////////////////////////////////////////
