LCOV - code coverage report
Current view: top level - utilites/matchmaker/matcher - variant_match.cpp (source / functions) Hit Total Coverage
Test: wfc_jsonrpc-coverage.info Lines: 22 25 88.0 %
Date: 2019-09-12 Functions: 3 3 100.0 %

          Line data    Source code
       1             : 
       2             : #include "variant_match.hpp"
       3             : #include "ibuilder.hpp"
       4             : 
       5             : namespace wfc{ namespace jsonrpc{ 
       6             : 
       7          18 : variant_match::variant_match( const std::shared_ptr<ibuilder>& builder )
       8          18 :   : _builder(builder)
       9             : {
      10          18 : }
      11             : 
      12          18 : bool variant_match::configure(const char* beg, const char* end, json::json_error& err)  
      13             : {
      14             :   typedef std::pair<const char*, const char*> field_pair_t;
      15             :   typedef std::vector< field_pair_t > pair_list_t;
      16             :   typedef json::vector_of< json::iterator_pair<field_pair_t> > pair_list_json;
      17          18 :   pair_list_t pair_list;
      18          18 :   pair_list_json::serializer()(pair_list, beg, end, &err);
      19          18 :   if (err)
      20           0 :     return false;
      21             :   
      22          18 :   _matchers.clear();
      23          50 :   for (auto p : pair_list)
      24             :   {
      25             :     // Передаем end, а не p.second, чтобы в случае ошибки получить правильное место где она 
      26          32 :     auto m = _builder->build_value_nv(p.first, end, err);
      27          32 :     if ( m==nullptr || err )  return false;
      28          32 :     if (!m->configure(p.first, end, err))
      29           0 :       return false;
      30          32 :     _matchers.push_back(m);
      31          32 :   }
      32          18 :   return true;
      33             : }
      34             : 
      35          22 : bool variant_match::match(const char* beg, const char* end, json::json_error& err) 
      36             : {
      37          22 :   if ( _matchers.empty() )
      38           0 :     return true;
      39             :   
      40          39 :   for (auto m : _matchers)
      41             :   {
      42          30 :     if ( m->match(beg, end, err) )
      43          13 :       return true;
      44          17 :   }
      45           9 :   return false;
      46             : }
      47             : 
      48             : 
      49             : }}

Generated by: LCOV version 1.10