Branch data Line data Source code
1 : : #ifndef GFXTOOLS_ARRAY_INCLUDED // -*- C++ -*-
2 : : #define GFXTOOLS_ARRAY_INCLUDED
3 : :
4 : : #include <cstring>
5 : :
6 : : template<class T>
7 : : class array {
8 : : protected:
9 : : T *data;
10 : : int len;
11 : : public:
12 : 5282 : array() { data=NULL; len=0; }
13 : 4 : array(int l) { init(l); }
14 : 10564 : ~array() { free(); }
15 : :
16 : :
17 : : inline void init(int l);
18 : : inline void free();
19 : : inline void resize(int l);
20 : :
21 : : inline T& ref(int i);
22 : : inline T& operator[](int i) { return data[i]; }
23 : 568776 : inline T& operator()(int i) { return ref(i); }
24 : :
25 : : inline const T& ref(int i) const;
26 : 0 : inline const T& operator[](int i) const { return data[i]; }
27 : 44868 : inline const T& operator()(int i) const { return ref(i); }
28 : :
29 : :
30 : 0 : inline int length() const { return len; }
31 : 182400 : inline int maxLength() const { return len; }
32 : : };
33 : :
34 : : template<class T>
35 : 10410 : inline void array<T>::init(int l)
36 : : {
37 [ + - ][ + - ]: 30812 : data = new T[l];
[ + - ][ + + ]
[ + - ][ + - ]
[ + + # # ]
38 : 10410 : len = l;
39 [ # # ]: 4 : }
40 : :
41 : : template<class T>
42 : 5282 : inline void array<T>::free()
43 : : {
44 [ + + ][ + - ]: 5282 : if( data )
45 : : {
46 [ + - ][ + + ]: 10408 : delete[] data;
[ + - ]
47 : 5206 : data = NULL;
48 : : }
49 : 5282 : }
50 : :
51 : : template<class T>
52 : 922432 : inline T& array<T>::ref(int i)
53 : : {
54 : : #ifdef SAFETY
55 : : assert( data );
56 : : assert( i>=0 && i<len );
57 : : #endif
58 : 922432 : return data[i];
59 : : }
60 : :
61 : : template<class T>
62 : 22434 : inline const T& array<T>::ref(int i) const
63 : : {
64 : : #ifdef SAFETY
65 : : assert( data );
66 : : assert( i>=0 && i<len );
67 : : #endif
68 : 22434 : return data[i];
69 : : }
70 : :
71 : : template<class T>
72 : 10212 : inline void array<T>::resize(int l)
73 : : {
74 : 10212 : T *old = data;
75 [ + - ][ # # ]: 10212 : data = new T[l];
[ # # ]
76 [ + - ][ # # ]: 10212 : int minl = (len<l)?len:l;
77 : 10212 : data = (T *)memcpy(data,old,minl*sizeof(T));
78 : 10212 : len = l;
79 [ + - ]: 10212 : delete[] old;
80 : 10212 : }
81 : :
82 : : // GFXTOOLS_ARRAY_INCLUDED
83 : : #endif
|