DiskUsage.cc
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00012 #include "zypp/DiskUsage.h"
00013 #include <iostream>
00014
00015 using namespace std;
00016
00018 namespace zypp
00019 {
00020 std::ostream & operator<<( std::ostream & str, const DiskUsage::Entry & obj )
00021 {
00022 return str << obj.path << '\t' << obj._size << "; files " << obj._files;
00023 }
00024
00025 DiskUsage::Entry DiskUsage::extract( const std::string & dirname_r )
00026 {
00027 Entry ret( dirname_r );
00028
00029 iterator fst = begin();
00030 for ( ; fst != end() && !fst->isBelow( ret ); ++fst )
00031 ;
00032
00033 bool found = false;
00034 if ( fst != end() ) {
00035 iterator lst = fst;
00036 found = true;
00037
00038 ret += *lst;
00039 for ( ; lst != end() && lst->isBelow( ret ); ++lst ) {
00040 }
00041
00042 _dirs.erase( fst, lst );
00043 }
00044
00045
00046 if (found)
00047 {
00048 std::string dname = dirname_r;
00049 if (dname.size() > 1 && dname[0] != '/')
00050 {
00051 dname.insert(dname.begin(), '/');
00052 }
00053
00054 Entry tmp( dname );
00055
00056 tmp._size = ret._size;
00057 tmp._files = ret._files;
00058
00059 iterator fst = begin();
00060 for ( ; fst != end(); ++fst )
00061 {
00062
00063 std::string dd = fst->path;
00064 if (dd.size() > 1 && dd[0] != '/')
00065 {
00066 dd.insert(dd.begin(), '/');
00067 }
00068
00069
00070 if (tmp.isBelow(dd))
00071 {
00072 *fst -= tmp;
00073 }
00074 }
00075 }
00076
00077 return ret;
00078 }
00079
00080 std::ostream & operator<<( std::ostream & str, const DiskUsage & obj )
00081 {
00082 str << "Package Disk Usage {" << endl;
00083 for ( DiskUsage::EntrySet::const_iterator it = obj._dirs.begin(); it != obj._dirs.end(); ++it ) {
00084 str << " " << *it << endl;
00085 }
00086 return str << "}";
00087 }
00088
00089
00090 }