Vector.hpp File Reference
#include <cassert>
#include <cstddef>
#include <type_traits>
#include <iterator>
#include <algorithm>
#include <functional>
#include <iostream>
#include <PlayRho/Common/InvalidArgument.hpp>
#include <PlayRho/Common/Real.hpp>
#include <PlayRho/Common/Templates.hpp>

Go to the source code of this file.

Classes

struct  playrho::Vector< T, N >
 Vector. More...
 
struct  playrho::IsVector< typename >
 Trait class for checking if type is a Vector type. More...
 
struct  playrho::IsVector< Vector< T, N > >
 Trait class specialization for checking if type is a Vector type.. More...
 
class  std::tuple_size< playrho::Vector< T, N > >
 Tuple size info for playrho::Vector More...
 
class  std::tuple_element< I, playrho::Vector< T, N > >
 Tuple element type info for playrho::Vector More...
 

Namespaces

 playrho
 

Functions

template<typename T , std::size_t N>
PLAYRHO_CONSTEXPR bool playrho::operator== (const Vector< T, N > &lhs, const Vector< T, N > &rhs) noexcept
 Equality operator. More...
 
template<typename T , std::size_t N>
PLAYRHO_CONSTEXPR bool playrho::operator!= (const Vector< T, N > &lhs, const Vector< T, N > &rhs) noexcept
 Inequality operator. More...
 
template<typename T , std::size_t N>
PLAYRHO_CONSTEXPR std::enable_if_t< std::is_same< T, decltype(+T{})>::value, Vector< T, N > > playrho::operator+ (Vector< T, N > v) noexcept
 Unary plus operator. More...
 
template<typename T , std::size_t N>
PLAYRHO_CONSTEXPR std::enable_if_t< std::is_same< T, decltype(-T{})>::value, Vector< T, N > > playrho::operator- (Vector< T, N > v) noexcept
 Unary negation operator. More...
 
template<typename T , std::size_t N>
PLAYRHO_CONSTEXPR std::enable_if_t< std::is_same< T, decltype(T{}+T{})>::value, Vector< T, N > & > playrho::operator+= (Vector< T, N > &lhs, const Vector< T, N > rhs) noexcept
 Increments the left hand side value by the right hand side value. More...
 
template<typename T , std::size_t N>
PLAYRHO_CONSTEXPR std::enable_if_t< std::is_same< T, decltype(T{} - T{})>::value, Vector< T, N > & > playrho::operator-= (Vector< T, N > &lhs, const Vector< T, N > rhs) noexcept
 Decrements the left hand side value by the right hand side value. More...
 
template<typename T , std::size_t N>
PLAYRHO_CONSTEXPR std::enable_if_t< std::is_same< T, decltype(T{}+T{})>::value, Vector< T, N > > playrho::operator+ (Vector< T, N > lhs, const Vector< T, N > rhs) noexcept
 Adds two vectors component-wise. More...
 
template<typename T , std::size_t N>
PLAYRHO_CONSTEXPR std::enable_if_t< std::is_same< T, decltype(T{} - T{})>::value, Vector< T, N > > playrho::operator- (Vector< T, N > lhs, const Vector< T, N > rhs) noexcept
 Subtracts two vectors component-wise. More...
 
template<typename T1 , typename T2 , std::size_t N>
PLAYRHO_CONSTEXPR std::enable_if_t< std::is_same< T1, decltype(T1{} *T2{})>::value, Vector< T1, N > & > playrho::operator*= (Vector< T1, N > &lhs, const T2 rhs) noexcept
 Multiplication assignment operator. More...
 
template<typename T1 , typename T2 , std::size_t N>
PLAYRHO_CONSTEXPR std::enable_if_t< std::is_same< T1, decltype(T1{}/T2{})>::value, Vector< T1, N > & > playrho::operator/= (Vector< T1, N > &lhs, const T2 rhs) noexcept
 Division assignment operator. More...
 
template<typename T1 , typename T2 , std::size_t A, std::size_t B, std::size_t C, typename OT = decltype(T1{} * T2{})>
PLAYRHO_CONSTEXPR std::enable_if_t< IsMultipliable< T1, T2 >::value, Vector< Vector< OT, C >, A > > playrho::operator* (const Vector< Vector< T1, B >, A > &lhs, const Vector< Vector< T2, C >, B > &rhs) noexcept
 Calculates the matrix product of the two given vector of vectors (matrices). More...
 
template<typename T1 , typename T2 , std::size_t A, std::size_t B, typename OT = decltype(T1{} * T2{})>
PLAYRHO_CONSTEXPR std::enable_if_t< IsMultipliable< T1, T2 >::value &&!IsVector< T1 >::value, Vector< OT, B > > playrho::operator* (const Vector< T1, A > &lhs, const Vector< Vector< T2, B >, A > &rhs) noexcept
 Multiplies an A-element vector by a A-by-B vector of vectors. More...
 
template<typename T1 , typename T2 , std::size_t A, std::size_t B, typename OT = decltype(T1{} * T2{})>
PLAYRHO_CONSTEXPR std::enable_if_t< IsMultipliable< T1, T2 >::value &&!IsVector< T2 >::value, Vector< OT, B > > playrho::operator* (const Vector< Vector< T1, A >, B > &lhs, const Vector< T2, A > &rhs) noexcept
 Multiplies a B-by-A vector of vectors by an A-element vector. More...
 
template<std::size_t N, typename T1 , typename T2 , typename OT = decltype(T1{} * T2{})>
PLAYRHO_CONSTEXPR std::enable_if_t< IsMultipliable< T1, T2 >::value &&!IsVector< T1 >::value, Vector< OT, N > > playrho::operator* (const T1 s, Vector< T2, N > a) noexcept
 Multiplication operator for non-vector times vector. More...
 
template<std::size_t N, typename T1 , typename T2 , typename OT = decltype(T1{} * T2{})>
PLAYRHO_CONSTEXPR std::enable_if_t< IsMultipliable< T1, T2 >::value &&!IsVector< T2 >::value, Vector< OT, N > > playrho::operator* (Vector< T1, N > a, const T2 s) noexcept
 Multiplication operator for vector times non-vector. More...
 
template<std::size_t N, typename T1 , typename T2 , typename OT = decltype(T1{} / T2{})>
PLAYRHO_CONSTEXPR std::enable_if_t< IsDivisable< T1, T2 >::value &&!IsVector< T2 >::value, Vector< OT, N > > playrho::operator/ (Vector< T1, N > a, const T2 s) noexcept
 Division operator. More...
 
template<std::size_t I, std::size_t N, typename T >
PLAYRHO_CONSTEXPR auto & playrho::get (Vector< T, N > &v) noexcept
 Gets the specified element of the given collection. More...
 
template<std::size_t I, std::size_t N, typename T >
PLAYRHO_CONSTEXPR auto playrho::get (const Vector< T, N > &v) noexcept
 Gets the specified element of the given collection. More...
 
template<typename T , std::size_t N>
::std::ostream & playrho::operator<< (::std::ostream &os, const Vector< T, N > &value)
 Output stream operator. More...