📄 umc_mmap.cpp
字号:
/*
//
// INTEL CORPORATION PROPRIETARY INFORMATION
// This software is supplied under the terms of a license agreement or
// nondisclosure agreement with Intel Corporation and may not be copied
// or disclosed except in accordance with the terms of that agreement.
// Copyright(c) 2003-2006 Intel Corporation. All Rights Reserved.
//
*/
#include "umc_mmap.h"
namespace UMC
{
MMap::MMap(void) :
m_address(NULL),
m_file_size(0),
m_offset(0),
m_sizet(0)
{
vm_mmap_set_invalid(&m_handle);
} // MMap::MMap(void) :
MMap::~MMap(void)
{
vm_mmap_close(&m_handle);
} // MMap::~MMap(void)
Status MMap::Init(vm_char *sz_file)
{
vm_mmap_close(&m_handle);
m_offset = 0;
m_sizet = 0;
m_address = NULL;
m_file_size = vm_mmap_create(&m_handle, sz_file, FLAG_ATTRIBUTE_READ);
if (0 == m_file_size)
return UMC_ERR_FAILED;
return UMC_OK;
} // Status MMap::Init(vm_char *sz_file)
Status MMap::Map(Ipp64u st_offset, Ipp64u st_sizet)
{
void *pv_addr;
Ipp64u st_align = st_offset % vm_mmap_get_alloc_granularity();
// check error(s)
if (!vm_mmap_is_valid(&m_handle))
return UMC_ERR_NOT_INITIALIZED;
if (st_offset + st_sizet > m_file_size)
return UMC_ERR_NOT_ENOUGH_DATA;
st_sizet += st_align;
st_offset -= st_align;
// set new window
pv_addr = vm_mmap_set_view(&m_handle, &st_offset, &st_sizet);
if (NULL == pv_addr)
{
m_offset = 0;
m_sizet = 0;
return UMC_ERR_FAILED;
}
// save setting(s)
m_address = pv_addr;
m_offset = st_offset;
m_sizet = st_sizet;
return UMC_OK;
} // Status MMap::Map(Ipp64u st_offset, Ipp64u st_sizet)
} // namespace UMC
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -