|
| 1 | +// |
| 2 | +// Created by tuidan on 2021/9/9. |
| 3 | +// |
| 4 | + |
| 5 | +#ifndef SESAME_INCLUDE_ALGORITHM_DATASTRUCTURE_DPNODE_HPP_ |
| 6 | +#define SESAME_INCLUDE_ALGORITHM_DATASTRUCTURE_DPNODE_HPP_ |
| 7 | +#include <vector> |
| 8 | +#include <iostream> |
| 9 | +#include <memory> |
| 10 | +#include <unordered_set> |
| 11 | +#include <Algorithm/DataStructure/Point.hpp> |
| 12 | +namespace SESAME { |
| 13 | +class DPNode; |
| 14 | +class Cluster; |
| 15 | +typedef std::shared_ptr<DPNode> DPNodePtr; |
| 16 | +typedef std::shared_ptr<Cluster> ClusterPtr; |
| 17 | + |
| 18 | +class Cluster { |
| 19 | + private: |
| 20 | + int label; |
| 21 | + std::unordered_set<DPNodePtr> cells; |
| 22 | + |
| 23 | + public: |
| 24 | + explicit Cluster(); |
| 25 | + explicit Cluster(int label); |
| 26 | + void add(DPNodePtr &node); |
| 27 | + void remove(DPNodePtr &node); |
| 28 | + int GetLabel() ; |
| 29 | + void SetLabel(int label); |
| 30 | + [[nodiscard]] std::unordered_set<DPNodePtr> &GetCells() ; |
| 31 | + void SetCells(std::unordered_set<DPNodePtr> &cells); |
| 32 | +}; |
| 33 | +class DPNode { |
| 34 | + private: |
| 35 | + int cid; |
| 36 | + int Cid; |
| 37 | + int num; |
| 38 | + double rho; |
| 39 | + double delta; |
| 40 | + SESAME::DPNodePtr dep; //TODO: father |
| 41 | + SESAME::PointPtr center; |
| 42 | + double lastTime; |
| 43 | + bool active; |
| 44 | + std::unordered_set<DPNodePtr> sucs; //TODO: children |
| 45 | + SESAME::ClusterPtr cluster; |
| 46 | + // public double sumDelta; |
| 47 | + // public int sucNum; |
| 48 | + double inactiveTime; |
| 49 | + |
| 50 | + /** |
| 51 | + * we will use dis to quickly update the delta of CluCell |
| 52 | + */ |
| 53 | + double dis; |
| 54 | + public: |
| 55 | + |
| 56 | + DPNode(); |
| 57 | + ~DPNode(); |
| 58 | + DPNode(SESAME::PointPtr &p, double time); |
| 59 | + [[nodiscard]] int GetId() ; |
| 60 | + void SetId(int id); |
| 61 | + [[nodiscard]] int GetCId() ; |
| 62 | + void SetCId(int Cid); |
| 63 | + [[nodiscard]] int GetNum() ; |
| 64 | + void SetNum(int num); |
| 65 | + [[nodiscard]] double GetRho() ; |
| 66 | + void SetRho(double rho); |
| 67 | + [[nodiscard]] double GetDelta() ; |
| 68 | + void SetDelta(double delta); |
| 69 | + [[nodiscard]] DPNodePtr &GetDep() ; |
| 70 | + void SetDep(DPNodePtr &dep); |
| 71 | + [[nodiscard]] PointPtr &GetCenter() ; |
| 72 | + void SetCenter(PointPtr ¢er); |
| 73 | + [[nodiscard]] double GetLastTime() ; |
| 74 | + void SetLastTime(double last_time); |
| 75 | + [[nodiscard]] bool IsActive() ; |
| 76 | + void SetActive(bool active); |
| 77 | + [[nodiscard]] std::unordered_set<SESAME::DPNodePtr> &GetSucs() ; |
| 78 | + void SetSucs(std::unordered_set<SESAME::DPNodePtr> &sucs); |
| 79 | + [[nodiscard]] ClusterPtr &GetCluster() ; |
| 80 | + void SetCluster(SESAME::ClusterPtr &cluster); |
| 81 | + [[nodiscard]] double GetInactiveTime() ; |
| 82 | + void SetInactiveTime(double inactive_time); |
| 83 | + [[nodiscard]] double GetDis() ; |
| 84 | + void SetDis(double dis); |
| 85 | + SESAME::DPNodePtr copy(); |
| 86 | + |
| 87 | + |
| 88 | + void insert(double startTime); |
| 89 | + void add(double coef, double startTime); |
| 90 | + double getDisTo(SESAME::DPNodePtr &node); |
| 91 | + void removeSuccessor(SESAME::DPNodePtr &node); |
| 92 | + bool hasSuccessor(); |
| 93 | + |
| 94 | + void addSuccessor(DPNodePtr &node); |
| 95 | +}; |
| 96 | + |
| 97 | +} |
| 98 | +#endif //SESAME_INCLUDE_ALGORITHM_DATASTRUCTURE_DPNODE_HPP_ |
0 commit comments