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

📄 slot.cpp

📁 机甲指挥官2源代码
💻 CPP
字号:
//===========================================================================//
// File:	slot.cc                                                          //
// Contents: Implementation details for the slot class                       //
//---------------------------------------------------------------------------//
// Copyright (C) Microsoft Corporation. All rights reserved.                 //
//===========================================================================//

#include "StuffHeaders.hpp"

MemoryBlock*
	SlotLink::AllocatedMemory = NULL;

//
//#############################################################################
//#############################################################################
//
void
	SlotLink::InitializeClass(
		size_t block_count,
		size_t block_delta
	)
{
	Verify(!AllocatedMemory);
	AllocatedMemory =
		new MemoryBlock(
			sizeof(SlotLink),
			block_count,
			block_delta,
			"Stuff::SlotLink",
			ConnectionEngineHeap
		);
}

//
//#############################################################################
//#############################################################################
//
void
	SlotLink::TerminateClass()
{
	delete AllocatedMemory;
	AllocatedMemory = NULL;
}

//
//###########################################################################
// SlotLink
//###########################################################################
//
SlotLink::SlotLink(
	Slot *slot,
	Plug *plug
):
	Link(slot, plug)
{
}

//
//###########################################################################
// ~SlotLink
//###########################################################################
//
SlotLink::~SlotLink()
{
	Check_Object(this);
	Slot *slot = Cast_Object(Slot*, socket);
	
	//
	//-------------------------------------------------
	// Make sure the link is not referenced by the slot
	//-------------------------------------------------
	//
	Check_Object(slot);
	Verify(slot->slotLink == this);
	slot->slotLink = NULL;

	//
	//------------------------------------------
	// Remove this link from any plug references
	//------------------------------------------
	//
	ReleaseFromPlug();

	//
	//-------------------------------------------------------------
	// Tell the node to release this link.  Note that this link
	// is not referenced by the plug or the slot at this point in
	// time.
	//-------------------------------------------------------------
	//
	if (slot->GetReleaseNode() != NULL)
	{
		Check_Object(slot->GetReleaseNode());
		slot->GetReleaseNode()->ReleaseLinkHandler(slot, plug);
	}
}

//
//###########################################################################
// Slot
//###########################################################################
//
Slot::Slot(
	Node *node
):
	Socket(node)
{
	slotLink = NULL;
}

//
//###########################################################################
// ~Slot
//###########################################################################
//
Slot::~Slot()
{
	Check_Object(this);
	SetReleaseNode(NULL);
	if (slotLink != NULL)
	{
		Unregister_Object(slotLink);
		delete slotLink;
	}
}

//
//###########################################################################
// TestInstance
//###########################################################################
//
void
	Slot::TestInstance()
{
	Socket::TestInstance();
	if (slotLink != NULL)
	{
		Check_Object(slotLink);
	}
}

//
//###########################################################################
// Remove
//###########################################################################
//
void
	Slot::Remove()
{
	Check_Object(this);
	if (slotLink != NULL)
	{
		Unregister_Object(slotLink);
		delete slotLink;
		slotLink = NULL;
	}
}

//
//###########################################################################
// AddImplementation
//###########################################################################
//
void
	Slot::AddImplementation(
		Plug *plug
	)
{
	Check_Object(this);
	Verify(slotLink == NULL);
	slotLink = new SlotLink(this, plug);
	Register_Object(slotLink);
}

//
//###########################################################################
// GetCurrentPlug
//###########################################################################
//
Plug*
	Slot::GetCurrentPlug()
{
	Check_Object(this);
	if (slotLink != NULL)
	{
		Check_Object(slotLink);
		return slotLink->GetPlug();
	}
	return NULL;
}

⌨️ 快捷键说明

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