GraphNodeFunctions< BASE > Class Template Reference

#include <graph.h>

Inheritance diagram for GraphNodeFunctions< BASE >:

Detailed Description

template<typename BASE>
class maxon::GraphNodeFunctions< BASE >

Base class of GraphNode and Result<GraphNode> which implements most GraphNode functions.

Public Member Functions

 GraphNodeFunctions ()=default
 
template<typename ARG >
 GraphNodeFunctions (ARG &&arg)
 
Result< void > Remove () const
 
Result< BoolGetChildren (const ValueReceiver< const GraphNode & > &callback, NODE_KIND mask=NODE_KIND::ALL_MASK) const
 
Result< typename SFINAEHelper< GraphNode, BASE >::typeGetParent () const
 
Result< typename SFINAEHelper< GraphNode, BASE >::typeGetAncestor (NODE_KIND mask) const
 
Result< typename SFINAEHelper< GraphNode, BASE >::typeGetInputs () const
 
Result< typename SFINAEHelper< GraphNode, BASE >::typeGetOutputs () const
 
Result< typename SFINAEHelper< GraphNode, BASE >::typeGetPortList (PORT_DIR dir) const
 
Result< typename SFINAEHelper< GraphNode, BASE >::typeFindChild (const InternedId &name) const
 
Result< typename SFINAEHelper< GraphNode, BASE >::typeFindChild (const Id &name) const
 
Result< typename SFINAEHelper< GraphNode, BASE >::typeFindChild (NODE_KIND mask) const
 
Result< typename SFINAEHelper< GraphNode, BASE >::typeFindPort (const InternedId &name) const
 
Result< typename SFINAEHelper< GraphNode, BASE >::typeFindInnerNode (const PathBlock &relativePath) const
 
Result< BoolGetInnerNodes (NODE_KIND mask, Bool includeThis, const ValueReceiver< const GraphNode & > &receiver) const
 
Result< typename SFINAEHelper< GraphNode, BASE >::typeAddPort (const Id &name) const
 
Result< typename SFINAEHelper< GraphNode, BASE >::typeAddPort (const InternedId &name) const
 
Result< BaseArray< typename SFINAEHelper< GraphNode, BASE >::type > > AddPorts (Int index, Int count) const
 
Result< void > RemovePorts (const Block< const InternedId > &ports) const
 
Result< BoolGetConnections (PORT_DIR dir, const ValueReceiver< const GraphConnection & > &conns, Wires mask=Wires::All(), GraphModelInterface::GET_CONNECTIONS_MODE mode=GraphModelInterface::GET_CONNECTIONS_MODE::CONNECTIONS) const
 
Result< WiresGetWires (const GraphNode &target) const
 
Result< BoolGetConnectionValues (const GraphNode &target, const ValueReceiver< CONNECTION_POSITION, InternedId, const ConstDataPtr & > &receiver) const
 
Result< ConstDataPtrGetConnectionValue (const GraphNode &target, CONNECTION_POSITION position, const InternedId &attr, const DataType &expectedType, Bool reverse=false) const
 
template<typename T >
Result< Opt< const T & > > GetConnectionValue (const GraphNode &target, CONNECTION_POSITION position, const InternedId &attr, Bool reverse=false) const
 
template<typename ATTR >
Result< Opt< const typename ATTR::ValueType & > > GetConnectionValue (const GraphNode &target, CONNECTION_POSITION position, const ATTR &attr, Bool reverse=false) const
 
Result< BoolSetConnectionValue (const GraphNode &target, CONNECTION_POSITION position, const InternedId &attr, ForwardingDataPtr &&value) const
 
template<typename ATTR >
Result< BoolSetConnectionValue (const GraphNode &target, CONNECTION_POSITION position, const ATTR &attr, const typename ATTR::ValueType &value) const
 
template<typename ATTR >
Result< BoolSetConnectionValue (const GraphNode &target, CONNECTION_POSITION position, const ATTR &attr, typename ATTR::ValueType &&value) const
 
Result< void > Connect (const GraphNode &target, Wires modes=WIRE_MODE::CONNECT_DEFAULT, Bool reverse=false) const
 
Result< void > Connect (const Result< typename SFINAEHelper< GraphNode, BASE >::type > &target, Wires modes=WIRE_MODE::CONNECT_DEFAULT, Bool reverse=false) const
 
Result< void > RemoveConnections (PORT_DIR dir, Wires mask=Wires::All(WIRE_MODE::FULL_MASK)) const
 
