Leaked source code of windows server 2003
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 1996-1998 Microsoft Corporation
//
// Module Name:
// StlUtils.h
//
// Abstract:
// Definition of STL utility classes and functions.
//
// Implementation File:
// None.
//
// Author:
// David Potter (davidp) May 21, 1998
//
// Revision History:
//
// Notes:
//
/////////////////////////////////////////////////////////////////////////////
#ifndef __STLUTUILS_H_
#define __STLUTUILS_H_
/////////////////////////////////////////////////////////////////////////////
// Forward Class Declarations
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
// External Class Declarations
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
// Include Files
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
// Type Definitions
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
// Global Functions
/////////////////////////////////////////////////////////////////////////////
// Delete all items from a pointer list
template < class T > void DeleteAllPtrListItems( std::list< T > * pList ) { ATLASSERT( pList != NULL );
//
// Get pointers to beginning and end of list.
//
std::list< T >::iterator itCurrent = pList->begin(); std::list< T >::iterator itLast = pList->end();
//
// Loop through the list and delete each objects.
//
while ( itCurrent != itLast ) { T pT = *itCurrent; ATLASSERT( pT != NULL ); delete pT; itCurrent = pList->erase( itCurrent ); } // while: more items in the list
} //*** DeleteAllPtrListItems()
// Delete items of a desired type from a pointer list
template < class TBase, class T > void DeletePtrListItems( std::list< TBase > * pList ) { ATLASSERT( pList != NULL );
//
// Get pointers to beginning and end of list.
//
std::list< TBase >::iterator itCurrent = pList->begin(); std::list< TBase >::iterator itLast = pList->end();
//
// Loop through the list looking for objects of the
// desired type and delete those objects.
//
while ( itCurrent != itLast ) { T pT = dynamic_cast< T >( *itCurrent ); if ( pT != NULL ) { delete pT; itCurrent = pList->erase( itCurrent ); } // if: object has desired type
else { itCurrent++; } // else: object has different type
} // while: more items in the list
} //*** DeletePtrListItems()
// Move items of a desired type from one pointer list to another list
template < class TBase, class T > void MovePtrListItems( std::list< TBase > * pSrcList, std::list< T > * pDstList ) { ATLASSERT( pSrcList != NULL ); ATLASSERT( pDstList != NULL );
//
// Get pointers to beginning and end of list.
//
std::list< TBase >::iterator itCurrent = pSrcList->begin(); std::list< TBase >::iterator itLast = pSrcList->end();
//
// Loop through the source list looking for objects of the
// desired type and move those objects to the
// destination list.
//
while ( itCurrent != itLast ) { T pT = dynamic_cast< T >( *itCurrent ); if ( pT != NULL ) { itCurrent = pSrcList->erase( itCurrent ); pDstList->insert( pDstList->end(), pT ); } // if: object has desired type
else { itCurrent++; } // else: object has different type
} // while: more items in the list
} //*** MovePtrListItems()
/////////////////////////////////////////////////////////////////////////////
#endif // __STLUTUILS_H_
|