LCOV - code coverage report
Current view: top level - fas/aop/private - group_object.hpp (source / functions) Hit Total Coverage
Test: faslib-coverage.info Lines: 20 20 100.0 %
Date: 2019-12-03 13:22:31 Functions: 27 28 96.4 %

          Line data    Source code
       1             : //
       2             : // Author: Vladimir Migashko <migashko@gmail.com>, (C) 2011, 2012
       3             : //
       4             : // Copyright: See COPYING file that comes with this distribution
       5             : //
       6             : 
       7             : #ifndef FAS_AOP_GROUP_OBJECT_HPP
       8             : #define FAS_AOP_GROUP_OBJECT_HPP
       9             : 
      10             : #include <fas/aop/detail/group_helper.hpp>
      11             : #include <fas/aop/metalist.hpp>
      12             : #include <fas/aop/select_group.hpp>
      13             : 
      14             : namespace fas {
      15             : 
      16             : template<typename Tg>
      17             : class group_object
      18             : {
      19             : public:
      20             : 
      21             :   typedef metalist::advice metatype;
      22             :   typedef Tg tag;
      23             :   typedef group_object<Tg> advice_class;
      24             : 
      25             :   advice_class& get_advice() { return *this;}
      26             :   const advice_class& get_advice() const { return *this;}
      27             : 
      28             :   template<typename T, typename F>
      29          17 :   static F for_each(T& t, F f)
      30             :   {
      31             :     typedef typename select_group<Tg, T>::type tag_list;
      32          17 :     return detail::group_helper::for_each( tag_list(), t, f);
      33             :   }
      34             : 
      35             :   template<typename T>
      36           3 :   void operator()(T& t) const
      37             :   {
      38             :     typedef typename select_group< Tg, T>::type tag_list;
      39           3 :     detail::group_helper::call(tag_list(), t);
      40           3 :   }
      41             : 
      42             :   template<typename T, typename P1>
      43           2 :   void operator()(T& t, P1 p1)  const
      44             :   {
      45             :     typedef typename select_group< Tg, T>::type tag_list;
      46           2 :     detail::group_helper::call(tag_list(), t, p1);
      47           2 :   }
      48             : 
      49             :   template<typename T, typename P1, typename P2>
      50           1 :   void operator()(T& t, P1 p1, P2 p2)  const
      51             :   {
      52             :     typedef typename select_group< Tg, T>::type tag_list;
      53           1 :     detail::group_helper::call(tag_list(), t, p1, p2);
      54           1 :   }
      55             : 
      56             :   template<typename T, typename P1, typename P2, typename P3>
      57           2 :   void operator()(T& t, P1 p1, P2 p2, P3 p3)  const
      58             :   {
      59             :     typedef typename select_group< Tg, T>::type tag_list;
      60           2 :     detail::group_helper::call(tag_list(), t, p1, p2, p3);
      61           2 :   }
      62             : 
      63             :   template<typename T, typename P1, typename P2, typename P3, typename P4>
      64           1 :   void operator()(T& t, P1 p1, P2 p2, P3 p3, P4 p4) const
      65             :   {
      66             :     typedef typename select_group< Tg, T>::type tag_list;
      67           1 :     detail::group_helper::call(tag_list(), t, p1, p2, p3, p4);
      68           1 :   }
      69             : 
      70             :   template<typename T, typename P1, typename P2, typename P3, typename P4, typename P5>
      71           1 :   void operator()(T& t, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5) const
      72             :   {
      73             :     typedef typename select_group< Tg, T>::type tag_list;
      74           1 :     detail::group_helper::call(tag_list(), t, p1, p2, p3, p4, p5);
      75           1 :   }
      76             : };
      77             : 
      78             : }
      79             : 
      80             : #endif

Generated by: LCOV version 1.13