⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 reference.h

📁 骨骼动画....把魔兽模型解出的代码..
💻 H
字号:
//+-----------------------------------------------------------------------------
//| Inclusion guard
//+-----------------------------------------------------------------------------
#ifndef MAGOS_REFERENCE_H
#define MAGOS_REFERENCE_H


//+-----------------------------------------------------------------------------
//| Included files
//+-----------------------------------------------------------------------------
#include "ReferenceObject.h"


//+-----------------------------------------------------------------------------
//| Reference class
//+-----------------------------------------------------------------------------
template <class TYPE, class OBJECT_TYPE>
class REFERENCE
{
	public:
		CONSTRUCTOR REFERENCE();
		CONSTRUCTOR REFERENCE(CONST REFERENCE<TYPE, OBJECT_TYPE>& CopyObject);
		DESTRUCTOR ~REFERENCE();

		CONST REFERENCE<TYPE, OBJECT_TYPE>& operator =(CONST REFERENCE<TYPE, OBJECT_TYPE>& CopyObject);

		VOID SetData(TYPE NewData);
		TYPE GetData() CONST;
		OBJECT_TYPE GetObjectData() CONST;

		VOID Attach(REFERENCE_OBJECT<TYPE, OBJECT_TYPE>& NewReferenceObject);
		VOID Detach();

		BOOL IsAttached() CONST;

	protected:
		REFERENCE_OBJECT<TYPE, OBJECT_TYPE>* ReferenceObject;
		REFERENCE<TYPE, OBJECT_TYPE>* NextReference;
		REFERENCE<TYPE, OBJECT_TYPE>* PreviousReference;

		TYPE Data;

		friend class REFERENCE_OBJECT<TYPE, OBJECT_TYPE>;
};


//+-----------------------------------------------------------------------------
//| Constructor
//+-----------------------------------------------------------------------------
template <class TYPE, class OBJECT_TYPE>
REFERENCE<TYPE, OBJECT_TYPE>::REFERENCE()
{
	ReferenceObject = NULL;
	NextReference = NULL;
	PreviousReference = NULL;
}


//+-----------------------------------------------------------------------------
//| Copy constructor
//+-----------------------------------------------------------------------------
template <class TYPE, class OBJECT_TYPE>
REFERENCE<TYPE, OBJECT_TYPE>::REFERENCE(CONST REFERENCE<TYPE, OBJECT_TYPE>& CopyObject)
{
	ReferenceObject = NULL;
	NextReference = NULL;
	PreviousReference = NULL;

	if(CopyObject.IsAttached()) Attach(*CopyObject.GetObjectData());
}


//+-----------------------------------------------------------------------------
//| Destructor
//+-----------------------------------------------------------------------------
template <class TYPE, class OBJECT_TYPE>
REFERENCE<TYPE, OBJECT_TYPE>::~REFERENCE()
{
	Detach();
}


//+-----------------------------------------------------------------------------
//| Assignment operator
//+-----------------------------------------------------------------------------
template <class TYPE, class OBJECT_TYPE>
CONST REFERENCE<TYPE, OBJECT_TYPE>& REFERENCE<TYPE, OBJECT_TYPE>::operator =(CONST REFERENCE<TYPE, OBJECT_TYPE>& CopyObject)
{
	Detach();

	if(CopyObject.IsAttached()) Attach(*CopyObject.ReferenceObject);

	return (*this);
}


//+-----------------------------------------------------------------------------
//| Sets a new data
//+-----------------------------------------------------------------------------
template <class TYPE, class OBJECT_TYPE>
VOID REFERENCE<TYPE, OBJECT_TYPE>::SetData(TYPE NewData)
{
	Data = NewData;
}


//+-----------------------------------------------------------------------------
//| Returns the data
//+-----------------------------------------------------------------------------
template <class TYPE, class OBJECT_TYPE>
TYPE REFERENCE<TYPE, OBJECT_TYPE>::GetData() CONST
{
	return Data;
}


//+-----------------------------------------------------------------------------
//| Returns the object data
//+-----------------------------------------------------------------------------
template <class TYPE, class OBJECT_TYPE>
OBJECT_TYPE REFERENCE<TYPE, OBJECT_TYPE>::GetObjectData() CONST
{
	return ReferenceObject->GetData();
}


//+-----------------------------------------------------------------------------
//| Attaches the reference to a reference object
//+-----------------------------------------------------------------------------
template <class TYPE, class OBJECT_TYPE>
VOID REFERENCE<TYPE, OBJECT_TYPE>::Attach(REFERENCE_OBJECT<TYPE, OBJECT_TYPE>& NewReferenceObject)
{
	Detach();

	ReferenceObject = &NewReferenceObject;
	ReferenceObject->Add(this);
}


//+-----------------------------------------------------------------------------
//| Detaches the reference from its reference object
//+-----------------------------------------------------------------------------
template <class TYPE, class OBJECT_TYPE>
VOID REFERENCE<TYPE, OBJECT_TYPE>::Detach()
{
	if(ReferenceObject != NULL)
	{
		ReferenceObject->Remove(this);
		ReferenceObject = NULL;
	}

	NextReference = NULL;
	PreviousReference = NULL;
}


//+-----------------------------------------------------------------------------
//| Checks if the reference is attached
//+-----------------------------------------------------------------------------
template <class TYPE, class OBJECT_TYPE>
BOOL REFERENCE<TYPE, OBJECT_TYPE>::IsAttached() CONST
{
	return (ReferenceObject != NULL);
}


//+-----------------------------------------------------------------------------
//| End of inclusion guard
//+-----------------------------------------------------------------------------
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -