|
Aleph-w 3.0
A C++ Library for Data Structures and Algorithms
|
RAII guard that saves and restores graph cookies. More...
#include <cookie_guard.H>
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_Saver & | operator= (const Cookie_Saver &)=delete |
| Cookie_Saver (Cookie_Saver &&other) noexcept | |
| Move construction transfers ownership. | |
| Cookie_Saver & | operator= (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 | |
| GT & | graph |
| 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 |
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.
| GT | Graph type (must have Node and Arc types with cookies). |
Definition at line 274 of file cookie_guard.H.
Definition at line 278 of file cookie_guard.H.
Signature for custom cleanup of temporary arc cookies.
Definition at line 284 of file cookie_guard.H.
Definition at line 277 of file cookie_guard.H.
Signature for custom cleanup of temporary node cookies.
Definition at line 281 of file cookie_guard.H.
|
inline |
Construct a cookie saver for the given graph.
Immediately saves all current cookie values.
| g | Graph to save cookies from (const_cast applied - cookies are mutable). |
| _save_nodes | Whether to save node cookies (default: true). |
| _save_arcs | Whether to save arc cookies (default: true). |
Definition at line 305 of file cookie_guard.H.
References Aleph::Cookie_Saver< GT >::save_cookies().
|
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.
| g | Graph to save cookies from (const_cast applied - cookies are mutable). |
| nc | Node cleanup function (called before restoring). |
| ac | Arc cleanup function (called before restoring). |
Definition at line 329 of file cookie_guard.H.
References Aleph::Cookie_Saver< GT >::save_cookies().
|
delete |
Copying disabled.
|
inlinenoexcept |
Move construction transfers ownership.
Definition at line 341 of file cookie_guard.H.
References Aleph::maps().
|
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().
|
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.
|
inlinenoexcept |
Get access to saved arc cookies.
Definition at line 432 of file cookie_guard.H.
References Aleph::Cookie_Saver< GT >::saved_arc_cookies.
|
inlinenoexcept |
Get access to saved node cookies.
Definition at line 422 of file cookie_guard.H.
References Aleph::Cookie_Saver< GT >::saved_node_cookies.
|
delete |
|
inlinenoexcept |
Move assignment transfers ownership.
Definition at line 354 of file cookie_guard.H.
References Aleph::Cookie_Saver< GT >::active, Aleph::Cookie_Saver< GT >::arc_cleanup, Aleph::maps(), Aleph::Cookie_Saver< GT >::node_cleanup, Aleph::Cookie_Saver< GT >::restore_now(), Aleph::Cookie_Saver< GT >::save_arcs, Aleph::Cookie_Saver< GT >::save_nodes, Aleph::Cookie_Saver< GT >::saved_arc_cookies, and Aleph::Cookie_Saver< GT >::saved_node_cookies.
|
inline |
Manually restore cookies now.
Restores original cookies immediately and deactivates the saver.
Definition at line 387 of file cookie_guard.H.
References Aleph::Cookie_Saver< GT >::active, Aleph::Cookie_Saver< GT >::arc_cleanup, ARC_COOKIE, GraphCommon< GT, Node, Arc >::get_arc_it(), GraphCommon< GT, Node, Arc >::get_node_it(), Aleph::Cookie_Saver< GT >::graph, Aleph::maps(), Aleph::Cookie_Saver< GT >::node_cleanup, NODE_COOKIE, Aleph::Cookie_Saver< GT >::saved_arc_cookies, and Aleph::Cookie_Saver< GT >::saved_node_cookies.
Referenced by Aleph::Cookie_Saver< GT >::~Cookie_Saver(), and Aleph::Cookie_Saver< GT >::operator=().
|
inlineprivate |
Definition at line 444 of file cookie_guard.H.
References ARC_COOKIE, GraphCommon< GT, Node, Arc >::get_arc_it(), GraphCommon< GT, Node, Arc >::get_node_it(), GraphCommon< GT, Node, Arc >::get_num_arcs(), GraphCommon< GT, Node, Arc >::get_num_nodes(), Aleph::Cookie_Saver< GT >::graph, NODE_COOKIE, Aleph::Cookie_Saver< GT >::save_arcs, Aleph::Cookie_Saver< GT >::save_nodes, Aleph::Cookie_Saver< GT >::saved_arc_cookies, and Aleph::Cookie_Saver< GT >::saved_node_cookies.
Referenced by Aleph::Cookie_Saver< GT >::Cookie_Saver(), and Aleph::Cookie_Saver< GT >::Cookie_Saver().
|
private |
Definition at line 294 of file cookie_guard.H.
Referenced by Aleph::Cookie_Saver< GT >::discard(), Aleph::Cookie_Saver< GT >::operator=(), and Aleph::Cookie_Saver< GT >::restore_now().
|
private |
Definition at line 293 of file cookie_guard.H.
Referenced by Aleph::Cookie_Saver< GT >::operator=(), and Aleph::Cookie_Saver< GT >::restore_now().
|
private |
Definition at line 287 of file cookie_guard.H.
Referenced by Aleph::Cookie_Saver< GT >::restore_now(), and Aleph::Cookie_Saver< GT >::save_cookies().
|
private |
Definition at line 292 of file cookie_guard.H.
Referenced by Aleph::Cookie_Saver< GT >::operator=(), and Aleph::Cookie_Saver< GT >::restore_now().
|
private |
Definition at line 291 of file cookie_guard.H.
Referenced by Aleph::Cookie_Saver< GT >::operator=(), and Aleph::Cookie_Saver< GT >::save_cookies().
|
private |
Definition at line 290 of file cookie_guard.H.
Referenced by Aleph::Cookie_Saver< GT >::operator=(), and Aleph::Cookie_Saver< GT >::save_cookies().
|
private |
Definition at line 289 of file cookie_guard.H.
Referenced by Aleph::Cookie_Saver< GT >::discard(), Aleph::Cookie_Saver< GT >::get_saved_arc_cookies(), Aleph::Cookie_Saver< GT >::operator=(), Aleph::Cookie_Saver< GT >::restore_now(), and Aleph::Cookie_Saver< GT >::save_cookies().
|
private |
Definition at line 288 of file cookie_guard.H.
Referenced by Aleph::Cookie_Saver< GT >::discard(), Aleph::Cookie_Saver< GT >::get_saved_node_cookies(), Aleph::Cookie_Saver< GT >::operator=(), Aleph::Cookie_Saver< GT >::restore_now(), and Aleph::Cookie_Saver< GT >::save_cookies().