/* * 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 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(pMem) + nItems * sizeOfItem; for (char *pItem = static_cast(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(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; } } }