libzypp: zypp/ng/sat/queue.cc Source File

libzypp 17.38.7

queue.cc
Go to the documentation of this file.
1/*---------------------------------------------------------------------\
2| ____ _ __ __ ___ |
3| |__ / \ / / . \ . \ |
4| / / \ V /| _/ _/ |
5| / /__ | | | | | | |
6| /_____||_| |_| |_| |
7| |
8\---------------------------------------------------------------------*/
11
12#include "queue.h"
13
14extern "C"
15{
16#include <solv/queue.h>
17}
18#include <iostream>
19#include <zypp-core/base/LogTools.h>
20#include <zypp/ng/sat/solvable.h>
21
22using std::endl;
23
24
25// defined in zypp::sat::Queue , CQueue type is the same for zypp and zyppng
26#ifdef ZYPPNG
27namespace zypp {
28 template<>
29 sat::detail::CQueue * rwcowClone<sat::detail::CQueue>( const sat::detail::CQueue * rhs )
30 {
31 sat::detail::CQueue * ret = new sat::detail::CQueue;
32 ::queue_init_clone( ret, const_cast<sat::detail::CQueue *>(rhs) );
33 return ret;
34 }
35}
36#endif
37
39namespace zyppng
40{
42 namespace sat
43 {
44
45 Queue::Queue()
46 : _pimpl( new detail::CQueue )
47 { ::queue_init( _pimpl.get() ); }
48
49 Queue::~Queue()
50 { ::queue_free( _pimpl.get() ); }
51
52 bool Queue::empty() const
53 { return( _pimpl->count == 0 ); }
54
55 Queue::size_type Queue::size() const
56 { return _pimpl->count; }
57
58 Queue::const_iterator Queue::begin() const
59 { return _pimpl->elements; }
60
61 Queue::const_iterator Queue::end() const
62 { return _pimpl->elements + _pimpl->count;}
63
64 Queue::const_iterator Queue::find( value_type val_r ) const
65 {
66 for_( it, begin(), end() )
67 if ( *it == val_r )
68 return it;
69 return end();
70 }
71
72 Queue::value_type Queue::first() const
73 {
74 if ( _pimpl->count )
75 return *_pimpl->elements;
76 return 0;
77 }
78
79 Queue::value_type Queue::last() const
80 {
81 if ( _pimpl->count )
82 return _pimpl->elements[_pimpl->count-1];
83 return 0;
84 }
85
86#define M_RANGE_CKECK(IDX,LOC) if ( IDX >= size_type(_pimpl->count) ) throw std::out_of_range( "zypp::sat::Queue::" LOC )
87
88 const Queue::value_type & Queue::at( size_type idx_r ) const
89 { M_RANGE_CKECK( idx_r, "at" ); return _pimpl->elements[idx_r]; }
90
91 Queue::value_type & Queue::at( size_type idx_r )
92 { M_RANGE_CKECK( idx_r, "at" ); return _pimpl->elements[idx_r]; }
93
94 const Queue::value_type & Queue::operator[]( size_type idx_r ) const
95 { return _pimpl->elements[idx_r]; }
96
97 Queue::value_type & Queue::operator[]( size_type idx_r )
98 { return _pimpl->elements[idx_r]; }
99
100 void Queue::clear()
101 { ::queue_empty( *this ); }
102
103 void Queue::remove( value_type val_r )
104 {
105 for ( const_iterator it( find( val_r ) ); it != end(); it = find( val_r ) )
106 ::queue_delete( _pimpl.get(), it - begin() );
107 }
108
109 void Queue::push( value_type val_r )
110 { ::queue_push( _pimpl.get(), val_r ); }
111
112 void Queue::pushUnique( value_type val_r )
113 { ::queue_pushunique( _pimpl.get(), val_r ); }
114
115 Queue::value_type Queue::pop()
116 { return ::queue_pop( _pimpl.get() ); }
117
118 void Queue::push_front( value_type val_r )
119 { ::queue_unshift( _pimpl.get(), val_r ); }
120
121 Queue::value_type Queue::pop_front()
122 { return ::queue_shift( _pimpl.get() ); }
123
124 Queue::operator detail::CQueue *() // COW: nonconst version can't be inlined
125 { return _pimpl.get(); } // without exposing detail::CQueue
126
127 bool operator==( const Queue & lhs, const Queue & rhs )
128 {
129 const detail::CQueue * l = lhs;
130 const detail::CQueue * r = rhs;
131 return( l == r || ( l->count == r->count && ::memcmp( l->elements, r->elements, l->count * sizeof( *l->elements ) ) == 0 ) );
132 }
133
134 } // namespace sat
136} // namespace zyppng
for_
#define for_(IT, BEG, END)
Convenient for-loops using iterator.
Definition Easy.h:27
LogTools.h
M_RANGE_CKECK
#define M_RANGE_CKECK(IDX, LOC)
Definition Map.cc:79
zypp::sat::Queue::find
const_iterator find(value_type val_r) const
Return iterator to the 1st occurance of val_r or end.
Definition Queue.cc:58
zypp::sat::Queue::pop_front
value_type pop_front()
Pop and return the 1st Id from the queue or 0 if empty.
Definition Queue.cc:115
zypp::sat::Queue::remove
void remove(value_type val_r)
Remove all occurances of val_r from the queue.
Definition Queue.cc:97
zypp::sat::Queue::first
value_type first() const
Return the 1st Id in the queue or 0 if empty.
Definition Queue.cc:66
zypp::sat::Queue::push_front
void push_front(value_type val_r)
Push a value to the beginning off the Queue.
Definition Queue.cc:112
zypp::sat::Queue::~Queue
~Queue()
Dtor.
Definition Queue.cc:43
zypp::sat::Queue::size
size_type size() const
Definition Queue.cc:49
zypp::sat::Queue::last
value_type last() const
Return the last Id in the queue or 0 if empty.
Definition Queue.cc:73
zypp::sat::Queue::end
const_iterator end() const
Definition Queue.cc:55
zypp::sat::Queue::Queue
Queue()
Default ctor: empty Queue.
Definition Queue.cc:39
zypp::sat::Queue::begin
const_iterator begin() const
Definition Queue.cc:52
zypp::sat::Queue::pop
value_type pop()
Pop and return the last Id from the queue or 0 if empty.
Definition Queue.cc:109
zypp::sat::Queue::clear
void clear()
Clear the queue.
Definition Queue.cc:94
zypp::sat::Queue::operator[]
const value_type & operator[](size_type idx_r) const
Return the Id at idx_r in the queue (no range check).
Definition Queue.cc:88
zypp::sat::Queue::at
const value_type & at(size_type idx_r) const
Return the Id at idx_r in the queue.
Definition Queue.cc:82
zypp::sat::Queue::empty
bool empty() const
Definition Queue.cc:46
zypp::sat::Queue::push
void push(value_type val_r)
Push a value to the end off the Queue.
Definition Queue.cc:103
zypp::sat::Queue::pushUnique
void pushUnique(value_type val_r)
Push a value if it's not yet in the Queue.
Definition Queue.cc:106
zyppng::sat::Queue
Libsolv Id queue wrapper.
Definition queue.h:37
zyppng::sat::Queue::const_iterator
const value_type * const_iterator
Definition queue.h:41
zyppng::sat::Queue::find
const_iterator find(value_type val_r) const
Return iterator to the 1st occurance of val_r or end.
Definition queue.cc:64
zyppng::sat::Queue::size_type
unsigned int size_type
Definition queue.h:39
zyppng::sat::Queue::value_type
detail::IdType value_type
Definition queue.h:40
zyppng::sat::Queue::end
const_iterator end() const
Definition queue.cc:61
zyppng::sat::Queue::begin
const_iterator begin() const
Definition queue.cc:58
zyppng::sat::Queue::_pimpl
zypp::RWCOW_pointer< zypp::sat::detail::CQueue > _pimpl
Pointer to implementation.
Definition queue.h:116
zypp::sat::detail::CQueue
::s_Queue CQueue
Wrapped libsolv C data type exposed as backdoor.
Definition PoolDefines.h:35
zypp::sat::operator==
bool operator==(const FileConflicts &lhs, const FileConflicts &rhs)
relates: FileConflicts
Definition FileConflicts.h:85
zypp
Easy-to use interface to the ZYPP dependency resolver.
Definition CodePitfalls.doc:2
zypp::rwcowClone< sat::detail::CQueue >
sat::detail::CQueue * rwcowClone< sat::detail::CQueue >(const sat::detail::CQueue *rhs)
relates: Queue Clone function for RWCOW_pointer
Definition Queue.cc:28
zyppng::sat::detail
CLASS NAME : detail::DIWrap.
Definition cap2str.cc:14
zyppng::sat::detail::CQueue
zypp::sat::detail::CQueue CQueue
Definition poolconstants.h:37
zyppng::sat
This file contains private API, this might break at any time between releases.
Definition capabilities.h:22
zyppng
Definition MediaNetworkRequestExecutor.h:16
queue.h
solvable.h