📄 safesocket.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 + -