aboutsummaryrefslogtreecommitdiff
path: root/projectionhistory.h
diff options
context:
space:
mode:
authorSamuel Fadel <samuelfadel@gmail.com>2016-02-12 19:03:51 -0200
committerSamuel Fadel <samuelfadel@gmail.com>2016-02-12 19:03:51 -0200
commit5bd1fec462466d605f974fa27c3b00826a1bab57 (patch)
tree6cfefd8bd5c81644755c3be197f7ab2d60cd268b /projectionhistory.h
parent95a77b04a6855b26d340aaca5e3030a7d1a7cb3c (diff)
Refactoring of Projection{Observer,History} & ManipulationHandler.
ProjectionObserver class has been removed, all of its functionality is now inside class ProjectionHistory, thus dealing with the design problem mentioned in the previous commit. ProjectionHistory is now also responsible for all rewinding functionality, which makes more sense.
Diffstat (limited to 'projectionhistory.h')
-rw-r--r--projectionhistory.h54
1 files changed, 46 insertions, 8 deletions
diff --git a/projectionhistory.h b/projectionhistory.h
index 9fe9ffc..a18af0c 100644
--- a/projectionhistory.h
+++ b/projectionhistory.h
@@ -10,11 +10,17 @@ class ProjectionHistory
{
Q_OBJECT
public:
- explicit ProjectionHistory(QObject *parent = 0);
+ enum ObserverType {
+ ObserverCurrent,
+ ObserverDiffPrevious,
+ ObserverDiffFirst
+ };
- const arma::mat &Y() const { return m_Y; }
- const arma::mat &first() const { return m_firstY; }
- const arma::mat &prev() const { return m_prevY; }
+ ProjectionHistory(const arma::mat &X, const arma::uvec &cpIndices);
+
+ const arma::mat &Y() const { return m_Y; }
+ const arma::mat &firstY() const { return m_firstY; }
+ const arma::mat &prevY() const { return m_prevY; }
bool hasFirst() const { return m_hasFirst; }
bool hasPrev() const { return m_hasPrev; }
@@ -23,15 +29,47 @@ public:
void reset();
signals:
- void undoPerformed(const arma::mat &prevY) const;
- void resetPerformed(const arma::mat &firstY) const;
- void mapAdded(const arma::mat &newY) const;
+ void undoPerformed() const;
+ void resetPerformed() const;
+
+ void currentMapChanged(const arma::mat &Y) const;
+ void valuesChanged(const arma::vec &values) const;
+ void cpValuesChanged(const arma::vec &values) const;
+ void rpValuesChanged(const arma::vec &values) const;
+
+ void mapRewound(const arma::mat &Y) const;
+ void valuesRewound(const arma::vec &values) const;
+ void cpValuesRewound(const arma::vec &values) const;
+ void rpValuesRewound(const arma::vec &values) const;
public slots:
void addMap(const arma::mat &Y);
+ bool setType(ObserverType type);
+ void setCPSelection(const std::vector<bool> &cpSelection);
+ void setRPSelection(const std::vector<bool> &rpSelection);
+
+ void setRewind(double t);
+
private:
- arma::mat m_Y, m_firstY, m_prevY;
+ bool emitValuesChanged() const;
+
+ ObserverType m_type;
+
+ arma::mat m_X, m_Y, m_firstY, m_prevY;
+ arma::mat m_distX, m_distY, m_firstDistY, m_prevDistY;
+ arma::uvec m_cpIndices, m_rpIndices;
+
+ bool m_cpSelectionEmpty, m_rpSelectionEmpty;
+ std::vector<int> m_cpSelection, m_rpSelection;
+
+ // alpha(i, j): the influence CP j has on RP i
+ void computeAlphas();
+ arma::mat m_alphas, m_influences;
+
+ // TODO: one per implemented measure
+ arma::vec m_values, m_firstValues, m_prevValues;
+
bool m_hasFirst, m_hasPrev;
};