CrossFramework Library
|
00001 00006 #if defined(XBASE_INCLUDED_VECTOR4I_HPP) 00007 #else 00008 #define XBASE_INCLUDED_VECTOR4I_HPP 00009 00010 //------------------------------------------------------------ 00011 #include <XBase/BuiltInTypes.hpp> 00012 #include <XBase/ShortString.hpp> 00013 00014 //------------------------------------------------------------ 00015 namespace XBase { 00016 struct Vector2iPOD; 00017 struct Vector3iPOD; 00018 struct Vector4POD; 00019 } 00020 00021 //------------------------------------------------------------ 00022 namespace XBase { 00024 00025 00031 struct Vector4iPOD 00032 { 00033 //============================================================ 00035 00036 static const Vector4iPOD Zero(); 00037 static const Vector4iPOD One(); 00038 static const Vector4iPOD Min(); 00039 static const Vector4iPOD Max(); 00040 static const Vector4iPOD UnitX(); 00041 static const Vector4iPOD UnitY(); 00042 static const Vector4iPOD UnitZ(); 00043 static const Vector4iPOD UnitW(); 00044 static const Vector4iPOD NegUnitX(); 00045 static const Vector4iPOD NegUnitY(); 00046 static const Vector4iPOD NegUnitZ(); 00047 static const Vector4iPOD NegUnitW(); 00048 00049 00050 //============================================================ 00052 00053 s32 x; 00054 s32 y; 00055 s32 z; 00056 s32 w; 00057 00058 00059 //============================================================ 00061 00062 const Vector2iPOD toXY()const; 00063 const Vector2iPOD toXX()const; 00064 const Vector2iPOD toYY()const; 00065 const Vector2iPOD toZZ()const; 00066 const Vector2iPOD toWW()const; 00067 const Vector3iPOD toXYZ()const; 00068 const Vector3iPOD toXXX()const; 00069 const Vector3iPOD toYYY()const; 00070 const Vector3iPOD toZZZ()const; 00071 const Vector3iPOD toWWW()const; 00072 const Vector4iPOD toXYZ0()const; 00073 const Vector4iPOD toXY0W()const; 00074 const Vector4iPOD toXY00()const; 00075 const Vector4iPOD toX0ZW()const; 00076 const Vector4iPOD toX0Z0()const; 00077 const Vector4iPOD toX00W()const; 00078 const Vector4iPOD toX000()const; 00079 const Vector4iPOD to0YZ0()const; 00080 const Vector4iPOD to0Y0W()const; 00081 const Vector4iPOD to0Y00()const; 00082 const Vector4iPOD to00ZW()const; 00083 const Vector4iPOD to00Z0()const; 00084 const Vector4iPOD to000W()const; 00085 const Vector4iPOD toXXXX()const; 00086 const Vector4iPOD toYYYY()const; 00087 const Vector4iPOD toZZZZ()const; 00088 const Vector4iPOD toWWWW()const; 00089 const Vector4POD toXYZWf()const; 00091 00092 //============================================================ 00094 00095 bool equals( const Vector4iPOD& )const; 00096 00097 00098 //============================================================ 00100 00101 const Vector4iPOD add( s32 )const; 00102 const Vector4iPOD sub( s32 )const; 00103 const Vector4iPOD mul( s32 )const; 00104 const Vector4iPOD div( s32 )const; 00105 const Vector4iPOD add( const Vector4iPOD& )const; 00106 const Vector4iPOD sub( const Vector4iPOD& )const; 00107 const Vector4iPOD mul( const Vector4iPOD& )const; 00108 const Vector4iPOD div( const Vector4iPOD& )const; 00109 void addAssign( s32 ); 00110 void subAssign( s32 ); 00111 void mulAssign( s32 ); 00112 void divAssign( s32 ); 00113 void addAssign( const Vector4iPOD& ); 00114 void subAssign( const Vector4iPOD& ); 00115 void mulAssign( const Vector4iPOD& ); 00116 void divAssign( const Vector4iPOD& ); 00117 00118 00119 //============================================================ 00121 00122 const Vector4iPOD operator+( s32 )const; 00123 const Vector4iPOD operator-( s32 )const; 00124 const Vector4iPOD operator*( s32 )const; 00125 const Vector4iPOD operator/( s32 )const; 00126 const Vector4iPOD operator+( const Vector4iPOD& )const; 00127 const Vector4iPOD operator-( const Vector4iPOD& )const; 00128 const Vector4iPOD operator*( const Vector4iPOD& )const; 00129 const Vector4iPOD operator/( const Vector4iPOD& )const; 00130 const Vector4iPOD operator-()const; 00131 Vector4iPOD& operator+=( s32 ); 00132 Vector4iPOD& operator-=( s32 ); 00133 Vector4iPOD& operator*=( s32 ); 00134 Vector4iPOD& operator/=( s32 ); 00135 Vector4iPOD& operator+=( const Vector4iPOD& ); 00136 Vector4iPOD& operator-=( const Vector4iPOD& ); 00137 Vector4iPOD& operator*=( const Vector4iPOD& ); 00138 Vector4iPOD& operator/=( const Vector4iPOD& ); 00139 00140 00141 //============================================================ 00143 00144 const Vector4iPOD min( const Vector4iPOD& )const; 00145 const Vector4iPOD max( const Vector4iPOD& )const; 00146 00147 00148 //============================================================ 00150 00151 const Vector4iPOD clamp( const Vector4iPOD& aMin , const Vector4iPOD& aMax )const; 00152 const Vector4iPOD clampPositive()const; 00153 const Vector4iPOD clampNegative()const; 00154 00155 00156 //============================================================ 00158 00159 const Vector4iPOD abs()const; 00160 const Vector4iPOD neg()const; 00161 bool isPositive()const; 00162 00163 00164 //============================================================ 00166 00167 bool isZero()const; 00168 00169 00170 //============================================================ 00172 00173 00174 const ShortString toShortString()const; 00176 }; 00177 00179 class Vector4i : public Vector4iPOD 00180 { 00181 public: 00182 //============================================================ 00184 00185 Vector4i(); 00186 Vector4i( const Vector4iPOD& aXYZW ); 00187 Vector4i( s32 aV ); 00188 Vector4i( const Vector2iPOD& aXY , s32 aZ , s32 aW ); 00189 Vector4i( const Vector3iPOD& aXYZ , s32 aW ); 00190 Vector4i( s32 aX , s32 aY , s32 aZ , s32 aW ); 00191 00192 }; 00193 00195 typedef Vector4iPOD Vec4i; 00197 } 00198 //------------------------------------------------------------ 00199 #endif 00200 // EOF