blob: 16de42b492b5db537e7cdd81641a24385917b5be (
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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
|
#ifndef __ASURA_ENGINE_FILE_H__
#define __ASURA_ENGINE_FILE_H__
#include "physfs/physfs.h"
#include "../scripting/portable.hpp"
#include "../threading/thread.h"
#include "file_data.h"
namespace AsuraEngine
{
namespace IO
{
///
/// ʽļָд㡢Сʹȡʱʹñ࣬ʹ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();
///
/// ȡdata bufferض
///
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();
///
/// data bufferед룬Ƿɹ
///
bool Write(ASURA_REF DataBuffer* src);
///
/// 첽дļдļtaskthreadĶС
///
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);
};
}
}
#endif
|