X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Fyoink;a=blobdiff_plain;f=src%2Fcml%2Fvector%2Fvector_promotions.h;fp=src%2Fcml%2Fvector%2Fvector_promotions.h;h=49e575d6a3871cf490840bee6d31c470fdf64471;hp=0000000000000000000000000000000000000000;hb=6b0a0d0efafe34d48ab344fca3b479553bd4e62c;hpb=85783316365181491a3e3c0c63659972477cebba diff --git a/src/cml/vector/vector_promotions.h b/src/cml/vector/vector_promotions.h new file mode 100644 index 0000000..49e575d --- /dev/null +++ b/src/cml/vector/vector_promotions.h @@ -0,0 +1,77 @@ +/* -*- 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