From 79be7e35a72365d861dd4140323275cac52a9e33 Mon Sep 17 00:00:00 2001 From: graehl Date: Sat, 28 Aug 2010 00:08:48 +0000 Subject: value_array alloc fix git-svn-id: https://ws10smt.googlecode.com/svn/trunk@628 ec762483-ff6d-05da-a07a-a48fb63a330f --- decoder/apply_fsa_models.cc | 1 + utils/value_array.h | 16 ++++++++-------- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/decoder/apply_fsa_models.cc b/decoder/apply_fsa_models.cc index fd3e1289..f9edb005 100755 --- a/decoder/apply_fsa_models.cc +++ b/decoder/apply_fsa_models.cc @@ -254,6 +254,7 @@ public: adj.reinit_map(edge_for,*this); #else adj.reinit(edge_for.size()); + SHOWM3(DBUILDTRIE,"done_building_reinit",edge_for.size(),adj.size(),2); Adj::iterator o=adj.begin(); for (PrefixTrieEdgeFor::iterator i=edge_for.begin(),e=edge_for.end();i!=e;++i) { SHOWM3(DBUILDTRIE,"edge_for",o-adj.begin(),i->first,i->second); diff --git a/utils/value_array.h b/utils/value_array.h index 3a8b3292..2010fefe 100755 --- a/utils/value_array.h +++ b/utils/value_array.h @@ -57,7 +57,7 @@ public: typedef T* pointer; size_type size() const { return sz; } - bool empty() const { return size() == 0; } + bool empty() const { return !sz; } iterator begin() { return array; } iterator end() { return array + sz; } @@ -87,15 +87,15 @@ protected: { if (!array) return; // it's cool that this destroys in reverse order of construction, but why bother? - for (size_type i = sz; i != 0;) - A::destroy(array + --i); + for (pointer i=array+sz;i>array;) + A::destroy(--i); } void dealloc() { - if (array != NULL) A::deallocate(array,sz); + if (sz && array != NULL) A::deallocate(array,sz); sz=0; } void alloc(size_type s) { - array = s==0 ? 0 : A::allocate(sz); + array = s==0 ? 0 : A::allocate(s); sz=s; } @@ -133,11 +133,11 @@ protected: copy_construct(itr,end,array); } inline void fill(const_reference t) { - for (T *i=array,*e=array+sz;i!=e;++i) + for (pointer i=array,e=array+sz;i!=e;++i) new(i) T(t); } inline void fill() { - for (T *i=array,*e=array+sz;i!=e;++i) + for (pointer i=array,e=array+sz;i!=e;++i) new(i) T(); } @@ -184,7 +184,7 @@ public: } template - void reinit(I itr, I end) { + void reinit_range(I itr, I end) { reinit_noconstruct(std::distance(itr,end)); copy_construct(itr,end,array); } -- cgit v1.2.3