Result< BoolIsConnectable (const GraphNode &target) const
 
Result< void > GetValues (GraphAttributeInterface::FLAGS mask, GraphAttributeMap &map) const
 
Result< BoolRemoveValue (const InternedId &attr) const
 
Result< BoolInheritValue (const InternedId &attr) const
 
Result< ConstDataPtrGetValue (const InternedId &attr, const DataType &expectedType) const
 
Result< ConstDataPtrGetStoredValue (const InternedId &attr, const DataType &expectedType) const
 
Result< BoolGetBaseValues (const InternedId &attr, const DataType &expectedType, const ValueReceiver< const ConstDataPtr &, Int > &valueReceiver) const
 
template<typename T >
Result< Opt< const T & > > GetValue (const InternedId &attr) const
 
template<typename ATTR >
Result< Opt< const typename ATTR::ValueType & > > GetValue () const
 
template<typename ATTR >
Result< Opt< const typename ATTR::ValueType & > > GetValue (const ATTR &attr) const
 
template<typename ATTR >
Result< Opt< const typename ATTR::ValueType & > > GetStoredValue () const
 
template<typename ATTR >
Result< Opt< const typename ATTR::ValueType & > > GetStoredValue (const ATTR &attr) const
 
Result< BoolSetValue (const InternedId &attr, ForwardingDataPtr &&value, Bool checkAndInvalidate=true) const
 
template<typename ATTR >
Result< BoolSetValue (const ATTR &attr, const typename ATTR::ValueType &value) const
 
template<typename ATTR >
Result< BoolSetValue (const ATTR &attr, typename ATTR::ValueType &&value) const
 
template<typename ATTR >
Result< BoolSetValue (const typename ATTR::ValueType &value) const
 
template<typename ATTR >
Result< BoolSetValue (typename ATTR::ValueType &&value) const
 
Result< void > TouchValue (const InternedId &attr) const
 
Result< void > ChangeValue (const InternedId &attr, const SubDataOperation &op, const SubDataPathBlock &path, ForwardingDataPtr &&value)
 
template<typename T >
Result< BoolSetPortValue (T &&value) const
 
template<typename T >
Result< Opt< const T & > > GetPortValue () const
 
template<typename T >
Result< Opt< const T & > > GetEffectivePortValue () const
 
template<typename T >
MAXON_ATTRIBUTE_FORCE_INLINE Result< BoolSetDefaultValue (T &&value) const
 
template<typename T >
MAXON_ATTRIBUTE_FORCE_INLINE Result< const T & > GetDefaultValue (const T &def=maxon::DefaultValue< const T & >()) const
 
template<typename T >
MAXON_ATTRIBUTE_FORCE_INLINE Result< const T & > GetConstantValue (const T &def=maxon::DefaultValue< const T & >()) const
 
Result< BoolGetAttributeModificationsSince (TimeStamp stamp, const ValueReceiver< InternedId, ConstDataPtr > &receiver) const
 
Result< TimeStampGetAttributeStamp (const InternedId &attr) const
 
Result< TimeStampGetConnectionStamp (PORT_DIR direction) const
 
Result< void > CopyValuesFrom (const GraphNode &source, Bool includeInner) const
 
Result< void > CopyConnectionsFrom (const GraphNode &source, PORT_DIR direction, Bool includeInner) const
 
Result< GraphAttribute::FLAGS > GetMessageFlags (const InternedId &attr) const
 
Result< BoolGetMessages (const InternedId &attr, const ValueReceiver< const GraphMessage & > &receiver) const
 

Constructor & Destructor Documentation

◆ GraphNodeFunctions() [1/2]

GraphNodeFunctions ( )
default

◆ GraphNodeFunctions() [2/2]

GraphNodeFunctions ( ARG &&  arg)
explicit

Member Function Documentation

◆ Remove()

Result<void> Remove ( ) const

Removes this node from the graph. This will also remove all nested nodes as well as connections of this node and its nested ports.

Returns
OK on success.

◆ GetChildren()

Result<Bool> GetChildren ( const ValueReceiver< const GraphNode & > &  callback,
NODE_KIND  mask = NODE_KIND::ALL_MASK 
) const

Gets all children of this node. For a true node this will be its child nodes as well as a single input port list and a single output port list. Otherwise, the children are ports.

Parameters
[in]callbackThis callback will receive all children.
Returns
false if callback cancelled further evaluation, true otherwise.

◆ GetParent()

Result<typename SFINAEHelper<GraphNode, BASE>::type> GetParent ( ) const

