LCOV - lcov.info - /usr/include/tagcoll-2.0.11/tagcoll/utils/set.h

LTP GCOV extension - code coverage report
Current view: | directory - usr/include/tagcoll-2.0.11/tagcoll/utils - set.h
Test: | lcov.info
Date: | 2008-08-14 |  | Instrumented lines: | 12
Code covered: | 83.3 % |  | Executed lines: | 10

           1                 : #ifndef TAGCOLL_UTILS_SET_H
           2                 : #define TAGCOLL_UTILS_SET_H
           3                 :
           4                 : /** \file
           5                 :  * Extra useful set operations
           6                 :  */
           7                 :
           8                 : /*
           9                 :  * Copyright (C) 2003,2004,2005,2006  Enrico Zini <enrico@debian.org>
          10                 :  *
          11                 :  * This library is free software; you can redistribute it and/or
          12                 :  * modify it under the terms of the GNU Lesser General Public
          13                 :  * License as published by the Free Software Foundation; either
          14                 :  * version 2.1 of the License, or (at your option) any later version.
          15                 :  *
          16                 :  * This library is distributed in the hope that it will be useful,
          17                 :  * but WITHOUT ANY WARRANTY; without even the implied warranty of
          18                 :  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
          19                 :  * Lesser General Public License for more details.
          20                 :  *
          21                 :  * You should have received a copy of the GNU Lesser General Public
          22                 :  * License along with this library; if not, write to the Free Software
          23                 :  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  USA
          24                 :  */
          25                 :
          26                 : #include <wibble/operators.h>
          27                 : #include <set>
          28                 :
          29                 : namespace tagcoll {
          30                 : namespace utils {
          31                 :
          32                 : template<typename T>
          33                 : int set_distance(const std::set<T>& set1, const std::set<T>& set2)
          34                 : {
          35                 :         int res = 0;
          36                 :         int intCount = 0;
          37                 :
          38                 :         typename std::set<T>::const_iterator a = set1.begin();
          39                 :         typename std::set<T>::const_iterator b = set2.begin();
          40                 :
          41                 :         while (a != set1.end() || b != set2.end())
          42                 :                 if ((b == set2.end()) || (a != set1.end() && *a < *b))
          43                 :                 {
          44                 :                         res++;
          45                 :                         a++;
          46                 :                 }
          47                 :                 else if ((a == set1.end()) || (b != set2.end() && *b < *a))
          48                 :                 {
          49                 :                         res++;
          50                 :                         b++;
          51                 :                 }
          52                 :                 else
          53                 :                 {
          54                 :                         a++;
          55                 :                         b++;
          56                 :                         intCount++;
          57                 :                 }
          58                 :
          59                 :         return intCount ? res : -1;
          60                 : }
          61                 :
          62                 : template<typename T>
          63               1 : bool set_contains(const std::set<T>& set1, const std::set<T>& set2)
          64                 : {
          65               1 :         typename std::set<T>::const_iterator b = set2.begin();
          66                 :
          67             574 :         for (typename std::set<T>::const_iterator a = set1.begin(); a != set1.end(); ++a)
          68             574 :                 if (b == set2.end())
          69               1 :                         return true;
          70             573 :                 else if (*a == *b)
          71              31 :                         b++;
          72             542 :                 else if (*b < *a)
          73               0 :                         return false;
          74                 :
          75               0 :         return b == set2.end();
          76                 : }
          77                 :
          78                 : template<typename T>
          79               4 : bool set_contains(const std::set<T>& set1, const T& item)
          80                 : {
          81               4 :         return set1.find(item) != set1.end();
          82                 : }
          83                 :
          84                 : }
          85                 : }
          86                 :
          87                 : // vim:set ts=4 sw=4:
          88                 : #endif

Generated by: LTP GCOV extension version 1.6