/*
    Copyright (C) 2012 Bartosz Broda, Jacek Bochenek, Łukasz Biłeńkij, 
    Damian Jaworski, Wojciech Mazur, Dominik Piasecki, Maciej Piasecki, 
    Radosław Ramocki
    
    This program is free software; you can redistribute it and/or modify it
under the terms of the GNU Lesser General Public License as published by the Free
Software Foundation; either version 3 of the License, or (at your option)
any later version.

    This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
or FITNESS FOR A PARTICULAR PURPOSE. 

    See the LICENSE and COPYING files for more details.
*/

#ifndef MATRICESLIB_IO_CRSMATRIXREADER_H
#define MATRICESLIB_IO_CRSMATRIXREADER_H

#include "../matrices_headers.h"
#include "CCSMultiFileReader.h"
#include "../CRSMatrix.h"

namespace Matrices
{
	namespace IO
	{
		/// klasa odczytujaca macierze CRSMatrix
		class MATRICES_API CRSMatrixReader : private CCSMultiFileReader
		{
		public:
			CRSMatrixReader(const std::string &dir, const std::string &name, std::string transformation_suffix = "tf", bool showMsg = true, 
				std::ostream &log = std::cout);

			void ReadMatrix(CRSMatrix &matrix);

		protected:
			CompressedVector* GetRow(size_t rowNumber);
		};

		CRSMatrixPtr MATRICES_API ReadCRSFromSingleFile(const std::string &filename, const std::string &matrix_name);
	}
}
#endif //MATRICESLIB_IO_CRSMATRIXREADER_H
