/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 | 7.59k | : CADFileIO(pszFilePath), m_oFileStream(nullptr) |
19 | 7.59k | { |
20 | 7.59k | } |
21 | | |
22 | | VSILFileIO::~VSILFileIO() |
23 | 7.59k | { |
24 | 7.59k | if (m_oFileStream) |
25 | 45 | VSILFileIO::Close(); |
26 | 7.59k | } |
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 | 7.59k | { |
41 | | // NOTE: now support only read mode |
42 | 7.59k | if (mode & OpenMode::out) |
43 | 0 | return false; |
44 | | |
45 | 7.59k | std::string sOpenMode = "r"; |
46 | 7.59k | if (mode & OpenMode::binary) |
47 | 7.59k | sOpenMode = "rb"; |
48 | | |
49 | 7.59k | m_oFileStream = VSIFOpenL(m_soFilePath.c_str(), sOpenMode.c_str()); |
50 | | |
51 | 7.59k | if (m_oFileStream != nullptr) |
52 | 7.59k | m_bIsOpened = true; |
53 | | |
54 | 7.59k | return m_bIsOpened; |
55 | 7.59k | } |
56 | | |
57 | | bool VSILFileIO::Close() |
58 | 7.59k | { |
59 | 7.59k | bool bRet = VSIFCloseL(m_oFileStream) == 0 ? true : false; |
60 | 7.59k | m_oFileStream = nullptr; |
61 | 7.59k | return bRet; |
62 | 7.59k | } |
63 | | |
64 | | int VSILFileIO::Seek(long offset, CADFileIO::SeekOrigin origin) |
65 | 1.10M | { |
66 | 1.10M | int nWhence = 0; |
67 | 1.10M | switch (origin) |
68 | 1.10M | { |
69 | 7.54k | case SeekOrigin::CUR: |
70 | 7.54k | nWhence = SEEK_CUR; |
71 | 7.54k | break; |
72 | 0 | case SeekOrigin::END: |
73 | 0 | nWhence = SEEK_END; |
74 | 0 | break; |
75 | 1.10M | case SeekOrigin::BEG: |
76 | 1.10M | nWhence = SEEK_SET; |
77 | 1.10M | break; |
78 | 1.10M | } |
79 | | |
80 | 1.10M | return VSIFSeekL(m_oFileStream, static_cast<vsi_l_offset>(offset), |
81 | 1.10M | nWhence) == 0 |
82 | 1.10M | ? 0 |
83 | 1.10M | : 1; |
84 | 1.10M | } |
85 | | |
86 | | long int VSILFileIO::Tell() |
87 | 0 | { |
88 | 0 | return static_cast<long>(VSIFTellL(m_oFileStream)); |
89 | 0 | } |
90 | | |
91 | | size_t VSILFileIO::Read(void *ptr, size_t size) |
92 | 4.37M | { |
93 | 4.37M | return VSIFReadL(static_cast<char *>(ptr), 1, size, m_oFileStream); |
94 | 4.37M | } |
95 | | |
96 | | size_t VSILFileIO::Write(void * /*ptr*/, size_t /*size*/) |
97 | 0 | { |
98 | | // unsupported |
99 | 0 | return 0; |
100 | 0 | } |
101 | | |
102 | | void VSILFileIO::Rewind() |
103 | 22.7k | { |
104 | 22.7k | VSIRewindL(m_oFileStream); |
105 | 22.7k | } |