aimstil  5.0.5
TExprPlaceHolders.h
Go to the documentation of this file.
1 #ifndef TIL_TEXPR_PLACE_HOLDERS_H
2 #define TIL_TEXPR_PLACE_HOLDERS_H
3 
6 
7 // includes from TIL library
8 #include "til/TExprMacros.h"
9 
10 namespace til { namespace expr {
11 
14  {
15  public:
16 
17  EXPR_RESULT_TYPE( Iterator1 );
18  EXPR_ITERATORTYPE( Iterator1 );
19 
20  template < class Iterator1 >
21  typename TypeStruct<Iterator1>::Type
22  operator()(Iterator1 &i1)
23  { return i1; }
24 
25  template < class Iterator1, class Iterator2>
26  typename TypeStruct<Iterator1, Iterator2>::Type
27  operator()(Iterator1 & i1, Iterator2 &)
28  { return i1; }
29 
30  template < class Iterator1, class Iterator2, class Iterator3 >
31  typename TypeStruct<Iterator1, Iterator2, Iterator3>::Type
32  operator()(Iterator1 & i1, Iterator2 &, Iterator3 &)
33  { return i1; }
34 
35  /*
36  EXPRFUNC_1ARG( operator(), return i1; );
37  EXPRFUNC_2ARG( operator(), return i1; );
38  EXPRFUNC_3ARG( operator(), return i1; );
39  */
40  };
41 
42 
45  {
46  public:
47 
48  EXPR_RESULT_TYPE( Iterator2 );
49  EXPR_ITERATORTYPE( Iterator2 );
50 
51  template < class Iterator1, class Iterator2>
52  typename TypeStruct<Iterator1, Iterator2>::Type
53  operator()(Iterator1 &, Iterator2 & i2)
54  { return i2; }
55 
56  template < class Iterator1, class Iterator2, class Iterator3 >
57  typename TypeStruct<Iterator1, Iterator2, Iterator3>::Type
58  operator()(Iterator1 &, Iterator2 & i2, Iterator3 &)
59  { return i2; }
60 
61  /*
62  EXPRFUNC_2ARG( operator(), return i2; )
63  EXPRFUNC_3ARG( operator(), return i2; )
64  */
65 
66  EXPRFUNC_2ARG_RET( getLValue, return i2; , const Iterator2 & );
67  EXPRFUNC_3ARG_RET( getLValue, return i2; , const Iterator2 & );
68  };
69 
72  {
73  public:
74 
75  EXPR_RESULT_TYPE( Iterator3 );
76  EXPR_ITERATORTYPE( Iterator3 );
77 
78  template < class Iterator1, class Iterator2, class Iterator3 >
79  typename TypeStruct<Iterator1, Iterator2, Iterator3>::Type
80  operator()(Iterator1 &, Iterator2 &, Iterator3 & i3)
81  { return i3; }
82 
83  //EXPRFUNC_3ARG( operator(), return i3; )
84 
85  EXPRFUNC_3ARG_RET( getLValue, return i3; , const Iterator3 & );
86  };
87 
88 }} // namespace til::expr
89 
90 
91 #endif
92 
TypeStruct< Iterator1, Iterator2 >::Type operator()(Iterator1 &, Iterator2 &i2)
TypeStruct< Iterator1, Iterator2, Iterator3 >::Type operator()(Iterator1 &, Iterator2 &i2, Iterator3 &)
Belongs to package Box Do not include directly, include til/Box.h instead.
Definition: Accumulator.h:10
TypeStruct< Iterator1, Iterator2, Iterator3 >::Type operator()(Iterator1 &, Iterator2 &, Iterator3 &i3)
Placeholder for the third argument.
#define EXPRFUNC_3ARG_RET(name, body, ret)
Definition: TExprMacros.h:22
TypeStruct< Iterator1, Iterator2, Iterator3 >::Type operator()(Iterator1 &i1, Iterator2 &, Iterator3 &)
#define EXPRFUNC_2ARG_RET(name, body, ret)
Definition: TExprMacros.h:21
TypeStruct< Iterator1, Iterator2 >::Type operator()(Iterator1 &i1, Iterator2 &)
Placeholder for the first argument.
Some macros to ease the otherwise tedious and unreadable declaration of template expression classes...
Placeholder for the second argument.
TypeStruct< Iterator1 >::Type operator()(Iterator1 &i1)