Files
Leviathan/Client/Game/game/Utility/TemplateUtil.h
T
2026-06-01 12:46:52 +02:00

68 lines
1.4 KiB
C++

#pragma once
namespace rp {
namespace type_trait {
template< typename T >
struct type2type
{
typedef T type_value;
};
template< int T >
struct int2type
{
enum { value = T };
};
} // type_trait
template< class T >
void safe_delete( T*& p )
{
if( p ) delete p;
p = 0;
}
//! sequence container wiper
template< class _Ct >
inline void wipe_seq( _Ct& container )
{
typedef typename _Ct::iterator iterator;
iterator end = container.end();
for( iterator itor = container.begin(); itor != end; ++itor )
if( *itor ) delete *itor;
container.clear();
}
/// 연관 컨테이너를 초기화
template< class _Ct >
inline
void wipe_assoc( _Ct& container )
{
typedef typename _Ct::iterator iterator;
iterator end = container.end();
for( iterator itor = container.begin(); itor != end; ++itor )
if( itor->second ) delete itor->second;
container.clear();
}
template< class _Ct, class _Ty >
inline void remove_seq( _Ct& container, const _Ty& value )
{
container.erase( std::remove( container.begin(), container.end(), value ), container.end() );
}
/// 조건 복사
template< typename InputItor, typename OutputItor, typename Predicate >
inline OutputItor copy_if( InputItor begin, InputItor end, OutputItor dest_begin, Predicate p )
{
while( begin != end )
{
if( p( *begin ) ) *dest_begin++ = *begin;
++begin;
}
return dest_begin;
}
} // rp