From 6165a7852d01439d20ed5ee1814798863a3d5bf7 Mon Sep 17 00:00:00 2001 From: graehl Date: Tue, 31 Aug 2010 01:56:56 +0000 Subject: l2r bugfixes git-svn-id: https://ws10smt.googlecode.com/svn/trunk@635 ec762483-ff6d-05da-a07a-a48fb63a330f --- utils/agenda.h | 1 + utils/d_ary_heap.h | 12 +++++++----- 2 files changed, 8 insertions(+), 5 deletions(-) (limited to 'utils') 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 HashKey=boost::hash,class EqKey=std::equal_to, class Pool=boost::object_pool > struct Agenda : intern_pool { typedef intern_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 > 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=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=0 check to catch uninit. data } #include "warning_pop.h" -- cgit v1.2.3