OpenClonk
C4ObjectPtr Class Reference

#include <C4ObjectPtr.h>

Collaboration diagram for C4ObjectPtr:
[legend]

Public Member Functions

 C4ObjectPtr ()=default
 
 C4ObjectPtr (C4Object *pObj)
 
void CompileFunc (StdCompiler *pComp)
 
void DenumeratePointers ()
 
bool operator! () const
 
bool operator== (C4Object *other) const
 
bool operator== (const C4ObjectPtr &other) const
 
bool operator!= (C4Object *other) const
 
bool operator!= (const C4ObjectPtr &other) const
 
C4ObjectPtr operator= (C4Object *object)
 
C4Objectoperator* () const
 
C4Objectoperator-> () const
 
 operator C4Object * () const
 

Static Public Attributes

static const C4ObjectPtr Null
 

Protected Attributes

bool fDenumerated
 
union {
C4Objectptr
 
intptr_t nptr
 
data
 

Detailed Description

Definition at line 22 of file C4ObjectPtr.h.

Constructor & Destructor Documentation

◆ C4ObjectPtr() [1/2]

C4ObjectPtr::C4ObjectPtr ( )
default

◆ C4ObjectPtr() [2/2]

C4ObjectPtr::C4ObjectPtr ( C4Object pObj)
inline

Definition at line 32 of file C4ObjectPtr.h.

34  : fDenumerated(true)
35 #endif
36  {
37  data.ptr = pObj;
38  }
bool fDenumerated
Definition: C4ObjectPtr.h:64
union C4ObjectPtr::@80 data

References data.

Member Function Documentation

◆ CompileFunc()

void C4ObjectPtr::CompileFunc ( StdCompiler pComp)

Definition at line 28 of file C4ObjectPtr.cpp.

29 {
30  // Pointer needs to be denumerated when decompiling
31  assert(fDenumerated);
32 
33  int32_t nptr = 0;
34  if (!pComp->isDeserializer() && data.ptr)
35  {
36  nptr = data.ptr->Number;
37  }
38  pComp->Value(nptr);
39  if (pComp->isDeserializer())
40  {
41  data.nptr = nptr;
42 #ifndef NDEBUG
43  // After having read a value the pointer is enumerated
44  fDenumerated = false;
45 #endif
46  }
47 }
void Value(const T &rStruct)
Definition: StdCompiler.h:161
virtual bool isDeserializer()
Definition: StdCompiler.h:53

References data, fDenumerated, StdCompiler::isDeserializer(), and StdCompiler::Value().

Here is the call graph for this function:

◆ DenumeratePointers()

void C4ObjectPtr::DenumeratePointers ( )

Definition at line 49 of file C4ObjectPtr.cpp.

50 {
51  assert(!fDenumerated || !data.ptr);
52 
53  assert(data.nptr < std::numeric_limits<int32_t>::max());
54  data.ptr = ::Objects.ObjectPointer(static_cast<int32_t>(data.nptr));
55 
56 #ifndef NDEBUG
57  fDenumerated = true;
58 #endif
59 }
C4GameObjects Objects
Definition: C4Globals.cpp:48
C4Object * ObjectPointer(int32_t object_number)

References data, fDenumerated, C4GameObjects::ObjectPointer(), and Objects.

Referenced by C4Command::Denumerate(), C4Object::Denumerate(), C4GraphicsOverlay::DenumeratePointers(), C4Player::DenumeratePointers(), C4ValueProviderX::DenumeratePointers(), C4ValueProviderY::DenumeratePointers(), C4ValueProviderR::DenumeratePointers(), C4ValueProviderAbsX::DenumeratePointers(), C4ValueProviderAbsY::DenumeratePointers(), C4ValueProviderDist::DenumeratePointers(), C4ValueProviderXDir::DenumeratePointers(), C4ValueProviderYDir::DenumeratePointers(), C4ValueProviderRDir::DenumeratePointers(), C4ValueProviderAbsRDir::DenumeratePointers(), C4ValueProviderCosR::DenumeratePointers(), C4ValueProviderSinR::DenumeratePointers(), C4ValueProviderCosV::DenumeratePointers(), C4ValueProviderSinV::DenumeratePointers(), C4ValueProviderAction::DenumeratePointers(), and C4MeshDenumerator::DenumeratePointers().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ operator C4Object *()

C4ObjectPtr::operator C4Object * ( ) const
inline

Definition at line 60 of file C4ObjectPtr.h.

60 { assert(fDenumerated); return data.ptr; }

References data, and fDenumerated.

◆ operator!()

bool C4ObjectPtr::operator! ( ) const
inline

Definition at line 43 of file C4ObjectPtr.h.

43 { assert(fDenumerated); return !data.ptr; }

References data, and fDenumerated.

◆ operator!=() [1/2]

bool C4ObjectPtr::operator!= ( C4Object other) const
inline

Definition at line 46 of file C4ObjectPtr.h.

46 { assert(fDenumerated); return data.ptr != other; }

References data, and fDenumerated.

◆ operator!=() [2/2]

bool C4ObjectPtr::operator!= ( const C4ObjectPtr other) const
inline

Definition at line 47 of file C4ObjectPtr.h.

47 { assert(fDenumerated == other.fDenumerated); return data.ptr != other.data.ptr; }

References data, and fDenumerated.

◆ operator*()

C4Object& C4ObjectPtr::operator* ( ) const
inline

Definition at line 58 of file C4ObjectPtr.h.

58 { assert(fDenumerated); return *data.ptr; }

References data, and fDenumerated.

◆ operator->()

C4Object* C4ObjectPtr::operator-> ( ) const
inline

Definition at line 59 of file C4ObjectPtr.h.

59 { assert(fDenumerated); return data.ptr; }

References data, and fDenumerated.

◆ operator=()

C4ObjectPtr C4ObjectPtr::operator= ( C4Object object)
inline

Definition at line 49 of file C4ObjectPtr.h.

50  {
51 #ifndef NDEBUG
52  fDenumerated = true;
53 #endif
54  data.ptr = object;
55  return *this;
56  }

References data, and fDenumerated.

◆ operator==() [1/2]

bool C4ObjectPtr::operator== ( C4Object other) const
inline

Definition at line 44 of file C4ObjectPtr.h.

44 { assert(fDenumerated); return data.ptr == other; }

References data, and fDenumerated.

◆ operator==() [2/2]

bool C4ObjectPtr::operator== ( const C4ObjectPtr other) const
inline

Definition at line 45 of file C4ObjectPtr.h.

45 { assert(fDenumerated == other.fDenumerated); return data.ptr == other.data.ptr; }

References data, and fDenumerated.

Member Data Documentation

◆ 

◆ fDenumerated

bool C4ObjectPtr::fDenumerated
protected

◆ Null

const C4ObjectPtr C4ObjectPtr::Null
static

Definition at line 28 of file C4ObjectPtr.h.

Referenced by C4Object::CompileFunc(), and C4Player::CompileFunc().


The documentation for this class was generated from the following files: