LCOV - lcov.info - ept/core/apt/version.h

LTP GCOV extension - code coverage report
Current view: | directory - ept/core/apt - version.h
Test: | lcov.info
Date: | 2008-08-14 |  | Instrumented lines: | 32
Code covered: | 93.8 % |  | Executed lines: | 30

           1                 : // -*- C++ -*-
           2                 : #ifndef EPT_CORE_APT_VERSION_H
           3                 : #define EPT_CORE_APT_VERSION_H
           4                 :
           5                 : namespace ept {
           6                 : namespace core {
           7                 : namespace version {
           8                 :
           9            3616 : struct InternalList {
          10                 :     package::Internal m_pkg;
          11                 :     Internal m_ver;
          12                 :
          13                 :     typedef Internal Type;
          14                 :
          15            3616 :     InternalList tail() const {
          16            3616 :         InternalList t = *this;
          17            3616 :         t.m_ver ++;
          18            3616 :         t.seek();
          19                 :         return t;
          20                 :     }
          21                 :
          22            5424 :     const Internal head() const {
          23            5424 :         return m_ver;
          24                 :     }
          25                 :
          26                 :     Internal head() {
          27                 :         return m_ver;
          28                 :     }
          29                 :
          30            3618 :     bool empty() const {
          31            3618 :         return m_pkg.end();
          32                 :     }
          33                 :
          34            3618 :     void seek()
          35                 :     {
          36           14790 :         while ( m_ver.end() && !m_pkg.end() ) {
          37            7554 :             m_pkg ++;
          38            7554 :             m_ver = m_pkg.VersionList();
          39                 :         }
          40            3618 :     }
          41                 :
          42               2 :     InternalList( package::Internal i )
          43               2 :         : m_pkg( i )
          44                 :     {
          45               2 :         m_ver = m_pkg.VersionList();
          46               2 :         seek();
          47               2 :     }
          48                 : };
          49                 :
          50                 : struct Setup {
          51                 :     typedef ept::Token Token;
          52                 :     typedef version::Internal Internal;
          53                 :     typedef version::PropertyId PropertyId;
          54                 :     typedef version::InternalList InternalList;
          55                 : };
          56                 :
          57                 : struct Source : core::Source< Source, Setup, PropertyType >
          58              12 : {
          59                 :     AptDatabase &m_db;
          60              12 :     Source( AptDatabase &db ) : m_db( db ) {}
          61                 :
          62               2 :     InternalList listInternal() {
          63               2 :         return InternalList( m_db.cache().PkgBegin() );
          64                 :     }
          65                 :
          66            1808 :     Token getToken( Internal i ) {
          67            1808 :         Token t;
          68            1808 :         t._id = std::string( i.ParentPkg().Name() ) + "_" + i.VerStr();
          69               0 :         return t;
          70                 :     }
          71                 :
          72                 :     Internal lookupToken( Token t ) {
          73                 :         return m_db.lookupVersion( t );
          74                 :     }
          75                 :
          76                 :     template< PropertyId p >
          77                 :     typename PropertyType< p >::T getInternal( Internal );
          78                 : };
          79                 :
          80                 : template<> struct PropertyType< Package > { typedef Token T; };
          81                 :
          82            3616 : template<> inline Token Source::getInternal< Package >( Internal i ) {
          83            3616 :     assert( !i.end() );
          84            3616 :     Token t;
          85            7232 :     t._id = i.ParentPkg().Name();
          86               0 :     return t;
          87                 : }
          88                 :
          89                 : }
          90                 : }
          91                 : }
          92                 :
          93                 : #endif

Generated by: LTP GCOV extension version 1.6