FieldCallerStack Class Reference

#include <c4d_fielddata.h>

Detailed Description

A list of all of the "callers" i.e. objects that invoked the sampling function. Additionally contains an identifier one way hash created to generate a unique ID based on the objects invoking the sampling, you can append additional addresses/objects using the operator + and += functions in order to continue the chain and ensure that the caller ID remains unique within the FieldInfo for each call chain.

Public Member Functions

 FieldCallerStack ()=default
 
 FieldCallerStack (UInt value)
 
 FieldCallerStack (FieldCallerStack &&src)
 
 ~FieldCallerStack ()=default
 
 MAXON_OPERATOR_MOVE_ASSIGNMENT (FieldCallerStack)
 
maxon::Result< void > CopyFrom (const FieldCallerStack &src)
 
BaseList2Doperator[] (Int index) const
 
 operator const UInt & () const
 
UInt RecalcValue () const
 
void UpdateValue ()
 
void UpdateValue (BaseList2D *caller)
 
maxon::Result< void > Add (BaseList2D *caller)
 
Int GetCount () const
 
UInt GetValue () const
 
Bool IsValid () const
 

Static Public Member Functions

static FieldCallerStack Create ()
 
static maxon::Result< FieldCallerStackCreate (BaseList2D *caller)
 
static maxon::Result< FieldCallerStackCreate (const std::initializer_list< BaseList2D *> &callers)
 
static FieldCallerStack Add (const FieldCallerStack &src, BaseList2D *newCaller)
 

Public Attributes

UInt _value
 
maxon::BaseArray< BaseList2D * > _callers
 

Private Member Functions

 MAXON_DISALLOW_COPY_AND_ASSIGN (FieldCallerStack)
 

Constructor & Destructor Documentation

◆ FieldCallerStack() [1/3]

FieldCallerStack ( )
default

◆ FieldCallerStack() [2/3]

FieldCallerStack ( UInt  value)
explicit

◆ FieldCallerStack() [3/3]

◆ ~FieldCallerStack()

~FieldCallerStack ( )
default

Member Function Documentation

◆ MAXON_DISALLOW_COPY_AND_ASSIGN()

MAXON_DISALLOW_COPY_AND_ASSIGN ( FieldCallerStack  )
private

◆ MAXON_OPERATOR_MOVE_ASSIGNMENT()

MAXON_OPERATOR_MOVE_ASSIGNMENT ( FieldCallerStack  )

◆ Create() [1/3]

static FieldCallerStack Create ( )
static

Creates an empty FieldCallerStack. Cannot fail. Same as using default constructor.

Returns
A maxon::Result<FieldCallerStack>.

◆ Create() [2/3]

static maxon::Result<FieldCallerStack> Create ( BaseList2D caller)
static

Creates a FieldCallerStack while relaying potential allocation errors. On error, the result will contain a default FieldCallerStack structure.

Parameters
[in]callerThe first caller for the stack.
Returns
A maxon::Result<FieldCallerStack>.

◆ Create() [3/3]

static maxon::Result<FieldCallerStack> Create ( const std::initializer_list< BaseList2D *> &  callers)
static

Creates a FieldCallerStack while relaying potential allocation errors. On error, the result will contain a default FieldCallerStack structure.

Parameters
[in]callersAn initializer list to build the stack, first item is base of stack.
Returns
A maxon::Result<FieldCallerStack>.

◆ CopyFrom()

maxon::Result<void> CopyFrom ( const FieldCallerStack src)

Copies from the supplied FieldCallerStack.

Parameters
[in]srcThe source.
Returns
A maxon::Result.

◆ operator[]()

BaseList2D* operator[] ( Int  index) const

Returns an element of the stack.

Parameters
[in]indexThe caller index.
Returns
The element.

◆ operator const UInt &()

operator const UInt & ( ) const

Cast to UInt, return the value of the stack.

Returns
The stack value.

◆ RecalcValue()

UInt RecalcValue ( ) const

Calculates the id of the caller stack from scratch. Does not update stored id value.

Returns
The new id.

◆ UpdateValue() [1/2]

void UpdateValue ( )

Recalculates the id of the caller stack from scratch. Will update the internal stack id value.

◆ UpdateValue() [2/2]

void UpdateValue ( BaseList2D caller)

Calculates a new stack id from the current id and the added caller. Can be used to calculate a stack id without carrying the actual BaseList2d stack.

Parameters
[in]callerThe new caller, assuming already added to stack.

◆ Add() [1/2]

maxon::Result<void> Add ( BaseList2D caller)

Adds a caller to the caller stack and updates the stack id.

Parameters
[in]callerThe caller object to add to the stack.
Returns
OK on success.

◆ Add() [2/2]

static FieldCallerStack Add ( const FieldCallerStack src,
BaseList2D newCaller 
)
static

Adds a caller to the caller stack and returns a modified stack. This function hides the memory management iferr statement by returning an empty FieldCallerStack if an error occurs. It can be used within a field sampling call directly. But it is recommended to use the non static version and avoid any field sampling call if a prior memory error occurred.

Parameters
[in]srcThe original stack.
[in]newCallerThe caller object to add to the stack.
Returns
A new stack passed by move constructor. Stack will be empty if internal error occurred.

◆ GetCount()

Int GetCount ( void  ) const

Returns the number of callers involved in this chain.

Returns
The number of callers.

◆ GetValue()

UInt GetValue ( void  ) const

Returns the caller stack id.

Returns
The id.

◆ IsValid()

Bool IsValid ( ) const

Check for valid stack content. Empty stack is valid. Stack with null pointers is not valid. Non empty stack with no stack id value is not valid.

Returns
True if valid.

Member Data Documentation

◆ _value

UInt _value

Caller stack id.

◆ _callers

Detailed stack for id _value.