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

📄 registeredclass.hpp

📁 机甲指挥官2源代码
💻 HPP
字号:
//===========================================================================//
// File: vdata.hh                                                            //
// Contents: Interface specifications for virtual data                       //
//---------------------------------------------------------------------------//
// Copyright (C) Microsoft Corporation. All rights reserved.                 //
//===========================================================================//

#pragma once

#include "Stuff.hpp"

namespace Stuff {

	class MString;
	class RegisteredClass__ClassData;
	class MemoryStream;

	//##########################################################################
	//#######################    RegisteredClass    ############################
	//##########################################################################

	class RegisteredClass
		#if defined(_ARMOR)
			: public Stuff::Signature
		#endif
	{
		friend RegisteredClass__ClassData;

	public:
		static void
			InitializeClass();
		static void
			TerminateClass();

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// ClassID enumeration
	//
	public:
		typedef int ClassID;
		typedef RegisteredClass__ClassData ClassData;

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Construction, destruction, saving
	//
	public:
		virtual
			~RegisteredClass()
				{}

	protected:
		explicit RegisteredClass(ClassData *class_data);

	private:
		RegisteredClass(const RegisteredClass &);

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Class Data Support
	//
	public:
		ClassData*
			GetClassData() const
				{Check_Object(this); return classData;}
		bool
			IsDerivedFrom(ClassData* parent) const;
		bool
			IsDerivedFrom(ClassID class_id) const;
		bool
			IsDerivedFrom(const char* parent) const;

		static ClassData*
			FindClassData(const char* name);
		static ClassData*
			FindClassData(ClassID class_id)
				{
					Verify(static_cast<unsigned>(class_id) < ClassIDCount);
					return ClassDataArray[class_id];
				}
		static ClassData
			*DefaultData;

	protected:
		ClassData
			*classData;

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Accessors
	//
	public:
		ClassID
			GetClassID() const;
		const char*
			GetClassString() const;
		static ClassID
			AllocateTemporaryClassID()
				{
					Verify(FirstTemporaryClassID < ClassIDCount);
					return FirstTemporaryClassID++;
				}

	private:
		static ClassData*
			ClassDataArray[ClassIDCount];
		static ClassID
			FirstTemporaryClassID;

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Test support
	//
	public:
		void
			TestInstance() const;
	};

	//##########################################################################
	//#####################    Receiver::ClassData    ##########################
	//##########################################################################

	class RegisteredClass__ClassData
		#if defined(_ARMOR)
			: public Stuff::Signature
		#endif
	{
		friend class RegisteredClass;

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Construction, destruction, testing
	//
	public:
		RegisteredClass__ClassData(
			RegisteredClass::ClassID class_id,
			const char *class_name,
			RegisteredClass__ClassData *parent = NULL
		);

		~RegisteredClass__ClassData();

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Inheritance stuff
	//
	public:
		bool
			IsDerivedFrom(RegisteredClass__ClassData* parent);

		RegisteredClass::ClassID
			GetClassID()
				{Check_Object(this); return classID;}
		const char*
			GetClassName()
				{Check_Object(this); return className;}
		RegisteredClass__ClassData*
			GetParentClass()
				{Check_Object(this); return parentClass;}

	protected:
		void
			DeriveClass(RegisteredClass__ClassData* child);

		RegisteredClass__ClassData*
			FindClassData(const char* name);

		RegisteredClass::ClassID
			classID;
		const char
			*className;

		RegisteredClass__ClassData
			*firstChildClass,
			*nextSiblingClass,
			*parentClass;

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Test support
	//
	public:
		void
      	TestInstance();
	};

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	//
	inline bool
		RegisteredClass::IsDerivedFrom(RegisteredClass__ClassData* parent) const
	{
		Check_Object(this);
		Check_Object(classData);
		return classData->IsDerivedFrom(parent);
	}

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	//
	inline bool
		RegisteredClass::IsDerivedFrom(ClassID class_id) const
	{
		Check_Object(this);
		Check_Object(classData);
		return classData->IsDerivedFrom(FindClassData(class_id));
	}

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	//
	inline bool
		RegisteredClass::IsDerivedFrom(const char* parent) const
	{
		Check_Object(this);
		Check_Object(classData);
		return classData->IsDerivedFrom(FindClassData(parent));
	}

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	//
	inline RegisteredClass::ClassID
		RegisteredClass::GetClassID() const
	{
		Check_Object(this);
		RegisteredClass__ClassData *data = GetClassData();
		Check_Object(data);
		return data->GetClassID();
	}

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	//
	inline RegisteredClass::ClassData*
		RegisteredClass::FindClassData(const char* name)
	{
		return DefaultData->FindClassData(name);
	}

}

⌨️ 快捷键说明

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