summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/FixVec.h
diff options
context:
space:
mode:
authordshaligram <dshaligram@c06c8d41-db1a-0410-9941-cceddc491573>2006-11-22 08:41:20 +0000
committerdshaligram <dshaligram@c06c8d41-db1a-0410-9941-cceddc491573>2006-11-22 08:41:20 +0000
commit1d0f57cbceb778139ca215cc4fcfd1584951f6dd (patch)
treecafd60c944c51fcce778aa5d6912bc548c518339 /crawl-ref/source/FixVec.h
parent6f5e187a9e5cd348296dba2fd89d2e206e775a01 (diff)
downloadcrawl-ref-1d0f57cbceb778139ca215cc4fcfd1584951f6dd.tar.gz
crawl-ref-1d0f57cbceb778139ca215cc4fcfd1584951f6dd.zip
Merged stone_soup r15:451 into trunk.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@452 c06c8d41-db1a-0410-9941-cceddc491573
Diffstat (limited to 'crawl-ref/source/FixVec.h')
-rw-r--r--crawl-ref/source/FixVec.h96
1 files changed, 47 insertions, 49 deletions
diff --git a/crawl-ref/source/FixVec.h b/crawl-ref/source/FixVec.h
index b0afb34e82..176ced5cf4 100644
--- a/crawl-ref/source/FixVec.h
+++ b/crawl-ref/source/FixVec.h
@@ -12,7 +12,8 @@
#ifndef FIXVEC_H
#define FIXVEC_H
-#include <stdarg.h>
+#include <cstdarg>
+#include <cstring>
#include "debug.h"
@@ -39,16 +40,6 @@ public:
typedef TYPE* iterator;
typedef const TYPE* const_iterator;
-#if 0
-#if MSVC >= 1100
- typedef std::reverse_iterator<const_iterator, const TYPE> const_reverse_iterator;
- typedef std::reverse_iterator<iterator, TYPE> reverse_iterator;
-#else
- typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
- typedef std::reverse_iterator<iterator> reverse_iterator;
-#endif
-#endif
-
//-----------------------------------
// Initialization/Destruction
//
@@ -57,6 +48,10 @@ public:
FixedVector() {}
+ FixedVector(TYPE def) : mData() {
+ init(def);
+ }
+
FixedVector(TYPE value0, TYPE value1, ...);
// Allows for something resembling C array initialization, eg
// instead of "int a[3] = {0, 1, 2}" you'd use "FixedVector<int, 3>
@@ -71,35 +66,31 @@ public:
// API
//
public:
- // ----- Size -----
- bool empty() const {return SIZE == 0;}
- int size() const {return SIZE;}
-
- // ----- Access -----
- TYPE& operator[](unsigned long index) {ASSERT(index < SIZE); return mData[index];}
- const TYPE& operator[](unsigned long index) const {ASSERT(index < SIZE); return mData[index];}
-
- TYPE& front() {ASSERT(SIZE > 0); return mData[0];}
- const TYPE& front() const {ASSERT(SIZE > 0); return mData[0];}
-
- TYPE& back() {ASSERT(SIZE > 0); return mData[SIZE - 1];}
- const TYPE& back() const {ASSERT(SIZE > 0); return mData[SIZE - 1];}
-
- TYPE* buffer() {return mData;}
- const TYPE* buffer() const {return mData;}
-
- // ----- Iterating -----
- iterator begin() {return mData;}
- const_iterator begin() const {return mData;}
-
- iterator end() {return this->begin() + this->size();}
- const_iterator end() const {return this->begin() + this->size();}
-
-// reverse_iterator rbegin() {return reverse_iterator(this->end());}
-// const_reverse_iterator rbegin() const {return const_reverse_iterator(this->end());}
-
-// reverse_iterator rend() {return reverse_iterator(this->begin());}
-// const_reverse_iterator rend() const {return const_reverse_iterator(this->begin());}
+// ----- Size -----
+ bool empty() const {return SIZE == 0;}
+ size_t size() const {return SIZE;}
+
+// ----- Access -----
+ TYPE& operator[](unsigned long index) {ASSERT(index < SIZE); return mData[index];}
+ const TYPE& operator[](unsigned long index) const {ASSERT(index < SIZE); return mData[index];}
+
+ TYPE& front() {ASSERT(SIZE > 0); return mData[0];}
+ const TYPE& front() const {ASSERT(SIZE > 0); return mData[0];}
+
+ TYPE& back() {ASSERT(SIZE > 0); return mData[SIZE - 1];}
+ const TYPE& back() const {ASSERT(SIZE > 0); return mData[SIZE - 1];}
+
+ TYPE* buffer() {return mData;}
+ const TYPE* buffer() const {return mData;}
+
+// ----- Iterating -----
+ iterator begin() {return mData;}
+ const_iterator begin() const {return mData;}
+
+ iterator end() {return this->begin() + this->size();}
+ const_iterator end() const {return this->begin() + this->size();}
+
+ void init(TYPE def);
//-----------------------------------
// Member Data
@@ -115,19 +106,26 @@ protected:
template <class TYPE, int SIZE>
FixedVector<TYPE, SIZE>::FixedVector(TYPE value0, TYPE value1, ...)
{
- mData[0] = value0;
- mData[1] = value1;
+ mData[0] = value0;
+ mData[1] = value1;
+
+ va_list ap;
+ va_start(ap, value1); // second argument is last fixed parameter
- va_list ap;
- va_start(ap, value1); // second argument is last fixed parameter
+ for (int index = 2; index < SIZE; index++) {
+ TYPE value = va_arg(ap, TYPE);
- for (int index = 2; index < SIZE; index++) {
- TYPE value = va_arg(ap, TYPE);
+ mData[index] = value;
+ }
- mData[index] = value;
- }
+ va_end(ap);
+}
- va_end(ap);
+template <class TYPE, int SIZE>
+void FixedVector<TYPE, SIZE>::init(TYPE def)
+{
+ for (int i = 0; i < SIZE; ++i)
+ mData[i] = def;
}
#endif // FIXVEC_H