| 43 |  |  | 
| 44 |  | namespace oopse{ | 
| 45 |  |  | 
| 46 | + | enum DataStorageLayout { | 
| 47 | + | dslPosition = 1, | 
| 48 | + | dslVelocity = 2, | 
| 49 | + | dslAMat = 4, | 
| 50 | + | dslAngularMomentum = 8, | 
| 51 | + | dslUnitVector = 16, | 
| 52 | + | dslZAngle = 32, | 
| 53 | + | dslForce = 64, | 
| 54 | + | dslTorque = 128 | 
| 55 | + | }; | 
| 56 |  | //forward declaration | 
| 57 |  | class Snapshot; | 
| 58 |  | class SnapshotManager; | 
| 59 | < |  | 
| 59 | > | class StuntDouble; | 
| 60 | > |  | 
| 61 |  | /** | 
| 62 | < | * @struct DataStorage | 
| 62 | > | * @class DataStorage | 
| 63 |  | * @brief | 
| 64 | + | * @warning do not try to insert element into (or ease element from) private member data | 
| 65 | + | * of DataStorage directly. | 
| 66 |  | */ | 
| 67 |  | class DataStorage { | 
| 68 |  | public: | 
| 69 |  | DataStorage() {}; | 
| 70 |  | DataStorage(size_t size); | 
| 71 | + |  | 
| 72 | + | int size(); | 
| 73 |  | void resize(size_t size); | 
| 74 |  | void reserve(size_t size); | 
| 75 |  |  | 
| 76 | < | //friend Snapshot; | 
| 77 | < | //friend SnapshotManager; | 
| 78 | < | //private: | 
| 76 | > | friend class Snapshot; | 
| 77 | > | friend class StuntDouble; | 
| 78 | > | private: | 
| 79 |  | vector<Vector3d> position;               /** position array */ | 
| 80 |  | vector<Vector3d> velocity;               /** velocity array */ | 
| 81 | < | vector<RotMat3x3d> Amat;            /** rotation matrix array */ | 
| 81 | > | vector<RotMat3x3d> aMat;            /** rotation matrix array */ | 
| 82 |  | vector<Vector3d> angularMomentum;/** velocity array */ | 
| 83 | < | vector<Vector3d> ul;                /** the lab frame unit vector array*/ | 
| 83 | > | vector<Vector3d> unitVector;                /** the lab frame unit vector array*/ | 
| 84 |  | vector<double> zAngle;              /** z -angle array */ | 
| 85 |  | vector<Vector3d> force;               /** force array */ | 
| 86 |  | vector<Vector3d> torque;               /** torque array */ | 
| 98 |  | class Snapshot { | 
| 99 |  | public: | 
| 100 |  |  | 
| 101 | < | Snapshot() {} | 
| 102 | < | Snapshot(int i) { | 
| 103 | < |  | 
| 101 | > | Snapshot(int nAtoms, int nRigidbodies) { | 
| 102 | > | atomData.resize(nAtoms); | 
| 103 | > | rigidbodyData.resize(nRigidbodies); | 
| 104 |  | } | 
| 105 |  |  | 
| 106 |  | Snapshot(const Snapshot& s); | 
| 136 |  | assert(v.size() > 0); | 
| 137 |  | return &(v[0]); | 
| 138 |  | } | 
| 124 | – |  | 
| 125 | – | /** */ | 
| 126 | – | void resize(size_t size); | 
| 139 |  |  | 
| 140 | < |  | 
| 141 | < | /** */ | 
| 142 | < | void reserve(size_t size); | 
| 143 | < |  | 
| 140 | > | int getSize() { | 
| 141 | > | return atomData.size() + rigidbodyData.size(); | 
| 142 | > | } | 
| 143 | > |  | 
| 144 | > | int getSizeOfAtoms() { | 
| 145 | > | return atomData.size(); | 
| 146 | > | } | 
| 147 | > |  | 
| 148 | > | int getSizeOfRigidBodies() { | 
| 149 | > | return rigidbodyData.size(); | 
| 150 | > | } | 
| 151 | > |  | 
| 152 |  | DataStorage atomData; | 
| 153 |  | DataStorage rigidbodyData; | 
| 154 |  |  | 
| 155 | < | friend class SnapshotManager; | 
| 155 | > | friend class StuntDouble; | 
| 156 |  | private: | 
| 157 |  |  | 
| 158 |  | int id_; /**< identification number of the snapshot */ | 
| 159 |  | }; | 
| 160 |  |  | 
| 161 | < | typedef DataStorage* (Snapshot::*DataStoragePointer); | 
| 161 | > | typedef DataStorage (Snapshot::*DataStoragePointer); | 
| 162 |  | } | 
| 163 |  | #endif //BRAINS_SNAPSHOT_HPP |