Imported Upstream version 14.45.0
[platform/upstream/libzypp.git] / zypp / Callback.h
index 3baf8c0..3956a0b 100644 (file)
@@ -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<TReport>, 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<class TReport>
+    template<class _Report>
       class DistributeReport;
 
     /**  */
-    template<class TReport>
-      struct ReceiveReport : public TReport
+    template<class _Report>
+      struct ReceiveReport : public _Report
       {
-       typedef TReport                   ReportType;
-       typedef ReceiveReport<TReport>    Receiver;
-        typedef DistributeReport<TReport> 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<class TReport>
+    template<class _Report>
       struct DistributeReport
       {
        public:
-       typedef TReport                   ReportType;
-       typedef ReceiveReport<TReport>    Receiver;
-       typedef DistributeReport<TReport> 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<class TReport>
+    template<class _Report>
       struct SendReport : private zypp::base::NonCopyable
       {
-       typedef TReport                   ReportType;
-        typedef ReceiveReport<TReport>    Receiver;
-        typedef DistributeReport<TReport> 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<class TReport>
+    template<class _Report>
       struct TempConnect
       {
-       typedef TReport                   ReportType;
-        typedef ReceiveReport<TReport>    Receiver;
-        typedef DistributeReport<TReport> Distributor;
+       typedef _Report                   ReportType;
+       typedef typename ReportType::UserData UserData;
+        typedef ReceiveReport<_Report>    Receiver;
+        typedef DistributeReport<_Report> Distributor;
 
         TempConnect()
         : _oldRec( Distributor::instance().getReceiver() )