Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

vuLightfieldFile.cpp

Go to the documentation of this file.
00001 #include "vuLightfieldFile.h"
00002 
00003 vuLightfieldFile::vuLightfieldFile()
00004 {
00005   // this function is not supposed to call
00006   vuLightfieldFile::vuLightfieldFile("", false);
00007 }
00008 
00010 vuLightfieldFile::vuLightfieldFile(const char *fileName, bool isWritingMode)
00011 {
00012   m_Mode          = 1;                  // binary mode (default)
00013   m_DataSize      = 0;                  // unknown
00014   m_DataName      = vuString("data");   // default data name
00015   m_IsWritingMode = isWritingMode;
00016   m_FileName      = vuString(fileName); // file name
00017   m_IsHeaderDone  = false;
00018   m_FileStream    = NULL;
00019 }
00020 
00022 vuLightfieldFile::~vuLightfieldFile()
00023 {
00024   CHECKNDELETE(m_FileStream);
00025 }
00026 
00028 const char* vuLightfieldFile::getFileName()
00029 {
00030   return m_FileName.c_str();
00031 }
00032 
00034 const vuString vuLightfieldFile::getErrorMessage()
00035 {
00036   return m_ErrorMessage;
00037 }
00038 
00040 bool vuLightfieldFile::open()
00041 {
00042   if (m_FileStream != NULL)
00043     return _setErrorMessage("FileStream is already open");
00044   else if (m_FileName.isEmpty())
00045     return _setErrorMessage("No file name specified");
00046 
00047   if (m_IsWritingMode) {
00048     m_FileStream = new fstream(m_FileName.c_str(), ios::binary | ios::out);
00049   }
00050   else {
00051     m_FileStream = new fstream(m_FileName.c_str(), ios::binary | ios::in);
00052   }
00053 
00054   if (!m_FileStream->is_open()) {
00055     m_FileStream->close();
00056     CHECKNDELETE(m_FileStream);
00057     return _setErrorMessage("Could not open file");
00058   }
00059 
00060   return true;
00061 }
00062 
00064 void vuLightfieldFile::close()
00065 {
00066   if (m_FileStream != NULL) {
00067     m_FileStream->close();
00068   }
00069 }
00070 
00072 bool vuLightfieldFile::readHeader()
00073 {
00074   if (!_isReadyForReading())
00075     return false;
00076   else if (m_IsHeaderDone)
00077     return _setErrorMessage("Header is already read");
00078 
00079   char str[64];
00080     
00081   m_FileStream->getline(str, 32);
00082   if (strcmp(str, "# vu DataFile Version 1.0") != 0)
00083     return _setErrorMessage("No Version 1.0 file");
00084 
00085   m_FileStream->getline(str, 32);
00086   if (strcmp(str, "Volume Data") != 0)
00087     return _setErrorMessage("No Volume Data file");
00088 
00089   m_FileStream->getline(str, 32);
00090   if (strcmp(str, "BINARY") == 0)
00091     m_Mode = 1; // binary mode
00092   else
00093     return _setErrorMessage("File is not in binary mode");
00094 
00095   m_FileStream->getline(str, 32);
00096   if (strcmp(str, "DATASET LIGHTFIELD") != 0)
00097     return _setErrorMessage("No Lightfield file");
00098 
00099   m_FileStream->getline(str, 32);
00100   if (strcmp(str, "UNIMODAL") != 0)
00101     return _setErrorMessage("No Unimodal file");
00102 
00103   m_IsHeaderDone = true;
00104   return true;
00105 }
00106 
00108 bool vuLightfieldFile::writeHeader()
00109 {
00110   if (!_isReadyForWriting()) return false;
00111   if (m_DataName.isEmpty())  return _setErrorMessage("No data name set");
00112     
00113   *m_FileStream << "# vu DataFile Version 1.0" << endl;
00114   *m_FileStream << "Volume Data" << endl;
00115   if (m_Mode == 1)
00116     *m_FileStream << "BINARY" << endl;
00117   else
00118     return _setErrorMessage("Only binary mode is supported");
00119     
00120   *m_FileStream << "DATASET LIGHTFIELD" << endl;
00121   *m_FileStream << "UNIMODAL" << endl;
00122 
00123   m_IsHeaderDone = true;
00124   return true;
00125 }
00126 
00127 /* ------------------------------------------------------------------------ */
00128 /* --- proctected methods ------------------------------------------------- */
00129 /* ------------------------------------------------------------------------ */
00130 
00131 bool vuLightfieldFile::_setErrorMessage(const char *msg)
00132 {
00133   m_ErrorMessage = vuString(msg);
00134   return false;
00135 }
00136 
00137 bool vuLightfieldFile::_isReadyForReading()
00138 {
00139   if (m_IsWritingMode)
00140     return _setErrorMessage("Is not in reading mode");
00141   else if (m_FileStream == NULL)
00142     return _setErrorMessage("FileStream is not open");
00143   else
00144     return true;
00145 }
00146 
00147 bool vuLightfieldFile::_isReadyForWriting()
00148 {
00149   if (!m_IsWritingMode)
00150     return _setErrorMessage("Is not in writing mode");
00151   else if (m_FileStream == NULL)
00152     return _setErrorMessage("FileStream is not open");
00153   else 
00154     return true;
00155 }

Generated on Wed Dec 15 21:20:35 2004 for vuVolume by  doxygen 1.3.9.1