Author: mlandres
Date: Mon Aug 11 16:30:35 2008
New Revision: 10811
URL: http://svn.opensuse.org/viewcvs/zypp?rev=10811&view=rev
Log:
- Add base::Flags (like qt's QFlags) a type-safe way of storing
OR-combinations of enum values.
Added:
trunk/libzypp/zypp/base/Flags.h
Modified:
trunk/libzypp/devel/devel.ma/NewPool.cc
trunk/libzypp/package/libzypp.changes
trunk/libzypp/zypp/CMakeLists.txt
Modified: trunk/libzypp/devel/devel.ma/NewPool.cc
URL: http://svn.opensuse.org/viewcvs/zypp/trunk/libzypp/devel/devel.ma/NewPool.cc?rev=10811&r1=10810&r2=10811&view=diff
==============================================================================
--- trunk/libzypp/devel/devel.ma/NewPool.cc (original)
+++ trunk/libzypp/devel/devel.ma/NewPool.cc Mon Aug 11 16:30:35 2008
@@ -11,6 +11,7 @@
#include
#include
#include
+#include
#include
#include "zypp/ResPoolProxy.h"
@@ -421,6 +422,24 @@
namespace zypp
{
+
+ class XRpmDb
+ {
+ public:
+ enum DbStateInfoBits {
+ DbSI_NO_INIT = 0x0000,
+ DbSI_HAVE_V4 = 0x0001,
+ DbSI_MADE_V4 = 0x0002,
+ DbSI_MODIFIED_V4 = 0x0004,
+ DbSI_HAVE_V3 = 0x0008,
+ DbSI_HAVE_V3TOV4 = 0x0010,
+ DbSI_MADE_V3TOV4 = 0x0020
+ };
+
+ ZYPP_DECLARE_FLAGS(DbStateInfo,DbStateInfoBits);
+ };
+ ZYPP_DECLARE_OPERATORS_FOR_FLAGS(XRpmDb::DbStateInfo);
+
}
/******************************************************************
@@ -434,6 +453,20 @@
++argv;
zypp::base::LogControl::instance().logToStdErr();
INT << "===[START]==========================================" << endl;
+
+ enum Other { OTHERVAL = 13 };
+
+ XRpmDb::DbStateInfo s;
+ s = XRpmDb::DbSI_MODIFIED_V4|XRpmDb::DbSI_HAVE_V4;
+ DBG << s << endl;
+ DBG << s.testFlag( XRpmDb::DbSI_MODIFIED_V4 ) << endl;
+ DBG << s.testFlag( XRpmDb::DbSI_MADE_V3TOV4 ) << endl;
+
+ ///////////////////////////////////////////////////////////////////
+ INT << "===[END]============================================" << endl << endl;
+ zypp::base::LogControl::instance().logNothing();
+ return 0;
+
ZConfig::instance();
ResPool pool( ResPool::instance() );
Modified: trunk/libzypp/package/libzypp.changes
URL: http://svn.opensuse.org/viewcvs/zypp/trunk/libzypp/package/libzypp.changes?rev=10811&r1=10810&r2=10811&view=diff
==============================================================================
--- trunk/libzypp/package/libzypp.changes (original)
+++ trunk/libzypp/package/libzypp.changes Mon Aug 11 16:30:35 2008
@@ -1,4 +1,11 @@
-------------------------------------------------------------------
+Mon Aug 11 16:28:07 CEST 2008 - ma@suse.de
+
+- Add base::Flags (like qt's QFlags) a type-safe way of storing
+ OR-combinations of enum values.
+- revision 10811
+
+-------------------------------------------------------------------
Fri Aug 8 17:01:00 CEST 2008 - ma@suse.de
- Add static ui::Selectable::get methods as convenient ctor
Modified: trunk/libzypp/zypp/CMakeLists.txt
URL: http://svn.opensuse.org/viewcvs/zypp/trunk/libzypp/zypp/CMakeLists.txt?rev=10811&r1=10810&r2=10811&view=diff
==============================================================================
--- trunk/libzypp/zypp/CMakeLists.txt (original)
+++ trunk/libzypp/zypp/CMakeLists.txt Mon Aug 11 16:30:35 2008
@@ -209,6 +209,7 @@
base/UserRequestException.h
base/ExternalDataSource.h
base/Fd.h
+ base/Flags.h
base/Function.h
base/Functional.h
base/Gettext.h
Added: trunk/libzypp/zypp/base/Flags.h
URL: http://svn.opensuse.org/viewcvs/zypp/trunk/libzypp/zypp/base/Flags.h?rev=10811&view=auto
==============================================================================
--- trunk/libzypp/zypp/base/Flags.h (added)
+++ trunk/libzypp/zypp/base/Flags.h Mon Aug 11 16:30:35 2008
@@ -0,0 +1,117 @@
+/*---------------------------------------------------------------------\
+| ____ _ __ __ ___ |
+| |__ / \ / / . \ . \ |
+| / / \ V /| _/ _/ |
+| / /__ | | | | | | |
+| /_____||_| |_| |_| |
+| |
+\---------------------------------------------------------------------*/
+/** \file zypp/base/Flags.h
+ *
+*/
+#ifndef ZYPP_BASE_FLAGS_H
+#define ZYPP_BASE_FLAGS_H
+///////////////////////////////////////////////////////////////////
+namespace zypp
+{ /////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////////////////////
+ namespace base
+ { /////////////////////////////////////////////////////////////////
+
+ ///////////////////////////////////////////////////////////////////
+ //
+ // CLASS NAME : Flags<Enum>
+ //
+ /** A type-safe way of storing OR-combinations of enum values (like QTs QFlags).
+ * \see <a href="http://doc.trolltech.com/4.1/qflags.html">QFlags Class Reference</a>
+ * \code
+ * class RpmDb
+ * {
+ * public:
+ * enum DbStateInfoBits {
+ * DbSI_NO_INIT = 0x0000,
+ * DbSI_HAVE_V4 = 0x0001,
+ * DbSI_MADE_V4 = 0x0002,
+ * DbSI_MODIFIED_V4 = 0x0004,
+ * DbSI_HAVE_V3 = 0x0008,
+ * DbSI_HAVE_V3TOV4 = 0x0010,
+ * DbSI_MADE_V3TOV4 = 0x0020
+ * };
+ *
+ * ZYPP_DECLARE_FLAGS(DbStateInfo,DbStateInfoBits);
+ * };
+ * ZYPP_DECLARE_OPERATORS_FOR_FLAGS(RpmDb::DbStateInfo);
+ *
+ * ...
+ * enum Other { OTHERVAL = 13 };
+ * {
+ * XRpmDb::DbStateInfo s;
+ * s = XRpmDb::DbSI_MODIFIED_V4|XRpmDb::DbSI_HAVE_V4;
+ * // s |= OTHERVAL; // As desired: it does not compile
+ * }
+ * \endcode
+ */
+ template<typename Enum>
+ class Flags
+ {
+ public:
+ typedef Enum enum_type;
+
+ public:
+ Flags() : _val( 0 ) {}
+ Flags( Enum rhs ) : _val( rhs ) {}
+ explicit Flags( unsigned rhs ) : _val( rhs ) {}
+
+ Flags & operator&=( unsigned rhs ) { _val &= rhs; return *this; }
+ Flags & operator&=( Flags rhs ) { _val &= rhs._val; return *this; }
+ Flags & operator&=( Enum rhs ) { _val &= rhs; return *this; }
+
+ Flags & operator|=( Flags rhs ) { _val |= rhs._val; return *this; }
+ Flags & operator|=( Enum rhs ) { _val |= rhs; return *this; }
+
+ Flags & operator^=( Flags rhs ) { _val ^= rhs._val; return *this; }
+ Flags & operator^=( Enum rhs ) { _val ^= rhs; return *this; }
+
+ public:
+ operator unsigned() const { return _val; }
+
+ Flags operator&( unsigned rhs ) const { return Flags( *this ) &= rhs; }
+ Flags operator&( Flags rhs ) const { return Flags( *this ) &= rhs; }
+ Flags operator&( Enum rhs ) const { return Flags( *this ) &= rhs; }
+
+ Flags operator|( Flags rhs ) const { return Flags( *this ) |= rhs; }
+ Flags operator|( Enum rhs ) const { return Flags( *this ) |= rhs; }
+
+ Flags operator^( Flags rhs ) const { return Flags( *this ) ^= rhs; }
+ Flags operator^( Enum rhs ) const { return Flags( *this ) ^= rhs; }
+
+ Flags operator~() const { return ~_val; }
+
+ public:
+ bool testFlag( Enum val_r ) const { return _val & val_r; }
+
+ private:
+ unsigned _val;
+ };
+ ///////////////////////////////////////////////////////////////////
+
+ /** \relates Flags */
+#define ZYPP_DECLARE_FLAGS(Name,Enum) typedef zypp::base::Flags<Enum> Name
+
+ /** \relates Flags */
+#define ZYPP_DECLARE_OPERATORS_FOR_FLAGS(Name) \
+inline Name operator|( Name::enum_type lhs, Name::enum_type rhs ) { return Name( lhs ) |= rhs; } \
+inline Name operator|( Name::enum_type lhs, Name rhs ) { return rhs |= lhs; }
+
+ /** \relates Flags */
+#define ZYPP_DECLARE_FLAGS_AND_OPERATORS(Name,Enum) \
+ ZYPP_DECLARE_FLAGS(Name,Enum); \
+ ZYPP_DECLARE_OPERATORS_FOR_FLAGS(Name)
+
+ /////////////////////////////////////////////////////////////////
+ } // namespace base
+ ///////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////////
+} // namespace zypp
+///////////////////////////////////////////////////////////////////
+#endif // ZYPP_BASE_FLAGS_H
--
To unsubscribe, e-mail: zypp-commit+unsubscribe@opensuse.org
For additional commands, e-mail: zypp-commit+help@opensuse.org