/* Copyright (C) 1994-1998 Evgenii Rudnyi, http://Evgenii.Rudnyi.Ru/ Implementation of the algorithm described in E.B. Rudnyi. Statistical model of systematic errors: linear error model. Chemometrics and Intelligent Laboratory Systems. 1996, V. 34, N 1, p. 41-54. This software is a copyrighted work licensed under the terms, described in the file "FREE_LICENSE". */ // sizeof(bool) is changed to sizeof(double) to make alignment for 64-bit // SPARC processor. Well it takes some more memory but memory is chip nowadays. #ifndef _DATA_H #define _DATA_H #include #include "common.h" #include #include typedef vector vec_string; char get_token(istream &in, string &str); char skip_until(istream &in); class data { char* s; protected: vec_string nm; size_t nreg; size_t Nt; size_t N; double P; double xav; public: data() {init();} data(const data& old) {init(); copy(old);} data& operator=(const data &old) { if (this != &old) copy(old); return *this; } data(size_t Nt, size_t nreg) { init(); set(Nt, nreg); } ~data() {clear();} void init(); void clear(); void copy(const data &old); operator int() const {return s ? 1 : 0;} friend ostream& operator<<(ostream &out, data &old); friend istream& operator>>(istream &in, data &to) {return to.read(in);} istream& read(istream &in, size_t np = 0); void set(size_t Nt, size_t nreg); int Ntot() const {return Nt;} int Nvar() const {return nreg;} int Ns() const {return N;} double Ps() const {return P;} double xs() const {return xav;} double& operator()(size_t i, size_t j) { return val(i, j); } double& val(size_t i, size_t j) { return *((double*)(s + i*(sizeof(double)*nreg + sizeof(double)) + sizeof(double)*j)); } double* operator()(size_t i) { return (double*)(s + i*(sizeof(double)*nreg + sizeof(double))); } bool& atr(size_t i) { return *(bool*)(s + (i + 1)*sizeof(double)*nreg + i*sizeof(double)); } string& name(size_t j) { return nm[j]; } const vec_string& names() const { return nm; } void set_av(); }; #endif