source: GTP/trunk/Lib/Geom/shared/GTGeometry/src/libs/gfx/tools/Array.h @ 1025

Revision 1025, 1.5 KB checked in by gumbau, 18 years ago (diff)

namespace simplif

Line 
1#ifndef GFXTOOLS_ARRAY_INCLUDED // -*- C++ -*-
2#define GFXTOOLS_ARRAY_INCLUDED
3
4#include <string.h>
5#include "../std.h"
6
7namespace simplif
8{
9        template<class T>
10        class array {
11        protected:
12                T *data;
13                int len;
14        public:
15                array() { data=NULL; len=0; }
16                array(int l) { init(l); }
17                ~array() { f_r_e_e(); }
18
19
20                inline void init(int l);
21                inline void f_r_e_e();
22                inline void resize(int l);
23
24                inline T& ref(int i);
25                inline T& operator[](int i) { return data[i]; }
26                inline T& operator()(int i) { return ref(i); }
27
28                inline const T& ref(int i) const;
29                inline const T& operator[](int i) const { return data[i]; }
30                inline const T& operator()(int i) const { return ref(i); }
31
32
33                inline int length() const { return len; }
34                inline int maxLength() const { return len; }
35        };
36
37        template<class T>
38        inline void array<T>::init(int l)
39        {
40                data = new T[l];
41                len = l;
42        }
43
44        template<class T>
45        inline void array<T>::f_r_e_e()
46        {
47                if( data )
48                {
49                delete[] data;
50                data = NULL;
51                }
52        }
53
54        template<class T>
55        inline T& array<T>::ref(int i)
56        {
57        #ifdef SAFETY
58                assert( data );
59                assert( i>=0 && i<len );
60        #endif
61                return data[i];
62        }
63
64        template<class T>
65        inline const T& array<T>::ref(int i) const
66        {
67        #ifdef SAFETY
68                assert( data );
69                assert( i>=0 && i<len );
70        #endif
71                return data[i];
72        }
73
74        template<class T>
75        inline void array<T>::resize(int l)
76        {
77                T *old = data;
78                data = new T[l];
79                data = (T *)memcpy(data,old,MIN(len,l)*sizeof(T));
80                len = l;
81                delete[] old;
82        }
83}
84
85// GFXTOOLS_ARRAY_INCLUDED
86#endif
Note: See TracBrowser for help on using the repository browser.