annotate DEPENDENCIES/generic/include/boost/proto/detail/preprocessed/deep_copy.hpp @ 133:4acb5d8d80b6 tip

Don't fail environmental check if README.md exists (but .txt and no-suffix don't)
author Chris Cannam
date Tue, 30 Jul 2019 12:25:44 +0100
parents 2665513ce2d3
children
rev   line source
Chris@16 1 ///////////////////////////////////////////////////////////////////////////////
Chris@16 2 /// \file deep_copy.hpp
Chris@16 3 /// Replace all nodes stored by reference by nodes stored by value.
Chris@16 4 //
Chris@16 5 // Copyright 2008 Eric Niebler. Distributed under the Boost
Chris@16 6 // Software License, Version 1.0. (See accompanying file
Chris@16 7 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
Chris@16 8 template<typename Expr>
Chris@16 9 struct deep_copy_impl<Expr, 1>
Chris@16 10 {
Chris@16 11 typedef
Chris@16 12 typename base_expr<
Chris@16 13 typename Expr::proto_domain
Chris@16 14 , typename Expr::proto_tag
Chris@16 15 , list1<
Chris@16 16 typename deep_copy_impl< typename remove_reference< typename Expr::proto_child0 >::type::proto_derived_expr >::result_type
Chris@16 17 >
Chris@16 18 >::type
Chris@16 19 expr_type;
Chris@16 20 typedef typename Expr::proto_generator proto_generator;
Chris@16 21 typedef typename proto_generator::template result<proto_generator(expr_type)>::type result_type;
Chris@16 22 template<typename Expr2, typename S, typename D>
Chris@16 23 result_type operator()(Expr2 const &e, S const &, D const &) const
Chris@16 24 {
Chris@16 25 expr_type const that = {
Chris@16 26 proto::deep_copy(e.proto_base().child0)
Chris@16 27 };
Chris@16 28 return proto_generator()(that);
Chris@16 29 }
Chris@16 30 };
Chris@16 31 template<typename Expr>
Chris@16 32 struct deep_copy_impl<Expr, 2>
Chris@16 33 {
Chris@16 34 typedef
Chris@16 35 typename base_expr<
Chris@16 36 typename Expr::proto_domain
Chris@16 37 , typename Expr::proto_tag
Chris@16 38 , list2<
Chris@16 39 typename deep_copy_impl< typename remove_reference< typename Expr::proto_child0 >::type::proto_derived_expr >::result_type , typename deep_copy_impl< typename remove_reference< typename Expr::proto_child1 >::type::proto_derived_expr >::result_type
Chris@16 40 >
Chris@16 41 >::type
Chris@16 42 expr_type;
Chris@16 43 typedef typename Expr::proto_generator proto_generator;
Chris@16 44 typedef typename proto_generator::template result<proto_generator(expr_type)>::type result_type;
Chris@16 45 template<typename Expr2, typename S, typename D>
Chris@16 46 result_type operator()(Expr2 const &e, S const &, D const &) const
Chris@16 47 {
Chris@16 48 expr_type const that = {
Chris@16 49 proto::deep_copy(e.proto_base().child0) , proto::deep_copy(e.proto_base().child1)
Chris@16 50 };
Chris@16 51 return proto_generator()(that);
Chris@16 52 }
Chris@16 53 };
Chris@16 54 template<typename Expr>
Chris@16 55 struct deep_copy_impl<Expr, 3>
Chris@16 56 {
Chris@16 57 typedef
Chris@16 58 typename base_expr<
Chris@16 59 typename Expr::proto_domain
Chris@16 60 , typename Expr::proto_tag
Chris@16 61 , list3<
Chris@16 62 typename deep_copy_impl< typename remove_reference< typename Expr::proto_child0 >::type::proto_derived_expr >::result_type , typename deep_copy_impl< typename remove_reference< typename Expr::proto_child1 >::type::proto_derived_expr >::result_type , typename deep_copy_impl< typename remove_reference< typename Expr::proto_child2 >::type::proto_derived_expr >::result_type
Chris@16 63 >
Chris@16 64 >::type
Chris@16 65 expr_type;
Chris@16 66 typedef typename Expr::proto_generator proto_generator;
Chris@16 67 typedef typename proto_generator::template result<proto_generator(expr_type)>::type result_type;
Chris@16 68 template<typename Expr2, typename S, typename D>
Chris@16 69 result_type operator()(Expr2 const &e, S const &, D const &) const
Chris@16 70 {
Chris@16 71 expr_type const that = {
Chris@16 72 proto::deep_copy(e.proto_base().child0) , proto::deep_copy(e.proto_base().child1) , proto::deep_copy(e.proto_base().child2)
Chris@16 73 };
Chris@16 74 return proto_generator()(that);
Chris@16 75 }
Chris@16 76 };
Chris@16 77 template<typename Expr>
Chris@16 78 struct deep_copy_impl<Expr, 4>
Chris@16 79 {
Chris@16 80 typedef
Chris@16 81 typename base_expr<
Chris@16 82 typename Expr::proto_domain
Chris@16 83 , typename Expr::proto_tag
Chris@16 84 , list4<
Chris@16 85 typename deep_copy_impl< typename remove_reference< typename Expr::proto_child0 >::type::proto_derived_expr >::result_type , typename deep_copy_impl< typename remove_reference< typename Expr::proto_child1 >::type::proto_derived_expr >::result_type , typename deep_copy_impl< typename remove_reference< typename Expr::proto_child2 >::type::proto_derived_expr >::result_type , typename deep_copy_impl< typename remove_reference< typename Expr::proto_child3 >::type::proto_derived_expr >::result_type
Chris@16 86 >
Chris@16 87 >::type
Chris@16 88 expr_type;
Chris@16 89 typedef typename Expr::proto_generator proto_generator;
Chris@16 90 typedef typename proto_generator::template result<proto_generator(expr_type)>::type result_type;
Chris@16 91 template<typename Expr2, typename S, typename D>
Chris@16 92 result_type operator()(Expr2 const &e, S const &, D const &) const
Chris@16 93 {
Chris@16 94 expr_type const that = {
Chris@16 95 proto::deep_copy(e.proto_base().child0) , proto::deep_copy(e.proto_base().child1) , proto::deep_copy(e.proto_base().child2) , proto::deep_copy(e.proto_base().child3)
Chris@16 96 };
Chris@16 97 return proto_generator()(that);
Chris@16 98 }
Chris@16 99 };
Chris@16 100 template<typename Expr>
Chris@16 101 struct deep_copy_impl<Expr, 5>
Chris@16 102 {
Chris@16 103 typedef
Chris@16 104 typename base_expr<
Chris@16 105 typename Expr::proto_domain
Chris@16 106 , typename Expr::proto_tag
Chris@16 107 , list5<
Chris@16 108 typename deep_copy_impl< typename remove_reference< typename Expr::proto_child0 >::type::proto_derived_expr >::result_type , typename deep_copy_impl< typename remove_reference< typename Expr::proto_child1 >::type::proto_derived_expr >::result_type , typename deep_copy_impl< typename remove_reference< typename Expr::proto_child2 >::type::proto_derived_expr >::result_type , typename deep_copy_impl< typename remove_reference< typename Expr::proto_child3 >::type::proto_derived_expr >::result_type , typename deep_copy_impl< typename remove_reference< typename Expr::proto_child4 >::type::proto_derived_expr >::result_type
Chris@16 109 >
Chris@16 110 >::type
Chris@16 111 expr_type;
Chris@16 112 typedef typename Expr::proto_generator proto_generator;
Chris@16 113 typedef typename proto_generator::template result<proto_generator(expr_type)>::type result_type;
Chris@16 114 template<typename Expr2, typename S, typename D>
Chris@16 115 result_type operator()(Expr2 const &e, S const &, D const &) const
Chris@16 116 {
Chris@16 117 expr_type const that = {
Chris@16 118 proto::deep_copy(e.proto_base().child0) , proto::deep_copy(e.proto_base().child1) , proto::deep_copy(e.proto_base().child2) , proto::deep_copy(e.proto_base().child3) , proto::deep_copy(e.proto_base().child4)
Chris@16 119 };
Chris@16 120 return proto_generator()(that);
Chris@16 121 }
Chris@16 122 };
Chris@16 123 template<typename Expr>
Chris@16 124 struct deep_copy_impl<Expr, 6>
Chris@16 125 {
Chris@16 126 typedef
Chris@16 127 typename base_expr<
Chris@16 128 typename Expr::proto_domain
Chris@16 129 , typename Expr::proto_tag
Chris@16 130 , list6<
Chris@16 131 typename deep_copy_impl< typename remove_reference< typename Expr::proto_child0 >::type::proto_derived_expr >::result_type , typename deep_copy_impl< typename remove_reference< typename Expr::proto_child1 >::type::proto_derived_expr >::result_type , typename deep_copy_impl< typename remove_reference< typename Expr::proto_child2 >::type::proto_derived_expr >::result_type , typename deep_copy_impl< typename remove_reference< typename Expr::proto_child3 >::type::proto_derived_expr >::result_type , typename deep_copy_impl< typename remove_reference< typename Expr::proto_child4 >::type::proto_derived_expr >::result_type , typename deep_copy_impl< typename remove_reference< typename Expr::proto_child5 >::type::proto_derived_expr >::result_type
Chris@16 132 >
Chris@16 133 >::type
Chris@16 134 expr_type;
Chris@16 135 typedef typename Expr::proto_generator proto_generator;
Chris@16 136 typedef typename proto_generator::template result<proto_generator(expr_type)>::type result_type;
Chris@16 137 template<typename Expr2, typename S, typename D>
Chris@16 138 result_type operator()(Expr2 const &e, S const &, D const &) const
Chris@16 139 {
Chris@16 140 expr_type const that = {
Chris@16 141 proto::deep_copy(e.proto_base().child0) , proto::deep_copy(e.proto_base().child1) , proto::deep_copy(e.proto_base().child2) , proto::deep_copy(e.proto_base().child3) , proto::deep_copy(e.proto_base().child4) , proto::deep_copy(e.proto_base().child5)
Chris@16 142 };
Chris@16 143 return proto_generator()(that);
Chris@16 144 }
Chris@16 145 };
Chris@16 146 template<typename Expr>
Chris@16 147 struct deep_copy_impl<Expr, 7>
Chris@16 148 {
Chris@16 149 typedef
Chris@16 150 typename base_expr<
Chris@16 151 typename Expr::proto_domain
Chris@16 152 , typename Expr::proto_tag
Chris@16 153 , list7<
Chris@16 154 typename deep_copy_impl< typename remove_reference< typename Expr::proto_child0 >::type::proto_derived_expr >::result_type , typename deep_copy_impl< typename remove_reference< typename Expr::proto_child1 >::type::proto_derived_expr >::result_type , typename deep_copy_impl< typename remove_reference< typename Expr::proto_child2 >::type::proto_derived_expr >::result_type , typename deep_copy_impl< typename remove_reference< typename Expr::proto_child3 >::type::proto_derived_expr >::result_type , typename deep_copy_impl< typename remove_reference< typename Expr::proto_child4 >::type::proto_derived_expr >::result_type , typename deep_copy_impl< typename remove_reference< typename Expr::proto_child5 >::type::proto_derived_expr >::result_type , typename deep_copy_impl< typename remove_reference< typename Expr::proto_child6 >::type::proto_derived_expr >::result_type
Chris@16 155 >
Chris@16 156 >::type
Chris@16 157 expr_type;
Chris@16 158 typedef typename Expr::proto_generator proto_generator;
Chris@16 159 typedef typename proto_generator::template result<proto_generator(expr_type)>::type result_type;
Chris@16 160 template<typename Expr2, typename S, typename D>
Chris@16 161 result_type operator()(Expr2 const &e, S const &, D const &) const
Chris@16 162 {
Chris@16 163 expr_type const that = {
Chris@16 164 proto::deep_copy(e.proto_base().child0) , proto::deep_copy(e.proto_base().child1) , proto::deep_copy(e.proto_base().child2) , proto::deep_copy(e.proto_base().child3) , proto::deep_copy(e.proto_base().child4) , proto::deep_copy(e.proto_base().child5) , proto::deep_copy(e.proto_base().child6)
Chris@16 165 };
Chris@16 166 return proto_generator()(that);
Chris@16 167 }
Chris@16 168 };
Chris@16 169 template<typename Expr>
Chris@16 170 struct deep_copy_impl<Expr, 8>
Chris@16 171 {
Chris@16 172 typedef
Chris@16 173 typename base_expr<
Chris@16 174 typename Expr::proto_domain
Chris@16 175 , typename Expr::proto_tag
Chris@16 176 , list8<
Chris@16 177 typename deep_copy_impl< typename remove_reference< typename Expr::proto_child0 >::type::proto_derived_expr >::result_type , typename deep_copy_impl< typename remove_reference< typename Expr::proto_child1 >::type::proto_derived_expr >::result_type , typename deep_copy_impl< typename remove_reference< typename Expr::proto_child2 >::type::proto_derived_expr >::result_type , typename deep_copy_impl< typename remove_reference< typename Expr::proto_child3 >::type::proto_derived_expr >::result_type , typename deep_copy_impl< typename remove_reference< typename Expr::proto_child4 >::type::proto_derived_expr >::result_type , typename deep_copy_impl< typename remove_reference< typename Expr::proto_child5 >::type::proto_derived_expr >::result_type , typename deep_copy_impl< typename remove_reference< typename Expr::proto_child6 >::type::proto_derived_expr >::result_type , typename deep_copy_impl< typename remove_reference< typename Expr::proto_child7 >::type::proto_derived_expr >::result_type
Chris@16 178 >
Chris@16 179 >::type
Chris@16 180 expr_type;
Chris@16 181 typedef typename Expr::proto_generator proto_generator;
Chris@16 182 typedef typename proto_generator::template result<proto_generator(expr_type)>::type result_type;
Chris@16 183 template<typename Expr2, typename S, typename D>
Chris@16 184 result_type operator()(Expr2 const &e, S const &, D const &) const
Chris@16 185 {
Chris@16 186 expr_type const that = {
Chris@16 187 proto::deep_copy(e.proto_base().child0) , proto::deep_copy(e.proto_base().child1) , proto::deep_copy(e.proto_base().child2) , proto::deep_copy(e.proto_base().child3) , proto::deep_copy(e.proto_base().child4) , proto::deep_copy(e.proto_base().child5) , proto::deep_copy(e.proto_base().child6) , proto::deep_copy(e.proto_base().child7)
Chris@16 188 };
Chris@16 189 return proto_generator()(that);
Chris@16 190 }
Chris@16 191 };
Chris@16 192 template<typename Expr>
Chris@16 193 struct deep_copy_impl<Expr, 9>
Chris@16 194 {
Chris@16 195 typedef
Chris@16 196 typename base_expr<
Chris@16 197 typename Expr::proto_domain
Chris@16 198 , typename Expr::proto_tag
Chris@16 199 , list9<
Chris@16 200 typename deep_copy_impl< typename remove_reference< typename Expr::proto_child0 >::type::proto_derived_expr >::result_type , typename deep_copy_impl< typename remove_reference< typename Expr::proto_child1 >::type::proto_derived_expr >::result_type , typename deep_copy_impl< typename remove_reference< typename Expr::proto_child2 >::type::proto_derived_expr >::result_type , typename deep_copy_impl< typename remove_reference< typename Expr::proto_child3 >::type::proto_derived_expr >::result_type , typename deep_copy_impl< typename remove_reference< typename Expr::proto_child4 >::type::proto_derived_expr >::result_type , typename deep_copy_impl< typename remove_reference< typename Expr::proto_child5 >::type::proto_derived_expr >::result_type , typename deep_copy_impl< typename remove_reference< typename Expr::proto_child6 >::type::proto_derived_expr >::result_type , typename deep_copy_impl< typename remove_reference< typename Expr::proto_child7 >::type::proto_derived_expr >::result_type , typename deep_copy_impl< typename remove_reference< typename Expr::proto_child8 >::type::proto_derived_expr >::result_type
Chris@16 201 >
Chris@16 202 >::type
Chris@16 203 expr_type;
Chris@16 204 typedef typename Expr::proto_generator proto_generator;
Chris@16 205 typedef typename proto_generator::template result<proto_generator(expr_type)>::type result_type;
Chris@16 206 template<typename Expr2, typename S, typename D>
Chris@16 207 result_type operator()(Expr2 const &e, S const &, D const &) const
Chris@16 208 {
Chris@16 209 expr_type const that = {
Chris@16 210 proto::deep_copy(e.proto_base().child0) , proto::deep_copy(e.proto_base().child1) , proto::deep_copy(e.proto_base().child2) , proto::deep_copy(e.proto_base().child3) , proto::deep_copy(e.proto_base().child4) , proto::deep_copy(e.proto_base().child5) , proto::deep_copy(e.proto_base().child6) , proto::deep_copy(e.proto_base().child7) , proto::deep_copy(e.proto_base().child8)
Chris@16 211 };
Chris@16 212 return proto_generator()(that);
Chris@16 213 }
Chris@16 214 };
Chris@16 215 template<typename Expr>
Chris@16 216 struct deep_copy_impl<Expr, 10>
Chris@16 217 {
Chris@16 218 typedef
Chris@16 219 typename base_expr<
Chris@16 220 typename Expr::proto_domain
Chris@16 221 , typename Expr::proto_tag
Chris@16 222 , list10<
Chris@16 223 typename deep_copy_impl< typename remove_reference< typename Expr::proto_child0 >::type::proto_derived_expr >::result_type , typename deep_copy_impl< typename remove_reference< typename Expr::proto_child1 >::type::proto_derived_expr >::result_type , typename deep_copy_impl< typename remove_reference< typename Expr::proto_child2 >::type::proto_derived_expr >::result_type , typename deep_copy_impl< typename remove_reference< typename Expr::proto_child3 >::type::proto_derived_expr >::result_type , typename deep_copy_impl< typename remove_reference< typename Expr::proto_child4 >::type::proto_derived_expr >::result_type , typename deep_copy_impl< typename remove_reference< typename Expr::proto_child5 >::type::proto_derived_expr >::result_type , typename deep_copy_impl< typename remove_reference< typename Expr::proto_child6 >::type::proto_derived_expr >::result_type , typename deep_copy_impl< typename remove_reference< typename Expr::proto_child7 >::type::proto_derived_expr >::result_type , typename deep_copy_impl< typename remove_reference< typename Expr::proto_child8 >::type::proto_derived_expr >::result_type , typename deep_copy_impl< typename remove_reference< typename Expr::proto_child9 >::type::proto_derived_expr >::result_type
Chris@16 224 >
Chris@16 225 >::type
Chris@16 226 expr_type;
Chris@16 227 typedef typename Expr::proto_generator proto_generator;
Chris@16 228 typedef typename proto_generator::template result<proto_generator(expr_type)>::type result_type;
Chris@16 229 template<typename Expr2, typename S, typename D>
Chris@16 230 result_type operator()(Expr2 const &e, S const &, D const &) const
Chris@16 231 {
Chris@16 232 expr_type const that = {
Chris@16 233 proto::deep_copy(e.proto_base().child0) , proto::deep_copy(e.proto_base().child1) , proto::deep_copy(e.proto_base().child2) , proto::deep_copy(e.proto_base().child3) , proto::deep_copy(e.proto_base().child4) , proto::deep_copy(e.proto_base().child5) , proto::deep_copy(e.proto_base().child6) , proto::deep_copy(e.proto_base().child7) , proto::deep_copy(e.proto_base().child8) , proto::deep_copy(e.proto_base().child9)
Chris@16 234 };
Chris@16 235 return proto_generator()(that);
Chris@16 236 }
Chris@16 237 };