49 CConstFileMappingT(DWORD multi = 2) : _super(), m_pType(NULL), m_hMapping(NULL), m_nowPage(-1), m_offset(0), m_size(0)
53 m_pageSize = si.dwAllocationGranularity * multi;
69 virtual bool Lock(DWORD dwTime = INFINITE)
const
99 bool Open(LPCTSTR lpszName, LONGLONG offset = 0,
size_t size = INVALID_SIZE)
103 if ( m_reader.
Open(lpszName,
true) )
105 m_size = ToIndex((m_reader.
GetSize() - m_offset) /
sizeof(TYP));
106 if ( size != INVALID_SIZE )
145 virtual TYP
Get(INDEX index)
const
160 virtual const TYP&
At(INDEX index)
const
162 const TYP* P = m_Mapping(index);
184 LONGLONG m_IndexToFilePos(INDEX index)
const
187 return l *
sizeof(TYP) + m_offset;
190 void m_Unmapping(
void)
192 if ( m_pType != NULL )
194 ::UnmapViewOfFile(m_pType);
198 if ( m_hMapping != NULL )
200 ::CloseHandle(m_hMapping);
205 TYP* m_Mapping(INDEX index)
const
211 if ( m_hMapping == NULL )
213 m_hMapping = ::CreateFileMapping(m_reader, NULL, PAGE_READONLY, 0, 0, NULL);
214 if ( m_hMapping == NULL )
219 LONGLONG fl = m_IndexToFilePos(index);
220 LONGLONG pl = fl / m_pageSize * m_pageSize;
221 if ( pl != m_nowPage )
223 if ( m_pType != NULL )
225 ::UnmapViewOfFile(m_pType);
229 LONGLONG ns = min(m_pageSize * 2, m_reader.
GetSize() - pl);
230 m_pType =
static_cast<BYTE*
>(::MapViewOfFile(m_hMapping, FILE_MAP_READ,
static_cast<DWORD
>(pl >> 32),
static_cast<DWORD
>(pl), down_cast<DWORD>(ns)));
231 if ( m_pType == NULL )
233 _GetLastError(
"MapViewOfFile");
234 ::CloseHandle(m_hMapping);
239 return reinterpret_cast<TYP*
>(&m_pType[fl - pl]);
247 mutable HANDLE m_hMapping;
248 mutable BYTE* m_pType;
249 mutable LONGLONG m_nowPage;
250 friend class CConstFileMappingTest;
virtual size_t GetSize(void) const
[取得] 要素数取得.
bool Open(LPCTSTR lpszName, LONGLONG offset=0, size_t size=INVALID_SIZE)
[操作] オープン.
virtual TYP Get(INDEX index) const
[取得] 要素の取得.
virtual const TYP & At(INDEX index) const
[取得] 要素の参照取得.
virtual bool Lock(DWORD dwTime=INFINITE) const
[排他] ロック
const TYP & operator[](INDEX index) const
[取得] 要素の取得.
CConstFileMappingT(DWORD multi=2)
コンストラクタ.
bool IsOpened(void) const
[確認] オープン確認.
void Close(void)
[操作] クローズ.
~CConstFileMappingT(void)
デストラクタ.
virtual void Unlock(void) const
[排他] アンロック
bool Open(LPCTSTR lpszName, bool boIsShare=true, bool boDummy=false)
[操作] オープン
virtual LONGLONG GetSize(void) const
[取得] ファイルサイズ取得
virtual bool CanRead(void) const
[確認] 読み込み可能か
virtual void Close(void)
[操作] クローズ
virtual bool Lock(DWORD dwTime=INFINITE) const
[排他] ロック
virtual void Unlock(void) const
[排他] アンロック
CConstFileMappingT< BYTE > CConstFileMapping
Constファイルマッピングクラス
bool IsInRange(INDEX index) const
[確認] INDEXの有効確認.