From 8647e8af1586e0aea343c752a276577a94cf88a9 Mon Sep 17 00:00:00 2001
From: Mirko Waechter <mirko.waechter@kit.edu>
Date: Sun, 26 Jun 2016 21:32:47 +0200
Subject: [PATCH] trajectory doc

---
 source/RobotAPI/libraries/core/Trajectory.h   |  9 +++++++
 .../libraries/core/test/TrajectoryTest.cpp    | 24 +++++++++++++++++++
 2 files changed, 33 insertions(+)

diff --git a/source/RobotAPI/libraries/core/Trajectory.h b/source/RobotAPI/libraries/core/Trajectory.h
index 7b42d4a9f..16678be21 100644
--- a/source/RobotAPI/libraries/core/Trajectory.h
+++ b/source/RobotAPI/libraries/core/Trajectory.h
@@ -72,6 +72,10 @@ namespace armarx
      * Basic usage:
      * @snippet RobotAPI/libraries/core/test/TrajectoryTest.cpp TrajectoryDocumentation BasicUsage
      *
+     * The trajectory offers normal iterator capabilities:
+     * @snippet RobotAPI/libraries/core/test/TrajectoryTest.cpp TrajectoryDocumentation IteratorUsage
+     * @note Only const iterators are currently available.
+     *
      * With the iterators it can be used like a std container:
      * @snippet RobotAPI/libraries/core/test/TrajectoryTest.cpp TrajectoryDocumentation CopyIf
      */
@@ -194,6 +198,11 @@ namespace armarx
         void removeDerivation(size_t dimension, size_t derivation);
 
         // iterators
+        /**
+         * @brief Iterators that iterates in incremental order of the timestamps through the trajectory.
+         * @note Only const versions are available currently.
+         * @see end(), rbegin(), rend()
+         */
         typename ordered_view::const_iterator begin() const;
         typename ordered_view::const_iterator end() const;
         typename ordered_view::const_reverse_iterator rbegin() const;
diff --git a/source/RobotAPI/libraries/core/test/TrajectoryTest.cpp b/source/RobotAPI/libraries/core/test/TrajectoryTest.cpp
index 16b9c0573..64f35db4e 100644
--- a/source/RobotAPI/libraries/core/test/TrajectoryTest.cpp
+++ b/source/RobotAPI/libraries/core/test/TrajectoryTest.cpp
@@ -135,6 +135,30 @@ BOOST_AUTO_TEST_CASE(TrajectoryBasicUsage)
      //! [TrajectoryDocumentation BasicUsage]
      ARMARX_INFO_S << VAROUT(pos) << VAROUT(positions);
 }
+
+BOOST_AUTO_TEST_CASE(TrajectoryIteratorUsage)
+{
+     Ice::DoubleSeq myPositionValues{0,5,1}; // fill with your values;
+     Ice::DoubleSeq timestamps = Trajectory::GenerateTimestamps(0, 1, 1.0/(myPositionValues.size()-1)); // if you dont have timestamps
+     TrajectoryPtr trajectory(new Trajectory);
+     trajectory->addDimension(timestamps, myPositionValues, "Shoulder 1 L");
+     //! [TrajectoryDocumentation IteratorUsage]
+     Trajectory::ordered_view::iterator it; // or just auto it;
+     it = trajectory->begin();
+     for(; it != trajectory->end(); it++)
+     {
+         const Trajectory::TrajData& data = *it;
+         ARMARX_INFO_S << "Position at " << data.getTimestamp() << " :" << data.getPosition(0);
+     }
+
+     // or with c++11 for loop:
+     for(const Trajectory::TrajData& element : *trajectory)
+     {
+         ARMARX_INFO_S << "Position at " << element.getTimestamp() << " :" << element.getPosition(0);
+     }
+     //! [TrajectoryDocumentation IteratorUsage]
+}
+
 BOOST_AUTO_TEST_CASE(testInplaceDerivation2)
 {
 
-- 
GitLab