TooN
planar_complex.hh
1 //Copyright (C) Edward Rosten 2010
2 
3 //All rights reserved.
4 //
5 //Redistribution and use in source and binary forms, with or without
6 //modification, are permitted provided that the following conditions
7 //are met:
8 //1. Redistributions of source code must retain the above copyright
9 // notice, this list of conditions and the following disclaimer.
10 //2. Redistributions in binary form must reproduce the above copyright
11 // notice, this list of conditions and the following disclaimer in the
12 // documentation and/or other materials provided with the distribution.
13 //
14 //THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``AS IS''
15 //AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16 //IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17 //ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR OTHER CONTRIBUTORS BE
18 //LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
19 //CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
20 //SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
21 //INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
22 //CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
23 //ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
24 //POSSIBILITY OF SUCH DAMAGE.
25 
26 namespace TooN{
27  namespace Internal{
28 
35  template<class Precision> struct PointerToPlanarComplex;
36  template<class Precision> struct PointerToPlanarComplex<std::complex<Precision> >
37  {
38  const Precision* const re;
39  const Precision* const im;
40 
41  PointerToPlanarComplex(std::pair<Precision*, Precision*> d)
42  :re(d.first),im(d.second)
43  {}
44 
45  PointerToPlanarComplex(std::pair<const Precision*, const Precision*> d)
46  :re(d.first),im(d.second)
47  {}
48 
49  PointerToPlanarComplex<std::complex<Precision> > operator+(int i) const
50  {
51  return PointerToPlanarComplex<std::complex<Precision> >(std::make_pair(re+i, im+i));
52  }
53 
54  const std::complex<Precision> operator[](int i) const
55  {
56  return std::complex<Precision>(re[i], im[i]);
57  }
58 
59  };
60  }
61 
62 
64  {
65  template<int Size, typename Precision>
66  struct VLayout;
67 
68  template<int Size, typename Precision>
69  struct VLayout<Size, std::complex<Precision> >:
70  public Internal::GenericVBase<Size, std::complex<Precision>, 1, Internal::VectorSlice<Size, std::complex<Precision>, Internal::PointerToPlanarComplex<std::complex<double> >,
71  Internal::PointerToPlanarComplex<std::complex<double> >,
72  const std::complex<double>,
73  const std::complex<double> > >
74  {
75  VLayout(Internal::PointerToPlanarComplex<std::complex<Precision> > p, int sz=0)
77  Internal::PointerToPlanarComplex<std::complex<double> >,
78  const std::complex<double>,
79  const std::complex<double> > >(p, sz, 1)
80  {}
81 
82 
83  };
84 
85  };
86 }
87 
Definition: vbase.hh:32
Pretty generic SFINAE introspection generator.
Definition: vec_test.cc:21
Definition: TooN.h:364
Definition: planar_complex.hh:35
Definition: planar_complex.hh:66
Definition: allocator.hh:371
Definition: planar_complex.hh:63