Files
Work/common/FILEMAP.CPP
2024-08-07 09:09:36 -04:00

65 lines
2.0 KiB
C++

#if defined(__FLAT__)
#include <common/filemap.hpp>
#include <common/openfile.hpp>
FileMap::FileMap(void)
: mMaxExtentHigh(0L), mMaxExtentLow(0L),
mPaging(ReadOnly), mProtection(Image), mhFileHandle(0)
{
}
FileMap::FileMap(const FileMap &/*someFileMap*/)
: mMaxExtentHigh(0L), mMaxExtentLow(0L),
mPaging(ReadOnly), mProtection(Image), mhFileHandle(0)
{
}
FileMap::FileMap(String mapName,DWORD maxExtentHigh,DWORD maxExtentLow,Paging paging,Protection protection)
: mMaxExtentHigh(maxExtentHigh), mMaxExtentLow(maxExtentLow), mPaging(paging),
mProtection(protection), mhFileHandle(0)
{
create(mapName,maxExtentHigh,maxExtentLow,paging,protection);
}
FileMap::FileMap(const FileHandle &someFileHandle)
: mMaxExtentHigh(0L), mMaxExtentLow(0), mhFileHandle(0)
{
maxExtentHigh(0L);
maxExtentLow(someFileHandle.size());
create(someFileHandle);
}
WORD FileMap::create(const FileHandle &someFileHandle)
{
if(FileHandle::Read==someFileHandle.access())mPaging=ReadOnly;
else if(FileHandle::Write==someFileHandle.access())mPaging=WriteCopy;
else if(FileHandle::ReadWrite==someFileHandle.access())mPaging=ReadWrite;
else mPaging=ReadOnly;
mProtection=Commit;
return create(String(""),0L,someFileHandle.size(),mPaging,mProtection,(HANDLE)someFileHandle);
}
WORD FileMap::create(String mapName,DWORD maxExtentHigh,DWORD maxExtentLow,Paging paging,Protection protection,HANDLE hMapFile)
{
mMaxExtentHigh=maxExtentHigh;
mMaxExtentLow=maxExtentLow;
mPaging=paging;
mProtection=protection;
destroyMap();
mhFileHandle=::CreateFileMapping((HANDLE)hMapFile,(LPSECURITY_ATTRIBUTES)0,paging|protection,maxExtentHigh,maxExtentLow,mapName);
return isOkay();
}
BOOL FileMap::open(const String &strName,DWORD maxExtentHigh,DWORD maxExtentLow,Paging paging,Protection protection,DWORD access,BOOL inherit)
{
destroyMap();
if(strName.isNull())return FALSE;
mhFileHandle=::OpenFileMapping(access,inherit,(LPSTR)(String&)strName);
mMaxExtentHigh=maxExtentHigh;
mMaxExtentLow=maxExtentLow;
mPaging=paging;
mProtection=protection;
return isOkay();
}
#endif