Changes in lemon/bits/alteration_notifier.h [440:88ed40ad0d4f:314:2cc60866a0c9] in lemon-1.2
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
lemon/bits/alteration_notifier.h
r440 r314 3 3 * This file is a part of LEMON, a generic C++ optimization library. 4 4 * 5 * Copyright (C) 2003-200 95 * Copyright (C) 2003-2008 6 6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport 7 7 * (Egervary Research Group on Combinatorial Optimization, EGRES). … … 36 36 // a container. 37 37 // 38 // The simple graph s can be refered as two containers: anode container39 // and an edge container. But they do not store values directly,they40 // are just key continars for more value containers, which are the41 // node and edge maps.42 // 43 // The node and edge sets of the graphs can be changed as we add or erase38 // The simple graph's can be refered as two containers, one node container 39 // and one edge container. But they are not standard containers they 40 // does not store values directly they are just key continars for more 41 // value containers which are the node and edge maps. 42 // 43 // The graph's node and edge sets can be changed as we add or erase 44 44 // nodes and edges in the graph. LEMON would like to handle easily 45 45 // that the node and edge maps should contain values for all nodes or 46 46 // edges. If we want to check on every indicing if the map contains 47 47 // the current indicing key that cause a drawback in the performance 48 // in the library. We use another solution :we notify all maps about48 // in the library. We use another solution we notify all maps about 49 49 // an alteration in the graph, which cause only drawback on the 50 50 // alteration of the graph. 51 51 // 52 // This class provides an interface to a node or edge container. 53 // The first() and next() member functions make possible 54 // to iterate on the keys of the container. 55 // The id() function returns an integer id for each key. 56 // The maxId() function gives back an upper bound of the ids. 52 // This class provides an interface to the container. The \e first() and \e 53 // next() member functions make possible to iterate on the keys of the 54 // container. The \e id() function returns an integer id for each key. 55 // The \e maxId() function gives back an upper bound of the ids. 57 56 // 58 57 // For the proper functonality of this class, we should notify it 59 // about each alteration in the container. The alterations have four type :60 // a dd(), erase(), build() and clear(). The add() and61 // erase() signalthat only one or few items added or erased to or62 // from the graph. If all items are erased from the graph or if a new graph63 // is built from an empty graph,then it can be signaled with the58 // about each alteration in the container. The alterations have four type 59 // as \e add(), \e erase(), \e build() and \e clear(). The \e add() and 60 // \e erase() signals that only one or few items added or erased to or 61 // from the graph. If all items are erased from the graph or from an empty 62 // graph a new graph is builded then it can be signaled with the 64 63 // clear() and build() members. Important rule that if we erase items 65 // from graph swe should first signal the alteration and after that erase64 // from graph we should first signal the alteration and after that erase 66 65 // them from the container, on the other way on item addition we should 67 66 // first extend the container and just after that signal the alteration. 68 67 // 69 68 // The alteration can be observed with a class inherited from the 70 // ObserverBase nested class. The signals can be handled with69 // \e ObserverBase nested class. The signals can be handled with 71 70 // overriding the virtual functions defined in the base class. The 72 71 // observer base can be attached to the notifier with the 73 // attach() member and can be detached with detach() function. The72 // \e attach() member and can be detached with detach() function. The 74 73 // alteration handlers should not call any function which signals 75 74 // an other alteration in the same notifier and should not 76 75 // detach any observer from the notifier. 77 76 // 78 // Alteration observers try to be exception safe. If an add() or79 // a clear() function throws an exception then the remaining77 // Alteration observers try to be exception safe. If an \e add() or 78 // a \e clear() function throws an exception then the remaining 80 79 // observeres will not be notified and the fulfilled additions will 81 // be rolled back by calling the erase() or clear() functions.82 // Hence erase() and clear() should not throw exception.83 // Actullay, they can throw only \ref ImmediateDetach exception,84 // which detach the observer from the notifier.85 // 86 // There are some cases,when the alteration observing is not completly80 // be rolled back by calling the \e erase() or \e clear() 81 // functions. Thence the \e erase() and \e clear() should not throw 82 // exception. Actullay, it can be throw only \ref ImmediateDetach 83 // exception which detach the observer from the notifier. 84 // 85 // There are some place when the alteration observing is not completly 87 86 // reliable. If we want to carry out the node degree in the graph 88 // as in the \ref InDegMap and we use the reverse Arc(), then it cause87 // as in the \ref InDegMap and we use the reverseEdge that cause 89 88 // unreliable functionality. Because the alteration observing signals 90 // only erasing and adding but not the reversing ,it will stores bad91 // degrees. Apart form that the subgraph adaptors cannot even signal92 // the alterations because just a setting in the filter map can modify93 // the graph and this cannotbe watched in any way.89 // only erasing and adding but not the reversing it will stores bad 90 // degrees. The sub graph adaptors cannot signal the alterations because 91 // just a setting in the filter map can modify the graph and this cannot 92 // be watched in any way. 94 93 // 95 94 // \param _Container The container which is observed. … … 105 104 typedef _Item Item; 106 105 107 // \brief Exception which can be called from clear() and108 // erase().109 // 110 // From the clear() anderase() function only this106 // \brief Exception which can be called from \e clear() and 107 // \e erase(). 108 // 109 // From the \e clear() and \e erase() function only this 111 110 // exception is allowed to throw. The exception immediatly 112 111 // detaches the current observer from the notifier. Because the 113 // clear() anderase() should not throw other exceptions112 // \e clear() and \e erase() should not throw other exceptions 114 113 // it can be used to invalidate the observer. 115 114 struct ImmediateDetach {}; … … 123 122 // The observer interface contains some pure virtual functions 124 123 // to override. The add() and erase() functions are 125 // to notify the oberver when one item is added or erased. 124 // to notify the oberver when one item is added or 125 // erased. 126 126 // 127 127 // The build() and clear() members are to notify the observer
Note: See TracChangeset
for help on using the changeset viewer.