#include <utilities/memory_handler.h>
Открытые члены | |
| MemoryDescription (void *theMemoryBlock, const std::size_t theMemoryBlockSize, const std::string &theBlockDescription) | |
| void | OnAssigned (void) |
| void | OnCopied (void) |
| bool | AddressIn (void *Address) |
| void | RegisterPointer (PointerInterface *Ptr) |
| void | ReleaseNestedPointers (void) |
Закрытые данные | |
| void * | MemoryBlock |
| std::size_t | MemoryBlockSize |
| std::string | BlockDescription |
| std::size_t | ReferenceCounter |
| std::vector< PointerInterface * > | NestedPointers |
Класс, чьи объекты хранят описание выделенного блока памяти.
См. определение в файле memory_handler.h строка 39
| nitro::MemoryDescription::MemoryDescription | ( | void * | theMemoryBlock, | |
| const std::size_t | theMemoryBlockSize, | |||
| const std::string & | theBlockDescription | |||
| ) |
Конструктор.
| theMemoryBlock | - Указатель на блок выделенной памяти. | |
| theMemoryBlockSize | - Размер выделенного блока памяти. | |
| theBlockDescription | - Описание выделенного блока памяти. |
См. определение в файле memory_handler.cpp строка 8
Перекрестные ссылки BlockDescription, nitro::exception::code(), MemoryBlock, MemoryBlockSize, ReferenceCounter и nitro::exception::what().
{
try
{
MemoryBlock = theMemoryBlock;
MemoryBlockSize = theMemoryBlockSize;
BlockDescription = theBlockDescription;
ReferenceCounter = 1;
}
catch( nitro::exception e )
{
throw( nitro::exception( std::string( "MemoryDescription::MemoryDescription( const void * theMemoryBlock , const std::size_t theMemoryBlockSize , const std::string & theBlockDescription )::" ) + e.what() , e.code() ) );
}
catch( ... )
{
throw( nitro::exception( std::string( "MemoryDescription::MemoryDescription( const void * theMemoryBlock , const std::size_t theMemoryBlockSize , const std::string & theBlockDescription )::An error occured" ) , 0 ) );
}
}

| bool nitro::MemoryDescription::AddressIn | ( | void * | Address | ) |
Функция проверки, находится ли адрес Address внутри выделенного блока памяти.
| Address | - Проверяемый адрес. |
| nitro::exception | Кидается исключение этого типа с описанием ошибки и её кодом. |
См. определение в файле memory_handler.cpp строка 62
Перекрестные ссылки nitro::exception::code(), MemoryBlock, MemoryBlockSize и nitro::exception::what().
Используется в RegisterPointer().
{
try
{
return( MemoryBlock >= Address && Address <= ( ( char * )MemoryBlock ) + MemoryBlockSize );
}
catch( nitro::exception e )
{
throw( nitro::exception( std::string( "MemoryDescription::AddressIn( void * Address )::" ) + e.what() , e.code() ) );
}
catch( ... )
{
throw( nitro::exception( std::string( "MemoryDescription::AddressIn( void * Address )::An error occured" ) , 0 ) );
}
}

| void nitro::MemoryDescription::OnAssigned | ( | void | ) |
Функция вызывается, когда значение указателя инициализируется новым адресом.
См. определение в файле memory_handler.cpp строка 30
Перекрестные ссылки nitro::exception::code(), ReferenceCounter и nitro::exception::what().
{
try
{
ReferenceCounter--;
}
catch( nitro::exception e )
{
throw( nitro::exception( std::string( "MemoryDescription::OnAssigned( void )::" ) + e.what() , e.code() ) );
}
catch( ... )
{
throw( nitro::exception( std::string( "MemoryDescription::OnAssigned( void )::An error occured" ) , 0 ) );
}
}

| void nitro::MemoryDescription::OnCopied | ( | void | ) |
Функция вызывается, когда значение указателя использутется для инициализации другого указателя.
См. определение в файле memory_handler.cpp строка 46
Перекрестные ссылки nitro::exception::code(), ReferenceCounter и nitro::exception::what().
{
try
{
ReferenceCounter++;
}
catch( nitro::exception e )
{
throw( nitro::exception( std::string( "MemoryDescription::OnCopied( void )::" ) + e.what() , e.code() ) );
}
catch( ... )
{
throw( nitro::exception( std::string( "MemoryDescription::OnCopied( void )::An error occured" ) , 0 ) );
}
}

| void nitro::MemoryDescription::RegisterPointer | ( | PointerInterface * | Ptr | ) |
Функция регистрирует указатель, расположенный в описываемом блоке.
| Ptr | - Регистрируемый указатель. |
| nitro::exception | - Кидается исключение этого типа с описанием ошибки и её кодом. |
См. определение в файле memory_handler.cpp строка 78
Перекрестные ссылки AddressIn(), nitro::exception::code(), NestedPointers и nitro::exception::what().
{
try
{
if( AddressIn( ( void * ) Ptr ) )
{
NestedPointers.push_back( Ptr );
}
}
catch( nitro::exception e )
{
throw( nitro::exception( std::string( "MemoryDescription::RegisterPointer( PointerInterface * Ptr )::" ) + e.what() , e.code() ) );
}
catch( ... )
{
throw( nitro::exception( std::string( "MemoryDescription::RegisterPointer( PointerInterface * Ptr )::An error occured" ) , 0 ) );
}
}

| void nitro::MemoryDescription::ReleaseNestedPointers | ( | void | ) |
Функция освобождает всю память через зарегистрированные указатели.
| nitro::exception | - Кидается исключение этого типа с описанием ошибки и её кодом. |
См. определение в файле memory_handler.cpp строка 97
Перекрестные ссылки nitro::exception::code(), NestedPointers и nitro::exception::what().
{
try
{
for( std::size_t i( 0 ) ; i < NestedPointers.size() ; i++ )
{
NestedPointers[ i ]->Release();
}
NestedPointers.erase( NestedPointers.begin() , NestedPointers.end() );
}
catch( nitro::exception e )
{
throw( nitro::exception( std::string( "MemoryDescription::RegisterPointer( PointerInterface * Ptr )::" ) + e.what() , e.code() ) );
}
catch( ... )
{
throw( nitro::exception( std::string( "MemoryDescription::RegisterPointer( PointerInterface * Ptr )::An error occured" ) , 0 ) );
}
}

std::string nitro::MemoryDescription::BlockDescription [private] |
Описание выделенного блока памяти.
См. определение в файле memory_handler.h строка 182
Используется в MemoryDescription().
void* nitro::MemoryDescription::MemoryBlock [private] |
Указатель на хранимый блок памяти.
См. определение в файле memory_handler.h строка 158
Используется в AddressIn() и MemoryDescription().
std::size_t nitro::MemoryDescription::MemoryBlockSize [private] |
Размер хранимого блока памяти.
См. определение в файле memory_handler.h строка 170
Используется в AddressIn() и MemoryDescription().
std::vector< PointerInterface * > nitro::MemoryDescription::NestedPointers [private] |
Массив с указателями расположенными в описываемом блоке памяти.
См. определение в файле memory_handler.h строка 206
Используется в RegisterPointer() и ReleaseNestedPointers().
std::size_t nitro::MemoryDescription::ReferenceCounter [private] |
Счетчик ссылок.
См. определение в файле memory_handler.h строка 194
Используется в MemoryDescription(), OnAssigned() и OnCopied().
1.6.1