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
00019
00020
00021
00022
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
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
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
00181
00182
00183
00184
00185
00186
00187
00188
00189 }
00190 }
00191 }
00192 }
00193
00194 #endif