00001
00010 #ifndef BS_BOS_CORE_MATRIX_VECTOR_OP_H_
00011 #define BS_BOS_CORE_MATRIX_VECTOR_OP_H_
00012
00013 namespace blue_sky {
00014
00020 template <size_t size>
00021 struct v_minus_vs_prod
00022 {
00023 };
00024
00025 template <>
00026 struct v_minus_vs_prod <1>
00027 {
00028 template <typename a_t, typename b_t, typename c_t>
00029 static BS_FORCE_INLINE void
00030 eliminate (const b_t &b, const c_t &c, a_t &a)
00031 {
00032 a[0] -= b[0] * c;
00033 }
00034 };
00035
00036 template <>
00037 struct v_minus_vs_prod <2>
00038 {
00039 template <typename a_t, typename b_t, typename c_t>
00040 static BS_FORCE_INLINE void
00041 eliminate (const b_t &b, const c_t &c, a_t &a)
00042 {
00043 a[0] -= b[0] * c;
00044 a[1] -= b[1] * c;
00045 }
00046 };
00047
00048 template <>
00049 struct v_minus_vs_prod <3>
00050 {
00051 template <typename a_t, typename b_t, typename c_t>
00052 static BS_FORCE_INLINE void
00053 eliminate (const b_t &b, const c_t &c, a_t &a)
00054 {
00055 a[0] -= b[0] * c;
00056 a[1] -= b[1] * c;
00057 a[2] -= b[2] * c;
00058 }
00059 };
00060
00066 template <size_t size>
00067 struct m_minus_vv_prod
00068 {
00069 };
00070
00071 template <>
00072 struct m_minus_vv_prod <1>
00073 {
00074 template <typename a_t, typename b_t, typename c_t>
00075 static BS_FORCE_INLINE void
00076 eliminate (const b_t &b, const c_t &c, a_t &a)
00077 {
00078 a[0] -= b[0] * c[0];
00079 }
00080 };
00081 template <>
00082 struct m_minus_vv_prod <2>
00083 {
00084 template <typename a_t, typename b_t, typename c_t>
00085 static BS_FORCE_INLINE void
00086 eliminate (const b_t &b, const c_t &c, a_t &a)
00087 {
00088 a[0] -= b[0] * c[0];
00089 a[1] -= b[0] * c[1];
00090 a[2] -= b[1] * c[0];
00091 a[3] -= b[1] * c[1];
00092 }
00093 };
00094 template <>
00095 struct m_minus_vv_prod <3>
00096 {
00097 template <typename a_t, typename b_t, typename c_t>
00098 static BS_FORCE_INLINE void
00099 eliminate (const b_t &b, const c_t &c, a_t &a)
00100 {
00101 a[0] -= b[0] * c[0];
00102 a[1] -= b[0] * c[1];
00103 a[2] -= b[0] * c[2];
00104 a[3] -= b[1] * c[0];
00105 a[4] -= b[1] * c[1];
00106 a[5] -= b[1] * c[2];
00107 a[6] -= b[2] * c[0];
00108 a[7] -= b[2] * c[1];
00109 a[8] -= b[2] * c[2];
00110 }
00111 };
00112
00113 }
00114
00115 #endif // #ifndef BS_BOS_CORE_MATRIX_VECTOR_OP_H_