summaryrefslogtreecommitdiff
path: root/utils
diff options
context:
space:
mode:
authorgraehl <graehl@ec762483-ff6d-05da-a07a-a48fb63a330f>2010-08-28 00:08:48 +0000
committergraehl <graehl@ec762483-ff6d-05da-a07a-a48fb63a330f>2010-08-28 00:08:48 +0000
commit1fcb1b1876be8097c78a248749c23da170e76c7d (patch)
treeb4092ed3057de5b75d7d1001f5d166bcef3b231a /utils
parent6df4dbd4217b6d4e863876f98876075aeaf66f30 (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-xutils/value_array.h16
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);
}