-
Notifications
You must be signed in to change notification settings - Fork 16
/
Copy pathChunkReader.cpp
113 lines (94 loc) · 2.6 KB
/
ChunkReader.cpp
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
//
// ChunkReader.cpp
// C700
//
// Created by osoumen on 2017/01/24.
//
//
#include "ChunkReader.h"
ChunkReader::ChunkReader(int allocMemSize)
: FileAccess(NULL, true)
, DataBuffer(allocMemSize)
{
}
//-----------------------------------------------------------------------------
ChunkReader::ChunkReader( const void *data, int dataSize, bool copy )
: FileAccess(NULL, true)
, DataBuffer( data, dataSize, copy )
{
}
//-----------------------------------------------------------------------------
ChunkReader::ChunkReader( const char *path )
: FileAccess(path, false)
, DataBuffer(path)
{
}
//-----------------------------------------------------------------------------
ChunkReader::~ChunkReader()
{
}
//-----------------------------------------------------------------------------
bool ChunkReader::addChunk( int type, const void *data, int byte )
{
if ( mReadOnly ) {
return false;
}
MyChunkHead ckHead = {type, byte};
if (!mAllowExtend) {
//空き容量チェック
if ( mDataSize < ( mDataPos + byte + (int)sizeof(MyChunkHead) ) ) {
return false;
}
}
long writeSize;
if ( writeData(&ckHead, sizeof(MyChunkHead), &writeSize) == false ) {
return false;
}
if ( writeData(data, byte, &writeSize) == false ) {
return false;
}
return true;
}
//-----------------------------------------------------------------------------
bool ChunkReader::addChunkWithHeader(int type, const unsigned char *data, int byte, unsigned char *header, int headerByte)
{
if ( mReadOnly ) {
return false;
}
MyChunkHead ckHead = {type, byte+headerByte};
if (!mAllowExtend) {
//空き容量チェック
if ( mDataSize < ( mDataPos + byte + (int)sizeof(MyChunkHead) ) ) {
return false;
}
}
long writeSize;
if ( writeData(&ckHead, sizeof(MyChunkHead), &writeSize) == false ) {
return false;
}
if ( writeData(header, headerByte, &writeSize) == false ) {
return false;
}
if ( writeData(data, byte, &writeSize) == false ) {
return false;
}
return true;
}
//-----------------------------------------------------------------------------
bool ChunkReader::readChunkHead( int *type, long *byte )
{
long toRead = sizeof( MyChunkHead );
MyChunkHead head;
if ( readData(&head, toRead, &toRead) == false ) {
return false;
}
(*type) = head.type;
(*byte) = head.size;
return true;
}
//-----------------------------------------------------------------------------
bool ChunkReader::Write()
{
// DataBuffer にあるデータをFileAccessに保持してあるファイルパスに書き込む
return WriteToFile(mPath);
}