diff options
Diffstat (limited to 'utils')
-rwxr-xr-x | utils/agenda.h | 1 | ||||
-rw-r--r-- | utils/d_ary_heap.h | 12 |
2 files changed, 8 insertions, 5 deletions
diff --git a/utils/agenda.h b/utils/agenda.h index 1937ad1a..a4940a00 100755 --- a/utils/agenda.h +++ b/utils/agenda.h @@ -64,6 +64,7 @@ struct Less { }; // LocMap and PrioMap are boost property maps put(locmap,key,size_t), Better(get(priomap,k1),get(priomap,k2)) means k1 should be above k2 (be popped first). Locmap and PrioMap may have state; the rest are assumed stateless functors +// make sure the (default) location is not -1 for anything you add, or else an assertion may trigger template <class Item,class Better=Less, /* intern_pool args */ class KeyF=get_key<Item>,class HashKey=boost::hash<typename KeyF::result_type>,class EqKey=std::equal_to<typename KeyF::result_type>, class Pool=boost::object_pool<Item> > struct Agenda : intern_pool<Item,KeyF,HashKey,EqKey,Pool> { typedef intern_pool<Item,KeyF,HashKey,EqKey,Pool> Intern; // inherited because I want to use construct() diff --git a/utils/d_ary_heap.h b/utils/d_ary_heap.h index eee8efe0..20cdab95 100644 --- a/utils/d_ary_heap.h +++ b/utils/d_ary_heap.h @@ -12,6 +12,9 @@ #define D_ARY_VERIFY_HEAP 1 // This is a very expensive test so it should be disabled even when NDEBUG is not defined +# undef D_ARY_HEAP_NULL_INDEX +# define D_ARY_HEAP_NULL_INDEX (-1) // if you want to test contains before adding, init location to this. + /* adapted from boost/graph/detail/d_ary_heap.hpp local modifications: @@ -112,8 +115,6 @@ typename Equal = std::equal_to<Value> > class d_ary_heap_indirect { BOOST_STATIC_ASSERT (Arity >= 2); -# undef D_ARY_HEAP_NULL_INDEX -# define D_ARY_HEAP_NULL_INDEX ((size_type)(-1)) public: typedef Container container_type; typedef Size size_type; @@ -285,9 +286,10 @@ #pragma GCC diagnostic ignored "-Wtype-limits" // because maybe size_type is signed or unsigned inline bool contains(const Value &v,size_type i) const { - return D_ARY_TRACK_OUT_OF_HEAP ? - (i != D_ARY_HEAP_NULL_INDEX) : - i>=0 && i<data.size() && equal(v,data[i]); // note: size_type may be signed (don't recommend it, though) - thus i>=0 check to catch uninit. data + if (D_ARY_TRACK_OUT_OF_HEAP) + return i != D_ARY_HEAP_NULL_INDEX; + size_type sz=data.size(); + return i>=0 && i<sz && equal(v,data[i]); // note: size_type may be signed (don't recommend it, though) - thus i>=0 check to catch uninit. data } #include "warning_pop.h" |