diff trajectorymanagement/src/TrajectoryElement.h @ 1159:e1e7acef8eab

moved trajectory management library into Traffic Intelligence
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Mon, 22 Feb 2021 22:09:35 -0500
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/trajectorymanagement/src/TrajectoryElement.h	Mon Feb 22 22:09:35 2021 -0500
@@ -0,0 +1,122 @@
+#ifndef TRAJECTORYELEMENT_H_
+#define TRAJECTORYELEMENT_H_
+
+#include <istream>
+#include <ostream>
+
+#include "PointOperations.h"
+
+/**
+ * TrajectoryElement class.
+ *
+ * The Trajectory class is composed of components called TrajectoryElement.
+ */
+template<typename T>
+class TrajectoryElement {
+ public:
+  /**
+   * Constructor.
+   */
+  TrajectoryElement() {}
+  
+  /**
+   * Constructor.
+   *
+   * @param[in] frameNumber number of a frame
+   * @param[in] position position
+   */
+  TrajectoryElement(unsigned int frameNumber, const T& point) {
+    setFrameNumber(frameNumber);
+    setPoint(point);
+  }
+  
+  /**
+   * Constructor.
+   *
+   * @param[in] trajectoryElement element of the trajectory
+   */
+  TrajectoryElement(const TrajectoryElement& trajectoryElement) {
+    setFrameNumber(trajectoryElement.getFrameNumber());
+    setPoint(trajectoryElement.getPoint());
+  }
+  
+  /**
+   * Get number of a frame.
+   *
+   * @return number of a frame
+   */
+  unsigned int getFrameNumber() const {
+    return frameNumber;
+  }
+  
+  /**
+   * Set number of a frame.
+   *
+   * @param[in] frameNumber number of a frame
+   */
+  void setFrameNumber(unsigned int iframeNumber) {
+    frameNumber = iframeNumber;
+  }
+  
+  /**
+   * Get position.
+   *
+   * @return position
+   */
+  const T &getPoint() const {
+    return point;
+  }
+  
+  /**
+   * Set position.
+   *
+   * @param[in] position position
+   */
+  void setPoint(const T& ipoint) {
+    point = ipoint;
+  }
+  
+  /**
+   * Shift position.
+   *
+   * @param[in] t vector by which the position of the element should be shifted.
+   */
+  void shift(const T& t) {
+    point += t;
+  }
+
+ private:
+  /**
+   * Frame number.
+   */
+  unsigned int frameNumber;
+  
+  /**
+   * Position of the element.
+   */
+  T point;
+};
+
+template<typename T>
+static inline bool operator==(const TrajectoryElement<T>& a, const TrajectoryElement<T>& b) {
+  return (a.getFrameNumber() == b.getFrameNumber()) && (a.getPoint() == b.getPoint());
+}
+
+template<typename Ti, typename Tr>
+  std::basic_istream<Ti>& operator>>(std::basic_istream<Ti>& in, TrajectoryElement<Tr>& trajectoryElement) {
+  unsigned int frameNumber;
+  Tr point;
+  if (in >> frameNumber >> point) {
+    trajectoryElement.setFrameNumber(frameNumber);
+    trajectoryElement.setPoint(point);
+  }
+  return in;
+}
+
+template<typename Tr>
+std::ostream& operator<<(std::ostream& out, const TrajectoryElement<Tr>& trajectoryElement) {
+  out << trajectoryElement.getFrameNumber() << " " << trajectoryElement.getPoint();
+  return out;
+}
+
+#endif /* TRAJECTORYELEMENT_H_ */