LCOV - code coverage report
Current view: top level - home/jenkins/libs/3rdparty/etl_addons/include/etl - closure.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 6 6 100.0 %
Date: 2025-07-17 14:51:10 Functions: 1 1 100.0 %

          Line data    Source code
       1             : ///\file
       2             : 
       3             : /******************************************************************************
       4             : The MIT License(MIT)
       5             : 
       6             : Embedded Template Library.
       7             : https://github.com/ETLCPP/etl
       8             : https://www.etlcpp.com
       9             : 
      10             : Copyright(c) 2025 BMW AG
      11             : 
      12             : Permission is hereby granted, free of charge, to any person obtaining a copy
      13             : of this software and associated documentation files(the "Software"), to deal
      14             : in the Software without restriction, including without limitation the rights
      15             : to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
      16             : copies of the Software, and to permit persons to whom the Software is
      17             : furnished to do so, subject to the following conditions :
      18             : 
      19             : The above copyright notice and this permission notice shall be included in all
      20             : copies or substantial portions of the Software.
      21             : 
      22             : THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
      23             : IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
      24             : FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
      25             : AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
      26             : LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
      27             : OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
      28             : SOFTWARE.
      29             : ******************************************************************************/
      30             : 
      31             : #ifndef ETL_CLOSURE_INCLUDED
      32             : #define ETL_CLOSURE_INCLUDED
      33             : 
      34             : #include <etl/platform.h>
      35             : #include <etl/delegate.h>
      36             : #include <etl/utility.h>
      37             : 
      38             : namespace etl
      39             : {
      40             : 
      41             :   //***************************************************************************
      42             :   template<typename>
      43             :   class closure;
      44             : 
      45             :   template<typename R, typename Arg0>
      46             :   class closure<R(Arg0)>
      47             :   {
      48             :   public:
      49             :     using fct = etl::delegate<R(Arg0)>;
      50             : 
      51             :     closure(fct const& f, Arg0 const arg0)
      52             :       : m_f(f), m_arg0(arg0)
      53             :     {
      54             :     }
      55             : 
      56             :     R operator()() const {
      57             :       return m_f(m_arg0);
      58             :     }
      59             : 
      60             :   private:
      61             :     fct m_f;
      62             :     Arg0 m_arg0;
      63             :   };
      64             : 
      65             :   template<typename R, typename Arg0, typename Arg1>
      66             :   class closure<R(Arg0, Arg1)>
      67             :   {
      68             :   public:
      69             :     using fct = etl::delegate<R(Arg0, Arg1)>;
      70             : 
      71         280 :     closure(fct const& f, Arg0 const arg0, Arg1 const arg1)
      72             :       : m_f(f), m_arg0(arg0), m_arg1(arg1)
      73             :     {
      74             :     }
      75             : 
      76          30 :     R operator()() const {
      77          30 :       return m_f(m_arg0, m_arg1);
      78             :     }
      79             : 
      80             :   private:
      81             :     fct m_f;
      82             :     Arg0 m_arg0;
      83             :     Arg1 m_arg1;
      84             :   };
      85             : 
      86             :   template<typename R, typename Arg0, typename Arg1, typename Arg2>
      87             :   class closure<R(Arg0, Arg1, Arg2)>
      88             :   {
      89             :   public:
      90             :     using fct = etl::delegate<R(Arg0, Arg1, Arg2)>;
      91             : 
      92           9 :     closure(fct const& f, Arg0 const arg0, Arg1 const arg1, Arg2 const arg2)
      93             :       : m_f(f), m_arg0(arg0), m_arg1(arg1), m_arg2(arg2)
      94             :     {
      95             :     }
      96             : 
      97           2 :     R operator()() const {
      98           2 :       return m_f(m_arg0, m_arg1, m_arg2);
      99             :     }
     100             : 
     101             :   private:
     102             :     fct m_f;
     103             :     Arg0 m_arg0;
     104             :     Arg1 m_arg1;
     105             :     Arg2 m_arg2;
     106             :   };
     107             : 
     108             :   template<typename R, typename Arg0, typename Arg1, typename Arg2, typename Arg3>
     109             :   class closure<R(Arg0, Arg1, Arg2, Arg3)>
     110             :   {
     111             :   public:
     112             :     using fct = etl::delegate<R(Arg0, Arg1, Arg2, Arg3)>;
     113             : 
     114             :     closure(fct const& f, Arg0 const arg0, Arg1 const arg1, Arg2 const arg2, Arg3 const arg3)
     115             :       : m_f(f), m_arg0(arg0), m_arg1(arg1), m_arg2(arg2), m_arg3(arg3)
     116             :     {
     117             :     }
     118             : 
     119             :     R operator()() const {
     120             :       return m_f(m_arg0, m_arg1, m_arg2, m_arg3);
     121             :     }
     122             : 
     123             :   private:
     124             :      fct m_f;
     125             :      Arg0 m_arg0;
     126             :      Arg1 m_arg1;
     127             :      Arg2 m_arg2;
     128             :      Arg3 m_arg3;
     129             :   };
     130             : 
     131             :   template<typename R, typename Arg0, typename Arg1, typename Arg2, typename Arg3, typename Arg4>
     132             :   class closure<R(Arg0, Arg1, Arg2, Arg3, Arg4)>
     133             :   {
     134             :   public:
     135             :     using fct = etl::delegate<R(Arg0, Arg1, Arg2, Arg3, Arg4)>;
     136             : 
     137             :     closure(fct const& f, Arg0 const arg0, Arg1 const arg1, Arg2 const arg2, Arg3 const arg3, Arg4 const arg4)
     138             :       : m_f(f), m_arg0(arg0), m_arg1(arg1), m_arg2(arg2), m_arg3(arg3), m_arg4(arg4)
     139             :     {
     140             :     }
     141             : 
     142             :     R operator()() const {
     143             :       return m_f(m_arg0, m_arg1, m_arg2, m_arg3, m_arg4);
     144             :     }
     145             : 
     146             :   private:
     147             :     fct m_f;
     148             :     Arg0 m_arg0;
     149             :     Arg1 m_arg1;
     150             :     Arg2 m_arg2;
     151             :     Arg3 m_arg3;
     152             :     Arg4 m_arg4;
     153             :   };
     154             : }
     155             : 
     156             : #endif

Generated by: LCOV version 1.14