LCOV - code coverage report
Current view: top level - src/sl3 - utils.hpp (source / functions) Coverage Total Hit
Test: coverage.info.cleaned Lines: 100.0 % 21 21
Test Date: 2024-12-09 18:45:33 Functions: 100.0 % 11 11
Branches: 50.0 % 6 3

             Branch data     Line data    Source code
       1                 :             : #pragma once
       2                 :             : 
       3                 :             : #include <cassert>
       4                 :             : #include <cstddef>
       5                 :             : #include <limits>
       6                 :             : 
       7                 :             : namespace sl3
       8                 :             : {
       9                 :             : 
      10                 :             :   inline size_t
      11                 :         393 :   as_size_t (int val)
      12                 :             :   {
      13         [ -  + ]:         393 :     assert (val >= 0);
      14                 :         393 :     return static_cast<size_t> (val);
      15                 :             :   }
      16                 :             : 
      17                 :             :   inline size_t
      18                 :          12 :   as_size_t (ptrdiff_t val)
      19                 :             :   {
      20         [ -  + ]:          12 :     assert (val >= 0);
      21                 :          12 :     return static_cast<size_t> (val);
      22                 :             :   }
      23                 :             : 
      24                 :             :   inline int
      25                 :           8 :   as_int (size_t val)
      26                 :             :   {
      27         [ -  + ]:           8 :     assert (val < std::numeric_limits<int>::max ());
      28                 :           8 :     return static_cast<int> (val);
      29                 :             :   }
      30                 :             : 
      31                 :             :   // gcc -Werror=conversion helpers
      32                 :             :   // I keep that as a comment, since it's so funny, but not use it
      33                 :             :   // template <typename T1, typename T2> struct common_typeype
      34                 :             :   // {
      35                 :             :   //   typedef typename std::conditional < std::numeric_limits<T1>::is_iec559
      36                 :             :   //           &&std::numeric_limits<T2>::is_iec559,
      37                 :             :   //       typename std::conditional<
      38                 :             :   //           std::numeric_limits<
      39                 :             :   //               T1>::digits<std::numeric_limits<T2>::digits, T2, T1>::type,
      40                 :             :   //           typename std::conditional<std::numeric_limits<T1>::is_iec559,
      41                 :             :   //                                     T1,
      42                 :             :   //                                     T2>::type>::type type;
      43                 :             :   // };
      44                 :             : 
      45                 :             :   template <typename T1, typename T2>
      46                 :             :   bool
      47                 :          10 :   is_less (const T1& a, const T2& b)
      48                 :             :   {
      49                 :             :     using common_type = std::common_type_t<T1, T2>;
      50                 :          20 :     return std::less<common_type>{}(static_cast<common_type> (a),
      51                 :          10 :                                     static_cast<common_type> (b));
      52                 :             :   }
      53                 :             : 
      54                 :             :   template <typename T1, typename T2>
      55                 :             :   bool
      56                 :           3 :   is_greater (const T1& a, const T2& b)
      57                 :             :   {
      58                 :             :     using common_type = std::common_type_t<T1, T2>;
      59                 :           6 :     return std::greater<common_type>{}(static_cast<common_type> (a),
      60                 :           3 :                                        static_cast<common_type> (b));
      61                 :             :   }
      62                 :             : 
      63                 :             :   template <typename T1, typename T2>
      64                 :             :   bool
      65                 :           3 :   is_less_equal (const T1& a, const T2& b)
      66                 :             :   {
      67                 :             :     using common_type = std::common_type_t<T1, T2>;
      68                 :           6 :     return std::less_equal<common_type>{}(static_cast<common_type> (a),
      69                 :           3 :                                           static_cast<common_type> (b));
      70                 :             :   }
      71                 :             : 
      72                 :             :   template <typename T1, typename T2>
      73                 :             :   bool
      74                 :           4 :   is_equal (const T1& a, const T2& b)
      75                 :             :   {
      76                 :             :     using common_type = std::common_type_t<T1, T2>;
      77                 :           8 :     return std::equal_to<common_type>{}(static_cast<common_type> (a),
      78                 :           4 :                                         static_cast<common_type> (b));
      79                 :             :   }
      80                 :             : 
      81                 :             : }
        

Generated by: LCOV version 2.0-1