TNB Library
TnbFileAdapter.h
[詳解]
1#pragma once
13#include "TnbFile.h"
14
15
16
17//TNB Library
18namespace TNB
19{
20
21
22
48{
50public:
51
53 CReaderAdapter(void) : _super(), m_pReader(NULL), m_iTempNo(0)
54 {
55 }
56
62 virtual bool Lock(DWORD dwTime = INFINITE) const
63 {
64 return true;
65 }
66
68 virtual void Unlock(void) const
69 {
70 }
71
79 bool Attach(const IReader* pReader)
80 {
81 Detach();
82 if ( ! pReader->CanRead() )
83 {
84 return false;
85 }
86 m_pReader = pReader;
87 return true;
88 }
89
93 void Detach(void)
94 {
95 if ( m_pReader == NULL )
96 {
97 m_pReader = NULL;
98 }
99 }
100
105 virtual size_t GetSize(void) const
106 {
107 if ( m_pReader == NULL )
108 {
109 return 0;
110 }
111 return ToIndex(m_pReader->GetSize());
112 }
113
121 virtual BYTE Get(INDEX index) const
122 {
123 if ( m_pReader == NULL || ! IsInRange(index) )
124 {
126 }
127 if ( m_pReader->Seek(index) >= 0 )
128 {
129 CByteVector vb = m_pReader->ReadExactly(1);
130 if ( vb.IsValid() )
131 {
132 return vb[0];
133 }
134 }
135 throw CReadFailureException(ERROR_ACCESS_DENIED);
136 }
137
148 virtual const BYTE& At(INDEX index) const
149 {
150 m_iTempNo = (m_iTempNo + 1) & 0x0F;
151 return m_abTemp[m_iTempNo] = Get(index);
152 }
153
161 BYTE operator[](INDEX index) const
162 {
163 return Get(index);
164 }
165
166private:
167 const IReader* m_pReader;
168 mutable BYTE m_abTemp[16];
169 mutable INDEX m_iTempNo;
170};
171
172
173
197class CWriterAdapter : public ICollectionT<BYTE>
198{
199 DEFSUPER(ICollectionT<BYTE>);
200public:
201
231 class CRef
232 {
233 friend class CWriterAdapter;
234 CWriterAdapter* m_fa;
235 INDEX m_index;
236 BYTE m_Set(BYTE b)
237 {
238 if ( ! m_fa->Set(m_index, b) )
239 {
240 throw CWriteFailureException(ERROR_ACCESS_DENIED);
241 }
242 return b;
243 }
244 BYTE m_Get(void) const
245 {
246 return m_fa->Get(m_index);
247 }
248 CRef(CWriterAdapter* P, INDEX i)
249 {
250 m_fa = P;
251 m_index = i;
252 }
253 public:
260 operator BYTE(void) const
261 {
262 return m_Get();
263 }
271 BYTE operator=(BYTE b)
272 {
273 return m_Set(static_cast<BYTE>(b));
274 }
282 BYTE operator+=(BYTE b)
283 {
284 return m_Set(static_cast<BYTE>(m_Get() + b));
285 }
293 BYTE operator-=(BYTE b)
294 {
295 return m_Set(static_cast<BYTE>(m_Get() - b));
296 }
297 };
298
299
300 //-----------------
301
302
303 #ifndef _TnbDOXYGEN //Document作成用シンボル
304 // const_iterator型宣言
305 typedef CConstIteratorBaseT<CWriterAdapter, BYTE> const_iterator;
306 // iterator宣言
307 class iterator
308 {
309 _ITERATORCORE(iterator, CWriterAdapter)
310 public:
311 CRef operator*(void)
312 {
313 return (*m_V)[m_ind];
314 }
315 CRef operator[](int i)
316 {
317 return (*m_V)[m_ind+i];
318 }
319 };
320 #endif //_TnbDOXYEM
321
327 const_iterator begin(void) const { return const_iterator(this, 0); }
328
334 const_iterator end(void) const { return const_iterator(this, GetSize()); }
335
341 iterator begin(void) { return iterator(this, 0); }
342
348 iterator end(void) { return iterator(this, GetSize()); }
349
350
351 //-----------------
352
353
355 CWriterAdapter(void) : _super(), m_pWriter(NULL), m_iTempNo(0)
356 {
357 }
358
364 virtual bool Lock(DWORD dwTime = INFINITE) const
365 {
366 return true;
367 }
368
370 virtual void Unlock(void) const
371 {
372 }
373
381 bool Attach(IWriter* pWriter)
382 {
383 Detach();
384 if ( ! pWriter->CanWrite() )
385 {
386 return false;
387 }
388 m_pWriter = pWriter;
389 return true;
390 }
391
395 void Detach(void)
396 {
397 if ( m_pWriter == NULL )
398 {
399 m_pWriter = NULL;
400 }
401 }
402
407 virtual size_t GetSize(void) const
408 {
409 if ( m_pWriter == NULL )
410 {
411 return 0;
412 }
413 return ToIndex(m_pWriter->GetSize());
414 }
415
424 virtual bool SetSize(size_t size)
425 {
426 if ( m_pWriter == NULL || m_pWriter->Seek(size) < 0 )
427 {
428 return false;
429 }
430 m_pWriter->SetEnd();
431 return true;
432 }
433
441 virtual BYTE Get(INDEX index) const
442 {
443 if ( m_pWriter == NULL || ! IsInRange(index) )
444 {
446 }
447 if ( m_pWriter->Seek(index) >= 0 )
448 {
449 CByteVector vb = m_pWriter->ReadExactly(1);
450 if ( vb.IsValid() )
451 {
452 return vb[0];
453 }
454 }
455 throw CReadFailureException(ERROR_ACCESS_DENIED);
456 }
457
468 virtual const BYTE& At(INDEX index) const
469 {
470 m_iTempNo = (m_iTempNo + 1) & 0x0F;
471 m_abTemp[m_iTempNo] = Get(index);
472 return m_abTemp[m_iTempNo];
473 }
474
482 virtual BYTE& Ref(INDEX index)
483 {
484 throw CNotSupportException();
485 }
486
494 BYTE operator[](INDEX index) const
495 {
496 return Get(index);
497 }
498
507 CRef operator[](INDEX index)
508 {
509 if ( m_pWriter == NULL || ! IsInRange(index) )
510 {
512 }
513 return CRef(this, index);
514 }
515
522 virtual INDEX Add(const BYTE& t)
523 {
524 if ( m_pWriter == NULL )
525 {
526 return INVALID_INDEX;
527 }
528 INDEX r = static_cast<INDEX>(m_pWriter->Seek(0, CFileWriter::END));
529 if ( r != INVALID_INDEX )
530 {
531 m_pWriter->Write(1, &t);
532 }
533 return r;
534 }
535
544 virtual bool Remove(INDEX index)
545 {
546 return false;
547 }
548
554 virtual bool RemoveAll(void)
555 {
556 if ( m_pWriter == NULL )
557 {
558 return false;
559 }
560 m_pWriter->Seek(0);
561 m_pWriter->SetEnd();
562 return true;
563 }
564
572 virtual bool Set(INDEX index, const BYTE& t)
573 {
574 if ( m_pWriter != NULL && IsInRange(index) && m_pWriter->Seek(index) >= 0 )
575 {
576 m_pWriter->Write(1, &t);
577 return true;
578 }
579 return false;
580 }
581
582private:
583 IWriter* m_pWriter;
584 mutable BYTE m_abTemp[16];
585 mutable INDEX m_iTempNo;
586};
587
588
589
590}; // TNB
ファイル関係のヘッダ
INDEX範囲外例外
Definition: TnbException.h:81
サポート外例外
Definition: TnbException.h:185
読み込み失敗発生例外
Definition: TnbException.h:241
ファイル読み込みアダプタ
virtual size_t GetSize(void) const
[取得] 要素数取得.
virtual const BYTE & At(INDEX index) const
[取得] 要素の参照取得.
virtual BYTE Get(INDEX index) const
[取得] 要素の取得.
BYTE operator[](INDEX index) const
[取得] 要素の取得.
virtual bool Lock(DWORD dwTime=INFINITE) const
[排他] ロック
CReaderAdapter(void)
コンストラクタ
void Detach(void)
[操作] デタッチ.
virtual void Unlock(void) const
[排他] アンロック
bool Attach(const IReader *pReader)
[操作] アタッチ.
bool IsValid(void) const
[確認] 有効チェック
Definition: TnbVector.h:687
書き込み失敗発生例外
Definition: TnbException.h:255
ファイル読み書きの参照クラス
BYTE operator+=(BYTE b)
[計算] データ加算
BYTE operator-=(BYTE b)
[取得] データ引算
BYTE operator=(BYTE b)
[設定] データ設定
ファイル読み書きアダプタ
virtual size_t GetSize(void) const
[取得] 要素数取得.
const_iterator end(void) const
[反復] 最後const_iterator.
bool Attach(IWriter *pWriter)
[操作] アタッチ.
virtual const BYTE & At(INDEX index) const
[取得] 要素の参照取得.
virtual BYTE Get(INDEX index) const
[取得] 要素の取得.
CWriterAdapter(void)
コンストラクタ
iterator begin(void)
[反復] 先頭iterator.
virtual bool Remove(INDEX index)
[削除] 要素一つ削除.
virtual INDEX Add(const BYTE &t)
[追加] 要素一つ追加.
BYTE operator[](INDEX index) const
[取得] 要素の取得.
virtual bool Lock(DWORD dwTime=INFINITE) const
[排他] ロック
virtual bool SetSize(size_t size)
[設定] 要素数設定.
virtual bool RemoveAll(void)
[削除] 全要素削除 .
void Detach(void)
[操作] デタッチ.
virtual bool Set(INDEX index, const BYTE &t)
[設定] 要素の設定.
CRef operator[](INDEX index)
[取得] 要素の参照取得.
const_iterator begin(void) const
[反復] 先頭const_iterator.
virtual void Unlock(void) const
[排他] アンロック
virtual BYTE & Ref(INDEX index)
[取得] 要素の参照取得.
iterator end(void)
[反復] 最後iterator.
インプットイテレータ.
ランダムアクセスイテレータ.
CValueAcceleration operator*(const CValueSpeed &s, const CValueFrequency &f)
[計算] 掛算 (加速度 = 速度 × 周波数) .
TNB Library
Definition: TnbDoxyTitle.txt:2
情報群管理操作インターフェーステンプレート
情報群管理インターフェーステンプレート
bool IsInRange(INDEX index) const
[確認] INDEXの有効確認.
読み込みインターフェース
Definition: TnbReader.h:36
virtual LONGLONG Seek(LONGLONG llOffset, ESeekMode eSeek=TOP) const =0
[操作] シーク.
void ReadExactly(size_t size, LPVOID _P) const
[取得] 読み込み.
Definition: TnbReader.h:114
@ END
末からのオフセット指定
Definition: TnbReader.h:42
virtual LONGLONG GetSize(void) const =0
[取得] サイズ取得
virtual bool CanRead(void) const =0
[確認] 読み込み可能か
書き込みインターフェース
Definition: TnbWriter.h:36
virtual void SetEnd(void)=0
[設定] EOFを指定.
virtual bool CanWrite(void) const =0
[確認] 書込み可能か
virtual void Write(size_t size, LPCVOID P)=0
[保存] 書き込み