diff options
author | graehl <graehl@ec762483-ff6d-05da-a07a-a48fb63a330f> | 2010-08-28 00:08:48 +0000 |
---|---|---|
committer | graehl <graehl@ec762483-ff6d-05da-a07a-a48fb63a330f> | 2010-08-28 00:08:48 +0000 |
commit | 1fcb1b1876be8097c78a248749c23da170e76c7d (patch) | |
tree | b4092ed3057de5b75d7d1001f5d166bcef3b231a /utils | |
parent | 6df4dbd4217b6d4e863876f98876075aeaf66f30 (diff) |
value_array alloc fix
git-svn-id: https://ws10smt.googlecode.com/svn/trunk@628 ec762483-ff6d-05da-a07a-a48fb63a330f
Diffstat (limited to 'utils')
-rwxr-xr-x | utils/value_array.h | 16 |
1 files changed, 8 insertions, 8 deletions
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 <class I> - void reinit(I itr, I end) { + void reinit_range(I itr, I end) { reinit_noconstruct(std::distance(itr,end)); copy_construct(itr,end,array); } |