mirror of
http://172.16.200.102/MOISE/Timed-Altarica-To-Fiacre-Translator.git
synced 2025-11-26 06:37:59 +01:00
Initial commit.
This commit is contained in:
63
sdk/boost/numeric/bindings/traits/detail/utils.hpp
Normal file
63
sdk/boost/numeric/bindings/traits/detail/utils.hpp
Normal file
@@ -0,0 +1,63 @@
|
||||
/*
|
||||
*
|
||||
* Copyright (c) Kresimir Fresl 2003
|
||||
*
|
||||
* Distributed under the Boost Software License, Version 1.0.
|
||||
* (See accompanying file LICENSE_1_0.txt or copy at
|
||||
* http://www.boost.org/LICENSE_1_0.txt)
|
||||
*
|
||||
* Author acknowledges the support of the Faculty of Civil Engineering,
|
||||
* University of Zagreb, Croatia.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef BOOST_NUMERIC_BINDINGS_TRAITS_DETAIL_UTILS_HPP
|
||||
#define BOOST_NUMERIC_BINDINGS_TRAITS_DETAIL_UTILS_HPP
|
||||
|
||||
#include <iterator>
|
||||
#include <boost/numeric/bindings/traits/type_traits.hpp>
|
||||
|
||||
namespace boost { namespace numeric { namespace bindings { namespace traits {
|
||||
|
||||
namespace detail {
|
||||
|
||||
// complex array => real & imaginary arrays
|
||||
template <typename CIt, typename RIt>
|
||||
void disentangle (CIt c, CIt c_end, RIt rr, RIt ri) {
|
||||
for (; c != c_end; ++c, ++rr, ++ri) {
|
||||
*rr = traits::real (*c);
|
||||
*ri = traits::imag (*c);
|
||||
}
|
||||
}
|
||||
// real & imaginary arrays => complex array
|
||||
template <typename RIt, typename CIt>
|
||||
void interlace (RIt r, RIt r_end, RIt ri, CIt c) {
|
||||
typedef typename std::iterator_traits<CIt>::value_type cmplx_t;
|
||||
#ifdef BOOST_NUMERIC_BINDINGS_BY_THE_BOOK
|
||||
for (; r != r_end; ++r, ++ri, ++c)
|
||||
*c = cmplx_t (*r, *ri);
|
||||
#else
|
||||
typedef typename type_traits<cmplx_t>::real_type real_t;
|
||||
real_t *cp = reinterpret_cast<real_t*> (&*c);
|
||||
for (; r != r_end; ++r, ++ri) {
|
||||
*cp = *r; ++cp;
|
||||
*cp = *ri; ++cp;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
// converts real/complex to std::ptrdiff_t
|
||||
inline std::ptrdiff_t to_int (float f) { return static_cast<std::ptrdiff_t> (f); }
|
||||
inline std::ptrdiff_t to_int (double d) { return static_cast<std::ptrdiff_t> (d); }
|
||||
inline std::ptrdiff_t to_int (traits::complex_f const& cf) {
|
||||
return static_cast<std::ptrdiff_t> (traits::real (cf));
|
||||
}
|
||||
inline std::ptrdiff_t to_int (traits::complex_d const& cd) {
|
||||
return static_cast<std::ptrdiff_t> (traits::real (cd));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}}}}
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user