00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifndef GLIFT_ARRAY_4_OWN_H_
00029 #define GLIFT_ARRAY_4_OWN_H_
00030
00031 #include "arrayWrap4.h"
00032 #include <assert.h>
00033
00034 namespace gutz {
00035
00036
00037
00038
00039
00040 template <class T>
00041 class arrayOwn4 : public arrayWrap4<T>
00042 {
00043 public:
00044
00045 arrayOwn4 ();
00046 arrayOwn4 (int d0, int d1, int d2, int d3, T v );
00047 arrayOwn4 (int d0, int d1, int d2, int d3, const T* v);
00048 arrayOwn4 ( const arrayWrap4<T>& a );
00049
00050
00051 arrayOwn4 (const arrayOwn4<T>& a);
00052 arrayOwn4<T>& operator= (const arrayOwn4<T>& a);
00053 ~arrayOwn4() {killData();}
00054
00055
00056
00057
00058 void transfer( int d0, int d1, int d3, int d4, T* v, bool killWithDelete );
00059
00060 private:
00061 void initVal (T v);
00062 void initData (const T* d);
00063 void copy (const arrayOwn4<T>& a);
00064 };
00065
00066
00067
00068
00069
00070
00071 template <class T>
00072 arrayOwn4<T>::arrayOwn4()
00073 : arrayWrap4<T>()
00074 {}
00075
00076 template <class T>
00077 arrayOwn4<T>::arrayOwn4 (int d0, int d1, int d2, int d3, T val)
00078 : arrayWrap4<T>(d0, d1, d2, d3, NULL)
00079 {
00080 arrayBase<T>::initValOwn( val );
00081 }
00082
00083 template <class T>
00084 arrayOwn4<T>::arrayOwn4 (int d0, int d1, int d2, int d3, const T* data)
00085 : arrayWrap4<T>(d0, d1, d2, d3, NULL)
00086 {
00087 arrayBase<T>::initDataOwn( data );
00088 }
00089
00090 template <class T>
00091 arrayOwn4<T>::arrayOwn4 ( const arrayWrap4<T>& a ) : arrayWrap4<T>(a)
00092 {
00093 arrayBase<T>::initDataOwn( a.data() );
00094 }
00095
00096
00097 template <class T>
00098 arrayOwn4<T>::arrayOwn4 (const arrayOwn4<T>& a) : arrayWrap4<T>(a)
00099
00100 {
00101 arrayBase<T>::initDataOwn(a.mData);
00102 }
00103
00104
00105 template <class T>
00106 arrayOwn4<T>& arrayOwn4<T>::operator= (const arrayOwn4<T>& a)
00107 {
00108 if( &a != this ) {
00109 if( (mSize != a.size() ) ||
00110 (dim(0) != a.dim(0)) ||
00111 (dim(1) != a.dim(1)) ||
00112 (dim(2) != a.dim(2)) ||
00113 (dim(3) != a.dim(3)) ) {
00114 killData();
00115 arrayWrap4<T>::operator=(a);
00116 arrayBase<T>::allocDataOwn();
00117 }
00118 arrayBase<T>::copyDataOwn(a.mData);
00119 }
00120 return *this;
00121 }
00122
00123
00124
00125 template <class T>
00126 void arrayOwn4<T>::transfer( int d0, int d1, int d2, int d3, T* v, bool killDataWithDelete )
00127 {
00128 killData();
00129
00130 int sizes[4];
00131 sizes[0] = d0;
00132 sizes[1] = d1;
00133 sizes[2] = d2;
00134 sizes[3] = d3;
00135
00136 set(4, sizes, v);
00137 mSlice = arrayWrap3<T>(d1,d2,d3,v);
00138 mKillWithDelete = killDataWithDelete;
00139 }
00140
00141
00142
00143
00144
00145
00146
00147 typedef arrayOwn4<char> arrayo4c;
00148 typedef arrayOwn4<uchar> arrayo4uc;
00149 typedef arrayOwn4<char> arrayo4b;
00150 typedef arrayOwn4<uchar> arrayo4ub;
00151 typedef arrayOwn4<short> arrayo4s;
00152 typedef arrayOwn4<ushort> arrayo4us;
00153 typedef arrayOwn4<int> arrayo4i;
00154 typedef arrayOwn4<uint> arrayo4ui;
00155 typedef arrayOwn4<long> arrayo4l;
00156 typedef arrayOwn4<ulong> arrayo4ul;
00157 typedef arrayOwn4<llong> arrayo4ll;
00158 typedef arrayOwn4<ullong> arrayo4ull;
00159 typedef arrayOwn4<float> arrayo4f;
00160 typedef arrayOwn4<double> arrayo4d;
00161
00162 #ifdef USING_MATHGUTZ
00163 typedef arrayOwn4<vec2ub> arrayo4v2ub;
00164 typedef arrayOwn4<vec2i> arrayo4v2i;
00165 typedef arrayOwn4<vec2ui> arrayo4v2ui;
00166 typedef arrayOwn4<vec2f> arrayo4v2f;
00167
00168 typedef arrayOwn4<vec3ub> arrayo4v3ub;
00169 typedef arrayOwn4<vec3i> arrayo4v3i;
00170 typedef arrayOwn4<vec3ui> arrayo4v3ui;
00171 typedef arrayOwn4<vec3f> arrayo4v3f;
00172
00173 typedef arrayOwn4<vec4ub> arrayo4v4ub;
00174 typedef arrayOwn4<vec4i> arrayo4v4i;
00175 typedef arrayOwn4<vec4ui> arrayo4v4ui;
00176 typedef arrayOwn4<vec4f> arrayo4v4f;
00177
00178 typedef arrayOwn4<mat2ub> arrayo4m2ub;
00179 typedef arrayOwn4<mat2i> arrayo4m2i;
00180 typedef arrayOwn4<mat2ui> arrayo4m2ui;
00181 typedef arrayOwn4<mat2f> arrayo4m2f;
00182
00183 typedef arrayOwn4<mat3ub> arrayo4m3ub;
00184 typedef arrayOwn4<mat3i> arrayo4m3i;
00185 typedef arrayOwn4<mat3ui> arrayo4m3ui;
00186 typedef arrayOwn4<mat3f> arrayo4m3f;
00187
00188 typedef arrayOwn4<mat4ub> arrayo4m4ub;
00189 typedef arrayOwn4<mat4i> arrayo4m4i;
00190 typedef arrayOwn4<mat4ui> arrayo4m4ui;
00191 typedef arrayOwn4<mat4f> arrayo4m4f;
00192 #endif
00193
00194 }
00195
00196 #endif // arrayOwn4_h