LCOV - code coverage report
Current view: top level - co - zeroconf.cpp (source / functions) Hit Total Coverage
Test: Collage Lines: 19 67 28.4 %
Date: 2018-01-09 16:37:03 Functions: 8 19 42.1 %

          Line data    Source code
       1             : 
       2             : /* Copyright (c) 2012, Stefan Eilemann <eile@equalizergraphics.com>
       3             :  *
       4             :  * This file is part of Collage <https://github.com/Eyescale/Collage>
       5             :  *
       6             :  * This library is free software; you can redistribute it and/or modify it under
       7             :  * the terms of the GNU Lesser General Public License version 2.1 as published
       8             :  * by the Free Software Foundation.
       9             :  *
      10             :  * This library is distributed in the hope that it will be useful, but WITHOUT
      11             :  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
      12             :  * FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
      13             :  * details.
      14             :  *
      15             :  * You should have received a copy of the GNU Lesser General Public License
      16             :  * along with this library; if not, write to the Free Software Foundation, Inc.,
      17             :  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
      18             :  */
      19             : 
      20             : #include "zeroconf.h"
      21             : 
      22             : #include <map>
      23             : #include <servus/servus.h>
      24             : 
      25             : namespace co
      26             : {
      27          21 : static const std::string empty_;
      28             : 
      29             : namespace detail
      30             : {
      31             : typedef std::map<std::string, std::string> ValueMap;
      32             : typedef std::map<std::string, ValueMap> InstanceMap;
      33             : typedef ValueMap::const_iterator ValueMapCIter;
      34             : typedef InstanceMap::const_iterator InstanceMapCIter;
      35             : 
      36           1 : class Zeroconf
      37             : {
      38             : public:
      39           1 :     explicit Zeroconf(servus::Servus& service)
      40           1 :         : service_(service)
      41             :     {
      42           1 :         service_.getData(instanceMap_);
      43           1 :     }
      44             : 
      45           0 :     void set(const std::string& key, const std::string& value)
      46             :     {
      47           0 :         service_.set(key, value);
      48           0 :     }
      49             : 
      50           1 :     Strings getInstances() const
      51             :     {
      52           1 :         Strings instances;
      53           1 :         for (InstanceMapCIter i = instanceMap_.begin(); i != instanceMap_.end();
      54             :              ++i)
      55             :         {
      56           0 :             instances.push_back(i->first);
      57             :         }
      58           1 :         return instances;
      59             :     }
      60             : 
      61           0 :     Strings getKeys(const std::string& instance) const
      62             :     {
      63           0 :         Strings keys;
      64           0 :         InstanceMapCIter i = instanceMap_.find(instance);
      65           0 :         if (i == instanceMap_.end())
      66           0 :             return keys;
      67             : 
      68           0 :         const ValueMap& values = i->second;
      69           0 :         for (ValueMapCIter j = values.begin(); j != values.end(); ++j)
      70           0 :             keys.push_back(j->first);
      71           0 :         return keys;
      72             :     }
      73             : 
      74           0 :     bool containsKey(const std::string& instance, const std::string& key) const
      75             :     {
      76           0 :         InstanceMapCIter i = instanceMap_.find(instance);
      77           0 :         if (i == instanceMap_.end())
      78           0 :             return false;
      79             : 
      80           0 :         const ValueMap& values = i->second;
      81           0 :         ValueMapCIter j = values.find(key);
      82           0 :         if (j == values.end())
      83           0 :             return false;
      84           0 :         return true;
      85             :     }
      86             : 
      87           0 :     const std::string& get(const std::string& instance,
      88             :                            const std::string& key) const
      89             :     {
      90           0 :         InstanceMapCIter i = instanceMap_.find(instance);
      91           0 :         if (i == instanceMap_.end())
      92           0 :             return empty_;
      93             : 
      94           0 :         const ValueMap& values = i->second;
      95           0 :         ValueMapCIter j = values.find(key);
      96           0 :         if (j == values.end())
      97           0 :             return empty_;
      98           0 :         return j->second;
      99             :     }
     100             : 
     101             : private:
     102             :     servus::Servus& service_;
     103             :     InstanceMap instanceMap_; //!< copy of discovered data
     104             : };
     105             : }
     106             : 
     107           1 : Zeroconf::Zeroconf(servus::Servus& service)
     108           1 :     : _impl(new detail::Zeroconf(service))
     109             : {
     110           1 : }
     111             : 
     112           0 : Zeroconf::Zeroconf(const Zeroconf& from)
     113           0 :     : _impl(new detail::Zeroconf(*from._impl))
     114             : {
     115           0 : }
     116             : 
     117           2 : Zeroconf::~Zeroconf()
     118             : {
     119           1 :     delete _impl;
     120           1 : }
     121             : 
     122           0 : Zeroconf& Zeroconf::operator=(const Zeroconf& rhs)
     123             : {
     124           0 :     if (this != &rhs)
     125             :     {
     126           0 :         delete _impl;
     127           0 :         _impl = new detail::Zeroconf(*rhs._impl);
     128             :     }
     129           0 :     return *this;
     130             : }
     131             : 
     132           0 : void Zeroconf::set(const std::string& key, const std::string& value)
     133             : {
     134           0 :     _impl->set(key, value);
     135           0 : }
     136             : 
     137           1 : Strings Zeroconf::getInstances() const
     138             : {
     139           1 :     return _impl->getInstances();
     140             : }
     141             : 
     142           0 : Strings Zeroconf::getKeys(const std::string& instance) const
     143             : {
     144           0 :     return _impl->getKeys(instance);
     145             : }
     146             : 
     147           0 : bool Zeroconf::containsKey(const std::string& instance,
     148             :                            const std::string& key) const
     149             : {
     150           0 :     return _impl->containsKey(instance, key);
     151             : }
     152             : 
     153           0 : const std::string& Zeroconf::get(const std::string& instance,
     154             :                                  const std::string& key) const
     155             : {
     156           0 :     return _impl->get(instance, key);
     157             : }
     158          63 : }

Generated by: LCOV version 1.11