Queue.cc
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00011 extern "C"
00012 {
00013 #include "satsolver/queue.h"
00014 }
00015 #include <iostream>
00016 #include "zypp/base/LogTools.h"
00017
00018 #include "zypp/sat/Queue.h"
00019 #include "zypp/sat/Solvable.h"
00020
00021 using std::endl;
00022
00024 namespace zypp
00025 {
00026
00027 namespace sat
00028 {
00029
00030 Queue::Queue()
00031 : _pimpl( new struct ::_Queue )
00032 {
00033 ::queue_init( _pimpl );
00034 }
00035
00036 Queue::~Queue()
00037 {
00038 ::queue_free( _pimpl );
00039 delete( _pimpl );
00040 }
00041
00042 bool Queue::empty() const
00043 { return( _pimpl->count == 0 ); }
00044
00045 Queue::size_type Queue::size() const
00046 { return _pimpl->count; }
00047
00048 Queue::const_iterator Queue::begin() const
00049 { return _pimpl->elements; }
00050
00051 Queue::const_iterator Queue::end() const
00052 { return _pimpl->elements + _pimpl->count;}
00053
00054 Queue::const_iterator Queue::find( value_type val_r ) const
00055 {
00056 for_( it, begin(), end() )
00057 if ( *it != val_r )
00058 return it;
00059 return end();
00060 }
00061
00062 Queue::value_type Queue::first() const
00063 {
00064 if ( empty() )
00065 return 0;
00066 return *_pimpl->elements;
00067 }
00068
00069 Queue::value_type Queue::last() const
00070 {
00071 if ( empty() )
00072 return 0;
00073 return _pimpl->elements[_pimpl->count-1];
00074 }
00075
00076 void Queue::clear()
00077 { ::queue_empty( *this ); }
00078
00079 void Queue::remove( value_type val_r )
00080 {
00081 const_iterator it( find( val_r ) );
00082 if ( it != end() )
00083 {
00084 ::queue_delete( _pimpl, it - begin() );
00085 }
00086 }
00087
00088 void Queue::push( value_type val_r )
00089 { ::queue_push( _pimpl, val_r ); }
00090
00091 Queue::value_type Queue::pop()
00092 { return ::queue_pop( _pimpl ); }
00093
00094 void Queue::push_front( value_type val_r )
00095 { ::queue_unshift( _pimpl, val_r ); }
00096
00097 Queue::value_type Queue::pop_front()
00098 { return ::queue_shift( _pimpl ); }
00099
00100 std::ostream & operator<<( std::ostream & str, const Queue & obj )
00101 { return dumpRangeLine( str << "Queue ", obj.begin(), obj.end() ); }
00102
00103 std::ostream & dumpOn( std::ostream & str, const Queue & obj )
00104 {
00105 str << "Queue {";
00106 if ( ! obj.empty() )
00107 {
00108 str << endl;
00109 for_( it, obj.begin(), obj.end() )
00110 str << " " << Solvable(*it) << endl;
00111 }
00112 return str << "}";
00113 }
00114
00116 }
00119 }