Aleph-w 3.0
A C++ Library for Data Structures and Algorithms
Loading...
Searching...
No Matches
Aleph::Cookie_Saver< GT > Class Template Reference

RAII guard that saves and restores graph cookies. More...

#include <cookie_guard.H>

Collaboration diagram for Aleph::Cookie_Saver< GT >:
[legend]

Public Types

using Node = typename GT::Node
 
using Arc = typename GT::Arc
 
using Node_Cleanup = std::function< void(Node *)>
 Signature for custom cleanup of temporary node cookies.
 
using Arc_Cleanup = std::function< void(Arc *)>
 Signature for custom cleanup of temporary arc cookies.
 

Public Member Functions

 Cookie_Saver (const GT &g, bool _save_nodes=true, bool _save_arcs=true)
 Construct a cookie saver for the given graph.
 
 Cookie_Saver (const GT &g, Node_Cleanup nc, Arc_Cleanup ac=nullptr)
 Construct with custom cleanup for temporary cookies.
 
 Cookie_Saver (const Cookie_Saver &)=delete
 Copying disabled.
 
Cookie_Saveroperator= (const Cookie_Saver &)=delete
 
 Cookie_Saver (Cookie_Saver &&other) noexcept
 Move construction transfers ownership.
 
Cookie_Saveroperator= (Cookie_Saver &&other) noexcept
 Move assignment transfers ownership.
 
void discard () noexcept
 Discard saved cookies without restoring.
 
void restore_now ()
 Manually restore cookies now.
 
const std::vector< std::pair< Node *, void * > > & get_saved_node_cookies () const noexcept
 Get access to saved node cookies.
 
const std::vector< std::pair< Arc *, void * > > & get_saved_arc_cookies () const noexcept
 Get access to saved arc cookies.
 
 ~Cookie_Saver ()
 Destructor - restores cookies if saver is still active.
 

Private Member Functions

void save_cookies ()
 

Private Attributes

GTgraph
 
std::vector< std::pair< Node *, void * > > saved_node_cookies
 
std::vector< std::pair< Arc *, void * > > saved_arc_cookies
 
bool save_nodes
 
bool save_arcs
 
Node_Cleanup node_cleanup
 
Arc_Cleanup arc_cleanup
 
bool active
 

Detailed Description

template<class GT>
class Aleph::Cookie_Saver< GT >

RAII guard that saves and restores graph cookies.

This class saves the current cookie values when constructed and restores them when destroyed. Useful when an algorithm needs to temporarily use cookies without losing data from a previous algorithm.

Template Parameters
GTGraph type (must have Node and Arc types with cookies).
Warning
This class stores pointers to the original cookie values. If the graph structure changes (nodes/arcs added/removed) between save and restore, behavior is undefined.
Thread Safety
Not thread-safe. Each thread should use its own saver.
Author
Leandro Rabindranath León

Definition at line 274 of file cookie_guard.H.

Member Typedef Documentation

◆ Arc

Definition at line 278 of file cookie_guard.H.

◆ Arc_Cleanup

template<class GT >
using Aleph::Cookie_Saver< GT >::Arc_Cleanup = std::function<void(Arc*)>

Signature for custom cleanup of temporary arc cookies.

Definition at line 284 of file cookie_guard.H.

◆ Node

Definition at line 277 of file cookie_guard.H.

◆ Node_Cleanup

template<class GT >
using Aleph::Cookie_Saver< GT >::Node_Cleanup = std::function<void(Node*)>

Signature for custom cleanup of temporary node cookies.

Definition at line 281 of file cookie_guard.H.

Constructor & Destructor Documentation

◆ Cookie_Saver() [1/4]

template<class GT >
Aleph::Cookie_Saver< GT >::Cookie_Saver ( const GT g,
bool  _save_nodes = true,
bool  _save_arcs = true 
)
inline

Construct a cookie saver for the given graph.

Immediately saves all current cookie values.

Parameters
gGraph to save cookies from (const_cast applied - cookies are mutable).
_save_nodesWhether to save node cookies (default: true).
_save_arcsWhether to save arc cookies (default: true).

Definition at line 305 of file cookie_guard.H.

References Aleph::Cookie_Saver< GT >::save_cookies().

◆ Cookie_Saver() [2/4]

template<class GT >
Aleph::Cookie_Saver< GT >::Cookie_Saver ( const GT g,
Node_Cleanup  nc,
Arc_Cleanup  ac = nullptr 
)
inline

Construct with custom cleanup for temporary cookies.

Use this when your algorithm allocates data in cookies that needs to be freed before restoring the original cookies.

Parameters
gGraph to save cookies from (const_cast applied - cookies are mutable).
ncNode cleanup function (called before restoring).
acArc cleanup function (called before restoring).
Example
[](Node* p) { delete static_cast<TempData*>(NODE_COOKIE(p)); },
nullptr // no arc cleanup needed
);
RAII guard that saves and restores graph cookies.
typename GT::Node Node
#define NODE_COOKIE(p)
Return the node cookie
DynList< T > maps(const C &c, Op op)
Classic map operation.

Definition at line 329 of file cookie_guard.H.

References Aleph::Cookie_Saver< GT >::save_cookies().

◆ Cookie_Saver() [3/4]

Copying disabled.

◆ Cookie_Saver() [4/4]

template<class GT >
Aleph::Cookie_Saver< GT >::Cookie_Saver ( Cookie_Saver< GT > &&  other)
inlinenoexcept

Move construction transfers ownership.

Definition at line 341 of file cookie_guard.H.

References Aleph::maps().

◆ ~Cookie_Saver()

template<class GT >
Aleph::Cookie_Saver< GT >::~Cookie_Saver ( )
inline

Destructor - restores cookies if saver is still active.

Definition at line 438 of file cookie_guard.H.

References Aleph::Cookie_Saver< GT >::restore_now().

Member Function Documentation

◆ discard()

template<class GT >
void Aleph::Cookie_Saver< GT >::discard ( )
inlinenoexcept

Discard saved cookies without restoring.

Call this if you want to keep the new cookie values instead of restoring the original ones.

Definition at line 376 of file cookie_guard.H.

References Aleph::Cookie_Saver< GT >::active, Aleph::Cookie_Saver< GT >::saved_arc_cookies, and Aleph::Cookie_Saver< GT >::saved_node_cookies.

◆ get_saved_arc_cookies()

template<class GT >
const std::vector< std::pair< Arc *, void * > > & Aleph::Cookie_Saver< GT >::get_saved_arc_cookies ( ) const
inlinenoexcept

Get access to saved arc cookies.

Returns
Const reference to vector of (arc, saved_cookie) pairs.

Definition at line 432 of file cookie_guard.H.

References Aleph::Cookie_Saver< GT >::saved_arc_cookies.

◆ get_saved_node_cookies()

template<class GT >
const std::vector< std::pair< Node *, void * > > & Aleph::Cookie_Saver< GT >::get_saved_node_cookies ( ) const
inlinenoexcept

Get access to saved node cookies.

Returns
Const reference to vector of (node, saved_cookie) pairs.

Definition at line 422 of file cookie_guard.H.

References Aleph::Cookie_Saver< GT >::saved_node_cookies.

◆ operator=() [1/2]

◆ operator=() [2/2]

◆ restore_now()

◆ save_cookies()

Member Data Documentation

◆ active

◆ arc_cleanup

template<class GT >
Arc_Cleanup Aleph::Cookie_Saver< GT >::arc_cleanup
private

◆ graph

template<class GT >
GT& Aleph::Cookie_Saver< GT >::graph
private

◆ node_cleanup

template<class GT >
Node_Cleanup Aleph::Cookie_Saver< GT >::node_cleanup
private

◆ save_arcs

template<class GT >
bool Aleph::Cookie_Saver< GT >::save_arcs
private

◆ save_nodes

template<class GT >
bool Aleph::Cookie_Saver< GT >::save_nodes
private

◆ saved_arc_cookies

◆ saved_node_cookies


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