Returns the parent of this node.

Returns
Parent node of this node, or a null node if this node is the root node.

◆ GetAncestor()

Result<typename SFINAEHelper<GraphNode, BASE>::type> GetAncestor ( NODE_KIND  mask) const

Returns the closest ancestor node of this node (possibly this node itself) whose kind matches the given #mask. I.e., the function goes upwards in the hierarchy until it finds a matching node.

Parameters
[in]maskMask for the kind of node to look for.
Returns
Closest ancestor of this node matching the given #mask, may be this node itself or a null node.

◆ GetInputs()

Result<typename SFINAEHelper<GraphNode, BASE>::type> GetInputs ( ) const

Returns the input port list of this node. All top-level input ports of a node can be found as children of its input port list.

Returns
Input port list of this node.

◆ GetOutputs()

Result<typename SFINAEHelper<GraphNode, BASE>::type> GetOutputs ( ) const

Returns the output port list of this node. All top-level output ports of a node can be found as children of its output port list.

Returns
Output port list of this node.

◆ GetPortList()

Result<typename SFINAEHelper<GraphNode, BASE>::type> GetPortList ( PORT_DIR  dir) const

Returns the input or output port list of this node, depending on dir.

Parameters
[in]dirPORT_DIR::INPUT to return the input port list, PORT_DIR::OUTPUT to return the output port list.
Returns
Port list of this node.

◆ FindChild() [1/3]

Result<typename SFINAEHelper<GraphNode, BASE>::type> FindChild ( const InternedId name) const

Finds a child with the given id. This searches all direct children (whether nodes, port lists or ports) of this node for a child which has the identifier name. The first found child is returned.

Parameters
[in]nameThe identifier to look for.
Returns
The first direct child whose id is name, or a null node.

◆ FindChild() [2/3]

Result<typename SFINAEHelper<GraphNode, BASE>::type> FindChild ( const Id name) const

Finds a child with the given id. This searches all direct children (whether nodes, port lists or ports) of this node for a child which has the identifier name. The first found child is returned.

Parameters
[in]nameThe identifier to look for.
Returns
The first direct child whose id is name, or a null node.

◆ FindChild() [3/3]

Result<typename SFINAEHelper<GraphNode, BASE>::type> FindChild ( NODE_KIND  mask) const

Finds the child of this node whose kind matches the given #mask. If no such child can be found, a null node is returned. If there is more than one matching child, an error is returned.

Parameters
[in]maskKind mask to look for.
Returns
A direct child of this node which matches the given #mask, or a null node if no such child exists.

◆ FindPort()

Result<typename SFINAEHelper<GraphNode, BASE>::type> FindPort ( const InternedId name) const

Finds a child port with the given id. This searches all direct children of this node for a child which is a port and has the identifier name. The first found child is returned.

Parameters
[in]nameThe identifier to look for.
Returns
The first direct child port whose id is name, or a null node.

◆ FindInnerNode()

Result<typename SFINAEHelper<GraphNode, BASE>::type> FindInnerNode ( const PathBlock relativePath) const

Finds the inner child of this node with the given relative path. If no such child can be found, a null node is returned.

Parameters
[in]relativePathThe relative path of the child to find, starting at this node.
Returns
The inner child of this node with the given relativePath, or a null node if no such child exists.

◆ GetInnerNodes()

Result<Bool> GetInnerNodes ( NODE_KIND  mask,
Bool  includeThis,
const ValueReceiver< const GraphNode & > &  receiver 
) const

Yields all inner nodes of this node matching #mask in pre-order. The recursive traversal stops at nodes which don't match #mask.

Parameters
[in]maskMask to filter the tree traversal. Only nodes matching this mask are considered. The node on which GetInnerNodes is called isn't checked for mask.
[in]includeThisIf true, the node on which GetInnerNodes is called is yielded to #receiver too.
[in]receiverInner nodes are reported to this value receiver.
Returns
false if #receiver cancelled further evaluation, true otherwise.

◆ AddPort() [1/2]

Result<typename SFINAEHelper<GraphNode, BASE>::type> AddPort ( const Id name) const

Adds a port to this node with the given id. This node has to be a port list or a port itself.

Parameters
[in]nameThe identifier for the new port.
Returns
The added port.

◆ AddPort() [2/2]

Result<typename SFINAEHelper<GraphNode, BASE>::type> AddPort ( const InternedId name) const

Adds a port to this node with the given id. This node has to be a port list or a port itself.

