LCOV - code coverage report
Current view: top level - src/bindings/cpp/include - keysetget.hpp (source / functions) Hit Total Coverage
Test: coverage-filtered.info Lines: 22 22 100.0 %
Date: 2019-09-12 12:28:41 Functions: 1 1 100.0 %

          Line data    Source code
       1             : /**
       2             :  * @file
       3             :  *
       4             :  * @brief
       5             :  *
       6             :  * @copyright BSD License (see LICENSE.md or https://www.libelektra.org)
       7             :  */
       8             : 
       9             : #ifndef ELEKTRA_KEYSETGET_HPP
      10             : #define ELEKTRA_KEYSETGET_HPP
      11             : 
      12             : #include <map>
      13             : 
      14             : #include <keyset.hpp>
      15             : 
      16             : namespace kdb
      17             : {
      18             : 
      19             : template <typename T>
      20             : struct KeySetTypeWrapper<std::map<std::string, T>>
      21             : {
      22       10744 :         std::map<std::string, T> operator() (KeySet const & ks, std::string const & name, option_t const options) const
      23             :         {
      24       10744 :                 std::map<std::string, T> ret;
      25       64456 :                 for (int i = 0; i < 5; ++i)
      26             :                 {
      27       53718 :                         std::string n;
      28       53712 :                         if (name[0] != '/')
      29             :                         {
      30             :                                 n = name;
      31             :                                 i = 10; // break next time
      32             :                         }
      33             :                         else
      34       53710 :                                 switch (i)
      35             :                                 {
      36             :                                 case 0:
      37       21484 :                                         n = "proc" + name;
      38       10742 :                                         break;
      39             :                                 case 1:
      40       21484 :                                         n = "dir" + name;
      41       10742 :                                         break;
      42             :                                 case 2:
      43       21484 :                                         n = "user" + name;
      44       10742 :                                         break;
      45             :                                 case 3:
      46       21484 :                                         n = "system" + name;
      47       10742 :                                         break;
      48             :                                 }
      49       53718 :                         Key b = ks.lookup (n, options);
      50      107418 :                         if (!b) continue;
      51           6 :                         Key k;
      52         112 :                         while ((k = ks.next ()))
      53             :                         {
      54          24 :                                 if (!k.isBelow (b)) break; // other keys are not relevant anymore
      55          22 :                                 if (k.isDirectBelow (b))
      56             :                                 {
      57         132 :                                         ret.insert (std::make_pair<std::string, T> (k.getBaseName (), k.get<T> ()));
      58             :                                 }
      59             :                         }
      60             :                 }
      61       10744 :                 return ret;
      62             :         }
      63             : };
      64             : 
      65             : } // end of namespace kdb
      66             : 
      67             : #endif

Generated by: LCOV version 1.13