//===========================================================================// // File: sfeskt.cc // // Project: MUNGA Brick: Connection Engine // // Contents: Implementation details for safe socket class // //---------------------------------------------------------------------------// // Date Who Modification // // -------- --- ---------------------------------------------------------- // // 09/29/94 ECH Initial coding. // // 10/28/94 JMA Made compatible with SGI CC and merged with iterator // // 11/03/94 ECH Made compatible with BC4.0 // // 12/12/94 ECH Changed release mechanism // //---------------------------------------------------------------------------// // Copyright (C) 1994-1995, Virtual World Entertainment, Inc. // // PROPRIETARY AND CONFIDENTIAL // //===========================================================================// #include #pragma hdrstop #if !defined(SFESKT_HPP) #include #endif // //########################################################################### // 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"); }