Parameters
[in]nameThe identifier for the new port.
Returns
The added port.

◆ AddPorts()

Result<BaseArray<typename SFINAEHelper<GraphNode, BASE>::type> > AddPorts ( Int  index,
Int  count 
) const

Adds a number of variadic port instances to this variadic port. This is more efficient than a repeated call to AddPort(). It is an error if this GraphNode is no variadic port.

Parameters
[in]indexThe index within the current list of variadic port instances where the new instances shall be added.
[in]countThe number of instances to add.
Returns
The newly added port instances as an array.

◆ RemovePorts()

Result<void> RemovePorts ( const Block< const InternedId > &  ports) const

Removes a number of variadic port instances from this variadic port. This is more efficient than a repeated call to Remove() on each of the instances. It is an error if this GraphNode is no variadic port.

Parameters
[in]portsThe identifiers of the port instances which shall be removed.

◆ GetConnections()

Yields all connections of this port for the given direction #dir. Depending on the graph model implementation, this may include implicit wires due to connections between enclosing ports. The latter are marked with WIRE_MODE::IMPLICIT.

Parameters
[in]dirWhether to yield incoming or outgoing connections.
[in]connsThe receiver for the found connections.
[in]maskOnly yield connections whose wires match this mask.
[in]modeMode for GetConnections.
Returns
false if #conns cancelled further evaluation, true otherwise.

◆ GetWires()

Result<Wires> GetWires ( const GraphNode target) const

Returns the Wires from this node to #target. Depending on the graph model implementation, this may include implicit wires due to connections between enclosing nodes. The latter are marked with WIRE_MODE::IMPLICIT.

Parameters
[in]targetAnother graph node.
Returns
Wires between from this node to #target.

◆ GetConnectionValues()

Result<Bool> GetConnectionValues ( const GraphNode target,
const ValueReceiver< CONNECTION_POSITION, InternedId, const ConstDataPtr & > &  receiver 
) const

Gets all attribute values of the connection from this port to target.

Parameters
[in]targetThe other end of the connection.
[out]receiverAll attribute values of the connection will be reported to the receiver.
Returns
false if #receiver cancelled further evaluation, true otherwise.

◆ GetConnectionValue() [1/3]

Result<ConstDataPtr> GetConnectionValue ( const GraphNode target,
CONNECTION_POSITION  position,
const InternedId attr,
const DataType expectedType,
Bool  reverse = false 
) const

Gets the value of the given attribute for the connection from this port to target. If there is no such connection, the connection has no value for the attribute or the value doesn't have the expected type, a null ConstDataPtr is returned.

