Rev Author Line No. Line
178 kaklik 1 #if !defined(__MIMASINTERNALARRAYFUNC)
2 # error "Do not include this file directly."
3 #endif
4 #if !defined(__MIMASEXTERNALARRAYFUNC)
5 # error "Do not include this file directly."
6 #endif
7 #if !defined(__MIMASFUNCTIONOBJECT)
8 # error "Do not include this file directly."
9 #endif
10  
11 namespace mimas {
12  
13 /** @addtogroup arrayOp
14 @{ */
15 ///
16 template <
17 template< typename, size_t, typename > class MultiArray1,
18 template< typename, size_t, typename > class MultiArray2,
19 typename T, size_t NumDims, typename Allocator
20 >
21 boost::multi_array< T, NumDims, Allocator > __MIMASEXTERNALARRAYFUNC
22 ( const MultiArray1< T, NumDims, Allocator > &a,
23 const MultiArray2< T, NumDims, Allocator > &b )
24 {
25 return multi_func< T >( a, b, __MIMASFUNCTIONOBJECT< T >() );
26 };
27  
28 ///
29 template <
30 template< typename, size_t, typename > class MultiArray,
31 typename T, size_t NumDims, typename Allocator
32 >
33 boost::multi_array< T, NumDims, Allocator > __MIMASEXTERNALARRAYFUNC
34 ( const MultiArray< T, NumDims, Allocator > &a,
35 const T &b )
36 {
37 return multi_func< T >( a, std::bind2nd( __MIMASFUNCTIONOBJECT< T >(), b ) );
38 };
39  
40 ///
41 template <
42 template< typename, size_t, typename > class MultiArray,
43 typename T, size_t NumDims, typename Allocator
44 >
45 boost::multi_array< T, NumDims, Allocator > __MIMASEXTERNALARRAYFUNC
46 ( const T &a,
47 const MultiArray< T, NumDims, Allocator > &b )
48 {
49 return multi_func< T >( b, std::bind1st( __MIMASFUNCTIONOBJECT< T >(), a ) );
50 };
51  
52 ///
53 template <
54 template< typename, size_t, typename > class MultiArray2,
55 typename T, size_t NumDims, typename Allocator
56 >
57 boost::detail::multi_array::sub_array< T, NumDims > __MIMASINTERNALARRAYFUNC
58 ( boost::detail::multi_array::sub_array< T, NumDims > a,
59 const MultiArray2< T, NumDims, Allocator > &b )
60 {
61 return multi_apply( a, a, b,
62 _multi_help2< T, T, T, __MIMASFUNCTIONOBJECT< T > >
63 ( __MIMASFUNCTIONOBJECT< T >() ) );
64 };
65  
66 ///
67 template <
68 template< typename, size_t, typename > class MultiArray1,
69 template< typename, size_t, typename > class MultiArray2,
70 typename T, size_t NumDims, typename Allocator
71 >
72 MultiArray1< T, NumDims, Allocator > &__MIMASINTERNALARRAYFUNC
73 ( MultiArray1< T, NumDims, Allocator > &a,
74 const MultiArray2< T, NumDims, Allocator > &b )
75 {
76 return multi_apply( a, a, b,
77 _multi_help2< T, T, T, __MIMASFUNCTIONOBJECT< T > >
78 ( __MIMASFUNCTIONOBJECT< T >() ) );
79 };
80  
81 ///
82 template <
83 typename T, size_t NumDims
84 >
85 boost::detail::multi_array::sub_array< T, NumDims > __MIMASINTERNALARRAYFUNC
86 ( boost::detail::multi_array::sub_array< T, NumDims > a,
87 const T &b )
88 {
89 return multi_apply( a, a,
90 _multi_help1< T, T,
91 std::binder2nd< __MIMASFUNCTIONOBJECT< T > > >
92 ( std::bind2nd( __MIMASFUNCTIONOBJECT< T >(), b ) ) );
93 };
94  
95 ///
96 template <
97 template< typename, size_t, typename > class MultiArray,
98 typename T, size_t NumDims, typename Allocator
99 >
100 MultiArray< T, NumDims, Allocator > &__MIMASINTERNALARRAYFUNC
101 ( MultiArray< T, NumDims, Allocator > &a,
102 const T &b )
103 {
104 return multi_apply( a, a,
105 _multi_help1< T, T,
106 std::binder2nd< __MIMASFUNCTIONOBJECT< T > > >
107 ( std::bind2nd( __MIMASFUNCTIONOBJECT< T >(), b ) ) );
108 };
109 ///@}
110  
111 }
112  
113 #undef __MIMASINTERNALARRAYFUNC
114 #undef __MIMASEXTERNALARRAYFUNC
115 #undef __MIMASFUNCTIONOBJECT