1 /*---------------------------------------------------------------------------* 2 Project: Horizon 3 File: fnd_Storage.h 4 5 Copyright (C)2009 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: 18508 $ 14 *---------------------------------------------------------------------------*/ 15 16 #ifndef NN_FND_STORAGE_H_ 17 #define NN_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 @brief ストレージに対する読み込みインターフェイス 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; 38 }; 39 40 /* 41 @brief ストレージに対する書き込みインターフェイス 42 */ 43 class IStorageWriter 44 { 45 public: 46 virtual Result TryWrite(size_t* pOut, const void* buffer, size_t size) = 0; 47 virtual Result TrySetPosition(s64 position) = 0; 48 virtual Result TryGetPosition(s64* pOut) const = 0; 49 virtual Result TryGetSize(s64* pOut) const = 0; 50 }; 51 52 /* 53 @brief メモリストレージに対する読み込みインターフェイス 54 */ 55 class MemoryStorageReader : public IStorageReader 56 { 57 private: 58 const char* m_Buffer; 59 size_t m_Size; 60 size_t m_Position; 61 public: MemoryStorageReader(const void * buffer,size_t size)62 MemoryStorageReader(const void* buffer, size_t size) : m_Buffer(reinterpret_cast<const char*>(buffer)), m_Size(size), m_Position(0) {} 63 virtual Result TryRead(size_t* pOut, void* buffer, size_t size); TrySetPosition(s64 position)64 virtual Result TrySetPosition(s64 position) { m_Position = static_cast<size_t>(position); return ResultSuccess(); } TryGetPosition(s64 * pOut)65 virtual Result TryGetPosition(s64* pOut) const { *pOut = m_Position; return ResultSuccess(); } TryGetSize(s64 * pOut)66 virtual Result TryGetSize(s64* pOut) const { *pOut = m_Size; return ResultSuccess(); } 67 }; 68 69 /* 70 @brief メモリストレージに対する書き込みインターフェイス 71 */ 72 class MemoryStorageWriter : public IStorageWriter 73 { 74 private: 75 char* m_Buffer; 76 size_t m_Size; 77 size_t m_Position; 78 public: MemoryStorageWriter(void * buffer,size_t size)79 MemoryStorageWriter(void* buffer, size_t size) : m_Buffer(reinterpret_cast<char*>(buffer)), m_Size(size), m_Position(0) {} 80 virtual Result TryWrite(size_t* pOut, const void* buffer, size_t size); TrySetPosition(s64 position)81 virtual Result TrySetPosition(s64 position) { m_Position = static_cast<size_t>(position); return ResultSuccess(); } TryGetPosition(s64 * pOut)82 virtual Result TryGetPosition(s64* pOut) const { *pOut = m_Position; return ResultSuccess(); } TryGetSize(s64 * pOut)83 virtual Result TryGetSize(s64* pOut) const { *pOut = m_Size; return ResultSuccess(); } 84 }; 85 86 template <class Reader> 87 class StorageReaderTmeplate : public IStorageReader 88 { 89 private: 90 Reader& m_Impl; 91 public: StorageReaderTmeplate(Reader & reader)92 StorageReaderTmeplate(Reader& reader) : m_Impl(reader) {} TryRead(size_t * pOut,void * buffer,size_t size)93 virtual Result TryRead(size_t* pOut, void* buffer, size_t size) { return m_Impl.TryRead(pOut, buffer, size); } TrySetPosition(s64 position)94 virtual Result TrySetPosition(s64 position) { return m_Impl.TrySetPosition(position); } TryGetPosition(s64 * pOut)95 virtual Result TryGetPosition(s64* pOut) const { return m_Impl.TryGetPosition(pOut); } TryGetSize(s64 * pOut)96 virtual Result TryGetSize(s64* pOut) const { return m_Impl.TryGetSize(pOut); } 97 }; 98 99 template <class Writer> 100 class StorageWriterTmeplate : public IStorageWriter 101 { 102 private: 103 Writer& m_Impl; 104 public: StorageWriterTmeplate(Writer & writer)105 StorageWriterTmeplate(Writer& writer) : m_Impl(writer) {} TryRead(size_t * pOut,void * buffer,size_t size)106 virtual Result TryRead(size_t* pOut, void* buffer, size_t size) { return m_Impl.TryRead(pOut, buffer, size); } TrySetPosition(s64 position)107 virtual Result TrySetPosition(s64 position) { return m_Impl.TrySetPosition(position); } TryGetPosition(s64 * pOut)108 virtual Result TryGetPosition(s64* pOut) const { return m_Impl.TryGetPosition(pOut); } TryGetSize(s64 * pOut)109 virtual Result TryGetSize(s64* pOut) const { return m_Impl.TryGetSize(pOut); } 110 }; 111 112 }} 113 114 #endif 115 116 #endif 117