Changes in / [944:b4af20d02ae0:933:66156a3498ea] in lemon-main
- Files:
-
- 3 deleted
- 7 edited
-
lemon/Makefile.am (modified) (3 diffs)
-
lemon/bin_heap.h (modified) (3 diffs)
-
lemon/bits/map_extender.h (modified) (10 diffs)
-
lemon/bucket_heap.h (deleted)
-
lemon/concepts/maps.h (modified) (1 diff)
-
lemon/fib_heap.h (deleted)
-
lemon/glpk.h (modified) (3 diffs)
-
lemon/path.h (modified) (11 diffs)
-
lemon/radix_heap.h (deleted)
-
test/heap_test.cc (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
lemon/Makefile.am
r681 r667 60 60 lemon/bfs.h \ 61 61 lemon/bin_heap.h \ 62 lemon/bucket_heap.h \63 62 lemon/cbc.h \ 64 63 lemon/circulation.h \ … … 78 77 lemon/error.h \ 79 78 lemon/euler.h \ 80 lemon/fib_heap.h \81 79 lemon/full_graph.h \ 82 80 lemon/glpk.h \ … … 102 100 lemon/path.h \ 103 101 lemon/preflow.h \ 104 lemon/radix_heap.h \105 102 lemon/radix_sort.h \ 106 103 lemon/random.h \ -
lemon/bin_heap.h
r683 r584 34 34 ///\brief A Binary Heap implementation. 35 35 /// 36 ///This class implements the \e binary \e heap data structure. 37 /// 36 ///This class implements the \e binary \e heap data structure. 37 /// 38 38 ///A \e heap is a data structure for storing items with specified values 39 39 ///called \e priorities in such a way that finding the item with minimum 40 ///priority is efficient. \c C MPspecifies the ordering of the priorities.40 ///priority is efficient. \c Comp specifies the ordering of the priorities. 41 41 ///In a heap one can change the priority of an item, add or erase an 42 42 ///item, etc. … … 45 45 ///\tparam IM A read and writable item map with int values, used internally 46 46 ///to handle the cross references. 47 ///\tparam C MPA functor class for the ordering of the priorities.47 ///\tparam Comp A functor class for the ordering of the priorities. 48 48 ///The default is \c std::less<PR>. 49 49 /// 50 50 ///\sa FibHeap 51 51 ///\sa Dijkstra 52 template <typename PR, typename IM, typename C MP= std::less<PR> >52 template <typename PR, typename IM, typename Comp = std::less<PR> > 53 53 class BinHeap { 54 54 … … 63 63 typedef std::pair<Item,Prio> Pair; 64 64 ///\e 65 typedef C MPCompare;65 typedef Comp Compare; 66 66 67 67 /// \brief Type to represent the items states. -
lemon/bits/map_extender.h
r802 r617 50 50 typedef typename Parent::ConstReference ConstReference; 51 51 52 typedef typename Parent::ReferenceMapTag ReferenceMapTag;53 54 52 class MapIt; 55 53 class ConstMapIt; … … 85 83 typedef typename Map::Value Value; 86 84 87 MapIt() : map(NULL){}88 89 MapIt(Invalid i) : Parent(i) , map(NULL) {}90 91 explicit MapIt(Map& _map) : map( &_map) {92 map ->notifier()->first(*this);85 MapIt() {} 86 87 MapIt(Invalid i) : Parent(i) { } 88 89 explicit MapIt(Map& _map) : map(_map) { 90 map.notifier()->first(*this); 93 91 } 94 92 95 93 MapIt(const Map& _map, const Item& item) 96 : Parent(item), map( &_map) {}94 : Parent(item), map(_map) {} 97 95 98 96 MapIt& operator++() { 99 map ->notifier()->next(*this);97 map.notifier()->next(*this); 100 98 return *this; 101 99 } 102 100 103 101 typename MapTraits<Map>::ConstReturnValue operator*() const { 104 return (*map)[*this];102 return map[*this]; 105 103 } 106 104 107 105 typename MapTraits<Map>::ReturnValue operator*() { 108 return (*map)[*this];106 return map[*this]; 109 107 } 110 108 111 109 void set(const Value& value) { 112 map ->set(*this, value);113 } 114 115 protected: 116 Map *map;110 map.set(*this, value); 111 } 112 113 protected: 114 Map& map; 117 115 118 116 }; … … 125 123 typedef typename Map::Value Value; 126 124 127 ConstMapIt() : map(NULL){}128 129 ConstMapIt(Invalid i) : Parent(i) , map(NULL) {}130 131 explicit ConstMapIt(Map& _map) : map( &_map) {132 map ->notifier()->first(*this);125 ConstMapIt() {} 126 127 ConstMapIt(Invalid i) : Parent(i) { } 128 129 explicit ConstMapIt(Map& _map) : map(_map) { 130 map.notifier()->first(*this); 133 131 } 134 132 … … 137 135 138 136 ConstMapIt& operator++() { 139 map ->notifier()->next(*this);137 map.notifier()->next(*this); 140 138 return *this; 141 139 } … … 146 144 147 145 protected: 148 const Map *map;146 const Map& map; 149 147 }; 150 148 … … 153 151 154 152 public: 155 ItemIt() : map(NULL) {} 156 157 158 ItemIt(Invalid i) : Parent(i) , map(NULL) {}159 160 explicit ItemIt(Map& _map) : map( &_map) {161 map ->notifier()->first(*this);153 154 ItemIt() {} 155 156 ItemIt(Invalid i) : Parent(i) { } 157 158 explicit ItemIt(Map& _map) : map(_map) { 159 map.notifier()->first(*this); 162 160 } 163 161 164 162 ItemIt(const Map& _map, const Item& item) 165 : Parent(item), map( &_map) {}163 : Parent(item), map(_map) {} 166 164 167 165 ItemIt& operator++() { 168 map ->notifier()->next(*this);169 return *this; 170 } 171 172 protected: 173 const Map *map;166 map.notifier()->next(*this); 167 return *this; 168 } 169 170 protected: 171 const Map& map; 174 172 175 173 }; … … 194 192 typedef typename Parent::ConstReference ConstReference; 195 193 196 typedef typename Parent::ReferenceMapTag ReferenceMapTag;197 198 194 class MapIt; 199 195 class ConstMapIt; … … 232 228 typedef typename Map::Value Value; 233 229 234 MapIt() : map(NULL){}235 236 MapIt(Invalid i) : Parent(i) , map(NULL){ }237 238 explicit MapIt(Map& _map) : map( &_map) {239 map ->graph.first(*this);230 MapIt() {} 231 232 MapIt(Invalid i) : Parent(i) { } 233 234 explicit MapIt(Map& _map) : map(_map) { 235 map.graph.first(*this); 240 236 } 241 237 242 238 MapIt(const Map& _map, const Item& item) 243 : Parent(item), map( &_map) {}239 : Parent(item), map(_map) {} 244 240 245 241 MapIt& operator++() { 246 map ->graph.next(*this);242 map.graph.next(*this); 247 243 return *this; 248 244 } 249 245 250 246 typename MapTraits<Map>::ConstReturnValue operator*() const { 251 return (*map)[*this];247 return map[*this]; 252 248 } 253 249 254 250 typename MapTraits<Map>::ReturnValue operator*() { 255 return (*map)[*this];251 return map[*this]; 256 252 } 257 253 258 254 void set(const Value& value) { 259 map ->set(*this, value);260 } 261 262 protected: 263 Map *map;255 map.set(*this, value); 256 } 257 258 protected: 259 Map& map; 264 260 265 261 }; … … 272 268 typedef typename Map::Value Value; 273 269 274 ConstMapIt() : map(NULL){}275 276 ConstMapIt(Invalid i) : Parent(i) , map(NULL){ }277 278 explicit ConstMapIt(Map& _map) : map( &_map) {279 map ->graph.first(*this);270 ConstMapIt() {} 271 272 ConstMapIt(Invalid i) : Parent(i) { } 273 274 explicit ConstMapIt(Map& _map) : map(_map) { 275 map.graph.first(*this); 280 276 } 281 277 282 278 ConstMapIt(const Map& _map, const Item& item) 283 : Parent(item), map( &_map) {}279 : Parent(item), map(_map) {} 284 280 285 281 ConstMapIt& operator++() { 286 map ->graph.next(*this);282 map.graph.next(*this); 287 283 return *this; 288 284 } 289 285 290 286 typename MapTraits<Map>::ConstReturnValue operator*() const { 291 return (*map)[*this];292 } 293 294 protected: 295 const Map *map;287 return map[*this]; 288 } 289 290 protected: 291 const Map& map; 296 292 }; 297 293 … … 300 296 301 297 public: 302 ItemIt() : map(NULL) {} 303 304 305 ItemIt(Invalid i) : Parent(i) , map(NULL){ }306 307 explicit ItemIt(Map& _map) : map( &_map) {308 map ->graph.first(*this);298 299 ItemIt() {} 300 301 ItemIt(Invalid i) : Parent(i) { } 302 303 explicit ItemIt(Map& _map) : map(_map) { 304 map.graph.first(*this); 309 305 } 310 306 311 307 ItemIt(const Map& _map, const Item& item) 312 : Parent(item), map( &_map) {}308 : Parent(item), map(_map) {} 313 309 314 310 ItemIt& operator++() { 315 map ->graph.next(*this);316 return *this; 317 } 318 319 protected: 320 const Map *map;311 map.graph.next(*this); 312 return *this; 313 } 314 315 protected: 316 const Map& map; 321 317 322 318 }; -
lemon/concepts/maps.h
r718 r529 183 183 template<typename _ReferenceMap> 184 184 struct Constraints { 185 typename enable_if<typename _ReferenceMap::ReferenceMapTag, void>::type 186 constraints() { 185 void constraints() { 187 186 checkConcept<ReadWriteMap<K, T>, _ReferenceMap >(); 188 187 ref = m[key]; -
lemon/glpk.h
r832 r650 26 26 #include <lemon/lp_base.h> 27 27 28 // forward declaration 29 #if !defined _GLP_PROB && !defined GLP_PROB 30 #define _GLP_PROB 31 #define GLP_PROB 32 typedef struct { double _opaque_prob; } glp_prob; 33 /* LP/MIP problem object */ 34 #endif 35 28 36 namespace lemon { 29 37 30 namespace _solver_bits {31 class VoidPtr {32 private:33 void *_ptr;34 public:35 VoidPtr() : _ptr(0) {}36 37 template <typename T>38 VoidPtr(T* ptr) : _ptr(reinterpret_cast<void*>(ptr)) {}39 40 template <typename T>41 VoidPtr& operator=(T* ptr) {42 _ptr = reinterpret_cast<void*>(ptr);43 return *this;44 }45 46 template <typename T>47 operator T*() const { return reinterpret_cast<T*>(_ptr); }48 };49 }50 38 51 39 /// \brief Base interface for the GLPK LP and MIP solver … … 56 44 protected: 57 45 58 _solver_bits::VoidPtr lp; 46 typedef glp_prob LPX; 47 glp_prob* lp; 59 48 60 49 GlpkBase(); … … 134 123 135 124 ///Pointer to the underlying GLPK data structure. 136 _solver_bits::VoidPtrlpx() {return lp;}125 LPX *lpx() {return lp;} 137 126 ///Const pointer to the underlying GLPK data structure. 138 _solver_bits::VoidPtrlpx() const {return lp;}127 const LPX *lpx() const {return lp;} 139 128 140 129 ///Returns the constraint identifier understood by GLPK. -
lemon/path.h
r802 r559 71 71 template <typename CPath> 72 72 Path(const CPath& cpath) { 73 pathCopy(cpath, *this);73 copyPath(*this, cpath); 74 74 } 75 75 … … 79 79 template <typename CPath> 80 80 Path& operator=(const CPath& cpath) { 81 pathCopy(cpath, *this);81 copyPath(*this, cpath); 82 82 return *this; 83 83 } … … 259 259 template <typename CPath> 260 260 SimplePath(const CPath& cpath) { 261 pathCopy(cpath, *this);261 copyPath(*this, cpath); 262 262 } 263 263 … … 268 268 template <typename CPath> 269 269 SimplePath& operator=(const CPath& cpath) { 270 pathCopy(cpath, *this);270 copyPath(*this, cpath); 271 271 return *this; 272 272 } … … 438 438 template <typename CPath> 439 439 ListPath(const CPath& cpath) : first(0), last(0) { 440 pathCopy(cpath, *this);440 copyPath(*this, cpath); 441 441 } 442 442 … … 454 454 template <typename CPath> 455 455 ListPath& operator=(const CPath& cpath) { 456 pathCopy(cpath, *this);456 copyPath(*this, cpath); 457 457 return *this; 458 458 } … … 764 764 template <typename CPath> 765 765 StaticPath(const CPath& cpath) : arcs(0) { 766 pathCopy(cpath, *this);766 copyPath(*this, cpath); 767 767 } 768 768 … … 780 780 template <typename CPath> 781 781 StaticPath& operator=(const CPath& cpath) { 782 pathCopy(cpath, *this);782 copyPath(*this, cpath); 783 783 return *this; 784 784 } … … 929 929 }; 930 930 931 template <typename From, typename To,932 bool buildEnable = BuildTagIndicator<T o>::value>931 template <typename Target, typename Source, 932 bool buildEnable = BuildTagIndicator<Target>::value> 933 933 struct PathCopySelectorForward { 934 static void copy( const From& from, To& to) {935 t o.clear();936 for (typename From::ArcIt it(from); it != INVALID; ++it) {937 t o.addBack(it);934 static void copy(Target& target, const Source& source) { 935 target.clear(); 936 for (typename Source::ArcIt it(source); it != INVALID; ++it) { 937 target.addBack(it); 938 938 } 939 939 } 940 940 }; 941 941 942 template <typename From, typename To>943 struct PathCopySelectorForward< From, To, true> {944 static void copy( const From& from, To& to) {945 t o.clear();946 t o.build(from);947 } 948 }; 949 950 template <typename From, typename To,951 bool buildEnable = BuildTagIndicator<T o>::value>942 template <typename Target, typename Source> 943 struct PathCopySelectorForward<Target, Source, true> { 944 static void copy(Target& target, const Source& source) { 945 target.clear(); 946 target.build(source); 947 } 948 }; 949 950 template <typename Target, typename Source, 951 bool buildEnable = BuildTagIndicator<Target>::value> 952 952 struct PathCopySelectorBackward { 953 static void copy( const From& from, To& to) {954 t o.clear();955 for (typename From::RevArcIt it(from); it != INVALID; ++it) {956 t o.addFront(it);953 static void copy(Target& target, const Source& source) { 954 target.clear(); 955 for (typename Source::RevArcIt it(source); it != INVALID; ++it) { 956 target.addFront(it); 957 957 } 958 958 } 959 959 }; 960 960 961 template <typename From, typename To>962 struct PathCopySelectorBackward< From, To, true> {963 static void copy( const From& from, To& to) {964 t o.clear();965 t o.buildRev(from);961 template <typename Target, typename Source> 962 struct PathCopySelectorBackward<Target, Source, true> { 963 static void copy(Target& target, const Source& source) { 964 target.clear(); 965 target.buildRev(source); 966 966 } 967 967 }; 968 968 969 969 970 template <typename From, typename To,971 bool revEnable = RevPathTagIndicator< From>::value>970 template <typename Target, typename Source, 971 bool revEnable = RevPathTagIndicator<Source>::value> 972 972 struct PathCopySelector { 973 static void copy( const From& from, To& to) {974 PathCopySelectorForward< From, To>::copy(from, to);973 static void copy(Target& target, const Source& source) { 974 PathCopySelectorForward<Target, Source>::copy(target, source); 975 975 } 976 976 }; 977 977 978 template <typename From, typename To>979 struct PathCopySelector< From, To, true> {980 static void copy( const From& from, To& to) {981 PathCopySelectorBackward< From, To>::copy(from, to);978 template <typename Target, typename Source> 979 struct PathCopySelector<Target, Source, true> { 980 static void copy(Target& target, const Source& source) { 981 PathCopySelectorBackward<Target, Source>::copy(target, source); 982 982 } 983 983 }; … … 988 988 /// \brief Make a copy of a path. 989 989 /// 990 /// This function makes a copy of a path. 991 template <typename From, typename To> 992 void pathCopy(const From& from, To& to) { 993 checkConcept<concepts::PathDumper<typename From::Digraph>, From>(); 994 _path_bits::PathCopySelector<From, To>::copy(from, to); 995 } 996 997 /// \brief Deprecated version of \ref pathCopy(). 998 /// 999 /// Deprecated version of \ref pathCopy() (only for reverse compatibility). 1000 template <typename To, typename From> 1001 void copyPath(To& to, const From& from) { 1002 pathCopy(from, to); 990 /// This function makes a copy of a path. 991 template <typename Target, typename Source> 992 void copyPath(Target& target, const Source& source) { 993 checkConcept<concepts::PathDumper<typename Source::Digraph>, Source>(); 994 _path_bits::PathCopySelector<Target, Source>::copy(target, source); 1003 995 } 1004 996 … … 1024 1016 /// \brief The source of a path 1025 1017 /// 1026 /// This function returns the source node of the given path. 1027 /// If the path is empty, then it returns \c INVALID. 1018 /// This function returns the source of the given path. 1028 1019 template <typename Digraph, typename Path> 1029 1020 typename Digraph::Node pathSource(const Digraph& digraph, const Path& path) { 1030 return path.empty() ? INVALID :digraph.source(path.front());1021 return digraph.source(path.front()); 1031 1022 } 1032 1023 1033 1024 /// \brief The target of a path 1034 1025 /// 1035 /// This function returns the target node of the given path. 1036 /// If the path is empty, then it returns \c INVALID. 1026 /// This function returns the target of the given path. 1037 1027 template <typename Digraph, typename Path> 1038 1028 typename Digraph::Node pathTarget(const Digraph& digraph, const Path& path) { 1039 return path.empty() ? INVALID :digraph.target(path.back());1029 return digraph.target(path.back()); 1040 1030 } 1041 1031 -
test/heap_test.cc
r681 r440 32 32 33 33 #include <lemon/bin_heap.h> 34 #include <lemon/fib_heap.h>35 #include <lemon/radix_heap.h>36 #include <lemon/bucket_heap.h>37 34 38 35 #include "test_tools.h" … … 187 184 } 188 185 189 {190 typedef FibHeap<Prio, ItemIntMap> IntHeap;191 checkConcept<Heap<Prio, ItemIntMap>, IntHeap>();192 heapSortTest<IntHeap>();193 heapIncreaseTest<IntHeap>();194 195 typedef FibHeap<Prio, IntNodeMap > NodeHeap;196 checkConcept<Heap<Prio, IntNodeMap >, NodeHeap>();197 dijkstraHeapTest<NodeHeap>(digraph, length, source);198 }199 200 {201 typedef RadixHeap<ItemIntMap> IntHeap;202 checkConcept<Heap<Prio, ItemIntMap>, IntHeap>();203 heapSortTest<IntHeap>();204 heapIncreaseTest<IntHeap>();205 206 typedef RadixHeap<IntNodeMap > NodeHeap;207 checkConcept<Heap<Prio, IntNodeMap >, NodeHeap>();208 dijkstraHeapTest<NodeHeap>(digraph, length, source);209 }210 211 {212 typedef BucketHeap<ItemIntMap> IntHeap;213 checkConcept<Heap<Prio, ItemIntMap>, IntHeap>();214 heapSortTest<IntHeap>();215 heapIncreaseTest<IntHeap>();216 217 typedef BucketHeap<IntNodeMap > NodeHeap;218 checkConcept<Heap<Prio, IntNodeMap >, NodeHeap>();219 dijkstraHeapTest<NodeHeap>(digraph, length, source);220 }221 222 223 186 return 0; 224 187 }
Note: See TracChangeset
for help on using the changeset viewer.

