miniassimp

annotate include/miniassimp/IOStream.hpp @ 0:879c81d94345

initial commit
author John Tsiombikas <nuclear@member.fsf.org>
date Mon, 28 Jan 2019 18:19:26 +0200
parents
children
rev   line source
nuclear@0 1 /*
nuclear@0 2 ---------------------------------------------------------------------------
nuclear@0 3 Open Asset Import Library (assimp)
nuclear@0 4 ---------------------------------------------------------------------------
nuclear@0 5
nuclear@0 6 Copyright (c) 2006-2018, assimp team
nuclear@0 7
nuclear@0 8
nuclear@0 9
nuclear@0 10 All rights reserved.
nuclear@0 11
nuclear@0 12 Redistribution and use of this software in source and binary forms,
nuclear@0 13 with or without modification, are permitted provided that the following
nuclear@0 14 conditions are met:
nuclear@0 15
nuclear@0 16 * Redistributions of source code must retain the above
nuclear@0 17 copyright notice, this list of conditions and the
nuclear@0 18 following disclaimer.
nuclear@0 19
nuclear@0 20 * Redistributions in binary form must reproduce the above
nuclear@0 21 copyright notice, this list of conditions and the
nuclear@0 22 following disclaimer in the documentation and/or other
nuclear@0 23 materials provided with the distribution.
nuclear@0 24
nuclear@0 25 * Neither the name of the assimp team, nor the names of its
nuclear@0 26 contributors may be used to endorse or promote products
nuclear@0 27 derived from this software without specific prior
nuclear@0 28 written permission of the assimp team.
nuclear@0 29
nuclear@0 30 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
nuclear@0 31 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
nuclear@0 32 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
nuclear@0 33 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
nuclear@0 34 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
nuclear@0 35 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
nuclear@0 36 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
nuclear@0 37 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
nuclear@0 38 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
nuclear@0 39 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
nuclear@0 40 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
nuclear@0 41 ---------------------------------------------------------------------------
nuclear@0 42 */
nuclear@0 43 /** @file IOStream.hpp
nuclear@0 44 * @brief File I/O wrappers for C++.
nuclear@0 45 */
nuclear@0 46
nuclear@0 47 #pragma once
nuclear@0 48 #ifndef AI_IOSTREAM_H_INC
nuclear@0 49 #define AI_IOSTREAM_H_INC
nuclear@0 50
nuclear@0 51 #include "types.h"
nuclear@0 52
nuclear@0 53 #ifndef __cplusplus
nuclear@0 54 # error This header requires C++ to be used. aiFileIO.h is the \
nuclear@0 55 corresponding C interface.
nuclear@0 56 #endif
nuclear@0 57
nuclear@0 58 namespace Assimp {
nuclear@0 59
nuclear@0 60 // ----------------------------------------------------------------------------------
nuclear@0 61 /** @brief CPP-API: Class to handle file I/O for C++
nuclear@0 62 *
nuclear@0 63 * Derive an own implementation from this interface to provide custom IO handling
nuclear@0 64 * to the Importer. If you implement this interface, be sure to also provide an
nuclear@0 65 * implementation for IOSystem that creates instances of your custom IO class.
nuclear@0 66 */
nuclear@0 67 class ASSIMP_API IOStream
nuclear@0 68 #ifndef SWIG
nuclear@0 69 : public Intern::AllocateFromAssimpHeap
nuclear@0 70 #endif
nuclear@0 71 {
nuclear@0 72 protected:
nuclear@0 73 /** Constructor protected, use IOSystem::Open() to create an instance. */
nuclear@0 74 IOStream() AI_NO_EXCEPT;
nuclear@0 75
nuclear@0 76 public:
nuclear@0 77 // -------------------------------------------------------------------
nuclear@0 78 /** @brief Destructor. Deleting the object closes the underlying file,
nuclear@0 79 * alternatively you may use IOSystem::Close() to release the file.
nuclear@0 80 */
nuclear@0 81 virtual ~IOStream();
nuclear@0 82
nuclear@0 83 // -------------------------------------------------------------------
nuclear@0 84 /** @brief Read from the file
nuclear@0 85 *
nuclear@0 86 * See fread() for more details
nuclear@0 87 * This fails for write-only files */
nuclear@0 88 virtual size_t Read(void* pvBuffer,
nuclear@0 89 size_t pSize,
nuclear@0 90 size_t pCount) = 0;
nuclear@0 91
nuclear@0 92 // -------------------------------------------------------------------
nuclear@0 93 /** @brief Write to the file
nuclear@0 94 *
nuclear@0 95 * See fwrite() for more details
nuclear@0 96 * This fails for read-only files */
nuclear@0 97 virtual size_t Write(const void* pvBuffer,
nuclear@0 98 size_t pSize,
nuclear@0 99 size_t pCount) = 0;
nuclear@0 100
nuclear@0 101 // -------------------------------------------------------------------
nuclear@0 102 /** @brief Set the read/write cursor of the file
nuclear@0 103 *
nuclear@0 104 * Note that the offset is _negative_ for aiOrigin_END.
nuclear@0 105 * See fseek() for more details */
nuclear@0 106 virtual aiReturn Seek(size_t pOffset,
nuclear@0 107 aiOrigin pOrigin) = 0;
nuclear@0 108
nuclear@0 109 // -------------------------------------------------------------------
nuclear@0 110 /** @brief Get the current position of the read/write cursor
nuclear@0 111 *
nuclear@0 112 * See ftell() for more details */
nuclear@0 113 virtual size_t Tell() const = 0;
nuclear@0 114
nuclear@0 115 // -------------------------------------------------------------------
nuclear@0 116 /** @brief Returns filesize
nuclear@0 117 * Returns the filesize. */
nuclear@0 118 virtual size_t FileSize() const = 0;
nuclear@0 119
nuclear@0 120 // -------------------------------------------------------------------
nuclear@0 121 /** @brief Flush the contents of the file buffer (for writers)
nuclear@0 122 * See fflush() for more details.
nuclear@0 123 */
nuclear@0 124 virtual void Flush() = 0;
nuclear@0 125 }; //! class IOStream
nuclear@0 126
nuclear@0 127 // ----------------------------------------------------------------------------------
nuclear@0 128 inline
nuclear@0 129 IOStream::IOStream() AI_NO_EXCEPT {
nuclear@0 130 // empty
nuclear@0 131 }
nuclear@0 132
nuclear@0 133 // ----------------------------------------------------------------------------------
nuclear@0 134 inline
nuclear@0 135 IOStream::~IOStream() {
nuclear@0 136 // empty
nuclear@0 137 }
nuclear@0 138 // ----------------------------------------------------------------------------------
nuclear@0 139
nuclear@0 140 } //!namespace Assimp
nuclear@0 141
nuclear@0 142 #endif //!!AI_IOSTREAM_H_INC