1 /*---------------------------------------------------------------------------* 2 Project: Horizon 3 File: fnd_Storage.h 4 5 Copyright (C)2009-2012 Nintendo Co., Ltd. All rights reserved. 6 7 These coded instructions, statements, and computer programs contain 8 proprietary information of Nintendo of America Inc. and/or Nintendo 9 Company Ltd., and are protected by Federal copyright law. They may 10 not be disclosed to third parties or copied or duplicated in any form, 11 in whole or in part, without the prior written consent of Nintendo. 12 13 $Rev: 46347 $ 14 *---------------------------------------------------------------------------*/ 15 16 #ifndef NN_FND_FND_STORAGE_H_ 17 #define NN_FND_FND_STORAGE_H_ 18 19 #include <nn/types.h> 20 #include <nn/config.h> 21 #include <nn/Result.h> 22 #include <nn/assert.h> 23 24 #ifdef __cplusplus 25 26 namespace nn { namespace fnd { 27 28 /* 29 30 */ 31 class IStorageReader 32 { 33 public: 34 virtual Result TryRead(size_t* pOut, void* buffer, size_t size) = 0; 35 virtual Result TrySetPosition(s64 position) = 0; 36 virtual Result TryGetPosition(s64* pOut) const = 0; 37 virtual Result TryGetSize(s64* pOut) const = 0; ~IStorageReader()38 virtual ~IStorageReader() {} 39 }; 40 41 /* 42 43 */ 44 class IStorageWriter 45 { 46 public: 47 virtual Result TryWrite(size_t* pOut, const void* buffer, size_t size) = 0; 48 virtual Result TrySetPosition(s64 position) = 0; 49 virtual Result TryGetPosition(s64* pOut) const = 0; 50 virtual Result TryGetSize(s64* pOut) const = 0; ~IStorageWriter()51 virtual ~IStorageWriter() {} 52 }; 53 54 /* 55 56 */ 57 class MemoryStorageReader : public IStorageReader 58 { 59 private: 60 const char* m_Buffer; 61 size_t m_Size; 62 size_t m_Position; 63 public: MemoryStorageReader(const void * buffer,size_t size)64 MemoryStorageReader(const void* buffer, size_t size) : m_Buffer(reinterpret_cast<const char*>(buffer)), m_Size(size), m_Position(0) {} 65 virtual Result TryRead(size_t* pOut, void* buffer, size_t size); TrySetPosition(s64 position)66 virtual Result TrySetPosition(s64 position) { m_Position = static_cast<size_t>(position); return ResultSuccess(); } TryGetPosition(s64 * pOut)67 virtual Result TryGetPosition(s64* pOut) const { *pOut = m_Position; return ResultSuccess(); } TryGetSize(s64 * pOut)68 virtual Result TryGetSize(s64* pOut) const { *pOut = m_Size; return ResultSuccess(); } 69 }; 70 71 /* 72 73 */ 74 class MemoryStorageWriter : public IStorageWriter 75 { 76 private: 77 char* m_Buffer; 78 size_t m_Size; 79 size_t m_Position; 80 public: MemoryStorageWriter(void * buffer,size_t size)81 MemoryStorageWriter(void* buffer, size_t size) : m_Buffer(reinterpret_cast<char*>(buffer)), m_Size(size), m_Position(0) {} 82 virtual Result TryWrite(size_t* pOut, const void* buffer, size_t size); TrySetPosition(s64 position)83 virtual Result TrySetPosition(s64 position) { m_Position = static_cast<size_t>(position); return ResultSuccess(); } TryGetPosition(s64 * pOut)84 virtual Result TryGetPosition(s64* pOut) const { *pOut = m_Position; return ResultSuccess(); } TryGetSize(s64 * pOut)85 virtual Result TryGetSize(s64* pOut) const { *pOut = m_Size; return ResultSuccess(); } 86 }; 87 88 template <class Reader> 89 class StorageReaderTmeplate : public IStorageReader 90 { 91 private: 92 Reader& m_Impl; 93 public: StorageReaderTmeplate(Reader & reader)94 StorageReaderTmeplate(Reader& reader) : m_Impl(reader) {} TryRead(size_t * pOut,void * buffer,size_t size)95 virtual Result TryRead(size_t* pOut, void* buffer, size_t size) { return m_Impl.TryRead(pOut, buffer, size); } TrySetPosition(s64 position)96 virtual Result TrySetPosition(s64 position) { return m_Impl.TrySetPosition(position); } TryGetPosition(s64 * pOut)97 virtual Result TryGetPosition(s64* pOut) const { return m_Impl.TryGetPosition(pOut); } TryGetSize(s64 * pOut)98 virtual Result TryGetSize(s64* pOut) const { return m_Impl.TryGetSize(pOut); } 99 }; 100 101 template <class Writer> 102 class StorageWriterTmeplate : public IStorageWriter 103 { 104 private: 105 Writer& m_Impl; 106 public: StorageWriterTmeplate(Writer & writer)107 StorageWriterTmeplate(Writer& writer) : m_Impl(writer) {} TryRead(size_t * pOut,void * buffer,size_t size)108 virtual Result TryRead(size_t* pOut, void* buffer, size_t size) { return m_Impl.TryRead(pOut, buffer, size); } TrySetPosition(s64 position)109 virtual Result TrySetPosition(s64 position) { return m_Impl.TrySetPosition(position); } TryGetPosition(s64 * pOut)110 virtual Result TryGetPosition(s64* pOut) const { return m_Impl.TryGetPosition(pOut); } TryGetSize(s64 * pOut)111 virtual Result TryGetSize(s64* pOut) const { return m_Impl.TryGetSize(pOut); } 112 }; 113 114 }} 115 116 #endif 117 118 #endif 119