OSDN Git Service

src初コミット
[yurina/yurina.git] / src / core / base / Storage.h
diff --git a/src/core/base/Storage.h b/src/core/base/Storage.h
new file mode 100755 (executable)
index 0000000..488de33
--- /dev/null
@@ -0,0 +1,142 @@
+/*\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