diff --git a/src/basics/vector.cc b/src/basics/vector.cc index a3b6fac..76e2b52 100644 --- a/src/basics/vector.cc +++ b/src/basics/vector.cc @@ -5,13 +5,19 @@ #include #include +#include +#include #include "basics/vector.hh" +#include "basics/util.hh" + namespace charles { namespace basics { +#pragma mark Constructors and Assignment + /* * charles::basics::Vector4::Vector4 -- */ @@ -34,6 +40,17 @@ Vector4::Vector4(Double x, mData[3] = 1.0; } + +/* + * charles::basics::Vector4::operator= -- + */ +Vector4& +Vector4::operator=(const Vector4 &rhs) +{ + memcpy(mData, rhs.mData, sizeof(Double) * 4); + return *this; +} + #pragma mark Component Access /* @@ -98,6 +115,70 @@ Vector4::Z() return mData[2]; } + +Double& +Vector4::operator()(UInt i) +{ + if (i >= 4) { + std::stringstream ss; + ss << "vector index out of bounds: i = " << i; + throw std::out_of_range(ss.str()); + } + return mData[i]; +} + + +Double +Vector4::operator()(UInt i) + const +{ + if (i >= 4) { + std::stringstream ss; + ss << "vector index out of bounds: i = " << i; + throw std::out_of_range(ss.str()); + } + return mData[i]; +} + + +/* + * charles::basics::Vector4::CArray -- + */ +const Double* +Vector4::CArray() + const +{ + return mData; +} + +#pragma mark Boolean Operators + +/* + * charles::basics::Vector4::operator== -- + */ +bool +Vector4::operator==(const Vector4 &rhs) + const +{ + for (UInt i = 0; i < 4; i++) { + if (!NearlyEqual(mData[i], rhs.mData[i])) { + return false; + } + } + return true; +} + + +/* + * charles::basics::Vector4::operator!= -- + */ +bool +Vector4::operator!=(const Vector4 &rhs) + const +{ + return !(*this == rhs); +} + #pragma mark Maths /* diff --git a/src/basics/vector.hh b/src/basics/vector.hh index a98a095..e8b99a2 100644 --- a/src/basics/vector.hh +++ b/src/basics/vector.hh @@ -33,6 +33,12 @@ struct Vector4 Double Y() const; Double& Z(); Double Z() const; + + Double &operator()(UInt i); + Double operator()(UInt i) const; + + /** Get the underlying C array. */ + const Double *CArray() const; /** @} */ bool operator==(const Vector4 &rhs) const;