// EdIRICLs.hpp : header file
//

#ifndef _EDIRICLS_HPP_
#define _EDIRICLS_HPP_

#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000

#include <afxtempl.h>

#include "EdIRIC.hpp"

/////////////////////////////////////////////////////////////////////////////
// class CPA_EdIR_IntermediateCodeList
/////////////////////////////////////////////////////////////////////////////

class CPA_Actor;

class CPA_EdIR_IntermediateCodeList
{
	private:
		class CPA_EdIR_IntermediateCodeNode
		{
			public:
				CPA_EdIR_IntermediateCode			*m_pclData;
				CPA_EdIR_IntermediateCodeNode	*m_pclNextNode;

			CPA_EdIR_IntermediateCodeNode(CPA_EdIR_IntermediateCode *);
			~CPA_EdIR_IntermediateCodeNode();
		};

	private:
		CPA_EdIR_IntermediateCodeNode	*m_pclIntermediateCodeHead;
		CPA_EdIR_IntermediateCodeNode	*m_pclIntermediateCodeTail;
		long													m_lNbEntries;

	public:
		CPA_EdIR_IntermediateCodeList();
		CPA_EdIR_IntermediateCodeList(CPA_EdIR_IntermediateCodeList &);
		~CPA_EdIR_IntermediateCodeList();

		void	m_fn_vDestroyAndRemoveAllEntries();
		void	m_fn_vMakeEmpty();

		BOOL											IsEmpty();
		long											GetCount();
		void											AddTail(CPA_EdIR_IntermediateCode *);
		POSITION									FindIndex(long);
		POSITION									GetHeadPosition();
		CPA_EdIR_IntermediateCode	*GetAt(POSITION);
		CPA_EdIR_IntermediateCode	*GetNext(POSITION &);
		CPA_EdIR_IntermediateCode	*GetHead();
		CPA_EdIR_IntermediateCode	*GetTail();

		void	m_fn_vAdd(long,tdeNodeType,long,CPA_Actor *pclModel=NULL);
		void	m_fn_vAdd(long,tdeNodeType,double);
		void	m_fn_vAdd(long,tdeNodeType,CString);
		void	m_fn_vAdd(CPA_EdIR_IntermediateCode *);

		void	m_fn_vConcat(CPA_EdIR_IntermediateCodeList &);

		CPA_EdIR_IntermediateCodeList operator =(CPA_EdIR_IntermediateCodeList &);
		CPA_EdIR_IntermediateCodeList operator =(CPA_EdIR_IntermediateCode *);

		CString						m_fn_csGetValue(long);
		long							m_fn_lGetIndex(long);
		double						m_fn_dfGetValue(long);
		MTH3D_tdstVector	m_fn_tdstGetVector(long);

		void							m_fn_vSetIndex(long,long);
		void							m_fn_vSetModel(long,CPA_Actor *);
};

#endif //_EDIRICLS_HPP_
