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

📄 safesocket.cpp

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

#include "StuffHeaders.hpp"

//
//###########################################################################
// SafeSocket
//###########################################################################
//	
SafeSocket::SafeSocket(Node *node):
	Socket(node)
{
	iteratorHead = NULL;
}

//
//###########################################################################
// ~SafeSocket
//###########################################################################
//	
SafeSocket::~SafeSocket()
{
	Check_Object(this);
	Verify(iteratorHead == NULL);
}

//
//###########################################################################
// TestInstance
//###########################################################################
//
void
	SafeSocket::TestInstance()
{
	Socket::TestInstance();
	if (iteratorHead != NULL)
	{
		Check_Signature(iteratorHead);
	}
}

//
//###########################################################################
// SendIteratorMemo
//###########################################################################
//
void
	SafeSocket::SendIteratorMemo(
		IteratorMemo memo,
		void *content
	)
{
	Check_Object(this);
	SafeIterator *iterator;
	
	for (
		iterator = iteratorHead;
		iterator != NULL;
		iterator = iterator->nextIterator
	) {
		Check_Object(iterator);
		iterator->ReceiveMemo(memo, content);
	}
}

//
//###########################################################################
// SafeIterator
//###########################################################################
//
SafeIterator::SafeIterator(SafeSocket *safeSocket):
	SocketIterator(safeSocket)
{
	//
	// Link iterator into sockets set of iterators
	//
   Check_Object(safeSocket);
	if ((nextIterator = safeSocket->iteratorHead) != NULL)
	{
		Check_Object(nextIterator);
		nextIterator->prevIterator = this;
	}
	prevIterator = NULL;
	safeSocket->iteratorHead = this;
}

//
//###########################################################################
// ~SafeIterator
//###########################################################################
//
SafeIterator::~SafeIterator()
{
	Check_Object(this);
	SafeSocket *safeSocket = Cast_Object(SafeSocket*, socket);

	//
	// Remove iterator from sockets set of iterators
	//
	Check_Object(safeSocket);
	if (safeSocket->iteratorHead == this)
	{
		safeSocket->iteratorHead = nextIterator;
	}
	if (prevIterator != NULL) 
	{
		Check_Object(prevIterator);
		prevIterator->nextIterator = nextIterator;
	}
	if (nextIterator != NULL) 
	{
		Check_Object(nextIterator);
		nextIterator->prevIterator = prevIterator;
	}
}

//
//###########################################################################
// TestInstance
//###########################################################################
//
void
	SafeIterator::TestInstance() const
{
	SocketIterator::TestInstance();

	if (prevIterator != NULL) 
	{
		Check_Signature(prevIterator);
	}
	if (nextIterator != NULL) 
	{
		Check_Signature(nextIterator);
	}
}

//
//###########################################################################
// ReceiveMemo
//###########################################################################
//
void
	SafeIterator::ReceiveMemo(
      IteratorMemo,
      void*
   )
{
	Check_Object(this);
	STOP(("SafeIterator::ReceiveMemo - Should never reach here"));
}

⌨️ 快捷键说明

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