Files
Cyd 2b8ca921cb Initial full mirror of c:\VWE (source + assets + toolchain + outputs) via Git LFS
Complete disaster-recovery snapshot: engine/game source, game data assets,
VC6 toolchain + DX SDKs, build outputs, deployed game, and _UNUSED archive.
Large binaries in Git LFS; text preserved byte-for-byte (core.autocrlf=false,
no eol attributes). See RECOVERY.md for the one-clone rebuild procedure.
2026-06-24 21:28:16 -05:00

316 lines
8.1 KiB
C++

//===========================================================================//
// File: m_plug.cc //
// Project: MUNGA Brick: Connection Library //
// Contents: Implementation details for plugs and their iterators //
//---------------------------------------------------------------------------//
// Date Who Modification //
// -------- --- -----------------------------------------------------------//
// 09/82/94 ECH Initial coding. //
// 10/20/94 JMA Fixed style stuff, merged PLGITR.CPP, added Remove() to //
// PlugIterator //
// 10/23/94 ECH Added greater deletion safety //
// 10/28/94 JMA Made compatible with SGI CC //
// 11/02/94 ECH Restored base ReceivePlugCommand //
// 11/03/94 ECH Made compatible with BC4.0 //
// 11/03/94 JMA Made constructor/destructor out-of-line, moved the //
// ReleasePlugLink into the virtual data, made compatible //
// with GNU C++ //
// 11/08/94 ECH Made compatible with BC4.0 //
// 12/01/94 JMA Made compatible with SGI CC //
// 12/12/94 ECH Removed release handler //
// 02/16/95 ECH Removed m_plug commands, added node command //
// 06/07/96 ECH Implemented m_socket based remove functionality //
//---------------------------------------------------------------------------//
// Copyright (C) 1994-1995, Virtual World Entertainment, Inc. //
// All Rights reserved worldwide //
// This unpublished sourcecode is PROPRIETARY and CONFIDENTIAL //
//===========================================================================//
#include "StuffHeaders.hpp"
//#############################################################################
//############################### Plug ##################################
//#############################################################################
Plug::ClassData*
Plug::DefaultData = NULL;
HGOSHEAP
Stuff::g_ConnectionEngineHeap = NULL;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
Plug::InitializeClass()
{
Verify(!g_ConnectionEngineHeap);
g_ConnectionEngineHeap = gos_CreateMemoryHeap("ConnectionEngine", 0, Stuff::g_LibraryHeap);
Check_Pointer(g_ConnectionEngineHeap);
Verify(!DefaultData);
DefaultData =
new ClassData(
PlugClassID,
"Stuff::Plug",
RegisteredClass::DefaultData
);
Register_Object(DefaultData);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
Plug::TerminateClass()
{
Check_Object(DefaultData);
delete DefaultData;
DefaultData = NULL;
Check_Pointer(g_ConnectionEngineHeap);
gos_DestroyMemoryHeap(g_ConnectionEngineHeap);
g_ConnectionEngineHeap = NULL;
}
//
//###########################################################################
// ~Plug
//###########################################################################
//
Plug::~Plug()
{
DESTRUCTOR("Plug");
Check_Object(this);
Link *link = m_linkHead;
while (link)
{
DESTRUCTOR("Plug::Link");
Check_Object(link);
Link *next = link->m_nextPlugLink;
Check_Object(link);
link->Remove(this);
if (link == next)
break;
link = next;
}
ChainLink *clink = m_chainLinkHead;
while (clink)
{
DESTRUCTOR("Plug::CLink");
Check_Object(clink);
ChainLink *next = clink->m_nextPlugLink;
Check_Object(clink);
delete clink;
if (clink == next)
break;
clink = next;
}
}
//
//###########################################################################
// TestInstance
//###########################################################################
//
void
Plug::TestInstance() const
{
Verify(IsDerivedFrom(DefaultData));
if (m_linkHead != NULL)
{
Check_Object(m_linkHead);
}
}
//
//#############################################################################
// GetSocketCount
//#############################################################################
//
unsigned
Plug::GetSocketCount()
{
Check_Object(this);
Link *link = m_linkHead;
if (!link)
return 0;
unsigned socket_count = 0;
do
{
Check_Object(link);
++socket_count;
link = link->m_nextPlugLink;
} while (link != m_linkHead);
return socket_count;
}
//
//#############################################################################
// RemoveSocket
//#############################################################################
//
void
Plug::RemoveSocket(Socket *m_socket)
{
Check_Object(this);
Check_Object(m_socket);
Link *link = m_linkHead;
if (!link)
return;
do
{
Check_Object(link);
if (link->GetSocket() == m_socket)
{
link->Remove(this);
return;
}
link = link->m_nextPlugLink;
} while (link != m_linkHead);
}
//
//#############################################################################
// RemoveSockets
//#############################################################################
//
void
Plug::RemoveAllSockets()
{
Check_Object(this);
Link *link = m_linkHead;
while (link)
{
Check_Object(link);
Link *next = link->m_nextPlugLink;
Check_Object(link);
link->Remove(this);
if (link == next)
break;
link = next;
}
}
//
//#############################################################################
// IsSocketMember
//#############################################################################
//
bool
Plug::IsSocketMember(Socket *m_socket)
{
Check_Object(this);
Check_Object(m_socket);
Link *link = m_linkHead;
if (!link)
return false;
do
{
Check_Object(link);
if (link->GetSocket() == m_socket)
return true;
link = link->m_nextPlugLink;
} while (link != m_linkHead);
return false;
}
//
//#############################################################################
// RemoveSockets
//#############################################################################
//
void
Plug::RemoveAllChains()
{
Check_Object(this);
ChainLink *clink = m_chainLinkHead;
while (clink)
{
Check_Object(clink);
ChainLink *next = clink->m_nextPlugLink;
Check_Object(clink);
delete clink;
if (clink == next)
break;
clink = next;
}
}
//
//#############################################################################
// RemoveChain
//#############################################################################
//
void
Plug::RemoveChain(Chain *m_chain)
{
Check_Object(this);
Check_Object(m_chain);
ChainLink *link = m_chainLinkHead;
if (!link)
return;
do
{
Check_Object(link);
if (link->GetChain() == m_chain)
{
delete link;
return;
}
link = link->m_nextPlugLink;
} while (link != m_chainLinkHead);
}
//
//#############################################################################
// IsChainMember
//#############################################################################
//
bool
Plug::IsChainMember(Chain *m_chain)
{
Check_Object(this);
Check_Object(m_chain);
ChainLink *link = m_chainLinkHead;
if (!link)
return false;
do
{
Check_Object(link);
if (link->GetChain() == m_chain)
return true;
link = link->m_nextPlugLink;
} while (link != m_chainLinkHead);
return false;
}
//
//#############################################################################
// GetSocketCount
//#############################################################################
//
unsigned
Plug::GetChainCount()
{
Check_Object(this);
ChainLink *link = m_chainLinkHead;
if (!link)
return 0;
unsigned count=0;
do
{
Check_Object(link);
++count;
link = link->m_nextPlugLink;
} while (link != m_chainLinkHead);
return count;
}