Pass frame header also to frameFinished().
authorTeemu Murtola <teemu.murtola@gmail.com>
Sun, 8 Jan 2012 18:36:59 +0000 (20:36 +0200)
committerTeemu Murtola <teemu.murtola@gmail.com>
Wed, 22 Feb 2012 05:38:07 +0000 (07:38 +0200)
Frame header information is now passed also to frameFinished() in
AnalysisDataModuleInterface in addition to frameStarted().  Currently,
this information is not used anywhere, but it makes the interface more
symmetric, and allows frameFinished() to easily determine the frame
index of the frame that became ready.  The latter will be used in future
commits.

Related to issue #827.

Change-Id: I8a3635823e2d9d6422d2a37ab4b8ec6b606589a0

19 files changed:
src/gromacs/analysisdata/abstractdata.cpp
src/gromacs/analysisdata/abstractdata.h
src/gromacs/analysisdata/arraydata.cpp
src/gromacs/analysisdata/datamodule.h
src/gromacs/analysisdata/dataproxy.cpp
src/gromacs/analysisdata/dataproxy.h
src/gromacs/analysisdata/modules/average.cpp
src/gromacs/analysisdata/modules/average.h
src/gromacs/analysisdata/modules/displacement.cpp
src/gromacs/analysisdata/modules/displacement.h
src/gromacs/analysisdata/modules/histogram-impl.h
src/gromacs/analysisdata/modules/histogram.cpp
src/gromacs/analysisdata/modules/histogram.h
src/gromacs/analysisdata/modules/plot.cpp
src/gromacs/analysisdata/modules/plot.h
src/gromacs/analysisdata/tests/mock_module-impl.h
src/gromacs/analysisdata/tests/mock_module.cpp
src/gromacs/analysisdata/tests/mock_module.h
src/gromacs/trajectoryanalysis/modules/select.cpp

