blob: 3bb6067558045c3a8b04d61b72020001436c20a4 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
|
#ifndef _ASURA_ENGINE_FILE_H_
#define _ASURA_ENGINE_FILE_H_
#include "physfs/physfs.h"
#include "../Scripting/Scripting.h"
#include "../Threads/Thread.h"
#include "FileData.h"
namespace_begin(AsuraEngine)
namespace_begin(FileSystem)
///
/// ʽļָд㡢Сʹȡʱʹñ࣬ʹFilesystem.read()ֱӶȡļȫ
/// ݣһFileData
///
class File ASURA_FINAL : public AEScripting::Portable<File>
{
public:
LUAX_DECL_FACTORY(File);
/// ļдģʽ
enum FileMode
{
FILE_MODE_CLOSED,
FILE_MODE_READ,
FILE_MODE_WRITE,
FILE_MODE_APPEND,
};
/// ļдʱΪ
enum BufferMode
{
BUFFER_MODE_NONE, ///< ʹû壬дļ
BUFFER_MODE_LINE, ///< л壬зߴﵽСʱдļ
BUFFER_MODE_FULL, ///< ȫ壬ʱдļ
};
File(const std::string& filename);
~File();
bool Open(FileMode mode);
bool Close();
bool IsOpen();
FileMode GetMode();
size_t GetSize();
size_t Read(ASURA_OUT DataBuffer* dst, size_t length);
size_t ReadAll(ASURA_OUT DataBuffer* dst);
size_t ReadAsync(ASURA_OUT DataBuffer* dst);
bool IsEOF();
bool Write(ASURA_REF DataBuffer* src);
bool WriteAsync(ASURA_REF DataBuffer* src, AEThreading::Thread* thread);
bool Flush();
size_t Tell();
bool Seek(size_t pos);
bool SetBuffer(BufferMode mode, size_t size);
BufferMode GetBuffer(ASURA_OUT size_t& size);
const std::string& GetFileName();
const std::string& GetName();
const std::string& GetExtension();
private:
PHYSFS_File* m_FileHandle; ///< physfs ļ
std::string m_FileName; ///< ļ
std::string m_Extension; ///< չ
std::string m_Name; ///< չļ
FileMode m_Mode; ///< ļģʽ
BufferMode m_BufferMode; ///< д뻺ģʽ
size_t m_BufferSize; ///< д뻺С
LUAX_DECL_ENUM(FileMode);
LUAX_DECL_ENUM(BufferMode);
LUAX_DECL_METHOD(_New);
LUAX_DECL_METHOD(_Open);
LUAX_DECL_METHOD(_Close);
LUAX_DECL_METHOD(_IsOpen);
LUAX_DECL_METHOD(_GetMode);
LUAX_DECL_METHOD(_GetSize);
LUAX_DECL_METHOD(_Read);
LUAX_DECL_METHOD(_Write);
LUAX_DECL_METHOD(_ReadAsync);
LUAX_DECL_METHOD(_WriteAsync);
LUAX_DECL_METHOD(_IsEOF);
LUAX_DECL_METHOD(_Flush);
LUAX_DECL_METHOD(_Tell);
LUAX_DECL_METHOD(_Seek);
LUAX_DECL_METHOD(_SetBuffer);
LUAX_DECL_METHOD(_GetBuffer);
LUAX_DECL_METHOD(_GetFileName);
LUAX_DECL_METHOD(_GetExtension);
LUAX_DECL_METHOD(_GetName);
};
namespace_end
namespace_end
#endif
|