xyzw.cpp
Go to the documentation of this file.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
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045 #include "prim_common.h"
00046 #include "xyzw.h"
00047
00048 namespace lass
00049 {
00050 namespace prim
00051 {
00052
00053
00054
00055 XYZW::XYZW():
00056 value_(0)
00057 {
00058 }
00059
00060
00061
00062
00063
00064 XYZW::XYZW(char iAxis)
00065 {
00066 reset(iAxis);
00067 }
00068
00069
00070
00071
00072
00073
00074 XYZW::XYZW(int iValue):
00075 value_(iValue)
00076 {
00077 }
00078
00079
00080
00081
00082
00083 XYZW::XYZW(const std::string& iAxis)
00084 {
00085 if (iAxis.length() != 1)
00086 {
00087 LASS_THROW("Invalid parameter iAxis '" << iAxis << "'. It must be a single character.");
00088 }
00089 reset(iAxis[0]);
00090 }
00091
00092
00093
00094
00095
00096 const char XYZW::axis() const
00097 {
00098 LASS_ASSERT(value_ >= 0 && value_ < 4);
00099 const char axes[] = { 'x', 'y', 'z', 'w' };
00100 return axes[value_];
00101 }
00102
00103
00104
00105 XYZW& XYZW::operator++()
00106 {
00107 LASS_ASSERT(value_ >= 0 && value_ < dimension);
00108 ++value_;
00109 return *this;
00110 }
00111
00112
00113
00114 XYZW& XYZW::operator--()
00115 {
00116 LASS_ASSERT(value_ >= 0 && value_ < dimension);
00117 --value_;
00118 return *this;
00119 }
00120
00121
00122
00123 XYZW XYZW::operator++(int)
00124 {
00125 XYZW result(*this);
00126 ++*this;
00127 return result;
00128 }
00129
00130
00131
00132 XYZW XYZW::operator--(int)
00133 {
00134 XYZW result(*this);
00135 --*this;
00136 return result;
00137 }
00138
00139
00140
00141 XYZW& XYZW::operator+=(int iOffset)
00142 {
00143 value_ += iOffset;
00144 return *this;
00145 }
00146
00147
00148
00149 XYZW& XYZW::operator-=(int iOffset)
00150 {
00151 value_ -= iOffset;
00152 return *this;
00153 }
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164 inline void XYZW::reset(char iAxis)
00165 {
00166 switch (iAxis)
00167 {
00168 case 0:
00169 case 'x':
00170 case 'X':
00171 value_ = 0;
00172 break;
00173
00174 case 1:
00175 case 'y':
00176 case 'Y':
00177 value_ = 1;
00178 break;
00179
00180 case 2:
00181 case 'z':
00182 case 'Z':
00183 value_ = 2;
00184 break;
00185
00186 case 3:
00187 case 'w':
00188 case 'W':
00189 value_ = 3;
00190 break;
00191
00192 default:
00193 LASS_THROW("Invalid parameter iAxis '" << iAxis
00194 << "'. Try 'x', 'X', 'y', 'Y', 'z', 'Z', 'w' or 'W'.");
00195 }
00196 }
00197
00198
00199
00200
00201
00202
00203
00204 bool operator==(const XYZW& iA, const XYZW& iB)
00205 {
00206 return iA.value_ == iB.value_;
00207 }
00208
00209
00210
00211
00212
00213 bool operator==(const XYZW& iA, char iB)
00214 {
00215 return iA.axis() == iB;
00216 }
00217
00218
00219
00220
00221
00222 bool operator==(char iA, const XYZW& iB)
00223 {
00224 return iA == iB.axis();
00225 }
00226
00227
00228
00229
00230
00231 bool operator==(const XYZW& iA, const std::string& iB)
00232 {
00233 return std::string(1, iA.axis()) == iB;
00234 }
00235
00236
00237
00238
00239
00240 bool operator==(const std::string& iA, const XYZW& iB)
00241 {
00242 return iA == std::string(1, iB.axis());
00243 }
00244
00245
00246
00247
00248
00249
00250 bool operator!=(const XYZW& iA, const XYZW& iB)
00251 {
00252 return !(iA == iB);
00253 }
00254
00255
00256
00257
00258
00259
00260 bool operator!=(const XYZW& iA, char iB)
00261 {
00262 return !(iA == iB);
00263 }
00264
00265
00266
00267
00268
00269
00270 bool operator!=(char iA, const XYZW& iB)
00271 {
00272 return !(iA == iB);
00273 }
00274
00275
00276
00277
00278
00279
00280 bool operator!=(const XYZW& iA, const std::string& iB)
00281 {
00282 return !(iA == iB);
00283 }
00284
00285
00286
00287
00288
00289
00290 bool operator!=(const std::string& iA, const XYZW& iB)
00291 {
00292 return !(iA == iB);
00293 }
00294
00295
00296
00297
00298
00299 XYZW operator+(const XYZW& iA, int iOffset)
00300 {
00301 XYZW result(iA);
00302 result += iOffset;
00303 return result;
00304 }
00305
00306
00307
00308
00309
00310 XYZW operator-(const XYZW& iA, int iOffset)
00311 {
00312 XYZW result(iA);
00313 result -= iOffset;
00314 return result;
00315 }
00316
00317
00318
00319 }
00320
00321 }
00322
00323