Files
core/DesktopEditor/fontengine/fontconverter/MemoryUtils.h
Oleg.Korshul 7847d7362c mac build
git-svn-id: svn://fileserver/activex/AVS/Sources/TeamlabOffice/trunk/ServerComponents@64444 954022d7-b5bf-4e40-9824-e11837661b57
2016-05-21 00:28:57 +03:00

108 lines
3.3 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef _ASC_FONT_CONVERTER_MEMORY_UTILS_H_
#define _ASC_FONT_CONVERTER_MEMORY_UTILS_H_
#include <stdio.h>
#include <limits>
#include <string>
#include <stdlib.h>
#ifdef __linux__
#include <string.h>
#endif
namespace NSFontConverter
{
//------------------------------------------------------------------------
// Аналогично malloc, но с обработкой ошибок.
static void *MemUtilsMalloc(int nSize)
{
void *pResult;
if ( nSize <= 0 )
return NULL;
if ( !( pResult = malloc( nSize ) ) )
{
// TO DO: Выдать ошибку выделения памяти
}
return pResult;
}
// Тоже что и realloc, но с обработкой ошибок.
// Если <pData> NULL, вызывается функция malloc вместо realloc.
static void *MemUtilsRealloc(void *pData, int nSize)
{
void *pResult;
if ( nSize <= 0 )
{
if ( pData )
free( pData );
return NULL;
}
if ( pData )
pResult = realloc( pData, nSize);
else
pResult = malloc( nSize );
if ( !pResult )
{
// TO DO: Выдать ошибку выделения памяти
}
return pResult;
}
// Тоже самое, что и MemUtilsMalloc and MemUtilsRelloc, толькоt
// учитывает количество элементов и размер элемента. В результате
// выделяется память размером nObjectsCount * nObjectSize байт.
// Кроме того присутствует обработка ошибок и проверка того, чтобы
// суммарный размер не превышал предел для int.
static void *MemUtilsMallocArray(int nObjectsCount, int nObjectSize)
{
if ( 0 == nObjectsCount )
return NULL;
int nSize = nObjectsCount * nObjectSize;
if ( nObjectSize <= 0 || nObjectsCount < 0 || nObjectsCount >= 0x7fffffff / nObjectSize )
{
// TO DO: Выдать ошибку выделения памяти
}
return MemUtilsMalloc( nSize );
}
// Тоже что и free, но проверяет и игнорирует NULL-указатели.
static void MemUtilsFree(void *pData)
{
if ( pData )
free( pData );
}
static void *MemUtilsReallocArray(void *pData, int nObjectsCount, int nObjectSize)
{
if ( 0 == nObjectsCount )
{
if ( pData )
MemUtilsFree( pData );
return NULL;
}
int nSize = nObjectsCount * nObjectSize;
if ( nObjectSize <= 0 || nObjectsCount < 0 || nObjectsCount >= 0x7fffffff / nObjectSize )
{
// TO DO: Выдать ошибку выделения памяти
}
return MemUtilsRealloc( pData, nSize );
}
// Выделяем память и копируем туда строку.
static char *CopyString(char *sString)
{
char *sResult = (char *)MemUtilsMalloc( strlen( sString ) + 1 );
strcpy( sResult, sString );
return sResult;
}
}
#endif /* _ASC_FONT_CONVERTER_MEMORY_UTILS_H_ */