1 /* 2 * PROJECT: ReactOS c++ runtime library 3 * LICENSE: GPLv2+ - See COPYING in the top level directory 4 * PURPOSE: Exception-handling vector ctor/dtor iterator implementation 5 * PROGRAMMER: Thomas Faber (thomas.faber@reactos.org) 6 */ 7 8 #include <stddef.h> 9 10 void __stdcall MSVCRTEX_eh_vector_constructor_iterator(void *pMem, size_t sizeOfItem, int nItems, void (__thiscall *ctor)(void *), void (__thiscall *dtor)(void *)) 11 { 12 char *pEnd = static_cast<char *>(pMem) + nItems * sizeOfItem; 13 for (char *pItem = static_cast<char *>(pMem); 14 pItem < pEnd; 15 pItem += sizeOfItem) 16 { 17 try 18 { 19 ctor(pItem); 20 } 21 catch (...) 22 { 23 for (pItem -= sizeOfItem; pItem >= pMem; pItem -= sizeOfItem) 24 dtor(pItem); 25 throw; 26 } 27 } 28 } 29 30 void __stdcall MSVCRTEX_eh_vector_destructor_iterator(void *pMem, size_t sizeOfItem, int nItems, void (__thiscall *dtor)(void *)) 31 { 32 char *pEnd = static_cast<char *>(pMem) + nItems * sizeOfItem; 33 for (char *pItem = pEnd - sizeOfItem; 34 pItem >= pMem; 35 pItem -= sizeOfItem) 36 { 37 try 38 { 39 dtor(pItem); 40 } 41 catch (...) 42 { 43 for (pItem -= sizeOfItem; pItem >= pMem; pItem -= sizeOfItem) 44 dtor(pItem); 45 throw; 46 } 47 } 48 } 49