[zypp-commit] r6397 - in /trunk/libzypp/zypp: CMakeLists.txt base/SerialNumber.cc base/SerialNumber.h
Author: mlandres Date: Thu Aug 2 16:22:34 2007 New Revision: 6397 URL: http://svn.opensuse.org/viewcvs/zypp?rev=6397&view=rev Log: Add: Simple serial number management, e.g to indicate and detect content changes. Added: trunk/libzypp/zypp/base/SerialNumber.cc trunk/libzypp/zypp/base/SerialNumber.h Modified: trunk/libzypp/zypp/CMakeLists.txt Modified: trunk/libzypp/zypp/CMakeLists.txt URL: http://svn.opensuse.org/viewcvs/zypp/trunk/libzypp/zypp/CMakeLists.txt?rev=6397&r1=6396&r2=6397&view=diff ============================================================================== --- trunk/libzypp/zypp/CMakeLists.txt (original) +++ trunk/libzypp/zypp/CMakeLists.txt Thu Aug 2 16:22:34 2007 @@ -189,6 +189,7 @@ INSTALL( FILES ${zypp_HEADERS} DESTINATION "${CMAKE_INSTALL_PREFIX}/include/zypp" ) SET( zypp_base_SRCS + base/SerialNumber.cc base/Random.cc base/Measure.cc base/Fd.cc @@ -208,6 +209,7 @@ ) SET( zypp_base_HEADERS + base/SerialNumber.h base/Easy.h base/Random.h base/Algorithm.h Added: trunk/libzypp/zypp/base/SerialNumber.cc URL: http://svn.opensuse.org/viewcvs/zypp/trunk/libzypp/zypp/base/SerialNumber.cc?rev=6397&view=auto ============================================================================== --- trunk/libzypp/zypp/base/SerialNumber.cc (added) +++ trunk/libzypp/zypp/base/SerialNumber.cc Thu Aug 2 16:22:34 2007 @@ -0,0 +1,101 @@ +/*---------------------------------------------------------------------\ +| ____ _ __ __ ___ | +| |__ / \ / / . \ . \ | +| / / \ V /| _/ _/ | +| / /__ | | | | | | | +| /_____||_| |_| |_| | +| | +\---------------------------------------------------------------------*/ +/** \file zypp/base/SerialNumber.cc + * +*/ +#include <iostream> +//#include "zypp/base/Logger.h" + +#include "zypp/base/SerialNumber.h" + +using std::endl; + +/////////////////////////////////////////////////////////////////// +namespace zypp +{ ///////////////////////////////////////////////////////////////// + + /////////////////////////////////////////////////////////////////// + // + // CLASS NAME : SerialNumber + // + /////////////////////////////////////////////////////////////////// + + /////////////////////////////////////////////////////////////////// + // + // METHOD NAME : SerialNumber::SerialNumber + // METHOD TYPE : Ctor + // + SerialNumber::SerialNumber( bool dirty_r ) + : _dirty( dirty_r ) + , _serial( 0 ) + {} + + /////////////////////////////////////////////////////////////////// + // + // METHOD NAME : SerialNumber::~SerialNumber + // METHOD TYPE : Dtor + // + SerialNumber::~SerialNumber() + {} + + /****************************************************************** + ** + ** FUNCTION NAME : operator<< + ** FUNCTION TYPE : std::ostream & + */ + std::ostream & operator<<( std::ostream & str, const SerialNumber & obj ) + { + return str << "SERIAL" << (obj._dirty?"*":"(") << obj._serial << (obj._dirty?"*":")"); + } + + /////////////////////////////////////////////////////////////////// + // + // CLASS NAME : SerialNumberWatcher + // + /////////////////////////////////////////////////////////////////// + + /////////////////////////////////////////////////////////////////// + // + // METHOD NAME : SerialNumberWatcher::SerialNumberWatcher + // METHOD TYPE : Ctor + // + SerialNumberWatcher::SerialNumberWatcher( unsigned serial_r ) + : _serial( serial_r ) + {} + + /////////////////////////////////////////////////////////////////// + // + // METHOD NAME : SerialNumberWatcher::SerialNumberWatcher + // METHOD TYPE : Ctor + // + SerialNumberWatcher::SerialNumberWatcher( const SerialNumber & serial_r ) + : _serial( serial_r.serial() ) + {} + + /////////////////////////////////////////////////////////////////// + // + // METHOD NAME : SerialNumber::~SerialNumber + // METHOD TYPE : Dtor + // + SerialNumberWatcher::~SerialNumberWatcher() + {} + + /****************************************************************** + ** + ** FUNCTION NAME : operator<< + ** FUNCTION TYPE : std::ostream & + */ + std::ostream & operator<<( std::ostream & str, const SerialNumberWatcher & obj ) + { + return str << "LAST_SERIAL(" << obj._serial << ")"; + } + + ///////////////////////////////////////////////////////////////// +} // namespace zypp +/////////////////////////////////////////////////////////////////// Added: trunk/libzypp/zypp/base/SerialNumber.h URL: http://svn.opensuse.org/viewcvs/zypp/trunk/libzypp/zypp/base/SerialNumber.h?rev=6397&view=auto ============================================================================== --- trunk/libzypp/zypp/base/SerialNumber.h (added) +++ trunk/libzypp/zypp/base/SerialNumber.h Thu Aug 2 16:22:34 2007 @@ -0,0 +1,170 @@ +/*---------------------------------------------------------------------\ +| ____ _ __ __ ___ | +| |__ / \ / / . \ . \ | +| / / \ V /| _/ _/ | +| / /__ | | | | | | | +| /_____||_| |_| |_| | +| | +\---------------------------------------------------------------------*/ +/** \file zypp/base/SerialNumber.h + * +*/ +#ifndef ZYPP_BASE_SERIALNUMBER_H +#define ZYPP_BASE_SERIALNUMBER_H + +#include <iosfwd> + +#include "zypp/base/PtrTypes.h" + +/////////////////////////////////////////////////////////////////// +namespace zypp +{ ///////////////////////////////////////////////////////////////// + + /////////////////////////////////////////////////////////////////// + // + // CLASS NAME : SerialNumber + // + /** Simple serial number provider. + * + * \ref serial returns a serial number. The number returned stays + * the same unless \ref setDirty was called to bring the object + * into \c dirty state. The next call to \ref serial will increment + * the serial number and bring the object into \c clean state. + * + * \code + * SerialNumber sno; + * sno.serial(); // SERIAL(0); () = clean + * sno.setDirty(); // SERIAL*0*; ** = dirty + * sno.serial(); // SERIAL(1) + * sno.setDirty(); // SERIAL*1* + * sno.setDirty(); // SERIAL*1* + * sno.serial(); // SERIAL(2) + * \endcode + */ + class SerialNumber + { + friend std::ostream & operator<<( std::ostream & str, const SerialNumber & obj ); + + public: + /** Ctor taking initial \c dirty value. */ + SerialNumber( bool dirty_r = false ); + /** Dtor */ + virtual ~SerialNumber(); + + public: + void setDirty() + { _dirty = true; } + + public: + bool dirty() const + { return _dirty; } + + bool clean() const + { return !_dirty; } + + unsigned serial() const + { + if ( _dirty ) + { + ++_serial; + _dirty = false; + } + return _serial; + } + + private: + mutable bool _dirty; + mutable unsigned _serial; + }; + /////////////////////////////////////////////////////////////////// + + /** \relates SerialNumber Stream output */ + std::ostream & operator<<( std::ostream & str, const SerialNumber & obj ); + + /////////////////////////////////////////////////////////////////// + // + // CLASS NAME : SerialNumberWatcher + // + /** Simple serial number watcher. + * + * \ref SerialNumberWatcher remembers a serial number + * and tells whenever new numbers you feed change. + * + * All methods are overloaded to take an \unsigned or a + * <tt>const SerialNumber &</tt> as argument. + * + * \code + * SerialNumber sno; + * + * void check() + * { + * static SerialNumberWatcher watcher( sno ); + * + * if ( watcher.remember( sno ) ) + * { + * cout << "Serial number changed." << endl; + * } + * } + * + * int main() + * { + * check(); // + * check(); // + * sno.dirty(); + * check(); // "Serial number changed." + * \endcode + */ + class SerialNumberWatcher + { + friend std::ostream & operator<<( std::ostream & str, const SerialNumberWatcher & obj ); + + public: + /** Ctor taking an initial \c serial value. */ + SerialNumberWatcher( unsigned serial_r = 0 ); + /** Ctor taking an initial \c serial value. */ + SerialNumberWatcher( const SerialNumber & serial_r ); + /** Dtor */ + virtual ~SerialNumberWatcher(); + + public: + /** Return whether \c serial_r differs. */ + bool isDirty( unsigned serial_r ) const + { return( _serial != serial_r ); } + /** \overload */ + bool isDirty( const SerialNumber & serial_r ) const + { return( _serial != serial_r.serial() ); } + + /** Return whether \c serial_r is still unchanged. */ + bool isClean( unsigned serial_r ) const + { return( _serial == serial_r ); } + /** \overload */ + bool isClean( const SerialNumber & serial_r ) const + { return( _serial == serial_r.serial() ); } + + public: + /** Return \ref isDirty, storing \c serial_r as new value. */ + bool remember( unsigned serial_r ) + { + if ( isDirty( serial_r ) ) + { + _serial = serial_r; + return true; + } + return false; + } + /** \overload */ + bool remember( const SerialNumber & serial_r ) + { return remember( serial_r.serial() ); } + + private: + unsigned _serial; + }; + /////////////////////////////////////////////////////////////////// + + /** \relates SerialNumberWatcher Stream output */ + std::ostream & operator<<( std::ostream & str, const SerialNumberWatcher & obj ); + + ///////////////////////////////////////////////////////////////// +} // namespace zypp +/////////////////////////////////////////////////////////////////// +#endif // ZYPP_BASE_SERIALNUMBER_H -- To unsubscribe, e-mail: zypp-commit+unsubscribe@opensuse.org For additional commands, e-mail: zypp-commit+help@opensuse.org
participants (1)
-
mlandres@svn.opensuse.org