index 9aea45af05016b315a1d469c0a16a820c24c9423..dda3d19ebea23a373b4ded550ea75c6c841c3126 100644 (file)
@@ -104,7 +104,7 @@ AbstractAnalysisData::Impl::presentData(AbstractAnalysisData *data,
         module->frameStarted(header);
         module->pointsAdded(
                 AnalysisDataPointSetRef(header, 0, ncol, y, dy, present));
-        module->frameFinished();
+        module->frameFinished(header);
     }
     if (!_bInData)
     {
@@ -311,21 +311,30 @@ AbstractAnalysisData::notifyPointsAdd(int firstcol, int n,
 
 
 void
-AbstractAnalysisData::notifyFrameFinish() const
+AbstractAnalysisData::notifyFrameFinish(const AnalysisDataFrameHeader &header) const
 {
     GMX_ASSERT(_impl->_bInData, "notifyDataStart() not called");
     GMX_ASSERT(_impl->_bInFrame, "notifyFrameStart() not called");
+    GMX_ASSERT(header.index() == _impl->_currHeader.index(),
+               "Header does not correspond to current frame");
     _impl->_bInFrame = false;
 
     Impl::ModuleList::const_iterator i;
 
     for (i = _impl->_modules.begin(); i != _impl->_modules.end(); ++i)
     {
-        (*i)->frameFinished();
+        (*i)->frameFinished(header);
     }
 }
 
 
+void
+AbstractAnalysisData::notifyFrameFinish() const
+{
+    notifyFrameFinish(_impl->_currHeader);
+}
+
+
 void
 AbstractAnalysisData::notifyDataFinish() const
 {
index 0a9b055de1187bcc48602430bef2a0a522f51df2..21430226943d9f05cc626e5f9103f0fa4fef14fb 100644 (file)
@@ -308,6 +308,12 @@ class AbstractAnalysisData
          * Should be called once for each call of notifyFrameStart(), after any
          * notifyPointsAdd() calls for the frame.
          */
+        void notifyFrameFinish(const AnalysisDataFrameHeader &header) const;
+        /*! \brief
+         * Deprecated convenience method for not needing a frame header.
+         *
+         * Will be removed as part of future work.
+         */
         void notifyFrameFinish() const;
         /*! \brief
          * Notifies attached modules of the end of data.
index 30f5d6f36ad02c39e238d8a011d5496a1c785d54..ca64aa8c21904f5b5f620edf2a2ece2f0a6f9bed 100644 (file)
@@ -162,7 +162,7 @@ AbstractAnalysisArrayData::valuesReady()
         notifyPointsAdd(AnalysisDataPointSetRef(header, 0, columnCount(),
                                                 &_value[i * columnCount()],
                                                 NULL, NULL));
-        notifyFrameFinish();
+        notifyFrameFinish(header);
     }
     notifyDataFinish();
 }
index 3bb262aa0633e1ab73fc8d0ddec5cfdafbe5e7f4..559d968cf052dbce1b904631539079706a5e95a6 100644 (file)
@@ -118,7 +118,7 @@ class AnalysisDataModuleInterface
         /*! \brief
          * Called when a data frame is finished.
          */
-        virtual void frameFinished() = 0;
+        virtual void frameFinished(const AnalysisDataFrameHeader &header) = 0;
         /*! \brief
          * Called (once) when no more data is available.
          */
index a531a561cb0a4dc35aec357d3d26914fdf9552c0..8049ecd7cd90c89b1d108724b822c457fbcca894 100644 (file)
@@ -129,9 +129,9 @@ AnalysisDataProxy::pointsAdded(const AnalysisDataPointSetRef &points)
 
 
 void
-AnalysisDataProxy::frameFinished()
+AnalysisDataProxy::frameFinished(const AnalysisDataFrameHeader &header)
 {
-    notifyFrameFinish();
+    notifyFrameFinish(header);
 }
 
 
index cbd857bb36ba1779b75bc324151ce649a3b5e6c2..2877c6f87bb11dbdbc9d8bdffddf8d737b016d48 100644 (file)
@@ -76,7 +76,7 @@ class AnalysisDataProxy : public AbstractAnalysisData,
         virtual void dataStarted(AbstractAnalysisData *data);
         virtual void frameStarted(const AnalysisDataFrameHeader &frame);
         virtual void pointsAdded(const AnalysisDataPointSetRef &points);
-        virtual void frameFinished();
+        virtual void frameFinished(const AnalysisDataFrameHeader &header);
         virtual void dataFinished();
 
     private:
index cc73dd0286d7e6954a0a5266bef1e591ad1ecaa1..bb22ac5e085ed1c56537862ac30da19588e9d6d1 100644 (file)
@@ -102,7 +102,7 @@ AnalysisDataAverageModule::pointsAdded(const AnalysisDataPointSetRef &points)
 
 
 void
-AnalysisDataAverageModule::frameFinished()
+AnalysisDataAverageModule::frameFinished(const AnalysisDataFrameHeader & /*header*/)
 {
 }
 
index 7b2512cce281438706d701353027015225420895..76eba26d520097f12a12330e0535bfece28fb1bd 100644 (file)
@@ -74,7 +74,7 @@ class AnalysisDataAverageModule : public AbstractAnalysisArrayData,
         virtual void dataStarted(AbstractAnalysisData *data);
         virtual void frameStarted(const AnalysisDataFrameHeader &header);
         virtual void pointsAdded(const AnalysisDataPointSetRef &points);
-        virtual void frameFinished();
+        virtual void frameFinished(const AnalysisDataFrameHeader &header);
         virtual void dataFinished();
 
         //! Convenience access to the average of a data column.
index 06dd48bf006b5a744d61466cfde5d0dbfcc3989a..6c7c221520987c320297d908ec9831603081fc49 100644 (file)
@@ -212,7 +212,7 @@ AnalysisDataDisplacementModule::pointsAdded(const AnalysisDataPointSetRef &point
 
 
 void
-AnalysisDataDisplacementModule::frameFinished()
+AnalysisDataDisplacementModule::frameFinished(const AnalysisDataFrameHeader & /*header*/)
 {
     if (_impl->nstored <= 1)
     {
@@ -259,7 +259,7 @@ AnalysisDataDisplacementModule::frameFinished()
                 header, 0, k, _impl->currd, NULL, NULL));
     }
 
-    notifyFrameFinish();
+    notifyFrameFinish(header);
 }
 
 
index fdc7388efd7f5fb2345a996f554eb7307ea10610..b4e715fef5c786524afacf8d4fcbb4fa3b221e72 100644 (file)
@@ -89,7 +89,7 @@ class AnalysisDataDisplacementModule : public AbstractAnalysisData,
         virtual void dataStarted(AbstractAnalysisData *data);
         virtual void frameStarted(const AnalysisDataFrameHeader &header);
         virtual void pointsAdded(const AnalysisDataPointSetRef &points);
-        virtual void frameFinished();
+        virtual void frameFinished(const AnalysisDataFrameHeader &header);
         virtual void dataFinished();
 
     private:
index 7dc0c6f1e0ff04681c7409691879c00f85b06ec7..83d3a464300915ea044d3d04abfb0b24d57d95ae 100644 (file)
@@ -90,7 +90,7 @@ class BasicAverageHistogramModule : public AbstractAverageHistogram,
         virtual void dataStarted(AbstractAnalysisData *data);
         virtual void frameStarted(const AnalysisDataFrameHeader &header);
         virtual void pointsAdded(const AnalysisDataPointSetRef &points);
-        virtual void frameFinished();
+        virtual void frameFinished(const AnalysisDataFrameHeader &header);
         virtual void dataFinished();
 
     private:
index 25a90727c65bd88a4451e58b722bbfed33b855bd..09984cda6caaca4b0f51cfe8204bb5db7684d471 100644 (file)
@@ -388,7 +388,7 @@ BasicAverageHistogramModule::pointsAdded(const AnalysisDataPointSetRef &points)
 
 
 void
-BasicAverageHistogramModule::frameFinished()
+BasicAverageHistogramModule::frameFinished(const AnalysisDataFrameHeader & /*header*/)
 {
     ++frameCount_;
 }
@@ -535,7 +535,7 @@ AnalysisDataSimpleHistogramModule::pointsAdded(const AnalysisDataPointSetRef &po
 
 
 void
-AnalysisDataSimpleHistogramModule::frameFinished()
+AnalysisDataSimpleHistogramModule::frameFinished(const AnalysisDataFrameHeader & /*header*/)
 {
     storeThisFrame(&impl_->hist_[0], NULL, NULL);
 }
@@ -636,7 +636,7 @@ AnalysisDataWeightedHistogramModule::pointsAdded(const AnalysisDataPointSetRef &
 
 
 void
-AnalysisDataWeightedHistogramModule::frameFinished()
+AnalysisDataWeightedHistogramModule::frameFinished(const AnalysisDataFrameHeader & /*header*/)
 {
     storeThisFrame(&impl_->hist_[0], NULL, NULL);
 }
@@ -727,7 +727,7 @@ AnalysisDataBinAverageModule::pointsAdded(const AnalysisDataPointSetRef &points)
 
 
 void
-AnalysisDataBinAverageModule::frameFinished()
+AnalysisDataBinAverageModule::frameFinished(const AnalysisDataFrameHeader & /*header*/)
 {
 }
 
index 928da06d385ac0226a80cdf6c90bbbcca9f3ecd1..a4d815d26ca65d3bd731b2afe9e7fdad1abf2aa9 100644 (file)
@@ -354,7 +354,7 @@ class AnalysisDataSimpleHistogramModule : public AbstractAnalysisDataStored,
         virtual void dataStarted(AbstractAnalysisData *data);
         virtual void frameStarted(const AnalysisDataFrameHeader &header);
         virtual void pointsAdded(const AnalysisDataPointSetRef &points);
-        virtual void frameFinished();
+        virtual void frameFinished(const AnalysisDataFrameHeader &header);
         virtual void dataFinished();
 
     private:
@@ -402,7 +402,7 @@ class AnalysisDataWeightedHistogramModule : public AbstractAnalysisDataStored,
         virtual void dataStarted(AbstractAnalysisData *data);
         virtual void frameStarted(const AnalysisDataFrameHeader &header);
         virtual void pointsAdded(const AnalysisDataPointSetRef &points);
-        virtual void frameFinished();
+        virtual void frameFinished(const AnalysisDataFrameHeader &header);
         virtual void dataFinished();
 
     private:
@@ -449,7 +449,7 @@ class AnalysisDataBinAverageModule : public AbstractAnalysisArrayData,
         virtual void dataStarted(AbstractAnalysisData *data);
         virtual void frameStarted(const AnalysisDataFrameHeader &header);
         virtual void pointsAdded(const AnalysisDataPointSetRef &points);
-        virtual void frameFinished();
+        virtual void frameFinished(const AnalysisDataFrameHeader &header);
         virtual void dataFinished();
 
     private:
index 6c11496aa8b28df764922669b53207b09b568920..4664b81cde583da91c05749b5cbbe08954ab3364 100644 (file)
@@ -319,7 +319,7 @@ AbstractPlotModule::frameStarted(const AnalysisDataFrameHeader &frame)
 
 
 void
-AbstractPlotModule::frameFinished()
+AbstractPlotModule::frameFinished(const AnalysisDataFrameHeader & /*header*/)
 {
     if (!isFileOpen())
     {
index 25d01476500051e284a22ba9dd226a35ea48b6d3..fb88ba36a6c2a803d225a591b877b242e5a1480d 100644 (file)
@@ -205,7 +205,7 @@ class AbstractPlotModule : public AnalysisDataModuleInterface
         virtual void dataStarted(AbstractAnalysisData *data);
         virtual void frameStarted(const AnalysisDataFrameHeader &header);
         virtual void pointsAdded(const AnalysisDataPointSetRef &points) = 0;
-        virtual void frameFinished();
+        virtual void frameFinished(const AnalysisDataFrameHeader &header);
         virtual void dataFinished();
 
     protected:
index e5cc507b2a370c9403f4471dc2b58284057cd4db..da473ac4913832ff6d6bd857603e0b43dee4be98 100644 (file)
@@ -59,7 +59,7 @@ class MockAnalysisModule::Impl
 
         void startReferenceFrame(const AnalysisDataFrameHeader &header);
         void checkReferencePoints(const AnalysisDataPointSetRef &points);
-        void finishReferenceFrame();
+        void finishReferenceFrame(const AnalysisDataFrameHeader &header);
 
         // Could be scoped_ptrs
         std::auto_ptr<TestReferenceChecker>  rootChecker_;
index 279be328454e4bf7ee072e55b93970f72013fa31..5ceb0ab3942c25cf8b47506d37535493e59c6d61 100644 (file)
@@ -73,7 +73,6 @@ MockAnalysisModule::Impl::startReferenceFrame(const AnalysisDataFrameHeader &hea
     frameChecker_.reset(new TestReferenceChecker(
         rootChecker_->checkCompound("DataFrame",
                                     formatString("Frame%d", frameIndex_).c_str())));
-    ++frameIndex_;
     frameChecker_->checkReal(header.x(), "X");
 }
 
@@ -97,9 +96,11 @@ MockAnalysisModule::Impl::checkReferencePoints(const AnalysisDataPointSetRef &po
 
 
 void
-MockAnalysisModule::Impl::finishReferenceFrame()
+MockAnalysisModule::Impl::finishReferenceFrame(const AnalysisDataFrameHeader &header)
 {
     EXPECT_TRUE(frameChecker_.get() != NULL);
+    EXPECT_EQ(frameIndex_, header.index());
+    ++frameIndex_;
     frameChecker_.reset();
 }
 
@@ -371,7 +372,8 @@ MockAnalysisModule::setupStaticCheck(const AnalysisDataTestInput &data,
                 .WillOnce(Invoke(StaticDataPointsChecker(&frame, &points, 0,
                                                          data.columnCount())));
         }
-        EXPECT_CALL(*this, frameFinished());
+        EXPECT_CALL(*this, frameFinished(_))
+            .WillOnce(Invoke(StaticDataFrameHeaderChecker(&frame)));
     }
     EXPECT_CALL(*this, dataFinished());
 }
@@ -404,7 +406,8 @@ MockAnalysisModule::setupStaticColumnCheck(const AnalysisDataTestInput &data,
             EXPECT_CALL(*this, pointsAdded(_))
                 .WillOnce(Invoke(StaticDataPointsChecker(&frame, &points, firstcol, n)));
         }
-        EXPECT_CALL(*this, frameFinished());
+        EXPECT_CALL(*this, frameFinished(_))
+            .WillOnce(Invoke(StaticDataFrameHeaderChecker(&frame)));
     }
     EXPECT_CALL(*this, dataFinished());
 }
@@ -435,7 +438,8 @@ MockAnalysisModule::setupStaticStorageCheck(const AnalysisDataTestInput &data,
         EXPECT_CALL(*this, pointsAdded(_))
             .WillOnce(Invoke(StaticDataPointsStorageChecker(source, &data, row,
                                                             storageCount)));
-        EXPECT_CALL(*this, frameFinished());
+        EXPECT_CALL(*this, frameFinished(_))
+            .WillOnce(Invoke(StaticDataFrameHeaderChecker(&frame)));
     }
     EXPECT_CALL(*this, dataFinished());
 }
@@ -464,7 +468,7 @@ MockAnalysisModule::setupReferenceCheck(const TestReferenceChecker &checker,
     Expectation pointsAdd = EXPECT_CALL(*this, pointsAdded(_))
         .After(dataStart)
         .WillRepeatedly(Invoke(impl_, &Impl::checkReferencePoints));
-    Expectation frameFinish = EXPECT_CALL(*this, frameFinished())
+    Expectation frameFinish = EXPECT_CALL(*this, frameFinished(_))
         .After(dataStart)
         .WillRepeatedly(Invoke(impl_, &Impl::finishReferenceFrame));
     EXPECT_CALL(*this, dataFinished())
index e7a8a57962b3832d1c4c886286608f7d90a87b30..7e6bcd7f56d20a42e081e31444fcb230c9979128 100644 (file)
@@ -63,7 +63,7 @@ class MockAnalysisModule : public AnalysisDataModuleInterface
         MOCK_METHOD1(dataStarted, void(AbstractAnalysisData *data));
         MOCK_METHOD1(frameStarted, void(const AnalysisDataFrameHeader &header));
         MOCK_METHOD1(pointsAdded, void(const AnalysisDataPointSetRef &points));
-        MOCK_METHOD0(frameFinished, void());
+        MOCK_METHOD1(frameFinished, void(const AnalysisDataFrameHeader &header));
         MOCK_METHOD0(dataFinished, void());
 
         void setupStaticCheck(const AnalysisDataTestInput &data,
index 09bde172b527afb468f423af9cbf069eed05ada6..8ce4de634276decb1006e9e063f3b64ff02805a7 100644 (file)
@@ -86,7 +86,7 @@ class IndexFileWriterModule : public AnalysisDataModuleInterface
         virtual void dataStarted(AbstractAnalysisData *data);
         virtual void frameStarted(const AnalysisDataFrameHeader &header);
         virtual void pointsAdded(const AnalysisDataPointSetRef &points);
-        virtual void frameFinished();
+        virtual void frameFinished(const AnalysisDataFrameHeader &header);
         virtual void dataFinished();
 
     private:
@@ -213,7 +213,7 @@ IndexFileWriterModule::pointsAdded(const AnalysisDataPointSetRef &points)
 }
 
 
-void IndexFileWriterModule::frameFinished()
+void IndexFileWriterModule::frameFinished(const AnalysisDataFrameHeader & /*header*/)
 {
 }