TNB Library
TnbReader.h
[詳解]
1#pragma once
13#include "TnbSerializer.h"
14#include "TnbVector.h"
15
16
17
18//TNB Library
19namespace TNB
20{
21
22
23
36{
39 {
40 TOP = FILE_BEGIN,
41 CURRENT = FILE_CURRENT,
42 END = FILE_END
43 };
44
49 virtual LPCTSTR GetOpenName(void) const = 0;
50
54 virtual void Close(void) = 0;
55
61 virtual bool CanRead(void) const = 0;
62
68 virtual LONGLONG GetSize(void) const = 0;
69
78 virtual LONGLONG Seek(LONGLONG llOffset, ESeekMode eSeek = TOP) const = 0;
79
87 virtual size_t Read(size_t size, LPVOID _P) const = 0;
88
95 LONGLONG GetLeftoverSize(void) const
96 {
97 LONGLONG lc = Seek(0, CURRENT);
98 LONGLONG le = GetSize();
99 if ( lc >= 0 && le >= 0 )
100 {
101 return le - lc;
102 }
103 return -1;
104 }
105
114 void ReadExactly(size_t size, LPVOID _P) const
115 {
116 if ( ! CanRead() )
117 {
118 throw CReadFailureException(ERROR_INVALID_HANDLE);
119 }
120 if ( Read(size, _P) != size )
121 {
122 throw CShortOfDataException();
123 }
124 }
125
134 CByteVector ReadExactly(size_t size = 0) const
135 {
136 CByteVector vb = ReadInto(size);
137 if ( size > 0 && size != vb.GetSize() )
138 {
139 throw CShortOfDataException();
140 }
141 return vb;
142 }
143
150 CByteVector ReadInto(size_t size = 0) const
151 {
152 if ( ! CanRead() )
153 {
154 throw CReadFailureException(ERROR_INVALID_HANDLE);
155 }
156 CByteVector vb;
157 if ( size == 0 )
158 {
159 size = ToIndex(GetLeftoverSize());
160 }
161 if ( size > 0 )
162 {
163 size_t i = Read(size, vb.GetBuffer(size));
164 vb.ReleaseBuffer();
165 vb.SetSize(i);
166 }
167 return vb;
168 }
169
178 size_t ReadInto(ICollectionT<BYTE>& _out, size_t size = 0, size_t oneBlockSize = 4096) const
179 {
180 if ( ! CanRead() )
181 {
182 throw CReadFailureException(ERROR_INVALID_HANDLE);
183 }
184 CByteVector vb;
185 if ( size == 0 )
186 {
187 size = ToIndex(GetLeftoverSize());
188 }
189 size_t r = 0;
190 while ( size > 0 )
191 {
192 size_t l = size;
193 if ( l > oneBlockSize ){ l = oneBlockSize; }
194 vb = ReadInto(l);
195 l = vb.GetSize();
196 if ( l == 0 ){ break; }
197 _out.Append(vb);
198 size -= l;
199 r += l;
200 }
201 return r;
202 }
203
211 virtual void GetRaw(size_t size, LPVOID _P) const
212 {
213 ReadExactly(size, _P);
214 }
215};
216
217
218
219}; //TNB
シリアライザー関係のヘッダ
配列型情報管理関係のヘッダ
読み込み失敗発生例外
Definition: TnbException.h:241
データ足らず発生例外
Definition: TnbException.h:120
virtual size_t GetSize(void) const
[取得] サイズ取得
Definition: TnbVector.h:368
TYP * GetBuffer(size_t size=0)
[操作] データアドレス取得
Definition: TnbVector.h:745
void ReleaseBuffer(void)
[操作] データの管理を元に戻す.
Definition: TnbVector.h:805
virtual bool SetSize(size_t size)
[操作] サイズ指定
Definition: TnbVector.h:618
TNB Library
Definition: TnbDoxyTitle.txt:2
virtual size_t Append(const IConstCollectionT< TYP > &c)
[追加] 追加.
デシリアライザーインターフェースクラス.
読み込みインターフェース
Definition: TnbReader.h:36
LONGLONG GetLeftoverSize(void) const
[取得] 残りサイズ取得.
Definition: TnbReader.h:95
size_t ReadInto(ICollectionT< BYTE > &_out, size_t size=0, size_t oneBlockSize=4096) const
[取得] 読み込み.
Definition: TnbReader.h:178
CByteVector ReadInto(size_t size=0) const
[取得] 読み込み
Definition: TnbReader.h:150
virtual LONGLONG Seek(LONGLONG llOffset, ESeekMode eSeek=TOP) const =0
[操作] シーク.
virtual void Close(void)=0
[操作] クローズ
virtual size_t Read(size_t size, LPVOID _P) const =0
[取得] 読み込み
void ReadExactly(size_t size, LPVOID _P) const
[取得] 読み込み.
Definition: TnbReader.h:114
ESeekMode
シークのオフセット指定モード
Definition: TnbReader.h:39
@ TOP
頭からのオフセット指定
Definition: TnbReader.h:40
@ CURRENT
現在位置からのオフセット指定
Definition: TnbReader.h:41
@ END
末からのオフセット指定
Definition: TnbReader.h:42
virtual LONGLONG GetSize(void) const =0
[取得] サイズ取得
virtual bool CanRead(void) const =0
[確認] 読み込み可能か
virtual LPCTSTR GetOpenName(void) const =0
[取得] オープン名取得
CByteVector ReadExactly(size_t size=0) const
[取得] 読み込み
Definition: TnbReader.h:134
virtual void GetRaw(size_t size, LPVOID _P) const
[取得] 取得.
Definition: TnbReader.h:211