filematrix.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifndef FILE_MATRIX_HEADER
00029 #define FILE_MATRIX_HEADER
00030
00031 #include "matrix_typedefs.h"
00032 #include "realtype.h"
00033
00034 #include <exception>
00035 #include "Failure.h"
00036
00037 template<typename Treal, typename TMatrixType>
00038 class FileMatrix
00039 {
00040 public:
00041 FileMatrix();
00042 ~FileMatrix();
00043 TMatrixType M;
00044 void AssignFileName(const char* fileName);
00045 void ReadFromFile();
00046 void WriteToFile();
00047 private:
00048 char* FileName;
00049 };
00050
00051 template<typename Treal, typename TMatrixType>
00052 FileMatrix<Treal, TMatrixType>::FileMatrix()
00053 {
00054 FileName = NULL;
00055 }
00056
00057 template<typename Treal, typename TMatrixType>
00058 FileMatrix<Treal, TMatrixType>::~FileMatrix()
00059 {
00060 if(FileName != NULL)
00061 {
00062
00063 unlink(FileName);
00064
00065 delete FileName;
00066 FileName = NULL;
00067 }
00068 }
00069
00070 template<typename Treal, typename TMatrixType>
00071 void FileMatrix<Treal, TMatrixType>::AssignFileName(const char* fileName)
00072 {
00073 if(fileName != NULL)
00074 {
00075 FileName = new char[strlen(fileName)+1];
00076 strcpy(FileName, fileName);
00077 }
00078 else
00079 throw "Error in FileMatrix::AssignFileName: fileName == NULL";
00080 }
00081
00082 template<typename Treal, typename TMatrixType>
00083 void FileMatrix<Treal, TMatrixType>::WriteToFile()
00084 {
00085 if(FileName != NULL)
00086 {
00087 int noOfBytes = 0;
00088 M.write_to_buffer_count(noOfBytes);
00089 Treal* buffer = (ergo_real*)new char[noOfBytes];
00090 M.write_to_buffer(buffer, noOfBytes);
00091 FILE* f = fopen(FileName, "wb");
00092 if(f == NULL)
00093 throw "error in FileMatrix::WriteToFile, in fopen";
00094 if(fwrite(buffer, sizeof(char), noOfBytes, f) != (unsigned int)noOfBytes)
00095 throw "error in FileMatrix::WriteToFile, in fwrite";
00096 fclose(f);
00097 delete buffer;
00098
00099 M.clear();
00100 }
00101 }
00102
00103 template<typename Treal, typename TMatrixType>
00104 void FileMatrix<Treal, TMatrixType>::ReadFromFile()
00105 {
00106 if(FileName != NULL)
00107 {
00108
00109 FILE* f = fopen(FileName, "rb");
00110 if(f == NULL)
00111 throw "error in FileMatrix::ReadFromFile, in fopen";
00112
00113 fseek(f, 0L, SEEK_END);
00114 int fileSize = ftell(f);
00115 fseek(f, 0L, SEEK_SET);
00116 if(fileSize <= 0)
00117 throw "error in FileMatrix::ReadFromFile, (fileSize <= 0)";
00118
00119 char* buffer = new char[fileSize];
00120
00121 if(fread(buffer, sizeof(char), fileSize, f) != (unsigned int)fileSize)
00122 throw "error in FileMatrix::ReadFromFile, in fread";
00123
00124 fclose(f);
00125
00126 M.read_from_buffer(buffer, fileSize);
00127 delete buffer;
00128 }
00129 }
00130
00131
00132 #endif
00133