Open Search
    GraphAttributeInterface Class Reference

    #include <graphattribs.h>

    Inheritance diagram for GraphAttributeInterface:

    Detailed Description

    A graph attribute provides extra information about an attribute of nodes and ports. Attributes are identified and accessed only by an InternedId which carries no extra information about the attribute. If a GraphModelInterface wants to provide additional information for an attribute, its GraphModelInterface::GetGraphAttribute returns a graph attribute to get that information (such as the attribute FLAGS).

    Public Types

    enum class  FLAGS {
      NONE ,
      DIRECT ,
      DERIVED ,
      USER_STATE ,
      TRANSIENT ,
      IMMUTABLE ,
      META ,
      ROOT ,
      WARNING ,
      ERROR ,
      TYPE_MASK ,
      MESSAGE_MASK
    }
     

    Public Member Functions

    MAXON_METHOD const InternedIdGetId () const
     
    enum maxon::GraphAttributeInterface::FLAGS MAXON_ENUM_FLAGS_CLASS (FLAGS)
     
    MAXON_METHOD Bool IsComputedFrom (const InternedId &other) const
     
    MAXON_METHOD FLAGS GetFlags () const
     
    MAXON_METHOD Result< FLAGSGetMessageFlags (const GraphNode &node) const
     
    MAXON_METHOD Result< BoolGetMessages (const GraphNode &node, const ValueReceiver< const GraphMessage & > &receiver) const
     

    Private Member Functions

     MAXON_INTERFACE (GraphAttributeInterface, MAXON_REFERENCE_CONST, "net.maxon.graph.interface.attribute")
     

    Member Enumeration Documentation

    ◆ FLAGS

    enum FLAGS
    strong

    FLAGS provide information about the nature of the attribute. Exactly one of DIRECT, DERIVED, USER_STATE or DERIVED|USER_STATE has to be set in the flags returned by GetFlags().

    Enumerator
    NONE 

    No flag set.

    DIRECT 

    The attribute is an attribute which can be set directly by program code.

    DERIVED 

    The attribute is a derived attribute which can't be set by program code. The graph model implementation will derive its value from the graph.

    USER_STATE 

    The attribute is a user-state attribute which can be set by program code and doesn't belong to the persistent state of the graph. User-state attributes can be set outside of a GraphTransaction, and there is the method GraphModelInterface::ResetUserState. A user-state attribute also has to set the TRANSIENT flag. The flag DERIVED can be set in addition for a derived user-state attribute.

    TRANSIENT 

    The attribute is transient (non-persistent, i.e., not stored by serialization).

    IMMUTABLE 

    The attribute value can only be set once on creation of the node or port.

    META 

    The attribute is a meta attribute whose value is irrelevant for the data model and runtime behaviour of the graph. What exactly this means is graph-model-specific.

    ROOT 

    The attribute is a graph-global attribute which is stored at the root. When the value of such an attribute is read, it is always read at the root node even if the GetValue method was called on another node. Inner graphs will use the root node of their outmost enclosing graph.

    WARNING 

    The attribute represents a warning message. Typically this is a user-state attribute set during the analysis of the graph to inform about questionable findings.

    ERROR 

    The attribute represents an error message. Typically this is a user-state attribute set during the analysis of the graph to inform about found errors.

    TYPE_MASK 

    Use this mask to test for the type (one of DIRECT, DERIVED, USER_STATE or DERIVED|USER_STATE).

    MESSAGE_MASK 

    Use this mask to test for WARNING or ERROR.

    Member Function Documentation

    ◆ MAXON_INTERFACE()

    MAXON_INTERFACE ( GraphAttributeInterface  ,
    MAXON_REFERENCE_CONST  ,
    "net.maxon.graph.interface.attribute"   
    )
    private

    ◆ GetId()

    MAXON_METHOD const InternedId& GetId ( ) const

    Returns the id of this attribute.

    Returns
    Id of this attribute.

    ◆ MAXON_ENUM_FLAGS_CLASS()

    enum maxon::GraphAttributeInterface::FLAGS MAXON_ENUM_FLAGS_CLASS ( FLAGS  )

    ◆ IsComputedFrom()

    MAXON_METHOD Bool IsComputedFrom ( const InternedId other) const

    Checks for a derived attribute if its value is computed on-the-fly and needs the value of other for that computation. A derived attribute may store its value in the graph, or it may compute it on-the-fly. In the latter case you can check the required attributes with this method. This is important e.g. when you check for attribute modifications using GraphNodeFunctions::GetAttributeModificationsSince: You only get notified about changes of stored attribute values, so for a computed value you have to use this method:

    GraphNode node;
    const GraphAttribute& def = node.GetGraph().GetGraphAttribute(PortValue);
    return node.GetAttributeModificationsSince(stamp,
    [&def] (const InternedId& attr, ConstDataPtr value) -> Result<Bool>
    {
    if (def.IsComputedFrom(attr))
    {
    // default value has changed
    }
    else
    {
    // test for other attributes
    }
    return true;
    });

    You can use this method even for non-computed attributes, then it returns true if other is the same as #this.

    Parameters
    [in]otherAnother attribute.
    Returns
    True if other is the same as #this, or if #this is a computed attribute which needs other to compute its value.

    ◆ GetFlags()

    MAXON_METHOD FLAGS GetFlags ( ) const

    Returns the flags of this attribute. If FLAGS::ERROR or FLAGS::WARNING is set, this means that the attribute can contain an error or warning, however a check for a concrete node using GetMessageFlags has to be done to test if the value of the attribute at that node really contains an error or warning.

    Usually you shouldn't call this method directly, but use GraphModelInterface::GetGraphAttributeFlags.

    Returns
    Flags of this attribute. @MAXON_ANNOTATION{default=GraphAttributeInterface::FLAGS::DIRECT}

    ◆ GetMessageFlags()

    MAXON_METHOD Result<FLAGS> GetMessageFlags ( const GraphNode node) const

    Returns the message flags of the attribute value at node. An attribute which may contain an error or warning according to GetFlags() doesn't necessarily have to do so, you have to test for a concrete node if the value of the attribute at that node really contains an error or warning.

    Usually you shouldn't call this method directly, but use GraphNode::GetMessageFlags.

    Parameters
    [in]nodeA node or port where the message flags of this attribute shall be checked.
    Returns
    Message flags (FLAGS::WARNING, FLAGS::ERROR) of this attribute at node.

    ◆ GetMessages()

    MAXON_METHOD Result<Bool> GetMessages ( const GraphNode node,
    const ValueReceiver< const GraphMessage & > &  receiver 
    ) const

    Yields the messages of this attribute at node to #receiver.

    Usually you shouldn't call this method directly, but use GraphNode::GetMessages.

    Parameters
    [in]nodeA node or port at which the messages shall be obtained.
    [in]receiverAll messages are reported to this receiver.
    Returns
    false if the receiver cancelled further evaluation, true otherwise.