mirror of
https://github.com/reactos/reactos.git
synced 2024-10-30 11:35:58 +00:00
49 lines
1.3 KiB
C++
49 lines
1.3 KiB
C++
|
/*
|
||
|
* PROJECT: ReactOS c++ runtime library
|
||
|
* LICENSE: GPLv2+ - See COPYING in the top level directory
|
||
|
* PURPOSE: Exception-handling vector ctor/dtor iterator implementation
|
||
|
* PROGRAMMER: Thomas Faber (thomas.faber@reactos.org)
|
||
|
*/
|
||
|
|
||
|
#include <stddef.h>
|
||
|
|
||
|
void __stdcall MSVCRTEX_eh_vector_constructor_iterator(void *pMem, size_t sizeOfItem, int nItems, void (__thiscall *ctor)(void *), void (__thiscall *dtor)(void *))
|
||
|
{
|
||
|
char *pEnd = static_cast<char *>(pMem) + nItems * sizeOfItem;
|
||
|
for (char *pItem = static_cast<char *>(pMem);
|
||
|
pItem < pEnd;
|
||
|
pItem += sizeOfItem)
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
ctor(pItem);
|
||
|
}
|
||
|
catch (...)
|
||
|
{
|
||
|
for (pItem -= sizeOfItem; pItem >= pMem; pItem -= sizeOfItem)
|
||
|
dtor(pItem);
|
||
|
throw;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void __stdcall MSVCRTEX_eh_vector_destructor_iterator(void *pMem, size_t sizeOfItem, int nItems, void (__thiscall *dtor)(void *))
|
||
|
{
|
||
|
char *pEnd = static_cast<char *>(pMem) + nItems * sizeOfItem;
|
||
|
for (char *pItem = pEnd - sizeOfItem;
|
||
|
pItem >= pMem;
|
||
|
pItem -= sizeOfItem)
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
dtor(pItem);
|
||
|
}
|
||
|
catch (...)
|
||
|
{
|
||
|
for (pItem -= sizeOfItem; pItem >= pMem; pItem -= sizeOfItem)
|
||
|
dtor(pItem);
|
||
|
throw;
|
||
|
}
|
||
|
}
|
||
|
}
|