00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00023
00034
00035
00036 #ifndef _XST_MEMBER_ALIAS_BITSET_H_INCLUDED_
00037 #define _XST_MEMBER_ALIAS_BITSET_H_INCLUDED_
00038
00039
00040 namespace cttl_impl {
00041
00046 template< size_t N >
00047 struct xst_non_scalar_traits< std::bitset<N> >
00048 {
00049 typedef std::bitset<N> value_type;
00050
00051 static char identity( value_type const& )
00052 {
00053 return '?';
00054 }
00055
00056 };
00057
00058 }
00059
00060
00061
00062 namespace cttl {
00063
00064 using namespace cttl_impl;
00065
00066 namespace alias {
00067
00080 template< size_t N, typename LambdaT >
00081 inline
00082 xst_unary_adaptor<
00083 xst_lambda_wrap<
00084 xst_scalar<
00085 xst_member_action<
00086 typename LambdaT::value_T &,
00087 std::mem_fun_t<
00088 std::bitset<N>&,
00089 typename LambdaT::value_T
00090 >,
00091 void,
00092 std::bitset<N>&
00093 >
00094 >
00095 >
00096 ,
00097 xst_dereference_policy<
00098 xst_dereference_traits<
00099 typename LambdaT::value_T,
00100 std::bitset<N>&
00101 >::capacity_,
00102 LambdaT::primitive_id_
00103 >
00104 >
00105 flip(
00106 xst_lambda_wrap< LambdaT >* plambda_
00107 )
00108 {
00109 typedef typename LambdaT::value_T object_T;
00110 typedef std::bitset<N>& result_T;
00111 typedef xst_unary_adaptor<
00112 xst_lambda_wrap<
00113 xst_scalar<
00114 xst_member_action<
00115 typename LambdaT::value_T &,
00116 std::mem_fun_t<
00117 std::bitset<N>&,
00118 typename LambdaT::value_T
00119 >,
00120 void,
00121 std::bitset<N>&
00122 >
00123 >
00124 >
00125 ,
00126 xst_dereference_policy<
00127 xst_dereference_traits<
00128 typename LambdaT::value_T,
00129 std::bitset<N>&
00130 >::capacity_,
00131 LambdaT::primitive_id_
00132 >
00133 >
00134 xst_adaptor_T;
00135
00136 return xst_adaptor_T( scalar(
00137 #ifdef CTTL_TRACE_DEPOSITS
00138 xst_traced_action(
00139 __LINE__,
00140 "std::bitset<N>& alias::flip()",
00141 #else
00142 action(
00143 #endif
00144 &plambda_->top( const_scalar( 0 ) ),
00145 ( std::mem_fun_t<
00146 result_T,
00147 object_T
00148 >
00149 ( &object_T::flip )
00150 )
00151 )
00152 ))
00153 ;
00154 }
00155
00168 template< size_t N, typename LambdaT, typename ArgumentT >
00169 inline
00170 xst_unary_adaptor<
00171 xst_lambda_wrap<
00172 xst_scalar<
00173 xst_member_action<
00174 typename LambdaT::value_T &,
00175 std::mem_fun1_t<
00176 std::bitset<N>&,
00177 typename LambdaT::value_T,
00178 ArgumentT
00179 >,
00180 ArgumentT const&,
00181 std::bitset<N>&
00182 >
00183 >
00184 >
00185 ,
00186 xst_dereference_policy<
00187 xst_dereference_traits<
00188 typename LambdaT::value_T,
00189 std::bitset<N>&
00190 >::capacity_,
00191 LambdaT::primitive_id_
00192 >
00193 >
00194 flip(
00195 xst_lambda_wrap< LambdaT >* plambda_,
00196
00197
00198 ArgumentT const& arg_
00199 )
00200 {
00201 typedef typename LambdaT::value_T object_T;
00202 typedef std::bitset<N>& result_T;
00203 typedef xst_unary_adaptor<
00204 xst_lambda_wrap<
00205 xst_scalar<
00206 xst_member_action<
00207 typename LambdaT::value_T &,
00208 std::mem_fun1_t<
00209 std::bitset<N>&,
00210 typename LambdaT::value_T,
00211 ArgumentT
00212 >,
00213 ArgumentT const&,
00214 std::bitset<N>&
00215 >
00216 >
00217 >
00218 ,
00219 xst_dereference_policy<
00220 xst_dereference_traits<
00221 typename LambdaT::value_T,
00222 std::bitset<N>&
00223 >::capacity_,
00224 LambdaT::primitive_id_
00225 >
00226 >
00227 xst_adaptor_T;
00228
00229 return xst_adaptor_T( scalar(
00230 #ifdef CTTL_TRACE_DEPOSITS
00231 xst_traced_action(
00232 __LINE__,
00233 "std::bitset<N>& alias::flip(size_t)",
00234 #else
00235 action(
00236 #endif
00237 &plambda_->top( const_scalar( 0 ) ),
00238 ( std::mem_fun1_t<
00239 result_T,
00240 object_T,
00241 ArgumentT
00242 >
00243 ( &object_T::flip )
00244 ),
00245 arg_
00246 )
00247 ))
00248 ;
00249 }
00250
00263 template< size_t N, typename LambdaT >
00264 inline
00265 xst_unary_adaptor<
00266 xst_lambda_wrap<
00267 xst_scalar<
00268 xst_member_action<
00269 typename LambdaT::value_T &,
00270 std::mem_fun_t<
00271 std::bitset<N>&,
00272 typename LambdaT::value_T
00273 >,
00274 void,
00275 std::bitset<N>&
00276 >
00277 >
00278 >
00279 ,
00280 xst_dereference_policy<
00281 xst_dereference_traits<
00282 typename LambdaT::value_T,
00283 std::bitset<N>&
00284 >::capacity_,
00285 LambdaT::primitive_id_
00286 >
00287 >
00288 reset(
00289 xst_lambda_wrap< LambdaT >* plambda_
00290 )
00291 {
00292 typedef typename LambdaT::value_T object_T;
00293 typedef std::bitset<N>& result_T;
00294 typedef xst_unary_adaptor<
00295 xst_lambda_wrap<
00296 xst_scalar<
00297 xst_member_action<
00298 typename LambdaT::value_T &,
00299 std::mem_fun_t<
00300 std::bitset<N>&,
00301 typename LambdaT::value_T
00302 >,
00303 void,
00304 std::bitset<N>&
00305 >
00306 >
00307 >
00308 ,
00309 xst_dereference_policy<
00310 xst_dereference_traits<
00311 typename LambdaT::value_T,
00312 std::bitset<N>&
00313 >::capacity_,
00314 LambdaT::primitive_id_
00315 >
00316 >
00317 xst_adaptor_T;
00318
00319 return xst_adaptor_T( scalar(
00320 #ifdef CTTL_TRACE_DEPOSITS
00321 xst_traced_action(
00322 __LINE__,
00323 "std::bitset<N>& alias::reset()",
00324 #else
00325 action(
00326 #endif
00327 &plambda_->top( const_scalar( 0 ) ),
00328 ( std::mem_fun_t<
00329 result_T,
00330 object_T
00331 >
00332 ( &object_T::reset )
00333 )
00334 )
00335 ))
00336 ;
00337 }
00338
00351 template< size_t N, typename LambdaT, typename ArgumentT >
00352 inline
00353 xst_unary_adaptor<
00354 xst_lambda_wrap<
00355 xst_scalar<
00356 xst_member_action<
00357 typename LambdaT::value_T &,
00358 std::mem_fun1_t<
00359 std::bitset<N>&,
00360 typename LambdaT::value_T,
00361 ArgumentT
00362 >,
00363 ArgumentT const&,
00364 std::bitset<N>&
00365 >
00366 >
00367 >
00368 ,
00369 xst_dereference_policy<
00370 xst_dereference_traits<
00371 typename LambdaT::value_T,
00372 std::bitset<N>&
00373 >::capacity_,
00374 LambdaT::primitive_id_
00375 >
00376 >
00377 reset(
00378 xst_lambda_wrap< LambdaT >* plambda_,
00379
00380
00381 ArgumentT const& arg_
00382 )
00383 {
00384 typedef typename LambdaT::value_T object_T;
00385 typedef std::bitset<N>& result_T;
00386 typedef xst_unary_adaptor<
00387 xst_lambda_wrap<
00388 xst_scalar<
00389 xst_member_action<
00390 typename LambdaT::value_T &,
00391 std::mem_fun1_t<
00392 std::bitset<N>&,
00393 typename LambdaT::value_T,
00394 ArgumentT
00395 >,
00396 ArgumentT const&,
00397 std::bitset<N>&
00398 >
00399 >
00400 >
00401 ,
00402 xst_dereference_policy<
00403 xst_dereference_traits<
00404 typename LambdaT::value_T,
00405 std::bitset<N>&
00406 >::capacity_,
00407 LambdaT::primitive_id_
00408 >
00409 >
00410 xst_adaptor_T;
00411
00412 return xst_adaptor_T( scalar(
00413 #ifdef CTTL_TRACE_DEPOSITS
00414 xst_traced_action(
00415 __LINE__,
00416 "std::bitset<N>& alias::reset(size_t)",
00417 #else
00418 action(
00419 #endif
00420 &plambda_->top( const_scalar( 0 ) ),
00421 ( std::mem_fun1_t<
00422 result_T,
00423 object_T,
00424 ArgumentT
00425 >
00426 ( &object_T::reset )
00427 ),
00428 arg_
00429 )
00430 ))
00431 ;
00432 }
00433
00446 template< size_t N, typename LambdaT >
00447 inline
00448 xst_unary_adaptor<
00449 xst_lambda_wrap<
00450 xst_scalar<
00451 xst_member_action<
00452 typename LambdaT::value_T &,
00453 std::mem_fun_t<
00454 std::bitset<N>&,
00455 typename LambdaT::value_T
00456 >,
00457 void,
00458 std::bitset<N>&
00459 >
00460 >
00461 >
00462 ,
00463 xst_dereference_policy<
00464 xst_dereference_traits<
00465 typename LambdaT::value_T,
00466 std::bitset<N>&
00467 >::capacity_,
00468 LambdaT::primitive_id_
00469 >
00470 >
00471 set(
00472 xst_lambda_wrap< LambdaT >* plambda_
00473 )
00474 {
00475 typedef typename LambdaT::value_T object_T;
00476 typedef std::bitset<N>& result_T;
00477 typedef xst_unary_adaptor<
00478 xst_lambda_wrap<
00479 xst_scalar<
00480 xst_member_action<
00481 typename LambdaT::value_T &,
00482 std::mem_fun_t<
00483 std::bitset<N>&,
00484 typename LambdaT::value_T
00485 >,
00486 void,
00487 std::bitset<N>&
00488 >
00489 >
00490 >
00491 ,
00492 xst_dereference_policy<
00493 xst_dereference_traits<
00494 typename LambdaT::value_T,
00495 std::bitset<N>&
00496 >::capacity_,
00497 LambdaT::primitive_id_
00498 >
00499 >
00500 xst_adaptor_T;
00501
00502 return xst_adaptor_T( scalar(
00503 #ifdef CTTL_TRACE_DEPOSITS
00504 xst_traced_action(
00505 __LINE__,
00506 "std::bitset<N>& alias::set()",
00507 #else
00508 action(
00509 #endif
00510 &plambda_->top( const_scalar( 0 ) ),
00511 ( std::mem_fun_t<
00512 result_T,
00513 object_T
00514 >
00515 ( &object_T::set )
00516 )
00517 )
00518 ))
00519 ;
00520 }
00521
00522
00523 }
00524
00525 }
00526
00527
00528 #endif //_XST_MEMBER_ALIAS_BITSET_H_INCLUDED_