From: Michael Andres Date: Tue, 7 Feb 2006 14:38:39 +0000 (+0000) Subject: - Selectable: Using a transform_iterator to make the ui believe, it X-Git-Tag: BASE-SuSE-SLE-10-SP2-Branch~2523 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=4d1d9744e3c982fb0bde6750289ecf75078c870a;p=platform%2Fupstream%2Flibzypp.git - Selectable: Using a transform_iterator to make the ui believe, it iterates over ResObject::Ptr. --- diff --git a/zypp/ui/Selectable.cc b/zypp/ui/Selectable.cc index 23d1dcf..7ae1135 100644 --- a/zypp/ui/Selectable.cc +++ b/zypp/ui/Selectable.cc @@ -73,6 +73,12 @@ namespace zypp Selectable::size_type Selectable::availableObjs() const { return _pimpl->availableObjs(); } + Selectable::available_iterator Selectable::availableBegin() const + { return _pimpl->availableBegin(); } + + Selectable::available_iterator Selectable::availableEnd() const + { return _pimpl->availableEnd(); } + /****************************************************************** ** ** FUNCTION NAME : operator<< diff --git a/zypp/ui/Selectable.h b/zypp/ui/Selectable.h index 12b63e3..8691862 100644 --- a/zypp/ui/Selectable.h +++ b/zypp/ui/Selectable.h @@ -17,8 +17,10 @@ #include "zypp/base/ReferenceCounted.h" #include "zypp/base/NonCopyable.h" #include "zypp/base/PtrTypes.h" +#include "zypp/base/Iterator.h" #include "zypp/ResObject.h" +#include "zypp/PoolItem.h" #include "zypp/ui/Status.h" /////////////////////////////////////////////////////////////////// @@ -28,11 +30,22 @@ namespace zypp namespace ui { ///////////////////////////////////////////////////////////////// + namespace ui_detail + { + /** Transform PoolItem to ResObject::constPtr. */ + struct TransformToResObjectPtr : public std::unary_function + { + ResObject::constPtr operator()( const PoolItem & obj ) const + { return obj; } + }; + } + /////////////////////////////////////////////////////////////////// // // CLASS NAME : Selectable // - /** + /** Collects ResObject of same kind and name. + * * \note There's one Selectable per installed item, in case more * than one item is intalled. * @@ -41,23 +54,32 @@ namespace zypp class Selectable : public base::ReferenceCounted, private base::NonCopyable { friend std::ostream & operator<<( std::ostream & str, const Selectable & obj ); + typedef std::set AvialableItemSet; public: typedef intrusive_ptr Ptr; typedef intrusive_ptr constPtr; - typedef unsigned size_type; + + /** UI likes to iterate on ResObject::constPtr, + * independent from what the implementation uses. */ + typedef transform_iterator + available_iterator; + typedef AvialableItemSet::size_type size_type; public: - /** */ + /** The ResObjects kind. */ ResObject::Kind kind() const; - /** */ + /** The ResObjects name. */ const std::string & name() const; - /** */ + /** Return the current Status */ Status status() const; - /** */ + /** Try to set a new Status. + * Returns \c false if the transitions is not allowed. + */ bool set_status( const Status state_r ); /** Installed object. */ @@ -72,7 +94,11 @@ namespace zypp /** Number of available objects. */ size_type availableObjs() const; - // iterators + /** */ + available_iterator availableBegin() const; + + /** */ + available_iterator availableEnd() const; public: /** Implementation */ diff --git a/zypp/ui/SelectableImpl.h b/zypp/ui/SelectableImpl.h index dcb2941..38491e4 100644 --- a/zypp/ui/SelectableImpl.h +++ b/zypp/ui/SelectableImpl.h @@ -36,17 +36,19 @@ namespace zypp { friend std::ostream & operator<<( std::ostream & str, const Selectable::Impl & obj ); - typedef ResPool::Item PoolItem; - typedef std::set AvialableItemSet; - typedef AvialableItemSet::const_iterator available_iterator; - typedef AvialableItemSet::size_type size_type; + public: + + /** This iterates PoolItems. Dont mix it with available_iterator, + * which transforms the PoolItems to ResObject::constPtr. + */ + typedef AvialableItemSet::const_iterator availableItem_iterator; public: Impl( const ResObject::Kind & kind_r, const std::string & name_r, const PoolItem & installedItem_r, - available_iterator availableBegin_r, - available_iterator availableEnd_r ) + availableItem_iterator availableBegin_r, + availableItem_iterator availableEnd_r ) : _kind( kind_r ) , _name( name_r ) , _installedItem( installedItem_r ) @@ -81,12 +83,18 @@ namespace zypp /** . */ size_type availableObjs() const - { return 0; } + { return _availableItems.size(); } + + available_iterator availableBegin() const + { return make_transform_iterator( _availableItems.begin(), ui_detail::TransformToResObjectPtr() ); } + + available_iterator availableEnd() const + { return make_transform_iterator( _availableItems.end(), ui_detail::TransformToResObjectPtr() ); } private: - ResObject::Kind _kind; - std::string _name; - PoolItem _installedItem; + ResObject::Kind _kind; + std::string _name; + PoolItem _installedItem; AvialableItemSet _availableItems; }; ///////////////////////////////////////////////////////////////////