#ifndef __MZSTD_MAP_H__
#define __MZSTD_MAP_H__

#include "mzstdCommon.h"
#include "mzObject.h"
#include "mzString.h"
#include "mzPointerList.h"

namespace mzstd {

class CmzPair;

DECLSPEC_MZSTD VOID WINAPI swap(LONG& val1, LONG& val2);
DECLSPEC_MZSTD VOID WINAPI swap(BOOL& val1, BOOL& val2);

// Klasa CmzPair
class DECLSPEC_MZSTD CmzPair {
public:
	CmzString first;	// pierwsza przechowywana wartość
	CmzString second;	// druga przechowywana wartość
	WINAPI CmzPair(CmzString first, CmzString second);
    virtual WINAPI ~CmzPair();
}; // class CmzPair



// Klasa CMap - przechowuje ArrayList wskaźników na obiekty CmzPairExt
class DECLSPEC_MZSTD CmzMap : public CmzObject {
public:
    // konstruktor domyślny
	WINAPI CmzMap(ULONG capacity = 100L);
    virtual WINAPI ~CmzMap();

    VOID WINAPI set(CmzString first, CmzString second);
    CmzString WINAPI get(CmzString first);
    BOOL WINAPI del(CmzString first);
    inline BOOL WINAPI contains(CmzString first);
    inline ULONG WINAPI size() const { return this->_items->size(); };
    VOID WINAPI clear();
    
protected:
    VOID WINAPI _commonInit();

private:
    // atrybut this->_items przechowuje ArrayList wskaźników na obiekty CmzPairExt
    CmzPointerList* _items;
}; // class CMap

}

#endif
