00001 #ifndef BINARYFILEREADER_H_INCLUDED
00002 #define BINARYFILEREADER_H_INCLUDED
00003
00004 #include "IMeshReader.h"
00005
00006 #include <fstream>
00007
00008 namespace MeshRead
00009 {
00010
00011 class BinaryFileReader : public IMeshReader
00012 {
00013 public:
00014
00015 BinaryFileReader();
00016 BinaryFileReader(const std::string & fileName);
00017
00018 virtual ~BinaryFileReader();
00019
00020 bool Init();
00021 bool Init(const std::string &);
00022 void Free();
00023
00024 bool doRead(hHybridMesh * mesh);
00025 std::string Name() const;
00026
00027 int GetCoordinatesDimension() const;
00028 int GetVerticesCount();
00029 bool GetNextVertex(double *);
00030 void GetElementCount(int*);
00031 bool GetNextElement(Tind*, Tind*,Tind*,Tind&,Tind&,int8_t&,int8_t&);
00032 bool GetBoundaryConditions(double **,int&);
00033
00034 bool needsSetup() const ;
00035
00036 template <typename T>
00037 friend BinaryFileReader& operator>>(BinaryFileReader& reader,T & value);
00038
00039 template <typename T>
00040 friend BinaryFileReader& operator>>(BinaryFileReader& reader,T * value);
00041
00042 private:
00043 std::string _file_name;
00044 std::ifstream _file;
00045 };
00046
00047 template <typename T>
00048 BinaryFileReader& operator>> (BinaryFileReader& reader, T & value)
00049 {
00050 reader._file.read(reinterpret_cast<char *>(&value), sizeof(value));
00051 return reader;
00052 }
00053
00054 template <typename T>
00055 BinaryFileReader& operator>> (BinaryFileReader& reader, T * value)
00056 {
00057 reader._file.read(reinterpret_cast<char *>(value), sizeof(T));
00058 return reader;
00059 }
00060
00061
00062 };
00063
00064 #endif // BINARYFILEREADER_H_INCLUDED