TooN
data.hh
1 //Copyright (C) Edward Rosten 2009, 2012
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  template<int N, class P> class Data;
29  }
30 
31 
38  template<int N, class P> struct Operator<Internal::Data<N, P> >
39  {
40  P vals[N];
41 
42  template<int R, int C, class T, class B>
43  void eval(Matrix<R, C, T, B>& m) const
44  {
45  SizeMismatch<(R==-1?-1:(C==-1?-1:(R*C))), N>:: test(m.num_rows()*m.num_cols(), N);
46  for(int r=0, n=0; r < R; r++)
47  for(int c=0; c < C; c++, n++)
48  m[r][c] = vals[n];
49  }
50 
51  template<int S, typename P2, typename B>
52  void eval(Vector<S, P2, B>& v) const
53  {
54  SizeMismatch<S, N>::test(v.size(), N);
55  for(int i=0; i <N; i++)
56  v[i] = vals[i];
57  }
58  };
59 
60  #ifdef DOXYGEN_INCLUDE_ONLY_FOR_DOCS
61 
73  inline Operator<Internal::Data<N, double> > Data(double a, ...);
74 
83  template<typename Precision> inline Operator<Internal::Data<N, Precision> > Data(const Precision& a, ...);
84 
85  #endif
86 
87 }
Definition: data.hh:28
Pretty generic SFINAE introspection generator.
Definition: vec_test.cc:21
A vector.
Definition: vector.hh:126
A matrix.
Definition: matrix.hh:105
Definition: operators.hh:119
Definition: size_mismatch.hh:103