| 30 |  | * @time 23:56am | 
| 31 |  | * @version 1.0 | 
| 32 |  | */ | 
| 33 | + |  | 
| 34 |  | #ifndef BRAINS_SNAPSHOT_HPP | 
| 35 |  | #define BRAINS_SNAPSHOT_HPP | 
| 36 |  |  | 
| 43 |  |  | 
| 44 |  | namespace oopse{ | 
| 45 |  |  | 
| 46 | + | //forward declaration | 
| 47 | + | class Snapshot; | 
| 48 | + | class SnapshotManager; | 
| 49 | + |  | 
| 50 |  | /** | 
| 51 | + | * @struct DataStorage | 
| 52 | + | * @brief | 
| 53 | + | */ | 
| 54 | + | class DataStorage { | 
| 55 | + | public: | 
| 56 | + | DataStorage() {}; | 
| 57 | + | DataStorage(size_t size); | 
| 58 | + | void resize(size_t size); | 
| 59 | + | void reserve(size_t size); | 
| 60 | + |  | 
| 61 | + | //friend Snapshot; | 
| 62 | + | //friend SnapshotManager; | 
| 63 | + | //private: | 
| 64 | + | vector<Vector3d> position;               /** position array */ | 
| 65 | + | vector<Vector3d> velocity;               /** velocity array */ | 
| 66 | + | vector<RotMat3x3d> Amat;            /** rotation matrix array */ | 
| 67 | + | vector<Vector3d> angularMomentum;/** velocity array */ | 
| 68 | + | vector<Vector3d> ul;                /** the lab frame unit vector array*/ | 
| 69 | + | vector<double> zAngle;              /** z -angle array */ | 
| 70 | + | vector<Vector3d> force;               /** force array */ | 
| 71 | + | vector<Vector3d> torque;               /** torque array */ | 
| 72 | + |  | 
| 73 | + | }; | 
| 74 | + |  | 
| 75 | + | /** | 
| 76 |  | * @class Snapshot Snapshot.hpp "brains/Snapshot.hpp" | 
| 77 |  | * @brief Snapshot class is a repository class for storing dynamic data during | 
| 78 |  | *  Simulation | 
| 79 | + | * Every snapshot class will contain one DataStorage  for atoms and one DataStorage | 
| 80 | + | *  for rigid bodies. | 
| 81 |  | * @see SimData | 
| 82 |  | */ | 
| 83 |  | class Snapshot { | 
| 84 |  | public: | 
| 85 | < |  | 
| 85 | > |  | 
| 86 | > | Snapshot() {} | 
| 87 |  | Snapshot(int i) { | 
| 88 |  |  | 
| 89 |  | } | 
| 102 |  | id_ = id; | 
| 103 |  | } | 
| 104 |  |  | 
| 72 | – | /** */ | 
| 73 | – | Snapshot* clone() { | 
| 74 | – | return new Snapshot(*this); | 
| 75 | – | } | 
| 76 | – |  | 
| 77 | – |  | 
| 105 |  | //template<typename T> | 
| 106 |  | //static typename T::ElemPointerType getArrayPointer(vector<T>& v) { | 
| 107 |  | //    return v[0]->getArrayPointer(); | 
| 108 |  | //} | 
| 109 |  |  | 
| 110 |  | static double* getArrayPointer(vector<Vector3d>& v) { | 
| 111 | + | assert(v.size() > 0); | 
| 112 |  | return v[0].getArrayPointer(); | 
| 113 |  | } | 
| 114 |  |  | 
| 115 |  | static double* getArrayPointer(vector<RotMat3x3d>& v) { | 
| 116 | + | assert(v.size() > 0); | 
| 117 |  | return v[0].getArrayPointer(); | 
| 118 |  | } | 
| 119 |  |  | 
| 122 |  | return &(v[0]); | 
| 123 |  | } | 
| 124 |  |  | 
| 125 | < | vector<Vector3d> pos; | 
| 126 | < | vector<Vector3d> vel; | 
| 127 | < | vector<Vector3d> frc; | 
| 128 | < | vector<Vector3d> trq; | 
| 129 | < | vector<RotMat3x3d> Amat; | 
| 130 | < | vector<Vector3d> mu; | 
| 131 | < | vector<Vector3d> ul; | 
| 132 | < | vector<double> zAngle; | 
| 133 | < |  | 
| 125 | > | /** */ | 
| 126 | > | void resize(size_t size); | 
| 127 | > |  | 
| 128 | > |  | 
| 129 | > | /** */ | 
| 130 | > | void reserve(size_t size); | 
| 131 | > |  | 
| 132 | > | DataStorage atomData; | 
| 133 | > | DataStorage rigidbodyData; | 
| 134 | > |  | 
| 135 | > | friend class SnapshotManager; | 
| 136 |  | private: | 
| 137 |  |  | 
| 138 |  | int id_; /**< identification number of the snapshot */ | 
| 139 |  | }; | 
| 140 |  |  | 
| 141 | + | typedef DataStorage* (Snapshot::*DataStoragePointer); | 
| 142 |  | } | 
| 143 |  | #endif //BRAINS_SNAPSHOT_HPP |