libzypp
13.10.6
Main Page
Related Pages
Modules
Namespaces
Classes
Files
File List
File Members
DiskUsage.cc
Go to the documentation of this file.
1
/*---------------------------------------------------------------------\
2
| ____ _ __ __ ___ |
3
| |__ / \ / / . \ . \ |
4
| / / \ V /| _/ _/ |
5
| / /__ | | | | | | |
6
| /_____||_| |_| |_| |
7
| |
8
\---------------------------------------------------------------------*/
12
#include "
zypp/DiskUsage.h
"
13
#include <iostream>
14
15
using namespace
std;
16
18
namespace
zypp
19
{
20
std::ostream &
operator<<
( std::ostream & str,
const
DiskUsage::Entry
& obj )
21
{
22
return
str << obj.
path
<<
'\t'
<< obj.
_size
<<
"; files "
<< obj.
_files
;
23
}
24
25
DiskUsage::Entry
DiskUsage::extract(
const
std::string & dirname_r )
26
{
27
Entry
ret( dirname_r );
28
29
iterator
fst = begin();
30
for
( ; fst != end() && !fst->isBelow( ret ); ++fst )
31
;
// seek 1st equal or below
32
33
bool
found =
false
;
34
if
( fst != end() ) {
35
iterator
lst = fst;
36
found =
true
;
37
// return the first found, the value is sum of all subdirectories below
38
ret += *lst;
39
for
( ; lst != end() && lst->isBelow( ret ); ++lst ) {
40
}
41
// remove
42
_dirs.erase( fst, lst );
43
}
44
45
// the dir entry has been found, update all parent entries
46
if
(found)
47
{
48
std::string dname = dirname_r;
49
if
(dname.size() > 1 && dname[0] !=
'/'
)
50
{
51
dname.insert(dname.begin(),
'/'
);
52
}
53
54
Entry
tmp( dname );
55
56
tmp.
_size
= ret.
_size
;
57
tmp.
_files
= ret.
_files
;
58
// subtract du from directories above
59
iterator
fst = begin();
60
for
( ; fst != end(); ++fst )
61
{
62
// add slash if it's missing
63
std::string dd = fst->path;
64
if
(dd.size() > 1 && dd[0] !=
'/'
)
65
{
66
dd.insert(dd.begin(),
'/'
);
67
}
68
69
// update the entry
70
if
(tmp.
isBelow
(dd))
71
{
72
*fst -= tmp;
73
}
74
}
75
}
76
77
return
ret;
78
}
79
80
std::ostream &
operator<<
( std::ostream & str,
const
DiskUsage
& obj )
81
{
82
str <<
"Package Disk Usage {"
<< endl;
83
for
( DiskUsage::EntrySet::const_iterator it = obj.
_dirs
.begin(); it != obj.
_dirs
.end(); ++it ) {
84
str <<
" "
<< *it << endl;
85
}
86
return
str <<
"}"
;
87
}
88
89
90
}
// namespace zypp
zypp::DiskUsage::iterator
EntrySet::iterator iterator
Definition:
DiskUsage.h:129
zypp::DiskUsage::Entry::_size
unsigned _size
Definition:
DiskUsage.h:42
zypp::DiskUsage
Definition:
DiskUsage.h:22
zypp::DiskUsage::Entry::_files
unsigned _files
Definition:
DiskUsage.h:43
zypp::DiskUsage::Entry::isBelow
bool isBelow(const Entry &rhs) const
Return true if this entry denotes a directory equal to or below rhs._dirname.
Definition:
DiskUsage.h:60
zypp::DiskUsage::Entry
Holds data about how much space will be needed per directory.
Definition:
DiskUsage.h:27
operator<<
std::ostream & operator<<(std::ostream &str, const ::_Dataiterator *obj)
Definition:
LookupAttr.cc:799
zypp::DiskUsage::_dirs
EntrySet _dirs
Definition:
DiskUsage.h:90
DiskUsage.h
zypp::DiskUsage::Entry::path
std::string path
Definition:
DiskUsage.h:41
zypp
DiskUsage.cc
Generated by
1.8.5