Home || Architecture || Video Search || Visual Search || Scripts || Applications || Important Messages || OGL || Src

VecTem.h

Go to the documentation of this file.
00001 #ifndef Impala_Core_Array_Element_VecTem_h
00002 #define Impala_Core_Array_Element_VecTem_h
00003 
00004 #include <iostream>
00005 #include "Core/Array/Element/Vec3Int32.h"
00006 
00007 namespace Impala
00008 {
00009 namespace Core
00010 {
00011 namespace Array
00012 {
00013 namespace Element
00014 {
00015 
00016 
00019 template <class ElemT, int vecSize>
00020 class VecTem
00021 {
00022 public:
00023 
00024     typedef ElemT      ElemType;
00025     static const int   VecSize() { return vecSize; }
00026 
00028     VecTem()
00029     {
00030         mData = new ElemType[vecSize];
00031         mIsWrapper = false;
00032     }
00033 
00035     VecTem(ElemType a0)
00036     {
00037         mData = new ElemType[vecSize];
00038         mIsWrapper = false;
00039         mData[0] = a0;
00040         for (int i=1 ; i<vecSize ; i++)
00041             mData[i] = 0;
00042     }
00043 
00045     VecTem(ElemType a0, ElemType a1)
00046     {
00047         mData = new ElemType[vecSize];
00048         mIsWrapper = false;
00049         mData[0] = a0;
00050         mData[1] = a1;
00051         for (int i=2 ; i<vecSize ; i++)
00052             mData[i] = 0;
00053     }
00054 
00056     VecTem(ElemType a0, ElemType a1, ElemType a2)
00057     {
00058         mData = new ElemType[vecSize];
00059         mIsWrapper = false;
00060         mData[0] = a0;
00061         mData[1] = a1;
00062         mData[2] = a2;
00063         for (int i=3 ; i<vecSize ; i++)
00064             mData[i] = 0;
00065     }
00066 
00068     VecTem(ElemType* a, bool isWrapper)
00069     {
00070         mIsWrapper = isWrapper;
00071         mData = (mIsWrapper) ? a : new ElemType[vecSize];
00072         if (!mIsWrapper)
00073             for (int i=0 ; i<vecSize ; i++)
00074                 mData[i] = a[i];
00075     }
00076 
00078     VecTem(const VecTem<ElemType,vecSize>& v)
00079     {
00080         mIsWrapper = v.mIsWrapper;
00081         mData = (mIsWrapper) ? v.mData : new ElemType[vecSize];
00082         if (!mIsWrapper)
00083             for (int i=0 ; i<vecSize ; i++)
00084                 mData[i] = v.mData[i];
00085     }
00086 
00088     ~VecTem()
00089     {
00090         if (!mIsWrapper)
00091             delete [] mData;
00092     }
00093 
00095     VecTem<ElemT, vecSize>&
00096     operator=(const VecTem<ElemT, vecSize>& v)
00097     {
00098         if (this != &v)
00099         {
00100             for (int i=0 ; i<vecSize ; i++)
00101                 mData[i] = v.mData[i];
00102         }
00103         return *this;
00104     }
00105 
00107     VecTem<ElemT, vecSize>&
00108     operator=(const Vec3Int32& v)
00109     {
00110         mData[0] = v.X();
00111         mData[1] = v.Y();
00112         mData[2] = v.Z();
00113         return *this;
00114     }
00115 
00117     ElemType&
00118     operator[](int i) const
00119     { 
00120         return mData[i];
00121     }
00122 
00124     /*
00125     int
00126     operator==(const Vec3Real64& v) const
00127     {
00128         return (mValues[0] == v.mValues[0]) && (mValues[1] == v.mValues[1]) &&
00129                (mValues[2] == v.mValues[2]);
00130     }
00131     */
00132 
00133 private:
00134 
00135     ElemType* mData;
00136     bool      mIsWrapper;
00137 
00138 };
00139 
00140 template <class ElemT, int vecSize>
00141 inline std::ostream&
00142 operator<<(std::ostream& os, const VecTem<ElemT,vecSize>& v)
00143 {
00144     os << "(";
00145     for (int i=0 ; i<vecSize-1 ; i++)
00146         os << v[i] << ",";
00147     return os << v[vecSize-1] << ")";
00148 }
00149 
00150 } // namespace Element
00151 } // namespace Array
00152 } // namespace Core
00153 } // namespace Impala
00154 
00155 #endif

Generated on Fri Mar 19 09:30:45 2010 for ImpalaSrc by  doxygen 1.5.1