X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=zypp%2FCallback.h;h=3956a0b7cb3238a5663545e1622cfff8b485966b;hb=f2f36ebec8b34e01f91f190cbd0b9f4d3c2c4510;hp=3baf8c0f1888d58af9e36c2421b9fb5ec5001b9c;hpb=d492bc6ff98c3a2917afcaad406ef9586a9ba8f5;p=platform%2Fupstream%2Flibzypp.git diff --git a/zypp/Callback.h b/zypp/Callback.h index 3baf8c0..3956a0b 100644 --- a/zypp/Callback.h +++ b/zypp/Callback.h @@ -32,7 +32,7 @@ namespace zypp * \par The task report structure (SENDER SIDE). * * A default constructible struct derived from callback::ReportBase. - * It \b must \b not contain any data, just virtual methods. + * It \b must \b not conatin any data, just virtual methods. * * These are the functions the sender invokes, and which will be forwarded * to some receiver. If no receiver is present, the defined default @@ -58,7 +58,7 @@ namespace zypp * * \par Sending a Task report (SENDER SIDE). * - * Simply create a callback::SendReport, where TReport + * Simply create a callback::SendReport<_Report>, where _Report * is your task report structure. Invoke the callback functions * as needed. That's it. * @@ -130,17 +130,6 @@ namespace zypp * * For typesafe passing of user data via callbacks \see \ref UserData. * - * ReportBase provides a generic \ref callback::ReportBase:report method - * which can be used to communicate by encoding everything in its \a UserData - * argument. - * - * Convenient sending can be achieved by installing non-virtual methods - * in the TReport class, which encode the arguments in UserData and send - * them via ReportBase::report(). - * - * Convenient receiving can be achieved by installing virtual methods in - * the TReport class, which can be simply overloaded by the receiver. Downside - * of this is that adding virtual methods breaks binary compatibility. */ namespace callback { ///////////////////////////////////////////////////////////////// @@ -149,27 +138,22 @@ namespace zypp struct ReportBase { typedef callback::UserData UserData; - typedef UserData::ContentType ContentType; - - /** The most generic way of sending/receiving data. */ - virtual void report( const UserData & userData_r = UserData() ) - {} - virtual ~ReportBase() {} }; /** */ - template + template class DistributeReport; /** */ - template - struct ReceiveReport : public TReport + template + struct ReceiveReport : public _Report { - typedef TReport ReportType; - typedef ReceiveReport Receiver; - typedef DistributeReport Distributor; + typedef _Report ReportType; + typedef typename ReportType::UserData UserData; + typedef ReceiveReport<_Report> Receiver; + typedef DistributeReport<_Report> Distributor; virtual ~ReceiveReport() { disconnect(); } @@ -193,13 +177,14 @@ namespace zypp }; /** */ - template + template struct DistributeReport { public: - typedef TReport ReportType; - typedef ReceiveReport Receiver; - typedef DistributeReport Distributor; + typedef _Report ReportType; + typedef typename ReportType::UserData UserData; + typedef ReceiveReport<_Report> Receiver; + typedef DistributeReport<_Report> Distributor; static DistributeReport & instance() { @@ -232,12 +217,13 @@ namespace zypp }; /** */ - template + template struct SendReport : private zypp::base::NonCopyable { - typedef TReport ReportType; - typedef ReceiveReport Receiver; - typedef DistributeReport Distributor; + typedef _Report ReportType; + typedef typename ReportType::UserData UserData; + typedef ReceiveReport<_Report> Receiver; + typedef DistributeReport<_Report> Distributor; SendReport() { Distributor::instance()->reportbegin(); } @@ -280,12 +266,13 @@ namespace zypp * ...// r receiving the report * \endcode */ - template + template struct TempConnect { - typedef TReport ReportType; - typedef ReceiveReport Receiver; - typedef DistributeReport Distributor; + typedef _Report ReportType; + typedef typename ReportType::UserData UserData; + typedef ReceiveReport<_Report> Receiver; + typedef DistributeReport<_Report> Distributor; TempConnect() : _oldRec( Distributor::instance().getReceiver() )