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