|
1 /* This Source Code Form is subject to the terms of the Mozilla Public |
|
2 * License, v. 2.0. If a copy of the MPL was not distributed with this |
|
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
|
4 |
|
5 /* A handy class that will allocate data for size*T objects on the stack and |
|
6 * otherwise allocate them on the heap. It is similar in purpose to nsAutoTArray */ |
|
7 |
|
8 template <class T, size_t size> |
|
9 class StackArray |
|
10 { |
|
11 public: |
|
12 StackArray(size_t count) { |
|
13 if (count > size) { |
|
14 mData = new T[count]; |
|
15 } else { |
|
16 mData = mStackData; |
|
17 } |
|
18 } |
|
19 ~StackArray() { |
|
20 if (mData != mStackData) { |
|
21 delete[] mData; |
|
22 } |
|
23 } |
|
24 T& operator[](size_t n) { return mData[n]; } |
|
25 const T& operator[](size_t n) const { return mData[n]; } |
|
26 T* data() { return mData; }; |
|
27 private: |
|
28 T mStackData[size]; |
|
29 T* mData; |
|
30 }; |