libzypp
17.14.0
Main Page
Related Pages
Modules
Namespaces
Classes
Files
File List
File Members
Queue.cc
Go to the documentation of this file.
1
/*---------------------------------------------------------------------\
2
| ____ _ __ __ ___ |
3
| |__ / \ / / . \ . \ |
4
| / / \ V /| _/ _/ |
5
| / /__ | | | | | | |
6
| /_____||_| |_| |_| |
7
| |
8
\---------------------------------------------------------------------*/
11
extern
"C"
12
{
13
#include <solv/queue.h>
14
}
15
#include <iostream>
16
#include "
zypp/base/LogTools.h
"
17
18
#include "
zypp/sat/Queue.h
"
19
#include "
zypp/sat/Solvable.h
"
20
21
using
std::endl;
22
24
namespace
zypp
25
{
26
27
template
<>
28
sat::detail::CQueue
* rwcowClone<sat::detail::CQueue>(
const
sat::detail::CQueue
* rhs )
29
{
30
sat::detail::CQueue
* ret =
new
sat::detail::CQueue
;
31
::queue_init_clone( ret, const_cast<sat::detail::CQueue *>(rhs) );
32
return
ret;
33
}
34
36
namespace
sat
37
{
38
39
Queue::Queue
()
40
: _pimpl( new detail::
CQueue
)
41
{ ::queue_init(
_pimpl
.
get
() ); }
42
43
Queue::~Queue
()
44
{ ::queue_free(
_pimpl
.
get
() ); }
45
46
bool
Queue::empty
()
const
47
{
return
(
_pimpl
->count == 0 ); }
48
49
Queue::size_type
Queue::size
()
const
50
{
return
_pimpl
->count; }
51
52
Queue::const_iterator
Queue::begin
()
const
53
{
return
_pimpl
->elements; }
54
55
Queue::const_iterator
Queue::end
()
const
56
{
return
_pimpl
->elements +
_pimpl
->count;}
57
58
Queue::const_iterator
Queue::find
(
value_type
val_r )
const
59
{
60
for_
( it,
begin
(),
end
() )
61
if
( *it == val_r )
62
return
it;
63
return
end
();
64
}
65
66
Queue::value_type
Queue::first
()
const
67
{
68
if
(
_pimpl
->count )
69
return
*
_pimpl
->elements;
70
return
0;
71
}
72
73
Queue::value_type
Queue::last
()
const
74
{
75
if
(
_pimpl
->count )
76
return
_pimpl
->elements[
_pimpl
->count-1];
77
return
0;
78
}
79
80
#define M_RANGE_CKECK(IDX,LOC) if ( IDX >= size_type(_pimpl->count) ) throw std::out_of_range( "zypp::sat::Queue::" LOC )
81
82
const
Queue::value_type
&
Queue::at
(
size_type
idx_r )
const
83
{
M_RANGE_CKECK
( idx_r,
"at"
);
return
_pimpl
->elements[idx_r]; }
84
85
Queue::value_type
&
Queue::at
(
size_type
idx_r )
86
{
M_RANGE_CKECK
( idx_r,
"at"
);
return
_pimpl
->elements[idx_r]; }
87
88
const
Queue::value_type
&
Queue::operator[]
(
size_type
idx_r )
const
89
{
return
_pimpl
->elements[idx_r]; }
90
91
Queue::value_type
&
Queue::operator[]
(
size_type
idx_r )
92
{
return
_pimpl
->elements[idx_r]; }
93
94
void
Queue::clear
()
95
{ ::queue_empty( *
this
); }
96
97
void
Queue::remove
(
value_type
val_r )
98
{
99
for
(
const_iterator
it(
find
( val_r ) ); it !=
end
(); it =
find
( val_r ) )
100
::queue_delete(
_pimpl
.
get
(), it -
begin
() );
101
}
102
103
void
Queue::push
(
value_type
val_r )
104
{ ::queue_push(
_pimpl
.
get
(), val_r ); }
105
106
void
Queue::pushUnique
(
value_type
val_r )
107
{ ::queue_pushunique(
_pimpl
.
get
(), val_r ); }
108
109
Queue::value_type
Queue::pop
()
110
{ return ::queue_pop(
_pimpl
.
get
() ); }
111
112
void
Queue::push_front
(
value_type
val_r )
113
{ ::queue_unshift(
_pimpl
.
get
(), val_r ); }
114
115
Queue::value_type
Queue::pop_front
()
116
{ return ::queue_shift(
_pimpl
.
get
() ); }
117
118
Queue::operator
detail::CQueue
*()
// COW: nonconst version can't be inlined
119
{
return
_pimpl.get(); }
// without exposing detail::CQueue
120
121
std::ostream &
operator<<
( std::ostream & str,
const
Queue
& obj )
122
{
return
dumpRangeLine
( str <<
"Queue "
, obj.
begin
(), obj.
end
() ); }
123
124
std::ostream &
dumpOn
( std::ostream & str,
const
Queue
& obj )
125
{
126
str <<
"Queue {"
;
127
if
( ! obj.
empty
() )
128
{
129
str << endl;
130
for_
( it, obj.
begin
(), obj.
end
() )
131
str <<
" "
<<
Solvable
(*it) << endl;
132
}
133
return
str <<
"}"
;
134
}
135
136
bool
operator==
(
const
Queue
& lhs,
const
Queue
& rhs )
137
{
138
const
detail::CQueue
* l = lhs;
139
const
detail::CQueue
* r = rhs;
140
return
( l == r || ( l->count == r->count && ::memcmp( l->elements, r->elements, l->count ) == 0 ) );
141
}
142
143
}
// namespace sat
145
}
// namespace zypp
zypp
sat
Queue.cc
Generated by
1.8.2