Parameters
[in]targetThe other end of the connection.
[in]positionThe connection position at which the attribute's value shall be obtained.
[in]attrThe attribute whose value shall be obtained.
[in]expectedTypeThe expected type of the attribute value, may be nullptr if no check shall be done.
[in]reverseTrue if the connection shall be from target to this port (also #position is reversed in this case), false otherwise (the default).
Returns
The attribute value of the connection, or a null ConstDataPtr.

◆ GetConnectionValue() [2/3]

Result<Opt<const T&> > GetConnectionValue ( const GraphNode target,
CONNECTION_POSITION  position,
const InternedId attr,
Bool  reverse = false 
) const

Gets the value of the given attribute for the connection from this port to target. If there is no such connection, the connection has no value for the attribute or the value doesn't have the expected type, an empty Opt is returned.

Parameters
[in]targetThe other end of the connection.
[in]positionThe connection position at which the attribute's value shall be obtained.
[in]attrThe attribute whose value shall be obtained.
[in]reverseTrue if the connection shall be from target to this port (also #position is reversed in this case), false otherwise (the default).
Returns
The attribute value of the connection, may be an empty Opt.

◆ GetConnectionValue() [3/3]

Result<Opt<const typename ATTR::ValueType&> > GetConnectionValue ( const GraphNode target,
CONNECTION_POSITION  position,
const ATTR &  attr,
Bool  reverse = false 
) const

Gets the value of the given attribute #attr for the connection from this port to target. If there is no such connection, the connection has no value for the attribute or the value doesn't have the expected type, an empty Opt is returned.

Parameters
[in]attrThe attribute whose value shall be set.
[in]targetThe other end of the connection.
[in]positionThe connection position at which the attribute's value shall be obtained.
[in]reverseTrue if the connection shall be from target to this port (also #position is reversed in this case), false otherwise (the default).
Returns
The attribute value of the connection, may be an empty Opt.

◆ SetConnectionValue() [1/3]

Result<Bool> SetConnectionValue ( const GraphNode target,
CONNECTION_POSITION  position,
const InternedId attr,
ForwardingDataPtr &&  value 
) const

Sets the value of #attr to value for the connection from this port to #target. This will override any previously existing value.

Parameters
[in]targetThe other end of the connection.
[in]positionThe connection position at which the attribute's value shall be set.
[in]attrThe attribute whose value shall be set.
[in]valueThe value for the attribute.
Returns
True if the value has been changed.

◆ SetConnectionValue() [2/3]

Result<Bool> SetConnectionValue ( const GraphNode target,
CONNECTION_POSITION  position,
const ATTR &  attr,
const typename ATTR::ValueType &  value 
) const

Sets the value of #ATTR to value for this node. This will override any previously existing value.

Parameters
[in]attrThe attribute whose value shall be set.
[in]targetThe other end of the connection.
[in]positionThe connection position at which the attribute's value shall be set.
[in]valueThe value for the attribute.
Returns
True if the value has been changed.

◆ SetConnectionValue() [3/3]

Result<Bool> SetConnectionValue ( const GraphNode target,
CONNECTION_POSITION  position,
const ATTR &  attr,
typename ATTR::ValueType &&  value 
) const

Sets the value of #ATTR to value for this node. This will override any previously existing value.

Parameters
[in]attrThe attribute whose value shall be set.
[in]targetThe other end of the connection.
[in]positionThe connection position at which the attribute's value shall be set.
[in]valueThe value for the attribute.
Returns
True if the value has been changed.

◆ Connect() [1/2]

Result<void> Connect ( const GraphNode target,
Wires  modes = WIRE_MODE::CONNECT_DEFAULT,
Bool  reverse = false 
) const

Connects this port to the other port #target using the given wire #modes. Usually you use one of the values WIRE_MODE::MIN, WIRE_MODE::NORMAL, WIRE_MODE::MAX for #modes, then a connection with a value wire of the given priority is created from this port to the #target port. But you can also add dependency wires by using an appropriate Wires value for #modes. And for each wire you can specify one of the special wire modes:

Typically, you connect an output port of a root child node to an input port of another root child node. But you can also connect

  • an output port of a root child node to an output port of the root node (to forward the output of the child node to the root node)
  • an input port of the root node to an input port of a root child node, (to forward the input of the root node to the child node)
  • an input port of the root node to an output port of the same root node (to forward the input directly to the output without changing anything).

It is not possible to connect ports which don't belong to the root node or its direct children.

Parameters
[in]targetThe target port to connect to.
[in]modesThe type to use for the connection.
[in]reverseIf true the direction is reversed (from target to this port).
Returns
OK on success.

◆ Connect() [2/2]

Result<void> Connect ( const Result< typename SFINAEHelper< GraphNode, BASE >::type > &  target,
Wires  modes = WIRE_MODE::CONNECT_DEFAULT,
Bool  reverse = false 
) const

Connects this port to the other port #target using the given wire #modes. Usually you use one of the values WIRE_MODE::MIN, WIRE_MODE::NORMAL, WIRE_MODE::MAX for #modes, then a connection with a value wire of the given priority is created from this port to the #target port. But you can also add dependency wires by using an appropriate Wires value for #modes. And for each wire you can specify one of the special wire modes:

Typically, you connect an output port of a root child node to an input port of another root child node. But you can also connect

  • an output port of a root child node to an output port of the root node (to forward the output of the child node to the root node)
  • an input port of the root node to an input port of a root child node, (to forward the input of the root node to the child node)
  • an input port of the root node to an output port of the same root node (to forward the input directly to the output without changing anything).

It is not possible to connect ports which don't belong to the root node or its direct children.

Parameters
[in]targetThe target port to connect to.
[in]modesThe type to use for the connection.
[in]reverseIf true the direction is reversed (from target to this port).
Returns
OK on success.

◆ RemoveConnections()

Result<void> RemoveConnections ( PORT_DIR  dir,
Wires  mask = Wires::All(WIRE_MODE::FULL_MASK) 
) const

Removes all connections of this port in the given direction which match the given mask.

Parameters
[in]dirConnection direction.
[in]maskMask for the connections to remove.

◆ IsConnectable()

Result<Bool> IsConnectable ( const GraphNode target) const

Checks if a connection from this port to target can be made.

Parameters
[in]targetTarget port of the (hypothetical) connection.
Returns
True if a connection is allowed, false otherwise.

◆ GetValues()

Result<void> GetValues ( GraphAttributeInterface::FLAGS  mask,
GraphAttributeMap map 
) const

Gets all attribute values of this node.

Parameters
[out]mapAll attribute values of this node will be added to #map.
Returns
OK on success.

◆ RemoveValue()

Result<Bool> RemoveValue ( const InternedId attr) const

Removes an attribute value from this node. Nothing happens if this node doesn't have a value for the given attribute.

Parameters
[in]attrThe attribute whose value shall be removed from this node.
Returns
True if the value has been changed.

◆ InheritValue()

Result<Bool> InheritValue ( const InternedId attr) const

Restores the inherited state of the value for #attr. This removes any value which has been set directly in this graph.

Parameters
[in]attrThe attribute whose value shall be inherited from the base graph.

◆ GetValue() [1/4]

Result<ConstDataPtr> GetValue ( const InternedId attr,
const DataType expectedType 
) const

Gets the value of the given attribute for this node. If this node doesn't have a value for the attribute or the value doesn't have the expected type, a null ConstDataPtr is returned.

Parameters
[in]attrThe attribute whose value shall be obtained.
[in]expectedTypeThe expected type of the attribute value, may be nullptr if no check shall be done.
Returns
The attribute value of this node, or a null ConstDataPtr.

◆ GetStoredValue() [1/3]

Result<ConstDataPtr> GetStoredValue ( const InternedId attr,
const DataType expectedType 
) const

Gets the current value of the given attribute for this node, REGARDLESS of whether it is valid or not. If using lazy updates then this may be out of date. If NOT using lazy updates then this should always match GetValue(). If this node doesn't have a value for the attribute or the value doesn't have the expected type, a null ConstDataPtr is returned.

Parameters
[in]attrThe attribute whose value shall be obtained.
[in]expectedTypeThe expected type of the attribute value, may be nullptr if no check shall be done.
Returns
The attribute value of this node, or a null ConstDataPtr.

◆ GetBaseValues()

Result<Bool> GetBaseValues ( const InternedId attr,
const DataType expectedType,
const ValueReceiver< const ConstDataPtr &, Int > &  valueReceiver 
) const

Gets the values of the given attribute for this node and its inherited parents. If this node doesn't have a value for the attribute or the value doesn't have the expected type, GetBaseValues will keep iterating the inherited nodes and call #valueReceiver each time the attribute is found on an a base.

Parameters
[in]attrThe attribute whose value shall be obtained.
[in]expectedTypeThe expected type of the attribute value, may be nullptr if no check shall be done.
[in]valueReceiverA callback which receives the attribute values and their nestings.
Returns
The attribute values.

◆ GetValue() [2/4]

Result<Opt<const T&> > GetValue ( const InternedId attr) const

Gets the value of the given attribute for this node. If this node doesn't have a value for the attribute or the value doesn't have type T, an empty Opt is returned.

Parameters
[in]attrThe attribute whose value shall be obtained.
Template Parameters
TThe expected type of the attribute value.
Returns
The attribute value of this node, may be an empty Opt.

◆ GetValue() [3/4]

Result<Opt<const typename ATTR::ValueType&> > GetValue ( ) const

Gets the value of the given attribute #ATTR for this node. If this node doesn't have a value for the attribute of the correct type, an empty Opt is returned.

String name = port.GetValue<decltype(Name)>().GetValueOrDefault() iferr_return;
#define Name(a0, a1, a2, a3, a4, a5, a6)
Definition: Python-ast.h:644
const char const char * name
Definition: abstract.h:195
Definition: c4d_string.h:41
#define iferr_return
Definition: resultbase.h:1524
Template Parameters
ATTRThe attribute whose value shall be obtained.
Returns
The attribute value of this node, may be an empty Opt.

◆ GetValue() [4/4]

Result<Opt<const typename ATTR::ValueType&> > GetValue ( const ATTR &  attr) const

Gets the value of the given attribute #attr for this node. If this node doesn't have a value for the attribute of the correct type, an empty Opt is returned.

String name = port.GetValue(Name).GetValueOrDefault() iferr_return;
Parameters
[in]attrThe attribute whose value shall be obtained.
Returns
The attribute value of this node, may be an empty Opt.

◆ GetStoredValue() [2/3]

Result<Opt<const typename ATTR::ValueType&> > GetStoredValue ( ) const

Gets the current value of the given attribute for this node, REGARDLESS of whether it is valid or not. If using lazy updates then this may be out of date. If NOT using lazy updates then this should always match GetValue(). If this node doesn't have a value for the attribute of the correct type, an empty Opt is returned.

String name = port.GetStoredValue<decltype(Name)>().GetValueOrDefault() iferr_return;
Template Parameters
ATTRThe attribute whose value shall be obtained.
Returns
The attribute value of this node, may be an empty Opt.

◆ GetStoredValue() [3/3]

Result<Opt<const typename ATTR::ValueType&> > GetStoredValue ( const ATTR &  attr) const

Gets the current value of the given attribute for this node, REGARDLESS of whether it is valid or not. If using lazy updates then this may be out of date. If NOT using lazy updates then this should always match GetValue(). If this node doesn't have a value for the attribute of the correct type, an empty Opt is returned.

String name = port.GetStoredValue(Name).GetValueOrDefault() iferr_return;
Parameters
[in]attrThe attribute whose value shall be obtained.
Returns
The attribute value of this node, may be an empty Opt.

◆ SetValue() [1/5]

Result<Bool> SetValue ( const InternedId attr,
ForwardingDataPtr &&  value,
Bool  checkAndInvalidate = true 
) const

Sets the value of #attr to value for this node. This will override any previously existing value.

Parameters
[in]attrThe attribute whose value shall be set.
[in]valueThe value for the attribute.
[in]checkAndInvalidateTrue by default. Use false to suppress check, invalidation and update of time stamp. False may only be used for attributes which aren't needed during validation.
Returns
True if the value has been changed, false otherwise.

◆ SetValue() [2/5]

Result<Bool> SetValue ( const ATTR &  attr,
const typename ATTR::ValueType &  value 
) const

Sets the value of #attr to value for this node. This will override any previously existing value.

Parameters
[in]attrThe attribute whose value shall be set.
[in]valueThe value for the attribute.
Returns
True if the value has been changed, false otherwise.

◆ SetValue() [3/5]

Result<Bool> SetValue ( const ATTR &  attr,
typename ATTR::ValueType &&  value 
) const

Sets the value of #attr to value for this node. This will override any previously existing value.

Parameters
[in]attrThe attribute whose value shall be set.
[in]valueThe value for the attribute.
Returns
True if the value has been changed, false otherwise.

◆ SetValue() [4/5]

Result<Bool> SetValue ( const typename ATTR::ValueType &  value) const

Sets the value of #ATTR to value for this node. This will override any previously existing value.

Template Parameters
ATTRThe attribute whose value shall be set.
Parameters
[in]valueThe value for the attribute.
Returns
True if the value has been changed, false otherwise.

◆ SetValue() [5/5]

Result<Bool> SetValue ( typename ATTR::ValueType &&  value) const

Sets the value of #ATTR to value for this node. This will override any previously existing value.

Template Parameters
ATTRThe attribute whose value shall be set.
Parameters
[in]valueThe value for the attribute.
Returns
True if the value has been changed, false otherwise.

◆ TouchValue()

Result<void> TouchValue ( const InternedId attr) const

Marks the value of #attr as modified without actually modifying it. Use this if the value points to some external data which has changed without knowledge of the graph (for example a Url for a file which has been modified). If there is no value yet for attr, an IllegalStateError is returned.

Parameters
[in]attrThe attribute which shall be marked as modified.
Returns
OK on success.

◆ ChangeValue()

Result<void> ChangeValue ( const InternedId attr,
const SubDataOperation &  op,
const SubDataPathBlock path,
ForwardingDataPtr &&  value 
)

Sets a part of the value of #attr to value for this node.

Parameters
[in]attrThe attribute whose value shall be set.
[in]opThe SubDataOperation to use.
[in]pathThe path to the part of the attribute value which shall be changed.
[in]valueThe new value for the part.
Returns
OK on success.

◆ SetPortValue()

Result<Bool> SetPortValue ( T &&  value) const

Sets the value of the attribute DESCRIPTION::DATA::BASE::DEFAULTVALUE to value for this port. This will override any values which would otherwise be inherited from a base or downstream port.

Parameters
[in]valueNew value for the port.
Returns
True if the value has been changed, false otherwise.

◆ GetPortValue()

Result<Opt<const T&> > GetPortValue ( ) const

Returns the value of this port (ignoring upstream overrides). This is the value of the PortValue attribute, which in turn is synthesized from DESCRIPTION::DATA::BASE::DEFAULTVALUE: Port values are derived from right to left along connections.

Note
Port values may be overridden by upstream values from incoming connections, you have to use GetEffectivePortValue to ask for the final port value.
Template Parameters
TThe type to return.
Returns
The value of this port (ignoring upstream overrides), or an empty Opt if the port has no value of type T.

◆ GetEffectivePortValue()

Result<Opt<const T&> > GetEffectivePortValue ( ) const

Returns the effective value of this port. The effective value is set whenever the graph implementation is able to determine a constant value for the port, either because the value has been set directly at the port, or because it is possible to compute the value from connected ports and nodes.

Template Parameters
TThe type to return.
Returns
The effective value of this port, or an empty Opt if the port has no value of type T.

◆ SetDefaultValue()

MAXON_ATTRIBUTE_FORCE_INLINE Result<Bool> SetDefaultValue ( T &&  value) const

◆ GetDefaultValue()

MAXON_ATTRIBUTE_FORCE_INLINE Result<const T&> GetDefaultValue ( const T &  def = maxon::DefaultValue<const T&>()) const

◆ GetConstantValue()

MAXON_ATTRIBUTE_FORCE_INLINE Result<const T&> GetConstantValue ( const T &  def = maxon::DefaultValue<const T&>()) const

◆ GetAttributeModificationsSince()

Result<Bool> GetAttributeModificationsSince ( TimeStamp  stamp,
const ValueReceiver< InternedId, ConstDataPtr > &  receiver 
) const

Reports all attribute modifications which have been made for this node since the given stamp to the receiver. Only stored attributes will be reported, so to also check for new values of computed attributes you should use GraphAttributeInterface::IsComputedFrom().

See also
GraphModelInterface::GetModificationsSince
Parameters
[in]stampA reference time stamp. Only modifications newer than this stamp are reported.
[in]receiverModifications are reported to this receiver as a pair of the attribute identifier and the current value.
Returns
false if the receiver cancelled further evaluation, true otherwise.

◆ GetAttributeStamp()

Result<TimeStamp> GetAttributeStamp ( const InternedId attr) const

Returns the modification stamp of the given attribute for this node. This is the value of the graph's time stamp (see GraphModelInterface::GetModificationStamp) at the time when the attribute value has been set last for this node, or a default value if it hasn't been set at all.

Parameters
[in]attrAn attribute.
Returns
The modification stamp of the last change of the attribute value.

◆ GetConnectionStamp()

Result<TimeStamp> GetConnectionStamp ( PORT_DIR  direction) const

Returns the modification stamp of incoming/outgoing connections for this port. This is the value of the graph's time stamp (see GraphModelInterface::GetModificationStamp) at the time when connections in the given direction have been modified last for this port.

Parameters
[in]directionThe connection direction.
Returns
The modification stamp of the last connection change of the port.

◆ CopyValuesFrom()

Result<void> CopyValuesFrom ( const GraphNode source,
Bool  includeInner 
) const

Copies all directly set attribute values of source to this node. This excludes derived attribute values as well as attribute values which are inherited from a base.

Parameters
[in]sourceAnother GraphNode, may stem from a different graph.
[in]includeInnerIf true, copies attribute values for all inner nodes, too.

◆ CopyConnectionsFrom()

Result<void> CopyConnectionsFrom ( const GraphNode source,
PORT_DIR  direction,
Bool  includeInner 
) const

Copies all connections of source to the port given by this GraphNode. For each connection of source to a port in the given direction, a corresponding port in this graph is searched (based on the relative path) and, if it exists, a connection to that port is created.

Parameters
[in]sourceAnother GraphNode port, may stem from a different graph.
[in]directionThe direction of connections to copy.
[in]includeInnerIf true, copies connections for all inner nodes, too.

◆ GetMessageFlags()

Result<GraphAttribute::FLAGS> GetMessageFlags ( const InternedId attr) const

Returns the message flags of the given attribute at this node. You have to call this method if you want to check if an attribute has a message (an error or a warning) for this node.

Parameters
[in]attrThe attribute which shall be asked.
Returns
Message flags (GraphAttribute::FLAGS::WARNING, GraphAttribute::FLAGS::ERROR) of #attr at this node.
See also
GraphAttributeInterface::GetMessageFlags

◆ GetMessages()

Result<Bool> GetMessages ( const InternedId attr,
const ValueReceiver< const GraphMessage & > &  receiver 
) const

Yields the error or warning messages (if any) of the given attribute at this node to #receiver.

Parameters
[in]attrThe attribute which shall be asked.
[in]receiverAll messages are reported to this receiver.
Returns
false if the receiver cancelled further evaluation, true otherwise.