vrshoot

annotate libs/assimp/assimp/IOStream.hpp @ 0:b2f14e535253

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