summaryrefslogtreecommitdiff
path: root/common/file.cpp
diff options
context:
space:
mode:
authorleocad1999-11-23 21:05:20 +0000
committerleocad1999-11-23 21:05:20 +0000
commit247faeedad984ad8b033b74b69a955afbf0e9aff (patch)
treeb6b5a9a78569f20accce52074e3276b3ce7f7f75 /common/file.cpp
parent73dd484ef0c6a10ac3b229c24f3aae4f2175e8a9 (diff)
Split the File class into FileMem and FileDisk
git-svn-id: http://svn.leocad.org/trunk@17 c7d43263-9d01-0410-8a33-9dba5d9f93d6
Diffstat (limited to 'common/file.cpp')
-rw-r--r--common/file.cpp470
1 files changed, 228 insertions, 242 deletions
diff --git a/common/file.cpp b/common/file.cpp
index 2791f7a..598d352 100644
--- a/common/file.cpp
+++ b/common/file.cpp
@@ -9,329 +9,315 @@
/////////////////////////////////////////////////////////////////////////////
// File construction/destruction
-File::File(bool bMemFile)
-{
- m_bMemFile = bMemFile;
-
- if (m_bMemFile)
- {
- m_nGrowBytes = 1024;
- m_nPosition = 0;
- m_nBufferSize = 0;
- m_nFileSize = 0;
- m_pBuffer = NULL;
- m_bAutoDelete = true;
- }
- else
- {
- m_hFile = NULL;
- m_bCloseOnDelete = false;
- }
+File::File()
+{
}
File::~File()
{
- if (m_bMemFile)
- {
- if (m_pBuffer)
- Close();
+}
- m_nGrowBytes = 0;
- m_nPosition = 0;
- m_nBufferSize = 0;
- m_nFileSize = 0;
- }
- else
- {
- if (m_hFile != NULL && m_bCloseOnDelete)
- Close();
- }
+FileMem::FileMem()
+{
+ m_nGrowBytes = 1024;
+ m_nPosition = 0;
+ m_nBufferSize = 0;
+ m_nFileSize = 0;
+ m_pBuffer = NULL;
+ m_bAutoDelete = true;
+}
+
+FileDisk::FileDisk()
+{
+ m_hFile = NULL;
+ m_bCloseOnDelete = false;
+}
+
+FileMem::~FileMem()
+{
+ if (m_pBuffer)
+ Close();
+
+ m_nGrowBytes = 0;
+ m_nPosition = 0;
+ m_nBufferSize = 0;
+ m_nFileSize = 0;
+}
+
+FileDisk::~FileDisk()
+{
+ if (m_hFile != NULL && m_bCloseOnDelete)
+ Close();
}
/////////////////////////////////////////////////////////////////////////////
// File operations
-char* File::ReadString(char* pBuf, unsigned long nMax)
+char* FileMem::ReadString(char* pBuf, unsigned long nMax)
{
- if (m_bMemFile)
- {
- int nRead = 0;
- unsigned char ch;
+ int nRead = 0;
+ unsigned char ch;
- if (nMax <= 0)
- return NULL;
- if (m_nPosition >= m_nFileSize)
- return NULL;
+ if (nMax <= 0)
+ return NULL;
+ if (m_nPosition >= m_nFileSize)
+ return NULL;
- while (--nMax)
- {
- if (m_nPosition == m_nFileSize)
- break;
+ while (--nMax)
+ {
+ if (m_nPosition == m_nFileSize)
+ break;
- ch = m_pBuffer[m_nPosition];
- m_nPosition++;
- pBuf[nRead++] = ch;
+ ch = m_pBuffer[m_nPosition];
+ m_nPosition++;
+ pBuf[nRead++] = ch;
- if (ch == '\n')
- break;
- }
+ if (ch == '\n')
+ break;
+ }
- pBuf[nRead] = '\0';
- return pBuf;
- }
- else
- return fgets(pBuf, nMax, m_hFile);
+ pBuf[nRead] = '\0';
+ return pBuf;
}
-unsigned long File::Read(void* pBuf, unsigned long nCount)
+char* FileDisk::ReadString(char* pBuf, unsigned long nMax)
{
- if (nCount == 0)
- return 0;
+ return fgets(pBuf, nMax, m_hFile);
+}
+
+unsigned long FileMem::Read(void* pBuf, unsigned long nCount)
+{
+ if (nCount == 0)
+ return 0;
- if (m_bMemFile)
- {
- if (m_nPosition > m_nFileSize)
- return 0;
+ if (m_nPosition > m_nFileSize)
+ return 0;
- unsigned long nRead;
- if (m_nPosition + nCount > m_nFileSize)
- nRead = (unsigned long)(m_nFileSize - m_nPosition);
- else
- nRead = nCount;
+ unsigned long nRead;
+ if (m_nPosition + nCount > m_nFileSize)
+ nRead = (unsigned long)(m_nFileSize - m_nPosition);
+ else
+ nRead = nCount;
- memcpy((unsigned char*)pBuf, (unsigned char*)m_pBuffer + m_nPosition, nRead);
- m_nPosition += nRead;
+ memcpy((unsigned char*)pBuf, (unsigned char*)m_pBuffer + m_nPosition, nRead);
+ m_nPosition += nRead;
- return nRead;
- }
- else
- return fread(pBuf, 1, nCount, m_hFile);
+ return nRead;
+}
+
+unsigned long FileDisk::Read(void* pBuf, unsigned long nCount)
+{
+ return fread(pBuf, 1, nCount, m_hFile);
}
-int File::GetChar()
+int FileMem::GetChar()
{
- if (m_bMemFile)
- {
- if (m_nPosition > m_nFileSize)
- return 0;
+ if (m_nPosition > m_nFileSize)
+ return 0;
- unsigned char* ret = (unsigned char*)m_pBuffer + m_nPosition;
- m_nPosition++;
+ unsigned char* ret = (unsigned char*)m_pBuffer + m_nPosition;
+ m_nPosition++;
- return *ret;
- }
- else
- return fgetc(m_hFile);
+ return *ret;
}
-unsigned long File::Write(const void* pBuf, unsigned long nCount)
+int FileDisk::GetChar()
{
- if (nCount == 0)
- return 0;
+ return fgetc(m_hFile);
+}
+
+unsigned long FileMem::Write(const void* pBuf, unsigned long nCount)
+{
+ if (nCount == 0)
+ return 0;
- if (m_bMemFile)
- {
- if (m_nPosition + nCount > m_nBufferSize)
- GrowFile(m_nPosition + nCount);
+ if (m_nPosition + nCount > m_nBufferSize)
+ GrowFile(m_nPosition + nCount);
- memcpy((unsigned char*)m_pBuffer + m_nPosition, (unsigned char*)pBuf, nCount);
+ memcpy((unsigned char*)m_pBuffer + m_nPosition, (unsigned char*)pBuf, nCount);
- m_nPosition += nCount;
+ m_nPosition += nCount;
- if (m_nPosition > m_nFileSize)
- m_nFileSize = m_nPosition;
+ if (m_nPosition > m_nFileSize)
+ m_nFileSize = m_nPosition;
- return nCount;
- }
- else
- return fwrite(pBuf, 1, nCount, m_hFile);
+ return nCount;
+}
+
+unsigned long FileDisk::Write(const void* pBuf, unsigned long nCount)
+{
+ return fwrite(pBuf, 1, nCount, m_hFile);
}
-int File::PutChar(int c)
+int FileMem::PutChar(int c)
{
- if (m_bMemFile)
- {
- if (m_nPosition + 1 > m_nBufferSize)
- GrowFile(m_nPosition + 1);
+ if (m_nPosition + 1 > m_nBufferSize)
+ GrowFile(m_nPosition + 1);
- unsigned char* bt = (unsigned char*)m_pBuffer + m_nPosition;
- *bt = c;
+ unsigned char* bt = (unsigned char*)m_pBuffer + m_nPosition;
+ *bt = c;
- m_nPosition++;
+ m_nPosition++;
- if (m_nPosition > m_nFileSize)
- m_nFileSize = m_nPosition;
+ if (m_nPosition > m_nFileSize)
+ m_nFileSize = m_nPosition;
- return 1;
- }
- else
- return fputc(c, m_hFile);
+ return 1;
}
-bool File::Open(const char *filename, const char *mode)
+int FileDisk::PutChar(int c)
{
- if (m_bMemFile)
- return false;
- else
- {
- m_hFile = fopen(filename, mode);
- m_bCloseOnDelete = true;
-
- return (m_hFile != NULL);
- }
+ return fputc(c, m_hFile);
}
-void File::Close()
+bool FileDisk::Open(const char *filename, const char *mode)
{
- if (m_bMemFile)
- {
- m_nGrowBytes = 0;
- m_nPosition = 0;
- m_nBufferSize = 0;
- m_nFileSize = 0;
- if (m_pBuffer && m_bAutoDelete)
- free(m_pBuffer);
- m_pBuffer = NULL;
- }
- else
- {
- if (m_hFile != NULL)
- fclose(m_hFile);
+ m_hFile = fopen(filename, mode);
+ m_bCloseOnDelete = true;
+
+ return (m_hFile != NULL);
+}
- m_hFile = NULL;
- m_bCloseOnDelete = false;
-// m_strFileName.Empty();
- }
+void FileMem::Close()
+{
+ m_nGrowBytes = 0;
+ m_nPosition = 0;
+ m_nBufferSize = 0;
+ m_nFileSize = 0;
+ if (m_pBuffer && m_bAutoDelete)
+ free(m_pBuffer);
+ m_pBuffer = NULL;
}
-unsigned long File::Seek(long lOff, int nFrom)
+void FileDisk::Close()
{
- if (m_bMemFile)
- {
- unsigned long lNewPos = m_nPosition;
+ if (m_hFile != NULL)
+ fclose(m_hFile);
- if (nFrom == SEEK_SET)
- lNewPos = lOff;
- else if (nFrom == SEEK_CUR)
- lNewPos += lOff;
- else if (nFrom == SEEK_END)
- lNewPos = m_nFileSize + lOff;
- else
- return (unsigned long)-1;
+ m_hFile = NULL;
+ m_bCloseOnDelete = false;
+}
+
+unsigned long FileMem::Seek(long lOff, int nFrom)
+{
+ unsigned long lNewPos = m_nPosition;
- m_nPosition = lNewPos;
+ if (nFrom == SEEK_SET)
+ lNewPos = lOff;
+ else if (nFrom == SEEK_CUR)
+ lNewPos += lOff;
+ else if (nFrom == SEEK_END)
+ lNewPos = m_nFileSize + lOff;
+ else
+ return (unsigned long)-1;
- return m_nPosition;
- }
- else
- {
- fseek (m_hFile, lOff, nFrom);
+ m_nPosition = lNewPos;
- return ftell(m_hFile);
- }
+ return m_nPosition;
}
-unsigned long File::GetPosition() const
+unsigned long FileDisk::Seek(long lOff, int nFrom)
{
- if (m_bMemFile)
- return m_nPosition;
- else
- return ftell(m_hFile);
+ fseek (m_hFile, lOff, nFrom);
+
+ return ftell(m_hFile);
}
-void File::GrowFile(unsigned long nNewLen)
+unsigned long FileMem::GetPosition() const
{
- if (m_bMemFile)
- {
- if (nNewLen > m_nBufferSize)
- {
- // grow the buffer
- unsigned long nNewBufferSize = m_nBufferSize;
+ return m_nPosition;
+}
- // determine new buffer size
- while (nNewBufferSize < nNewLen)
- nNewBufferSize += m_nGrowBytes;
+unsigned long FileDisk::GetPosition() const
+{
+ return ftell(m_hFile);
+}
- // allocate new buffer
- unsigned char* lpNew;
- if (m_pBuffer == NULL)
- lpNew = (unsigned char*)malloc(nNewBufferSize);
- else
- lpNew = (unsigned char*)realloc(m_pBuffer, nNewBufferSize);
+void FileMem::GrowFile(unsigned long nNewLen)
+{
+ if (nNewLen > m_nBufferSize)
+ {
+ // grow the buffer
+ unsigned long nNewBufferSize = m_nBufferSize;
+
+ // determine new buffer size
+ while (nNewBufferSize < nNewLen)
+ nNewBufferSize += m_nGrowBytes;
+
+ // allocate new buffer
+ unsigned char* lpNew;
+ if (m_pBuffer == NULL)
+ lpNew = (unsigned char*)malloc(nNewBufferSize);
+ else
+ lpNew = (unsigned char*)realloc(m_pBuffer, nNewBufferSize);
+
+ m_pBuffer = lpNew;
+ m_nBufferSize = nNewBufferSize;
+ }
+}
- m_pBuffer = lpNew;
- m_nBufferSize = nNewBufferSize;
- }
- }
+void FileMem::Flush()
+{
+ // Nothing to be done
}
-void File::Flush()
+void FileDisk::Flush()
{
- if (m_bMemFile)
- {
+ if (m_hFile == NULL)
+ return;
- }
- else
- {
- if (m_hFile == NULL)
- return;
+ fflush(m_hFile);
+}
- fflush(m_hFile);
- }
+void FileMem::Abort()
+{
+ Close();
}
-void File::Abort()
-{
- if (m_bMemFile)
- Close();
- else
- {
- if (m_hFile != NULL)
- {
- // close but ignore errors
- if (m_bCloseOnDelete)
- fclose(m_hFile);
- m_hFile = NULL;
- m_bCloseOnDelete = false;
- }
-// m_strFileName.Empty();
- }
+void FileDisk::Abort()
+{
+ if (m_hFile != NULL)
+ {
+ // close but ignore errors
+ if (m_bCloseOnDelete)
+ fclose(m_hFile);
+ m_hFile = NULL;
+ m_bCloseOnDelete = false;
+ }
}
-void File::SetLength(unsigned long nNewLen)
+void FileMem::SetLength(unsigned long nNewLen)
{
- if (m_bMemFile)
- {
- if (nNewLen > m_nBufferSize)
- GrowFile(nNewLen);
+ if (nNewLen > m_nBufferSize)
+ GrowFile(nNewLen);
+
+ if (nNewLen < m_nPosition)
+ m_nPosition = nNewLen;
+
+ m_nFileSize = nNewLen;
+}
- if (nNewLen < m_nPosition)
- m_nPosition = nNewLen;
+void FileDisk::SetLength(unsigned long nNewLen)
+{
+ fseek(m_hFile, nNewLen, SEEK_SET);
+}
- m_nFileSize = nNewLen;
- }
- else
- {
- fseek(m_hFile, nNewLen, SEEK_SET);
- }
+unsigned long FileMem::GetLength() const
+{
+ return m_nBufferSize;
}
-unsigned long File::GetLength() const
+unsigned long FileDisk::GetLength() const
{
- if (m_bMemFile)
- {
- return m_nBufferSize;
- }
- else
- {
- unsigned long nLen, nCur;
+ unsigned long nLen, nCur;
- // Seek is a non const operation
- nCur = ftell(m_hFile);
- fseek(m_hFile, 0, SEEK_END);
- nLen = ftell(m_hFile);
- fseek(m_hFile, nCur, SEEK_SET);
+ // Seek is a non const operation
+ nCur = ftell(m_hFile);
+ fseek(m_hFile, 0, SEEK_END);
+ nLen = ftell(m_hFile);
+ fseek(m_hFile, nCur, SEEK_SET);
- return nLen;
- }
+ return nLen;
}
+
+