68 lines
1.4 KiB
C++
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
|