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-2019 NextGIS, <info@nextgis.com>
12  *
13  *  Permission is hereby granted, free of charge, to any person obtaining a copy
14  *  of this software and associated documentation files (the "Software"), to deal
15  *  in the Software without restriction, including without limitation the rights
16  *  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
17  *  copies of the Software, and to permit persons to whom the Software is
18  *  furnished to do so, subject to the following conditions:
19  *
20  *  The above copyright notice and this permission notice shall be included in all
21  *  copies or substantial portions of the Software.
22  *
23  *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
24  *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
25  *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
26  *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
27  *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
28  *  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
29  *  SOFTWARE.
30  ******************************************************************************/
31 #ifndef CADFILEIO_H
32 #define CADFILEIO_H
33 
34 #include "opencad.h"
35 
36 #include <cstddef>
37 #include <string>
38 
39 /**
40  * @brief The CADFileIO class provides in/out file operations as read, write,
41  * seek, etc. This is abstract class.
42  */
43 class OCAD_EXTERN CADFileIO
44 {
45 public:
46     enum class SeekOrigin
47     {
48         BEG, /**< Begin of the file */
49         CUR, /**< Current position of the pointer */
50         END  /**< End of file */
51     };
52 
53     enum OpenMode
54     {
55         binary      = 1L << 2,
56         in          = 1L << 3,
57         out         = 1L << 4
58     };
59 
60 public:
61     explicit CADFileIO( const char * pszFileName );
62     virtual                 ~CADFileIO();
63 
64     virtual const char * ReadLine() = 0;
65     virtual bool     Eof() const                                = 0;
66     virtual bool     Open( int mode )                           = 0;
67     virtual bool     IsOpened() const;
68     virtual bool     Close();
69     virtual int      Seek( long int offset, SeekOrigin origin ) = 0;
70     virtual long int Tell()                                     = 0;
71     virtual size_t   Read( void * ptr, size_t size )            = 0;
72     virtual size_t   Write( void * ptr, size_t size )           = 0;
73     virtual void     Rewind()                                   = 0;
74     const char * GetFilePath() const;
75 
76 protected:
77     std::string m_soFilePath;
78     bool        m_bIsOpened;
79 };
80 
81 #endif // CADFILEIO_H
82