From ef6ebf2e32e068a2808829ce4ac551c5e6364167 Mon Sep 17 00:00:00 2001 From: Michael Andres Date: Tue, 7 Feb 2006 21:50:03 +0000 Subject: [PATCH] - cleaned public headers, added status calculation. --- zypp/ui/Makefile.am | 7 +++--- zypp/ui/Selectable.cc | 13 +++++----- zypp/ui/Selectable.h | 23 ++++-------------- zypp/ui/SelectableImpl.cc | 23 ++++++++++++++++++ zypp/ui/SelectableImpl.h | 57 ++++++++++++++++++++++++++------------------ zypp/ui/SelectableTraits.h | 59 ++++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 130 insertions(+), 52 deletions(-) create mode 100644 zypp/ui/SelectableTraits.h diff --git a/zypp/ui/Makefile.am b/zypp/ui/Makefile.am index 25e0d75..ba5c102 100644 --- a/zypp/ui/Makefile.am +++ b/zypp/ui/Makefile.am @@ -8,9 +8,10 @@ SUBDIRS = uiincludedir = $(pkgincludedir)/ui uiinclude_HEADERS = \ - Status.h \ - Selectable.h \ - ResPoolProxy.h \ + Status.h \ + Selectable.h \ + SelectableTraits.h \ + ResPoolProxy.h \ \ SelectableImpl.h diff --git a/zypp/ui/Selectable.cc b/zypp/ui/Selectable.cc index 7ae1135..b635d3c 100644 --- a/zypp/ui/Selectable.cc +++ b/zypp/ui/Selectable.cc @@ -14,10 +14,6 @@ #include "zypp/ui/Selectable.h" #include "zypp/ui/SelectableImpl.h" -#include "zypp/ResPool.h" -#include "zypp/PoolItem.h" - -using std::endl; /////////////////////////////////////////////////////////////////// namespace zypp @@ -45,7 +41,8 @@ namespace zypp /////////////////////////////////////////////////////////////////// // - // Forward to implementation + // Forward to implementation. + // Restrict PoolItems to ResObject::constPtr! // /////////////////////////////////////////////////////////////////// @@ -74,10 +71,12 @@ namespace zypp { return _pimpl->availableObjs(); } Selectable::available_iterator Selectable::availableBegin() const - { return _pimpl->availableBegin(); } + { return make_transform_iterator( _pimpl->availableBegin(), + SelectableTraits::TransformToResObjectPtr() ); } Selectable::available_iterator Selectable::availableEnd() const - { return _pimpl->availableEnd(); } + { return make_transform_iterator( _pimpl->availableEnd(), + SelectableTraits::TransformToResObjectPtr() ); } /****************************************************************** ** diff --git a/zypp/ui/Selectable.h b/zypp/ui/Selectable.h index 63cf756..b24916f 100644 --- a/zypp/ui/Selectable.h +++ b/zypp/ui/Selectable.h @@ -19,8 +19,7 @@ #include "zypp/base/PtrTypes.h" #include "zypp/base/Iterator.h" -#include "zypp/ResObject.h" -#include "zypp/PoolItem.h" +#include "zypp/ui/SelectableTraits.h" #include "zypp/ui/Status.h" /////////////////////////////////////////////////////////////////// @@ -30,16 +29,6 @@ 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 @@ -54,18 +43,14 @@ 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; - /** UI likes to iterate on ResObject::constPtr, - * independent from what the implementation uses. */ - typedef transform_iterator - available_iterator; - typedef AvialableItemSet::size_type size_type; + /** Iterates over ResObject::constPtr */ + typedef SelectableTraits::available_iterator available_iterator; + typedef SelectableTraits::availableItem_size_type size_type; public: /** The ResObjects kind. */ diff --git a/zypp/ui/SelectableImpl.cc b/zypp/ui/SelectableImpl.cc index 21429fb..ef708e0 100644 --- a/zypp/ui/SelectableImpl.cc +++ b/zypp/ui/SelectableImpl.cc @@ -23,6 +23,29 @@ namespace zypp namespace ui { ///////////////////////////////////////////////////////////////// + /** + * \todo Still open questions in state calculation; + * neglecting TABOO/PROTECTED + */ + Status Selectable::Impl::status() const + { + PoolItem cand( candidateObj() ); + + if ( cand && cand.status().transacts() ) + { + if ( cand.status().isByUser() ) + return( installedObj() ? S_Update : S_Install ); + else + return( installedObj() ? S_AutoUpdate : S_AutoInstall ); + } + + if ( installedObj() && installedObj().status().transacts() ) + { + return( installedObj().status().isByUser() ? S_Del : S_AutoDel ); + } + + return( installedObj() ? S_KeepInstalled : S_NoInst ); + } ///////////////////////////////////////////////////////////////// } // namespace ui diff --git a/zypp/ui/SelectableImpl.h b/zypp/ui/SelectableImpl.h index 38491e4..c25e491 100644 --- a/zypp/ui/SelectableImpl.h +++ b/zypp/ui/SelectableImpl.h @@ -16,9 +16,8 @@ #include "zypp/base/PtrTypes.h" -#include "zypp/ResPool.h" -#include "zypp/ResObject.h" #include "zypp/ui/Selectable.h" +#include "zypp/ui/SelectableTraits.h" /////////////////////////////////////////////////////////////////// namespace zypp @@ -31,24 +30,27 @@ namespace zypp // // CLASS NAME : Selectable::Impl // - /** Selectable implementation. */ + /** Selectable implementation. + * \note Implementation is based in PoolItem, just the Selectable + * inteface restricts them to ResObject::constPtr. + */ struct Selectable::Impl { friend std::ostream & operator<<( std::ostream & str, const Selectable::Impl & obj ); public: - /** This iterates PoolItems. Dont mix it with available_iterator, - * which transforms the PoolItems to ResObject::constPtr. - */ - typedef AvialableItemSet::const_iterator availableItem_iterator; + typedef SelectableTraits::AvialableItemSet AvialableItemSet; + typedef SelectableTraits::availableItem_iterator availableItem_iterator; + typedef SelectableTraits::availableItem_const_iterator availableItem_const_iterator; + typedef SelectableTraits::availableItem_size_type availableItem_size_type; public: Impl( const ResObject::Kind & kind_r, const std::string & name_r, const PoolItem & installedItem_r, - availableItem_iterator availableBegin_r, - availableItem_iterator availableEnd_r ) + availableItem_const_iterator availableBegin_r, + availableItem_const_iterator availableEnd_r ) : _kind( kind_r ) , _name( name_r ) , _installedItem( installedItem_r ) @@ -59,37 +61,46 @@ namespace zypp /** */ ResObject::Kind kind() const { return _kind; } + /** */ const std::string & name() const { return _name; } + /** */ - Status status() const - { return S_Taboo; } + Status status() const; + /** */ bool set_status( const Status state_r ) { return false; } /** Installed object. */ - ResObject::constPtr installedObj() const + PoolItem installedObj() const { return _installedItem; } - /** Best among available objects. */ - ResObject::constPtr candidateObj() const - { return 0; } + /** Best among available objects. + * \nore Transacted Objects prefered, Status calculation relies on it. + */ + PoolItem candidateObj() const + { return( _availableItems.empty() ? PoolItem() : *_availableItems.begin() ); } /** Best among all objects. */ - ResObject::constPtr theObj() const - { return 0; } + PoolItem theObj() const + { + PoolItem ret( candidateObj() ); + return( ret ? ret : _installedItem ); + } - /** . */ - size_type availableObjs() const + /** */ + availableItem_size_type availableObjs() const { return _availableItems.size(); } - available_iterator availableBegin() const - { return make_transform_iterator( _availableItems.begin(), ui_detail::TransformToResObjectPtr() ); } + /** */ + availableItem_const_iterator availableBegin() const + { return _availableItems.begin(); } - available_iterator availableEnd() const - { return make_transform_iterator( _availableItems.end(), ui_detail::TransformToResObjectPtr() ); } + /** */ + availableItem_const_iterator availableEnd() const + { return _availableItems.end(); } private: ResObject::Kind _kind; diff --git a/zypp/ui/SelectableTraits.h b/zypp/ui/SelectableTraits.h new file mode 100644 index 0000000..87837ce --- /dev/null +++ b/zypp/ui/SelectableTraits.h @@ -0,0 +1,59 @@ +/*---------------------------------------------------------------------\ +| ____ _ __ __ ___ | +| |__ / \ / / . \ . \ | +| / / \ V /| _/ _/ | +| / /__ | | | | | | | +| /_____||_| |_| |_| | +| | +\---------------------------------------------------------------------*/ +/** \file zypp/ui/SelectableTraits.h + * +*/ +#ifndef ZYPP_UI_SELECTABLETRAITS_H +#define ZYPP_UI_SELECTABLETRAITS_H + +#include + +#include "zypp/base/Iterator.h" +#include "zypp/PoolItem.h" +#include "zypp/ResObject.h" + +/////////////////////////////////////////////////////////////////// +namespace zypp +{ ///////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////// + namespace ui + { ///////////////////////////////////////////////////////////////// + + /////////////////////////////////////////////////////////////////// + // + // CLASS NAME : SelectableTraits + // + /** */ + struct SelectableTraits + { + typedef std::set AvialableItemSet; + typedef AvialableItemSet::iterator availableItem_iterator; + typedef AvialableItemSet::const_iterator availableItem_const_iterator; + typedef AvialableItemSet::size_type availableItem_size_type; + + /** Transform PoolItem to ResObject::constPtr. */ + struct TransformToResObjectPtr : public std::unary_function + { + ResObject::constPtr operator()( const PoolItem & obj ) const + { return obj; } + }; + + typedef transform_iterator + available_iterator; + + }; + /////////////////////////////////////////////////////////////////// + + ///////////////////////////////////////////////////////////////// + } // namespace ui + /////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////// +} // namespace zypp +/////////////////////////////////////////////////////////////////// +#endif // ZYPP_UI_SELECTABLETRAITS_H -- 2.7.4