#pragma once
#include <windows.h>

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

#define MAX_STRTABLE_STRING		2048

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

class CStr
{
protected:
	char *szString;
public:
	char *GetString(void);
	bool SetString(char *szNewString);
	bool CompareString(char *szComapreString);

	CStr(){szString = false;}
	~CStr(){if(szString)delete szString;}
};

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

class CStrEntry
{
protected:
	int iNumEntryColumns;
	CStr **EntryColumns;
public:
	char *GetEntryColumn(int iEntryColumn);
	bool SetEntryColumn(int iEntryColumn, char *szNewString);
	int AddEntryColumn(char *szNewString);
	bool CompareEntryColumn(int iEntryColumn, char *szComapreString);
	int iGetNumColumns(void);
	int iGetNextEmptyColumn(void);
	int iFindColumn(char *szColumn);

	CStrEntry(){iNumEntryColumns = false; EntryColumns = false;}
	~CStrEntry(){if(EntryColumns)delete EntryColumns;}
};

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

class CStrTable
{
protected:
	int iNumEntries;
	CStrEntry **Entries;
	CStrEntry *Columns;
public:
	int iGetNumColumns(void);
	int iGetNumEntries(void);
	int iGetNumEntryColumns(int iEntry);
	int iGetNextEmptyEntry(void);
	int iGetNextEmptyColumn(void);

	int iFindNextEntry(int iStartEntrySearch, char *szColumn, char *szEntryString);
	int iFindNextEntry(int iStartEntrySearch, int iColumn, char *szEntryString);
	int iFindEntry(int iColumn, char *szEntryString);
	int iFindEntry(char *szColumn, char *szEntryString);

	int iFindColumn(char *szColumn);

	char *GetColumn(int iColumn);
	bool SetColumn(int iColumn, char *szNewString);
	int AddColumn(char *szNewString);

	int AddEntry(void);
	bool RemoveEntry(int iEntry);
	char *GetEntryColumn(int iEntry, int iColumn);
	bool SetEntryColumn(int iEntry, int iColumn, char *szNewString);
	char *GetEntryColumn(int iEntry, char *szColumn);
	bool SetEntryColumn(int iEntry, char *szColumn, char *szNewString);

	void ClearColumns(void);
	void ClearEntries(void);

	CStrTable(){Columns = new CStrEntry; iNumEntries = false; Entries = false;}
	~CStrTable(){if(Columns)delete Columns; if(Entries)delete Entries;}
};

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