//===========================================================================// // File: sfeskt.cc // // Project: MUNGA Brick: Connection Engine // // Contents: Implementation details for safe m_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 "StuffHeaders.hpp" // //########################################################################### // SafeSocket //########################################################################### // SafeSocket::SafeSocket(void *) { m_iteratorHead = NULL; } // //########################################################################### // ~SafeSocket //########################################################################### // SafeSocket::~SafeSocket() { Check_Object(this); Verify(m_iteratorHead == NULL); } // //########################################################################### // TestInstance //########################################################################### // void SafeSocket::TestInstance() { Socket::TestInstance(); if (m_iteratorHead != NULL) { Check_Signature(m_iteratorHead); } } // //########################################################################### // SendIteratorMemo //########################################################################### // void SafeSocket::SendIteratorMemo( IteratorMemo memo, void *content ) { Check_Object(this); SafeIterator *iterator; for ( iterator = m_iteratorHead; iterator != NULL; iterator = iterator->m_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 ((m_nextIterator = safeSocket->m_iteratorHead) != NULL) { Check_Object(m_nextIterator); m_nextIterator->m_prevIterator = this; } m_prevIterator = NULL; safeSocket->m_iteratorHead = this; } // //########################################################################### // ~SafeIterator //########################################################################### // SafeIterator::~SafeIterator() { Check_Object(this); SafeSocket *safeSocket = Cast_Object(SafeSocket*, m_socket); // // Remove iterator from sockets set of iterators // Check_Object(safeSocket); if (safeSocket->m_iteratorHead == this) { safeSocket->m_iteratorHead = m_nextIterator; } if (m_prevIterator != NULL) { Check_Object(m_prevIterator); m_prevIterator->m_nextIterator = m_nextIterator; } if (m_nextIterator != NULL) { Check_Object(m_nextIterator); m_nextIterator->m_prevIterator = m_prevIterator; } } // //########################################################################### // TestInstance //########################################################################### // void SafeIterator::TestInstance() const { SocketIterator::TestInstance(); if (m_prevIterator != NULL) { Check_Signature(m_prevIterator); } if (m_nextIterator != NULL) { Check_Signature(m_nextIterator); } } // //########################################################################### // ReceiveMemo //########################################################################### // void SafeIterator::ReceiveMemo( IteratorMemo, void* ) { Check_Object(this); STOP(("SafeIterator::ReceiveMemo - Should never reach here")); }