qtmobility/src/sensors/qsensor.h
changeset 14 6fbed849b4f4
parent 11 06b8e2af4411
--- a/qtmobility/src/sensors/qsensor.h	Fri Jun 11 14:26:25 2010 +0300
+++ b/qtmobility/src/sensors/qsensor.h	Wed Jun 23 19:08:38 2010 +0300
@@ -189,32 +189,13 @@
 
 protected:
     explicit QSensorReading(QObject *parent, QSensorReadingPrivate *d);
-    QScopedPointer<QSensorReadingPrivate> *d_ptr() { return &d; }
-    virtual void copyValuesFrom(QSensorReading *other) = 0;
+    virtual void copyValuesFrom(QSensorReading *other);
 
 private:
     QScopedPointer<QSensorReadingPrivate> d;
     Q_DISABLE_COPY(QSensorReading)
 };
 
-template <typename T>
-class qTypedWrapper
-{
-public:
-    qTypedWrapper(QScopedPointer<QSensorReadingPrivate> *_ptr)
-        : ptr(_ptr)
-    {
-    }
-
-    T *operator->() const
-    {
-        return static_cast<T*>(ptr->data());
-    }
-
-private:
-    QScopedPointer<QSensorReadingPrivate> *ptr;
-};
-
 #define DECLARE_READING(classname)\
         DECLARE_READING_D(classname, classname ## Private)
 
@@ -224,25 +205,27 @@
         virtual ~classname();\
         void copyValuesFrom(QSensorReading *other);\
     private:\
-        qTypedWrapper<pclassname> d;
+        QScopedPointer<pclassname> d;
 
 #define IMPLEMENT_READING(classname)\
         IMPLEMENT_READING_D(classname, classname ## Private)
 
 #define IMPLEMENT_READING_D(classname, pclassname)\
     classname::classname(QObject *parent)\
-        : QSensorReading(parent, new pclassname)\
-        , d(d_ptr())\
+        : QSensorReading(parent, 0)\
+        , d(new pclassname)\
         {}\
     classname::~classname() {}\
     void classname::copyValuesFrom(QSensorReading *_other)\
     {\
         /* No need to verify types, only called by QSensorBackend */\
         classname *other = static_cast<classname *>(_other);\
-        pclassname *my_ptr = static_cast<pclassname*>(d_ptr()->data());\
-        pclassname *other_ptr = static_cast<pclassname*>(other->d_ptr()->data());\
+        pclassname *my_ptr = d.data();\
+        pclassname *other_ptr = other->d.data();\
         /* Do a direct copy of the private class */\
         *(my_ptr) = *(other_ptr);\
+        /* We need to copy the parent too */\
+        QSensorReading::copyValuesFrom(_other);\
     }
 
 QTM_END_NAMESPACE