// cArray.cpp: implementation of the cArray class.
//
//////////////////////////////////////////////////////////////////////

#include <stdio.h>
#include "cArray.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

template<class Type>
cArray<Type>::cArray(){
	Elements = NULL;
}

template<class Type>
cArray<Type>::~cArray(){
//	Destroy();
	if(Elements) delete [] Elements;
}

template<class Type>
BOOL cArray<Type>::Create(int Size){
	Destroy();
	Elements = new Type[Size];
	ElementCount = Size;

	return Elements != NULL;
}

template<class Type>
void cArray<Type>::Destroy(){
	if(Elements) delete [] Elements;
	Elements = NULL;
}


template<class Type>
BOOL cArray<Type>::Load(cMedium *pMedium){
	int i, Count;

	pMedium->Read(&Count, sizeof(int));
	if(Elements){ // 메모리가 할당된 경우
		if(Count > ElementCount) return FALSE;
	}else{ // 메모리가 할당되지 않은 경우
		// 새로 메모리를 할당한다.
		if(!Create(Count)) return FALSE;
	}
	// 메모리로 데이터를 읽어들인다.
	for(i = 0; i < Count; i ++)
		Elements[i].Load(pMedium);

	return TRUE;
}

template<class Type>
BOOL cArray<Type>::Save(cMedium *pMedium){
	if(!Elements) return FALSE;
	pMedium->Write(&ElementCount, sizeof(int));
	for(int i = 0; i < ElementCount; i ++)
		Elements[i].Save(pMedium);
	return TRUE;
}


