/src/gdal/ogr/ogrsf_frmts/cad/vsilfileio.cpp
Line | Count | Source |
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 | | VSILFileIO::VSILFileIO(const char *pszFilePath) |
18 | 6.86k | : CADFileIO(pszFilePath), m_oFileStream(nullptr) |
19 | 6.86k | { |
20 | 6.86k | } |
21 | | |
22 | | VSILFileIO::~VSILFileIO() |
23 | 6.86k | { |
24 | 6.86k | if (m_oFileStream) |
25 | 41 | VSILFileIO::Close(); |
26 | 6.86k | } |
27 | | |
28 | | const char *VSILFileIO::ReadLine() |
29 | 0 | { |
30 | | // TODO: getline |
31 | 0 | return nullptr; |
32 | 0 | } |
33 | | |
34 | | bool VSILFileIO::Eof() const |
35 | 0 | { |
36 | 0 | return VSIFEofL(m_oFileStream) || VSIFErrorL(m_oFileStream); |
37 | 0 | } |
38 | | |
39 | | bool VSILFileIO::Open(int mode) |
40 | 6.86k | { |
41 | | // NOTE: now support only read mode |
42 | 6.86k | if (mode & OpenMode::out) |
43 | 0 | return false; |
44 | | |
45 | 6.86k | std::string sOpenMode = "r"; |
46 | 6.86k | if (mode & OpenMode::binary) |
47 | 6.86k | sOpenMode = "rb"; |
48 | | |
49 | 6.86k | m_oFileStream = VSIFOpenL(m_soFilePath.c_str(), sOpenMode.c_str()); |
50 | | |
51 | 6.86k | if (m_oFileStream != nullptr) |
52 | 6.86k | m_bIsOpened = true; |
53 | | |
54 | 6.86k | return m_bIsOpened; |
55 | 6.86k | } |
56 | | |
57 | | bool VSILFileIO::Close() |
58 | 6.86k | { |
59 | 6.86k | bool bRet = VSIFCloseL(m_oFileStream) == 0 ? true : false; |
60 | 6.86k | m_oFileStream = nullptr; |
61 | 6.86k | return bRet; |
62 | 6.86k | } |
63 | | |
64 | | int VSILFileIO::Seek(long offset, CADFileIO::SeekOrigin origin) |
65 | 891k | { |
66 | 891k | int nWhence = 0; |
67 | 891k | switch (origin) |
68 | 891k | { |
69 | 6.82k | case SeekOrigin::CUR: |
70 | 6.82k | nWhence = SEEK_CUR; |
71 | 6.82k | break; |
72 | 0 | case SeekOrigin::END: |
73 | 0 | nWhence = SEEK_END; |
74 | 0 | break; |
75 | 884k | case SeekOrigin::BEG: |
76 | 884k | nWhence = SEEK_SET; |
77 | 884k | break; |
78 | 891k | } |
79 | | |
80 | 891k | return VSIFSeekL(m_oFileStream, offset, nWhence) == 0 ? 0 : 1; |
81 | 891k | } |
82 | | |
83 | | long int VSILFileIO::Tell() |
84 | 0 | { |
85 | 0 | return static_cast<long>(VSIFTellL(m_oFileStream)); |
86 | 0 | } |
87 | | |
88 | | size_t VSILFileIO::Read(void *ptr, size_t size) |
89 | 4.26M | { |
90 | 4.26M | return VSIFReadL(static_cast<char *>(ptr), 1, size, m_oFileStream); |
91 | 4.26M | } |
92 | | |
93 | | size_t VSILFileIO::Write(void * /*ptr*/, size_t /*size*/) |
94 | 0 | { |
95 | | // unsupported |
96 | 0 | return 0; |
97 | 0 | } |
98 | | |
99 | | void VSILFileIO::Rewind() |
100 | 20.5k | { |
101 | 20.5k | VSIRewindL(m_oFileStream); |
102 | 20.5k | } |