--- /dev/null
+/*\r
+ * “yurina”: yurina unpretentious renderer is not an anathema\r
+ *\r
+ * This software is distributed under a BSD-style license.\r
+ * See license.txt for more information.\r
+ */\r
+\r
+#pragma once\r
+\r
+#include "base/yurinaCommon.h"\r
+#include "base/MountInformation.h"\r
+//#include "base/YuriFile.h" // 循環参照回避\r
+\r
+namespace yurina\r
+{\r
+ class MountInformation;\r
+ class YuriFile;\r
+\r
+ /**\r
+ * 仮想ストレージ.\r
+ * @attention マウント情報の扱いがスレッドアンセーフ\r
+ */\r
+ class Storage\r
+ {\r
+ public:\r
+ enum FileMode\r
+ {\r
+ READ,\r
+ WRITE,\r
+ READ_WRITE,\r
+ APPEND,\r
+ };\r
+ enum SeekOrigin\r
+ {\r
+ CURRENT = SEEK_CUR,\r
+ END = SEEK_END,\r
+ BEGIN = SEEK_SET,\r
+ };\r
+ protected:\r
+ static MountInformation mountInfo;\r
+ /** ストレージの型を表すユニークな値.*/\r
+ static const int ST_VIRTUAL = 0x00;\r
+ /** 無効なストレージを表す値.*/\r
+ static const int ST_INVALID = -1;\r
+ int storageType;\r
+ /** 現在マウントされているポイントの数. */\r
+ int mountCount;\r
+ private:\r
+ public:\r
+ Storage( void );\r
+ virtual ~Storage( void );\r
+ int getStorageType( void ) const { return storageType; }\r
+ \r
+ /**\r
+ * マウント情報を文字列化する. \r
+ * @attention 飽くまでデバッグ用(再帰を使用するので注意)\r
+ */\r
+ virtual YuriString toString( void ) const;\r
+\r
+ virtual bool mountOn( const FilePath &targetDirectory );\r
+\r
+ virtual bool unmount( const FilePath &targetDirectory );\r
+\r
+ /**\r
+ * ファイル/ディレクトリが存在するか確認する.\r
+ * @param path 確認するファイル/ディレクトリのパス\r
+ * @return 存在しない場合は偽\r
+ * @attention 戻り値が真であっても対象が有効である(開ける)保証はない.\r
+ */\r
+ virtual bool exists( const FilePath &path ) const;\r
+\r
+ /**\r
+ * ファイルのサイズを取得する.\r
+ * @param filePath サイズを取得するファイルのパス\r
+ * @return ファイルのサイズ. 失敗した場合は負数を返す\r
+ */\r
+ virtual off64_t getSizeOf( const FilePath &filePath ) const;\r
+\r
+ /**\r
+ * ファイルを開く.\r
+ * @param filePath 開くファイルのパス\r
+ * @param mode 開くモード\r
+ * @return 開いたファイル. 成功すると,ファイルの状態はOPENになる\r
+ */\r
+ virtual YuriFile open( const FilePath &filePath, FileMode mode ) const;\r
+ \r
+ /**\r
+ * ファイルを閉じる.\r
+ * @param file 閉じるファイル\r
+ * @return 成功した場合0,失敗した場合0以外\r
+ * @note 閉じるのに成功すると,ファイルの状態はCLOSEDになる\r
+ */\r
+ virtual int close( YuriFile &file ) const;\r
+\r
+ /**\r
+ * ファイルを開き,内容を読み込み,ファイルを閉じる.\r
+ * @param filePath 読み込むファイルのパス\r
+ * @param buffer[out] ファイル内容の出力先\r
+ * @param size 読み込むbyte数の最大値\r
+ * @param offset 読み込みを開始するファイル先頭からのオフセット\r
+ * @return 実際に読み込まれたbyte数.\r
+ * @note size に達する前にファイルの終端に達すると戻り値はsize以下になる\r
+ * @attention 32bit環境ではsizeは最大2GB\r
+ */\r
+ virtual size_t read( const FilePath &filePath, unsigned char *buffer,\r
+ size_t size, off64_t offset = 0 ) const;\r
+\r
+ /**\r
+ * ファイルの内容を読み込む.\r
+ * @param file 読み込むファイル\r
+ * @param buffer[out] ファイル内容の出力先\r
+ * @param size 読み込むbyte数の最大値\r
+ * @param offset 読み込みを開始するファイル先頭からのオフセット\r
+ * @return 実際に読み込まれたbyte数.\r
+ * @note size に達する前にファイルの終端に達すると戻り値はsize以下になる\r
+ * @attention sizeを省略すると失敗する. 32bit環境ではsizeは最大2GB\r
+ */\r
+ virtual size_t read( YuriFile &file, unsigned char *buffer, \r
+ size_t size, off64_t offset = 0 ) const;\r
+\r
+ /**\r
+ * 指定された位置にファイルポインタを移動する.\r
+ * @param file 対象のファイル\r
+ * @param offset byte単位の移動量\r
+ * @param origin 起点\r
+ * @return 成功した場合0,失敗した場合0以外\r
+ */\r
+ virtual int seek( YuriFile &file, off64_t offset, SeekOrigin origin ) const;\r
+ protected:\r
+ /**\r
+ * 指定したストレージを全てアンマウントする.\r
+ * @param storage 対象ストレージ\r
+ * @return アンマウントに成功した回数\r
+ * @attention 全探索を行うので常用すべきでない\r
+ */\r
+ size_t unmountAll( const Storage *storage );\r
+ private:\r
+ \r
+\r
+ };\r
+}\r
+\r