#include "munga.h" #pragma hdrstop #include "sfeskt.h" // //########################################################################### // SafeSocket //########################################################################### // SafeSocket::SafeSocket(Node *node): Socket(node) { iteratorHead = NULL; } // //########################################################################### // ~SafeSocket //########################################################################### // SafeSocket::~SafeSocket() { Verify(iteratorHead == NULL); } // //########################################################################### // TestInstance //########################################################################### // Logical SafeSocket::TestInstance() const { Socket::TestInstance(); if (iteratorHead != NULL) { Check_Signature(iteratorHead); } return True; } // //########################################################################### // SendIteratorMemo //########################################################################### // void SafeSocket::SendIteratorMemo( IteratorMemo memo, void *content ) { SafeIterator *iterator; for ( iterator = iteratorHead; iterator != NULL; iterator = iterator->nextIterator ) { Check(iterator); iterator->ReceiveMemo(memo, content); } } // //########################################################################### // SafeIterator //########################################################################### // SafeIterator::SafeIterator(SafeSocket *safeSocket): SocketIterator(safeSocket) { // // Link iterator into sockets set of iterators // Check(safeSocket); if ((nextIterator = safeSocket->iteratorHead) != NULL) { Check(nextIterator); nextIterator->prevIterator = this; } prevIterator = NULL; safeSocket->iteratorHead = this; } // //########################################################################### // ~SafeIterator //########################################################################### // SafeIterator::~SafeIterator() { SafeSocket *safeSocket = Cast_Object(SafeSocket*, socket); // // Remove iterator from sockets set of iterators // Check(safeSocket); if (safeSocket->iteratorHead == this) { safeSocket->iteratorHead = nextIterator; } if (prevIterator != NULL) { Check(prevIterator); prevIterator->nextIterator = nextIterator; } if (nextIterator != NULL) { Check(nextIterator); nextIterator->prevIterator = prevIterator; } } // //########################################################################### // TestInstance //########################################################################### // Logical SafeIterator::TestInstance() const { SocketIterator::TestInstance(); if (prevIterator != NULL) { Check_Signature(prevIterator); } if (nextIterator != NULL) { Check_Signature(nextIterator); } return True; } // //########################################################################### // ReceiveMemo //########################################################################### // void SafeIterator::ReceiveMemo( IteratorMemo, void* ) { Fail("SafeIterator::ReceiveMemo - Should never reach here"); }