$search
00001 /* 00002 * Copyright (C) 2009 00003 * Robert Bosch LLC 00004 * Research and Technology Center North America 00005 * Palo Alto, California 00006 * 00007 * All rights reserved. 00008 * 00009 *------------------------------------------------------------------------------ 00010 * project ....: Autonomous Technologies 00011 * file .......: rtcVec4.h 00012 * authors ....: Benjamin Pitzer 00013 * organization: Robert Bosch LLC 00014 * creation ...: 08/16/2006 00015 * modified ...: $Date: 2009-01-21 18:19:16 -0800 (Wed, 21 Jan 2009) $ 00016 * changed by .: $Author: benjaminpitzer $ 00017 * revision ...: $Revision: 14 $ 00018 */ 00019 #ifndef RTC_VEC4_H 00020 #define RTC_VEC4_H 00021 00022 //== INCLUDES ================================================================== 00023 #include "rtc/rtcMath.h" 00024 #include "rtc/rtcVec.h" 00025 00026 //== NAMESPACES ================================================================ 00027 namespace rtc { 00028 00029 // Forward declarations 00030 template <class T, int M> class Vec; // M-d vector 00031 template <class T> class Vec4; // 4d Vector 00032 00036 template <class T> 00037 class Vec4: public Vec<T,4> { 00038 public: 00039 // inherit member data and functions of parent 00040 using Vec<T,4>::x; 00041 using Vec<T,4>::set; 00042 00043 // Constructors 00044 Vec4(); 00045 Vec4(const T* d); 00046 Vec4(const T a); 00047 Vec4(const T x0, const T x1, const T x2, const T x3); 00048 Vec4(const Vec<T,4>& v); 00049 00050 // Cast Operation 00051 template <class U> Vec4(const Vec<U,4>& v); 00052 00053 // Mutators 00054 void set(const T x0, const T x1, const T x2, const T x3); 00055 }; 00056 00057 // Declare a few common typdefs 00058 typedef Vec4<bool> Vec4b; 00059 typedef Vec4<signed char> Vec4c; 00060 typedef Vec4<unsigned char> Vec4uc; 00061 typedef Vec4<signed short int> Vec4s; 00062 typedef Vec4<unsigned short int> Vec4us; 00063 typedef Vec4<int> Vec4i; 00064 typedef Vec4<unsigned int> Vec4ui; 00065 typedef Vec4<float> Vec4f; 00066 typedef Vec4<double> Vec4d; 00067 00068 //============================================================================== 00069 // Vec4<T> 00070 //============================================================================== 00071 00072 // Constructors 00073 00076 template <class T> 00077 inline Vec4<T>::Vec4() {} 00078 00081 template <class T> 00082 inline Vec4<T>::Vec4(const T* d) : Vec<T,4>(d) {} 00083 00086 template <class T> 00087 inline Vec4<T>::Vec4(const T a) : Vec<T,4>(a) {} 00088 00091 template <class T> 00092 inline Vec4<T>::Vec4(const T x0, const T x1, 00093 const T x2, const T x3) { 00094 set(x0,x1,x2,x3); 00095 } 00096 00099 template <class T> 00100 inline Vec4<T>::Vec4(const Vec<T,4>& v) : Vec<T,4>(v) {} 00101 00102 // Casting Operation 00103 00106 template <class T> template <class U> 00107 inline Vec4<T>::Vec4(const Vec<U,4>& v) : Vec<T,4>(v) {} 00108 00109 // Mutators 00110 00113 template <class T> 00114 inline void Vec4<T>::set(const T x0, const T x1, 00115 const T x2, const T x3) { 00116 x[0] = x0; x[1] = x1; x[2] = x2; x[3] = x3; 00117 } 00118 00119 //============================================================================== 00120 } // NAMESPACE puma 00121 //============================================================================== 00122 #endif // RTC_VEC4_H defined 00123 //============================================================================== 00124