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

PtrFunc.h

Go to the documentation of this file.
00001 #ifndef Impala_Core_Array_Pattern_PtrFunc_h
00002 #define Impala_Core_Array_Pattern_PtrFunc_h
00003 
00004 #include "Basis/NativeTypes.h"
00005 #include "Core/Array/Element/ArithTypes.h"
00006 
00007 namespace Impala
00008 {
00009 namespace Core
00010 {
00011 namespace Array
00012 {
00013 namespace Pattern
00014 {
00015 
00016 
00017 /*
00018 template <class ArithT, class StorT>
00019 inline ArithT
00020 PtrRead(StorT* ptr, ArithT)
00021 {
00022     return *ptr;
00023 }
00024 */
00025 
00026 inline Int32
00027 PtrRead(Int8* ptr, Int32)
00028 {
00029     return *ptr;
00030 }
00031 
00032 inline Int32
00033 PtrRead(UInt8* ptr, Int32)
00034 {
00035     return *ptr;
00036 }
00037 
00038 inline Int32
00039 PtrRead(Int32* ptr, Int32)
00040 {
00041     return *ptr;
00042 }
00043 
00044 inline UInt64
00045 PtrRead(UInt64* ptr, UInt64)
00046 {
00047     return *ptr;
00048 }
00049 
00050 inline Real32
00051 PtrRead(Real32* ptr, Real64)
00052 {
00053     return *ptr;
00054 }
00055 
00056 inline Real64
00057 PtrRead(Real64* ptr, Real64)
00058 {
00059     return *ptr;
00060 }
00061 
00062 inline Element::Vec3Int32
00063 PtrRead(UInt8* ptr, Element::Vec3Int32)
00064 {
00065     return Element::Vec3Int32(ptr[0], ptr[1], ptr[2]);
00066 }
00067 
00068 inline Element::Vec2Real64
00069 PtrRead(Real64* ptr, Element::Vec2Real64)
00070 {
00071     return Element::Vec2Real64(ptr[0], ptr[1]);
00072 }
00073 
00074 inline Element::Vec3Real64
00075 PtrRead(Real64* ptr, Element::Vec3Real64)
00076 {
00077     return Element::Vec3Real64(ptr[0], ptr[1], ptr[2]);
00078 }
00079 
00080 inline Element::Complex64
00081 PtrRead(Real64* ptr, Element::Complex64)
00082 {
00083     return Element::Complex64(ptr[0], ptr[1]);
00084 }
00085 
00086 /* This kind of template class with specialization is too diffucult for VC6
00087 template <class ArrayT>
00088 inline void
00089 PtrWrite(typename ArrayT::StorType* ptr, typename ArrayT::ArithType v)
00090 {
00091     *ptr = v;
00092 }
00093 
00094 // Specialization for ArrayVec3Real64
00095 template <>
00096 inline void
00097 PtrWrite<Array2dVec3Real64>(Real64* ptr, Element::Vec3Real64 v)
00098 {
00099     *ptr++ = v.X();
00100     *ptr++ = v.Y();
00101     *ptr++ = v.Z();
00102 }
00103 */
00104 
00105 inline void
00106 PtrWrite(Int8* ptr, Int32 v)
00107 {
00108     *ptr = v;
00109 }
00110 
00111 inline void
00112 PtrWrite(UInt8* ptr, Int32 v)
00113 {
00114     *ptr = v;
00115 }
00116 
00117 inline void
00118 PtrWrite(Int32* ptr, Int32 v)
00119 {
00120     *ptr = v;
00121 }
00122 
00123 inline void
00124 PtrWrite(UInt64* ptr, UInt64 v)
00125 {
00126     *ptr = v;
00127 }
00128 
00129 inline void
00130 PtrWrite(Real32* ptr, Real64 v)
00131 {
00132     *ptr = v;
00133 }
00134 
00135 inline void
00136 PtrWrite(Real64* ptr, Real64 v)
00137 {
00138     *ptr = v;
00139 }
00140 
00141 inline void
00142 PtrWrite(UInt8* ptr, const Element::Vec3Int32& v)
00143 {
00144     *ptr++ = v.X();
00145     *ptr++ = v.Y();
00146     *ptr++ = v.Z();
00147 }
00148 
00149 inline void
00150 PtrWrite(Int32* ptr, const Element::Vec3Int32& v)
00151 {
00152     *ptr++ = v.X();
00153     *ptr++ = v.Y();
00154     *ptr++ = v.Z();
00155 }
00156 
00157 inline void
00158 PtrWrite(Real64* ptr, const Element::Vec2Real64& v)
00159 {
00160     *ptr++ = v.X();
00161     *ptr++ = v.Y();
00162 }
00163 
00164 inline void
00165 PtrWrite(Real64* ptr, const Element::Vec3Real64& v)
00166 {
00167     *ptr++ = v.X();
00168     *ptr++ = v.Y();
00169     *ptr++ = v.Z();
00170 }
00171 
00172 inline void
00173 PtrWrite(Real64* ptr, const Element::Complex64& v)
00174 {
00175     *ptr++ = v.X();
00176     *ptr++ = v.Y();
00177 }
00178 
00179 /*
00180 template <class ElemT, int vecSize>
00181 inline void
00182 PtrWrite(ElemT* ptr, const VecN<ElemT,vecSize>& v)
00183 {
00184     for (int i=0 ; i<vecSize ; i++)
00185         *ptr++ = v[i];
00186 }
00187 */
00188 
00189 } // namespace Pattern
00190 } // namespace Array
00191 } // namespace Core
00192 } // namespace Impala
00193 
00194 #endif

Generated on Thu Jan 13 09:04:11 2011 for ImpalaSrc by  doxygen 1.5.1