vector: add free dot function

This commit is contained in:
Danny Robson 2015-02-19 13:27:06 +11:00
parent b0d3211f02
commit d342ef72f5
2 changed files with 16 additions and 0 deletions

View File

@ -399,6 +399,19 @@ util::operator- (U a, const util::vector<S,T> &b)
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
template <size_t S, typename T>
T
util::dot (vector<S,T> a, vector<S,T> b)
{
return std::inner_product (std::begin (a),
std::end (a),
std::begin (b),
T{0});
}
///////////////////////////////////////////////////////////////////////////////
// ostream
template <size_t S, typename T> template <size_t S, typename T>
std::ostream& std::ostream&
util::operator<< (std::ostream &os, const util::vector<S,T> &v) { util::operator<< (std::ostream &os, const util::vector<S,T> &v) {
@ -437,6 +450,7 @@ template util::vector<S,T> util::operator* (unsigned, const util::vector<S,T>&);
template util::vector<S,T> util::operator* (float, const util::vector<S,T>&); \ template util::vector<S,T> util::operator* (float, const util::vector<S,T>&); \
template util::vector<S,T> util::operator+ (T, const util::vector<S,T>&); \ template util::vector<S,T> util::operator+ (T, const util::vector<S,T>&); \
template util::vector<S,T> util::operator- (T, const util::vector<S,T>&); \ template util::vector<S,T> util::operator- (T, const util::vector<S,T>&); \
template T util::dot (util::vector<S,T>, util::vector<S,T>); \
template std::ostream& util::operator<< (std::ostream&, const util::vector<S,T> &v);\ template std::ostream& util::operator<< (std::ostream&, const util::vector<S,T> &v);\
template const json::tree::node& util::operator>> (const json::tree::node&, util::vector<S,T>&); template const json::tree::node& util::operator>> (const json::tree::node&, util::vector<S,T>&);

View File

@ -97,6 +97,8 @@ namespace util {
template <size_t S, typename T, typename U> vector<S,T> operator+ (U, const vector<S,T>&); template <size_t S, typename T, typename U> vector<S,T> operator+ (U, const vector<S,T>&);
template <size_t S, typename T, typename U> vector<S,T> operator- (U, const vector<S,T>&); template <size_t S, typename T, typename U> vector<S,T> operator- (U, const vector<S,T>&);
template <size_t S, typename T> T dot (vector<S,T>, vector<S,T>);
// output and serialisation operators // output and serialisation operators
template <size_t S, typename T> std::ostream& operator<< (std::ostream&, const vector<S,T>&); template <size_t S, typename T> std::ostream& operator<< (std::ostream&, const vector<S,T>&);