--- /dev/null
+/*---------------------------------------------------------------------\
+| ____ _ __ __ ___ |
+| |__ / \ / / . \ . \ |
+| / / \ V /| _/ _/ |
+| / /__ | | | | | | |
+| /_____||_| |_| |_| |
+| |
+\---------------------------------------------------------------------*/
+/** \file zypp/DiskUsage.cc
+ *
+*/
+#include "zypp/DiskUsage.h"
+#include <iostream>
+
+using namespace std;
+
+///////////////////////////////////////////////////////////////////
+namespace zypp
+{ /////////////////////////////////////////////////////////////////
+ std::ostream & operator<<( std::ostream & str, const DiskUsage::Entry & obj )
+ {
+ return str << obj.path << '\t' << obj._size << "; files " << obj._files;
+ }
+
+ DiskUsage::Entry DiskUsage::extract( const std::string & dirname_r )
+ {
+ Entry ret( dirname_r );
+
+ iterator fst = begin();
+ for ( ; fst != end() && !fst->isBelow( ret ); ++fst )
+ ; // seek 1st equal or below
+
+ if ( fst != end() ) {
+ iterator lst = fst;
+ for ( ; lst != end() && lst->isBelow( ret ); ++lst ) {
+ // collect while below
+ ret += *lst;
+ }
+ // remove
+ _dirs.erase( fst, lst );
+ }
+
+ return ret;
+ }
+
+ std::ostream & operator<<( std::ostream & str, const DiskUsage & obj )
+ {
+ str << "Package Disk Usage {" << endl;
+ for ( DiskUsage::EntrySet::const_iterator it = obj._dirs.begin(); it != obj._dirs.end(); ++it ) {
+ str << " " << *it << endl;
+ }
+ return str << "}";
+ }
+
+
+} // namespace zypp
+///////////////////////////////////////////////////////////////////
--- /dev/null
+/*---------------------------------------------------------------------\
+| ____ _ __ __ ___ |
+| |__ / \ / / . \ . \ |
+| / / \ V /| _/ _/ |
+| / /__ | | | | | | |
+| /_____||_| |_| |_| |
+| |
+\---------------------------------------------------------------------*/
+/** \file zypp/DiskUsage.h
+ *
+*/
+#ifndef ZYPP_DISKUSAGE_H
+#define ZYPP_DISKUSAGE_H
+
+#include <set>
+#include <string>
+
+///////////////////////////////////////////////////////////////////
+namespace zypp
+{ /////////////////////////////////////////////////////////////////
+
+ class DiskUsage {
+ public:
+ /**
+ * @short Holds data about how much space will be needed per directory
+ **/
+ struct Entry {
+ Entry() : _size(0), _files(0) {};
+ Entry(const std::string& path_r,
+ const unsigned size_r = 0,
+ const unsigned files_r = 0)
+ : path(path_r), _size(size_r), _files(files_r)
+ {}
+ const std::string path;
+ mutable unsigned _size;
+ mutable unsigned _files;
+ friend std::ostream & operator<<( std::ostream & str, const Entry & obj );
+ /**
+ * Test for equality based on directory name.
+ **/
+ bool operator==( const Entry & rhs ) const {
+ return path == rhs.path;
+ }
+ /**
+ * Order based on directory name.
+ **/
+ bool operator<( const Entry & rhs ) const {
+ return path < rhs.path;
+ }
+ /**
+ * Return true if this entry denotes a directory equal to or below rhs._dirname.
+ **/
+ bool isBelow( const Entry & rhs ) const {
+ // whether _dirname has prefix rhs._dirname
+ return( path.compare( 0, rhs.path.size(), rhs.path ) == 0 );
+ }
+ /**
+ * Return true if this entry denotes a directory equal to or below dirname_r.
+ **/
+ bool isBelow( const std::string & dirname_r ) const {
+ return isBelow( Entry( dirname_r ) );
+ }
+
+ /**
+ *
+ **/
+ const Entry & operator=( const Entry & rhs ) const {
+ return rhs;
+ }
+ /**
+ * Numerical operation based on size and files values.
+ **/
+ const Entry & operator+=( const Entry & rhs ) const {
+ _size += rhs._size;
+ _files += rhs._files;
+ return *this;
+ }
+ /**
+ * Numerical operation based on size and files values.
+ **/
+ const Entry & operator-=( const Entry & rhs ) const {
+ _size -= rhs._size;
+ _files -= rhs._files;
+ return *this;
+ }
+ };
+ private:
+ typedef std::set<Entry> EntrySet;
+ EntrySet _dirs;
+ public:
+
+ DiskUsage() {};
+ /**
+ * Add an entry. If already present, sum up the new entries size and files value.
+ **/
+ void add( const Entry & newent_r ) {
+ std::pair<EntrySet::iterator,bool> res = _dirs.insert( newent_r );
+ if ( !res.second ) {
+ *res.first += newent_r;
+ }
+ }
+ /**
+ * Add an entry. If already present, sum up the new entries size and files value.
+ **/
+ void add( const std::string & dirname_r, const unsigned & size_r = 0, const unsigned & files_r = 0 ) {
+ add( Entry( dirname_r, size_r, files_r ) );
+ }
+ /**
+ * Number of entries
+ **/
+ unsigned size() const { return _dirs.size(); }
+ /**
+ * Clear EntrySet
+ **/
+ void clear() { _dirs.clear(); }
+ /**
+ * Sum up any entries for dirname_r and its descendants and remove them
+ * on the fly. Return the result.
+ **/
+ Entry extract( const std::string & dirname_r );
+
+ public:
+
+ typedef EntrySet::iterator iterator;
+ typedef EntrySet::reverse_iterator reverse_iterator;
+
+ /**
+ * Forward iterator pointing to the first entry (if any)
+ **/
+ iterator begin() { return _dirs.begin(); }
+ /**
+ * Forward iterator pointing behind the last entry.
+ **/
+ iterator end() { return _dirs.end(); }
+ /**
+ * Reverse iterator pointing to the last entry (if any)
+ **/
+ reverse_iterator rbegin() { return _dirs.rbegin(); }
+ /**
+ * Reverse iterator pointing before the first entry.
+ **/
+ reverse_iterator rend() { return _dirs.rend(); }
+
+ typedef EntrySet::const_iterator const_iterator;
+ typedef EntrySet::const_reverse_iterator const_reverse_iterator;
+
+ /**
+ * Forward const iterator pointing to the first entry (if any)
+ **/
+ const_iterator begin() const { return _dirs.begin(); }
+ /**
+ * Forward const iterator pointing behind the last entry.
+ **/
+ const_iterator end() const { return _dirs.end(); }
+ /**
+ * Reverse const iterator pointing to the last entry (if any)
+ **/
+ const_reverse_iterator rbegin() const { return _dirs.rbegin(); }
+ /**
+ * Reverse const iterator pointing before the first entry.
+ **/
+ const_reverse_iterator rend()const { return _dirs.rend(); }
+
+ public:
+
+ friend std::ostream & operator<<( std::ostream & str, const DiskUsage & obj );
+
+ };
+ ///////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////////
+} // namespace zypp
+///////////////////////////////////////////////////////////////////
+#endif // ZYPP_DISKUSAGE_H
Url.h \
TmpPath.h \
KVMap.h \
- Callback.h
+ Callback.h \
+ DiskUsage.h
## ##################################################
PathInfo.cc \
Digest.cc \
Url.cc \
- TmpPath.cc
+ TmpPath.cc \
+ DiskUsage.cc
lib@PACKAGE@_la_LDFLAGS = @LIB_VERSION_INFO@
typedef ResTraits<Self> TraitsType;
typedef TraitsType::PtrType Ptr;
typedef TraitsType::constPtrType constPtr;
- typedef Impl::DiskUsage DiskUsage;
public:
/** Time of package installation */
License PackageImplIf::licenseToConfirm() const
{ return License(); }
- // disk usage class methods
-
- std::ostream & operator<<( std::ostream & str, const PackageImplIf::DiskUsage::Entry & obj )
- {
- return str << obj.path << '\t' << obj._size << "; files " << obj._files;
- }
-
- PackageImplIf::DiskUsage::Entry PackageImplIf::DiskUsage::extract( const std::string & dirname_r )
- {
- Entry ret( dirname_r );
-
- iterator fst = begin();
- for ( ; fst != end() && !fst->isBelow( ret ); ++fst )
- ; // seek 1st equal or below
-
- if ( fst != end() ) {
- iterator lst = fst;
- for ( ; lst != end() && lst->isBelow( ret ); ++lst ) {
- // collect while below
- ret += *lst;
- }
- // remove
- _dirs.erase( fst, lst );
- }
-
- return ret;
- }
-
- std::ostream & operator<<( std::ostream & str, const PackageImplIf::DiskUsage & obj )
- {
- str << "Package Disk Usage {" << endl;
- for ( PackageImplIf::DiskUsage::EntrySet::const_iterator it = obj._dirs.begin(); it != obj._dirs.end(); ++it ) {
- str << " " << *it << endl;
- }
- return str << "}";
- }
-
/////////////////////////////////////////////////////////////////
} // namespace detail
///////////////////////////////////////////////////////////////////
std::list<BaseVersion> _base_versions;
};
- class DiskUsage {
- public:
- /**
- * @short Holds data about how much space will be needed per directory
- **/
- struct Entry {
- Entry() : _size(0), _files(0) {};
- Entry(const std::string& path_r,
- const unsigned size_r = 0,
- const unsigned files_r = 0)
- : path(path_r), _size(size_r), _files(files_r)
- {}
- const std::string path;
- mutable unsigned _size;
- mutable unsigned _files;
- friend std::ostream & operator<<( std::ostream & str, const Entry & obj );
- /**
- * Test for equality based on directory name.
- **/
- bool operator==( const Entry & rhs ) const {
- return path == rhs.path;
- }
- /**
- * Order based on directory name.
- **/
- bool operator<( const Entry & rhs ) const {
- return path < rhs.path;
- }
- /**
- * Return true if this entry denotes a directory equal to or below rhs._dirname.
- **/
- bool isBelow( const Entry & rhs ) const {
- // whether _dirname has prefix rhs._dirname
- return( path.compare( 0, rhs.path.size(), rhs.path ) == 0 );
- }
- /**
- * Return true if this entry denotes a directory equal to or below dirname_r.
- **/
- bool isBelow( const std::string & dirname_r ) const {
- return isBelow( Entry( dirname_r ) );
- }
-
- /**
- *
- **/
- const Entry & operator=( const Entry & rhs ) const {
- return rhs;
- }
- /**
- * Numerical operation based on size and files values.
- **/
- const Entry & operator+=( const Entry & rhs ) const {
- _size += rhs._size;
- _files += rhs._files;
- return *this;
- }
- /**
- * Numerical operation based on size and files values.
- **/
- const Entry & operator-=( const Entry & rhs ) const {
- _size -= rhs._size;
- _files -= rhs._files;
- return *this;
- }
- };
- private:
- typedef std::set<Entry> EntrySet;
- EntrySet _dirs;
- public:
-
- DiskUsage() {};
- /**
- * Add an entry. If already present, sum up the new entries size and files value.
- **/
- void add( const Entry & newent_r ) {
- std::pair<EntrySet::iterator,bool> res = _dirs.insert( newent_r );
- if ( !res.second ) {
- *res.first += newent_r;
- }
- }
- /**
- * Add an entry. If already present, sum up the new entries size and files value.
- **/
- void add( const std::string & dirname_r, const unsigned & size_r = 0, const unsigned & files_r = 0 ) {
- add( Entry( dirname_r, size_r, files_r ) );
- }
- /**
- * Number of entries
- **/
- unsigned size() const { return _dirs.size(); }
- /**
- * Clear EntrySet
- **/
- void clear() { _dirs.clear(); }
- /**
- * Sum up any entries for dirname_r and its descendants and remove them
- * on the fly. Return the result.
- **/
- Entry extract( const std::string & dirname_r );
-
- public:
-
- typedef EntrySet::iterator iterator;
- typedef EntrySet::reverse_iterator reverse_iterator;
-
- /**
- * Forward iterator pointing to the first entry (if any)
- **/
- iterator begin() { return _dirs.begin(); }
- /**
- * Forward iterator pointing behind the last entry.
- **/
- iterator end() { return _dirs.end(); }
- /**
- * Reverse iterator pointing to the last entry (if any)
- **/
- reverse_iterator rbegin() { return _dirs.rbegin(); }
- /**
- * Reverse iterator pointing before the first entry.
- **/
- reverse_iterator rend() { return _dirs.rend(); }
-
- typedef EntrySet::const_iterator const_iterator;
- typedef EntrySet::const_reverse_iterator const_reverse_iterator;
-
- /**
- * Forward const iterator pointing to the first entry (if any)
- **/
- const_iterator begin() const { return _dirs.begin(); }
- /**
- * Forward const iterator pointing behind the last entry.
- **/
- const_iterator end() const { return _dirs.end(); }
- /**
- * Reverse const iterator pointing to the last entry (if any)
- **/
- const_reverse_iterator rbegin() const { return _dirs.rbegin(); }
- /**
- * Reverse const iterator pointing before the first entry.
- **/
- const_reverse_iterator rend()const { return _dirs.rend(); }
-
- public:
-
- friend std::ostream & operator<<( std::ostream & str, const PackageImplIf::DiskUsage & obj );
-
- };
#if 0
/**
//
// DESCRIPTION :
//
- Package::DiskUsage & RpmHeader::tag_du( Package::DiskUsage & dudata_r ) const
+ DiskUsage & RpmHeader::tag_du( DiskUsage & dudata_r ) const
{
dudata_r.clear();
stringList basenames;
// filter out hardliks ( different name but same device and inode ).
///////////////////////////////////////////////////////////////////
filesystem::DevInoCache trace;
- vector<Package::DiskUsage::Entry> entries;
+ vector<DiskUsage::Entry> entries;
entries.resize( dirnames.size() );
for ( unsigned i = 0; i < dirnames.size(); ++i ) {
- entries[i] = Package::DiskUsage::Entry(dirnames[i]);
+ entries[i] = DiskUsage::Entry(dirnames[i]);
}
for ( unsigned i = 0; i < basenames.size(); ++ i ) {
#include "zypp/Changelog.h"
#include "zypp/CapSetFwd.h"
#include "zypp/Pathname.h"
+#include "zypp/DiskUsage.h"
namespace zypp {
namespace target {
/**
* Returns reference to arg <code>dudata_r</code>.
**/
- Package::DiskUsage & tag_du( Package::DiskUsage & dudata_r ) const;
+ DiskUsage & tag_du( DiskUsage & dudata_r ) const;
public:
{ return _keywords; }
/** */
- Package::DiskUsage RPMPackageImpl::diskUsage() const
+ DiskUsage RPMPackageImpl::diskUsage() const
{ return _disk_usage; }
#if 0
/** */