6 #include <gromacs/math/vectypes.h>
8 template<typename T> class RealVector {
11 RealVector(T v[3]) : x(v[0]), y(v[1]), z(v[2]) {};
12 T operator[] (size_t i) {
21 throw std::out_of_range("Inexistent component requested");
26 template<typename T, typename Adaptor, typename Inner> class Array {
31 Array(Inner *data, size_t length) : data(data), length(length) {};
32 Adaptor operator[] (size_t i) {
34 throw std::out_of_range("Array index out of range");
36 return Adaptor(data[i]);
38 size_t len() { return length; };
45 Matrix(real data[3][3]) {
46 std::copy((real*) data, ((real*) data) + 9, (real*) this->data);
48 real get(size_t i, size_t j) {
50 throw std::out_of_range("Matrix index out of range");
53 RealVector<real> get(size_t i) {
55 throw std::out_of_range("Matrix index out of range");
56 return RealVector<real>(data[i]);
60 typedef RealVector<real> py_rvec;
61 typedef Array<real, py_rvec, rvec> rvecs;