Ipopt Documentation  
 
Loading...
Searching...
No Matches
Ipopt::TaggedObject Class Reference

TaggedObject class. More...

#include <IpTaggedObject.hpp>

+ Inheritance diagram for Ipopt::TaggedObject:

Public Types

typedef unsigned int Tag
 Type for the Tag values.
 

Public Member Functions

 TaggedObject ()
 Constructor.
 
virtual ~TaggedObject ()
 Destructor.
 
Tag GetTag () const
 Users of TaggedObjects call this to update their own internal tags every time they perform the expensive operation.
 
bool HasChanged (const Tag comparison_tag) const
 Users of TaggedObjects call this to check if the object HasChanged since they last updated their own internal tag.
 
- Public Member Functions inherited from Ipopt::ReferencedObject
 ReferencedObject ()
 
virtual ~ReferencedObject ()
 
Index ReferenceCount () const
 
void AddRef (const Referencer *referencer) const
 
void ReleaseRef (const Referencer *referencer) const
 
- Public Member Functions inherited from Ipopt::Subject
 Subject ()
 Default Constructor.
 
virtual ~Subject ()
 Destructor.
 
void AttachObserver (Observer::NotifyType notify_type, Observer *observer) const
 Attach the specified observer (i.e., begin receiving notifications).
 
void DetachObserver (Observer::NotifyType notify_type, Observer *observer) const
 Detach the specified observer (i.e., no longer receive notifications).
 

Protected Member Functions

void ObjectChanged ()
 Objects derived from TaggedObject MUST call this method every time their internal state changes to update the internal tag for comparison.
 
- Protected Member Functions inherited from Ipopt::Subject
void Notify (Observer::NotifyType notify_type) const
 

Private Member Functions

Default Compiler Generated Methods (Hidden to avoid

implicit creation/calling).

These methods are not implemented and we do not want the compiler to implement them for us, so we declare them private and do not define them. This ensures that they will not be implicitly created/called.

 TaggedObject (const TaggedObject &)
 Copy Constructor.
 
void operator= (const TaggedObject &)
 Default Assignment Operator.
 

Private Attributes

Tag tag_
 The tag indicating the current state of the object.
 
Index cache_priority_
 The index indicating the cache priority for this TaggedObject.
 

Detailed Description

TaggedObject class.

Often, certain calculations or operations are expensive, and it can be very inefficient to perform these calculations again if the input to the calculation has not changed since the result was last stored. This base class provides an efficient mechanism to update a tag, indicating that the object has changed. Users of a TaggedObject class, need their own Tag data member to keep track of the state of the TaggedObject, the last time they performed a calculation. A basic use case for users of a class inheriting from TaggedObject follows like this:

  1. Initialize your own Tag to zero in constructor.
  2. Before an expensive calculation, check if the TaggedObject has changed, passing in your own Tag, indicating the last time you used the object for the calculation. If it has changed, perform the calculation again, and store the result. If it has not changed, simply return the stored result.

    Here is a simple example:

           if (vector.HasChanged(my_vector_tag_)) {
             my_vector_tag_ = vector.GetTag();
             result = PerformExpensiveCalculation(vector);
             return result;
           }
           else {
             return result;
           }
    

Objects derived from TaggedObject must indicate that they have changed to the base class using the protected member function ObjectChanged(). For example, a Vector class, inside its own set method, MUST call ObjectChanged() to update the internally stored tag for comparison.

Definition at line 57 of file IpTaggedObject.hpp.

Member Typedef Documentation

◆ Tag

Type for the Tag values.

Definition at line 61 of file IpTaggedObject.hpp.

Constructor & Destructor Documentation

◆ TaggedObject() [1/2]

Ipopt::TaggedObject::TaggedObject ( )
inline

Constructor.

Definition at line 64 of file IpTaggedObject.hpp.

◆ ~TaggedObject()

virtual Ipopt::TaggedObject::~TaggedObject ( )
inlinevirtual

Destructor.

Definition at line 72 of file IpTaggedObject.hpp.

◆ TaggedObject() [2/2]

Ipopt::TaggedObject::TaggedObject ( const TaggedObject )
private

Copy Constructor.

Member Function Documentation

◆ GetTag()

Tag Ipopt::TaggedObject::GetTag ( ) const
inline

Users of TaggedObjects call this to update their own internal tags every time they perform the expensive operation.

Definition at line 79 of file IpTaggedObject.hpp.

◆ HasChanged()

bool Ipopt::TaggedObject::HasChanged ( const Tag  comparison_tag) const
inline

Users of TaggedObjects call this to check if the object HasChanged since they last updated their own internal tag.

Definition at line 89 of file IpTaggedObject.hpp.

◆ ObjectChanged()

void Ipopt::TaggedObject::ObjectChanged ( )
protected

Objects derived from TaggedObject MUST call this method every time their internal state changes to update the internal tag for comparison.

◆ operator=()

void Ipopt::TaggedObject::operator= ( const TaggedObject )
private

Default Assignment Operator.

Member Data Documentation

◆ tag_

Tag Ipopt::TaggedObject::tag_
private

The tag indicating the current state of the object.

We use this to compare against the comparison_tag in the HasChanged method. This member is updated from the unique_tag_ every time the object changes.

Definition at line 118 of file IpTaggedObject.hpp.

◆ cache_priority_

Index Ipopt::TaggedObject::cache_priority_
private

The index indicating the cache priority for this TaggedObject.

If a result that depended on this TaggedObject is cached, it will be cached with this priority

Definition at line 125 of file IpTaggedObject.hpp.


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