#ifndef __STR_ARRAY_H__
#define __STR_ARRAY_H__

#include "cstring.h"

class V2_CLASS_API CStrArray
{
private:
	CString **m_ppData;
	int m_iSize;
	int m_iBufferSize;

public:
	CStrArray();
	CStrArray(int p_iSize);
	CStrArray(CStrArray &p_obj);
	~CStrArray();

public:
	void Clear();
	int Add(const char *aszNewData);
	int GetSize() const;	// inline
	int SetSize(int aiNewSize);
	
	char *GetAt(int aiIndex) const;
	void SetAt(int aiIndex, char *aszNewData);	// inline
	CString GetAtLast(void) const;
	int InsertAt(const int p_iIndex, const char *p_szNewData);
	int RemoveAt(const int p_iIndex);

	bool IsEmpty(void) const { return (m_iSize == 0) ? true : false; }
	bool IsIn(const char *aszData) const;	// inline
	int Find(const char *aszData) const;	// inline

	void RemoveLast(void);
	void RemoveAll(void);

	CString &operator[](int p_iIndex) const;
	CStrArray &operator=(const CStrArray &p_obj);	// inline

	void SetNull(void) { RemoveAll(); }
	bool IsValid(void) const { return (m_iSize > 0) ? true : false; }
	CString Repr(const char *p_szSep=", ", bool p_bInfo=false) const;

	void FreeExtra();
	void Sort(void);
	CString Join(const char *aszSep);

};


#endif	// __STR_ARRAY_H__
