Line data Source code
1 : /******************************************************************************* 2 : * Project: libopencad 3 : * Purpose: OpenSource CAD formats support library 4 : * Author: Alexandr Borzykh, mush3d at gmail.com 5 : * Author: Dmitry Baryshnikov, bishop.dev@gmail.com 6 : * Language: C++ 7 : ******************************************************************************* 8 : * The MIT License (MIT) 9 : * 10 : * Copyright (c) 2016 Alexandr Borzykh 11 : * Copyright (c) 2016 NextGIS, <info@nextgis.com> 12 : * 13 : * SPDX-License-Identifier: MIT 14 : *******************************************************************************/ 15 : #include "vsilfileio.h" 16 : 17 9 : VSILFileIO::VSILFileIO(const char *pszFilePath) 18 9 : : CADFileIO(pszFilePath), m_oFileStream(nullptr) 19 : { 20 9 : } 21 : 22 18 : VSILFileIO::~VSILFileIO() 23 : { 24 9 : if (m_oFileStream) 25 1 : VSILFileIO::Close(); 26 18 : } 27 : 28 0 : const char *VSILFileIO::ReadLine() 29 : { 30 : // TODO: getline 31 0 : return nullptr; 32 : } 33 : 34 0 : bool VSILFileIO::Eof() const 35 : { 36 0 : return VSIFEofL(m_oFileStream) || VSIFErrorL(m_oFileStream); 37 : } 38 : 39 9 : bool VSILFileIO::Open(int mode) 40 : { 41 : // NOTE: now support only read mode 42 9 : if (mode & OpenMode::out) 43 0 : return false; 44 : 45 9 : std::string sOpenMode = "r"; 46 9 : if (mode & OpenMode::binary) 47 9 : sOpenMode = "rb"; 48 : 49 9 : m_oFileStream = VSIFOpenL(m_soFilePath.c_str(), sOpenMode.c_str()); 50 : 51 9 : if (m_oFileStream != nullptr) 52 9 : m_bIsOpened = true; 53 : 54 9 : return m_bIsOpened; 55 : } 56 : 57 9 : bool VSILFileIO::Close() 58 : { 59 9 : bool bRet = VSIFCloseL(m_oFileStream) == 0 ? true : false; 60 9 : m_oFileStream = nullptr; 61 9 : return bRet; 62 : } 63 : 64 458 : int VSILFileIO::Seek(long offset, CADFileIO::SeekOrigin origin) 65 : { 66 458 : int nWhence = 0; 67 458 : switch (origin) 68 : { 69 8 : case SeekOrigin::CUR: 70 8 : nWhence = SEEK_CUR; 71 8 : break; 72 0 : case SeekOrigin::END: 73 0 : nWhence = SEEK_END; 74 0 : break; 75 450 : case SeekOrigin::BEG: 76 450 : nWhence = SEEK_SET; 77 450 : break; 78 : } 79 : 80 458 : return VSIFSeekL(m_oFileStream, static_cast<vsi_l_offset>(offset), 81 : nWhence) == 0 82 458 : ? 0 83 458 : : 1; 84 : } 85 : 86 0 : long int VSILFileIO::Tell() 87 : { 88 0 : return static_cast<long>(VSIFTellL(m_oFileStream)); 89 : } 90 : 91 716 : size_t VSILFileIO::Read(void *ptr, size_t size) 92 : { 93 716 : return VSIFReadL(static_cast<char *>(ptr), 1, size, m_oFileStream); 94 : } 95 : 96 0 : size_t VSILFileIO::Write(void * /*ptr*/, size_t /*size*/) 97 : { 98 : // unsupported 99 0 : return 0; 100 : } 101 : 102 26 : void VSILFileIO::Rewind() 103 : { 104 26 : VSIRewindL(m_oFileStream); 105 26 : }