"Fossies" - the Fresh Open Source Software Archive 
Member "qdiff-0.9.1/tvector.h" (21 Oct 2008, 2646 Bytes) of package /linux/privat/old/qdiff-0.9.1.tar.gz:
As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style:
standard) with prefixed line numbers and
code folding option.
Alternatively you can here
view or
download the uninterpreted source code file.
1 /*GPL*START*
2 *
3 * tvector<> class template -- improved stl vector<>
4 *
5 * Copyright (C) 2000-2001 by Johannes Overmann <Johannes.Overmann@gmx.de>
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20 * *GPL*END*/
21
22 #ifndef _ngw_tvector_h_
23 #define _ngw_tvector_h_
24
25
26 #ifdef DONT_USE_STL
27 #include "ttvector.h"
28 #define tvector_base ttvector
29 #else
30 # include <vector>
31 # define tvector_base vector
32 using namespace std;
33 #endif
34
35
36 #include "texception.h"
37
38 // history: start 08 Jul 2000
39 // 2000:
40 // 08 Jul: removing tarray and tassocarray, this should provide tmap and tvector
41 // 2001:
42 // 15 Sep: DONT_USE_STL feature added
43 // 16 Sep: splittet tstl.h into tvector.h and tmap.h
44 // 20 Sep: clear() added
45
46 template<class T>
47 class tvector: public tvector_base<T> {
48 public:
49 // 1:1 wrapper
50
51 /// create an empty vector
52 tvector():tvector_base<T>() {}
53 /// create a vector with n elements
54 tvector(size_t n):tvector_base<T>(n) {}
55 /// create a vector with n copies of t
56 tvector(size_t n, const T& t):tvector_base<T>(n, t) {}
57
58 // new functionality
59
60 /// append an element to the end
61 const tvector& operator += (const T& a) { push_back(a); return *this; }
62 /// append another tvector to the end
63 const tvector& operator += (const tvector& a) { insert(tvector_base<T>::end(), a.tvector_base<T>::begin(), a.tvector_base<T>::end()); return *this; }
64 /// direct read only access, safe
65 const T& operator[](size_t i) const { if(i < tvector_base<T>::size()) return tvector_base<T>::operator[](i); else throw TZeroBasedIndexOutOfRangeException(i, tvector_base<T>::size()); } // throw(TZeroBasedIndexOutOfRangeException);
66 /// direct read/write access, automatically create new elements
67 T& operator[](size_t i) { if(i >= tvector_base<T>::size()) operator+=(tvector(i - tvector_base<T>::size() + 1)); return tvector_base<T>::operator[](i); }
68 /// clear vector
69 void clear() { erase(tvector_base<T>::begin(), tvector_base<T>::end()); }
70 };
71
72
73 #endif /* _ngw_tvector_h_ */
74