From 247faeedad984ad8b033b74b69a955afbf0e9aff Mon Sep 17 00:00:00 2001 From: leocad Date: Tue, 23 Nov 1999 21:05:20 +0000 Subject: Split the File class into FileMem and FileDisk git-svn-id: http://svn.leocad.org/trunk@17 c7d43263-9d01-0410-8a33-9dba5d9f93d6 --- common/file.cpp | 470 +++++++++++++++++++++++++++----------------------------- 1 file changed, 228 insertions(+), 242 deletions(-) (limited to 'common/file.cpp') 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; } + + -- cgit v1.2.3