/* -*- C++ -*- ------------------------------------------------------------ Copyright (c) 2007 Jesse Anders and Demian Nave http://cmldev.net/ The Configurable Math Library (CML) is distributed under the terms of the Boost Software License, v1.0 (see cml/LICENSE for details). *-----------------------------------------------------------------------*/ /** @file * @brief * * Defines promotions for vectors used in vector/vector or vector/scalar * expressions. * * @sa BinaryVectorOp */ #ifndef vector_promotions_h #define vector_promotions_h #include #include namespace cml { namespace et { /* Default vector type promotion template. */ template struct VectorPromote; /** Type promotion for two vector types. */ template struct VectorPromote< cml::vector, cml::vector > { typedef typename ArrayPromote< typename cml::vector::array_type, typename cml::vector::array_type >::type promoted_array; /* The deduced vector result type: */ typedef cml::vector< typename promoted_array::value_type, typename promoted_array::generator_type > type; /* The deduced temporary type: */ typedef typename type::temporary_type temporary_type; }; /** Type promotion for a vector and a scalar. */ template struct VectorPromote, S> { /* The deduced vector result type (the array type is the same): */ typedef cml::vector::type, AT> type; /* The deduced temporary type: */ typedef typename type::temporary_type temporary_type; }; /** Type promotion for a scalar and a vector. */ template struct VectorPromote > { /* The deduced vector result type (the array type is the same): */ typedef cml::vector::type, AT> type; /* The deduced temporary type: */ typedef typename type::temporary_type temporary_type; }; } // namespace et } // namespace cml #endif // ------------------------------------------------------------------------- // vim:ft=cpp