#ifndef MATRIX_H #define MATRIX_H class matrix { public: matrix(size_t m, size_t n); size_t vsize() const; size_t hsize() const; bool get(size_t i, size_t j) const; void set(size_t i, size_t j, bool e); void assign_mul(const matrix & a, const matrix & b); private: typedef unsigned int data_t; size_t m, n; /* data are organized in rows, one after another */ data_t *data; inline size_t data_t_bit_size() const { return sizeof(data_t) * 8; } inline size_t get_linear_index(size_t i, size_t j) const { return this->m * i + j; } inline size_t get_item_index(size_t linear_index) const { return linear_index / data_t_bit_size(); } /* offset is taken from left */ inline size_t get_item_offset(size_t linear_index) const { return linear_index % data_t_bit_size(); } }; #endif