Files
firestorm/Gameleap/code/mw4/Libraries/Adept/ReplicatorID.hpp
T
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

216 lines
5.5 KiB
C++

//===========================================================================//
// File: entity2.hh //
// Project: MUNGA Brick: Entity Manager //
// Contents: Interface specification for entity class //
//---------------------------------------------------------------------------//
// Date Who Modification //
// -------- --- ---------------------------------------------------------- //
// 11/29/94 JMA Initial coding. //
//---------------------------------------------------------------------------//
// Copyright (C) 1994, Virtual World Entertainment, Inc. //
// All Rights reserved worldwide //
// This unpublished sourcecode is PROPRIETARY and CONFIDENTIAL //
//===========================================================================//
#pragma once
#include "Adept.hpp"
namespace Adept {class ReplicatorID;}
#if !defined(Spew)
void
Spew(
const char* group,
const Adept::ReplicatorID& v
);
#endif
namespace GetHashFunctions {
unsigned
GetHashValue(const Adept::ReplicatorID &value);
}
namespace Adept {
//##########################################################################
//######################### ReplicatorID #############################
//##########################################################################
class ReplicatorID
{
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Constructors
//
public:
ReplicatorID():
connectionID(0),
localID(0)
{Check_Pointer(this);}
ReplicatorID(const ReplicatorID& id):
connectionID(id.connectionID),
localID(id.localID)
{Check_Pointer(this); Check_Object(&id);}
explicit ReplicatorID(BYTE connection_id):
connectionID(connection_id),
localID(0)
{Check_Pointer(this);}
ReplicatorID(
BYTE connection_id,
WORD local_id
):
connectionID(connection_id),
localID(local_id)
{Check_Pointer(this);}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// ID mathematics
//
public:
static ReplicatorID
Null;
bool
operator!() const
{Check_Object(this); return operator==(Null);}
ReplicatorID&
operator=(const ReplicatorID& id)
{
Check_Pointer(this); Check_Object(&id);
connectionID = id.connectionID; localID = id.localID;
return *this;
}
ReplicatorID&
operator+=(const ReplicatorID& id)
{
Check_Object(this); Check_Object(&id);
connectionID = static_cast<BYTE>(connectionID + id.connectionID);
localID = static_cast<WORD>(localID + id.localID);
return *this;
}
ReplicatorID&
operator+=(WORD span)
{Check_Object(this); localID = static_cast<WORD>(localID + span); return *this;}
ReplicatorID&
operator++()
{Check_Pointer(this); ++localID; return *this;}
bool
operator<(const ReplicatorID& id) const
{
Check_Object(this); Check_Object(&id);
return
(connectionID == id.connectionID) ?
(localID < id.localID) :
(connectionID < id.connectionID);
}
bool
operator<=(const ReplicatorID& id) const
{
Check_Object(this); Check_Object(&id);
return
(connectionID == id.connectionID) ?
(localID <= id.localID) :
(connectionID < id.connectionID);
}
bool
operator>(const ReplicatorID& id) const
{
Check_Object(this); Check_Object(&id);
return
(connectionID == id.connectionID) ?
(localID > id.localID) :
(connectionID > id.connectionID);
}
bool
operator>=(const ReplicatorID& id) const
{
Check_Object(this); Check_Object(&id);
return
(connectionID == id.connectionID) ?
(localID >= id.localID) :
(connectionID > id.connectionID);
}
bool
operator==(const ReplicatorID& id) const
{
Check_Object(this); Check_Object(&id);
return (connectionID == id.connectionID && localID == id.localID);
}
bool
operator!=(const ReplicatorID& id) const
{
Check_Object(this); Check_Object(&id);
return
(connectionID != id.connectionID || localID != id.localID);
}
#if !defined(Spew)
friend void
::Spew(
const char* group,
const ReplicatorID& v
)
{SPEW((group, "%d:%d+", v.connectionID, v.localID));}
#endif
friend unsigned
GetHashFunctions::GetHashValue(const ReplicatorID &value)
{
//
// Verify that the unsigned is 32 bits wide,
// Hash value is first 16 bits of connectionID and first 16 bits
// of localID
//
Verify(sizeof(unsigned) == sizeof(DWORD));
return (value.connectionID << 16) | value.localID;
}
BYTE
connectionID;
WORD
localID;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Testing
//
public:
void
TestInstance() const
{}
};
}
namespace MemoryStreamIO {
inline Stuff::MemoryStream&
Read(
Stuff::MemoryStream *stream,
Adept::ReplicatorID *output
)
{return stream->ReadBytes(output, sizeof(*output));}
inline Stuff::MemoryStream&
Write(
Stuff::MemoryStream* stream,
const Adept::ReplicatorID *input
)
{return stream->WriteBytes(input, sizeof(*input));}
}