Arrays - New utility methods
empty(), last() and removeLast()
This commit is contained in:
parent
90048ad3cc
commit
4d336e7086
2 changed files with 100 additions and 2 deletions
|
@ -116,6 +116,7 @@ class T_Array final
|
|||
uint32_t capacity( ) const noexcept;
|
||||
uint32_t size( ) const noexcept;
|
||||
uint32_t growth( ) const noexcept;
|
||||
bool empty( ) const noexcept;
|
||||
|
||||
MyType_& ensureCapacity( uint32_t capacity ) noexcept;
|
||||
|
||||
|
@ -124,6 +125,9 @@ class T_Array final
|
|||
T& operator[] ( uint32_t index ) noexcept;
|
||||
T const& operator[] ( uint32_t index ) const noexcept;
|
||||
|
||||
T& last( ) noexcept;
|
||||
T const& last( ) const noexcept;
|
||||
|
||||
int32_t indexOf( T const& item ) const noexcept;
|
||||
bool contains( T const& item ) const noexcept;
|
||||
|
||||
|
@ -162,6 +166,7 @@ class T_Array final
|
|||
|
||||
void remove( uint32_t index ) noexcept;
|
||||
void removeSwap( uint32_t index ) noexcept;
|
||||
void removeLast( ) noexcept;
|
||||
|
||||
// ---------------------------------------------------------------------
|
||||
|
||||
|
@ -251,12 +256,16 @@ class T_StaticArray final
|
|||
|
||||
constexpr uint32_t capacity( ) const noexcept;
|
||||
uint32_t size( ) const noexcept;
|
||||
bool empty( ) const noexcept;
|
||||
|
||||
// ---------------------------------------------------------------------
|
||||
|
||||
Type& operator[] ( uint32_t index ) noexcept;
|
||||
Type const& operator[] ( uint32_t index ) const noexcept;
|
||||
|
||||
Type& last( ) noexcept;
|
||||
Type const& last( ) const noexcept;
|
||||
|
||||
int32_t indexOf( Type const& item ) const noexcept;
|
||||
bool contains( Type const& item ) const noexcept;
|
||||
|
||||
|
@ -293,6 +302,7 @@ class T_StaticArray final
|
|||
|
||||
void remove( uint32_t index ) noexcept;
|
||||
void removeSwap( uint32_t index ) noexcept;
|
||||
void removeLast( ) noexcept;
|
||||
|
||||
// ---------------------------------------------------------------------
|
||||
|
||||
|
@ -444,6 +454,7 @@ template<
|
|||
uint32_t size( ) const noexcept;
|
||||
constexpr uint32_t growth( ) const noexcept;
|
||||
bool isStatic( ) const noexcept;
|
||||
bool empty( ) const noexcept;
|
||||
|
||||
T_Self& ensureCapacity( uint32_t capacity ) noexcept;
|
||||
|
||||
|
@ -452,6 +463,9 @@ template<
|
|||
T& operator[] ( uint32_t index ) noexcept;
|
||||
T const& operator[] ( uint32_t index ) const noexcept;
|
||||
|
||||
T& last( ) noexcept;
|
||||
T const& last( ) const noexcept;
|
||||
|
||||
int32_t indexOf( T const& item ) const noexcept;
|
||||
bool contains( T const& item ) const noexcept;
|
||||
|
||||
|
@ -490,6 +504,7 @@ template<
|
|||
|
||||
void remove( uint32_t index ) noexcept;
|
||||
void removeSwap( uint32_t index ) noexcept;
|
||||
void removeLast( ) noexcept;
|
||||
|
||||
// ---------------------------------------------------------------------
|
||||
|
||||
|
|
|
@ -147,6 +147,12 @@ inline uint32_t T_Array< T >::growth( ) const noexcept
|
|||
return growth_;
|
||||
}
|
||||
|
||||
template< typename T >
|
||||
inline bool T_Array< T >::empty( ) const noexcept
|
||||
{
|
||||
return size_ != 0;
|
||||
}
|
||||
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
template< typename T >
|
||||
|
@ -191,6 +197,20 @@ inline T const& T_Array< T >::operator[] (
|
|||
return data_[ index ];
|
||||
}
|
||||
|
||||
template< typename T >
|
||||
inline T& T_Array< T >::last( ) noexcept
|
||||
{
|
||||
assert( !empty( ) );
|
||||
return data_[ size_ - 1 ];
|
||||
}
|
||||
|
||||
template< typename T >
|
||||
inline T const& T_Array< T >::last( ) const noexcept
|
||||
{
|
||||
assert( !empty( ) );
|
||||
return data_[ size_ - 1 ];
|
||||
}
|
||||
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
template< typename T >
|
||||
|
@ -401,6 +421,14 @@ inline void T_Array< T >::removeSwap(
|
|||
size_ --;
|
||||
}
|
||||
|
||||
template< typename T >
|
||||
inline void T_Array< T >::removeLast( ) noexcept
|
||||
{
|
||||
assert( size_ );
|
||||
data_[ size_ - 1 ].~T( );
|
||||
size_ --;
|
||||
}
|
||||
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
template< typename T >
|
||||
|
@ -1076,6 +1104,12 @@ inline uint32_t T_StaticArray< T , S >::size( ) const noexcept
|
|||
return size_;
|
||||
}
|
||||
|
||||
template< typename T , uint32_t S >
|
||||
inline bool T_StaticArray< T , S >::empty( ) const noexcept
|
||||
{
|
||||
return size_ != 0;
|
||||
}
|
||||
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
template< typename T , uint32_t S >
|
||||
|
@ -1094,6 +1128,20 @@ inline T const& T_StaticArray< T , S >::operator[] (
|
|||
return *reinterpret_cast< T const* >( &storage_[ index ] );
|
||||
}
|
||||
|
||||
template< typename T , uint32_t S >
|
||||
inline T& T_StaticArray< T , S >::last( ) noexcept
|
||||
{
|
||||
assert( !empty( ) );
|
||||
return *reinterpret_cast< T* >( &storage_[ size_ - 1 ] );
|
||||
}
|
||||
|
||||
template< typename T , uint32_t S >
|
||||
inline T const& T_StaticArray< T , S >::last( ) const noexcept
|
||||
{
|
||||
assert( !empty( ) );
|
||||
return *reinterpret_cast< T const* >( &storage_[ size_ - 1 ] );
|
||||
}
|
||||
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
template< typename T , uint32_t S >
|
||||
|
@ -1307,6 +1355,14 @@ inline void T_StaticArray< T , S >::removeSwap(
|
|||
size_ --;
|
||||
}
|
||||
|
||||
template< typename T , uint32_t S >
|
||||
inline void T_StaticArray< T , S >::removeLast( ) noexcept
|
||||
{
|
||||
assert( size_ );
|
||||
(*this)[ size_ - 1 ].~T( );
|
||||
size_ --;
|
||||
}
|
||||
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
template< typename T , uint32_t S >
|
||||
|
@ -1681,6 +1737,12 @@ inline bool T_AutoArray< T , S , G >::isStatic( ) const noexcept
|
|||
return array_.template hasType< T_Static_ >( );
|
||||
}
|
||||
|
||||
template< typename T , uint32_t S , uint32_t G >
|
||||
inline bool T_AutoArray< T , S , G >::empty( ) const noexcept
|
||||
{
|
||||
return size( ) != 0;
|
||||
}
|
||||
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
template< typename T , uint32_t S , uint32_t G >
|
||||
|
@ -1713,6 +1775,20 @@ inline T const& T_AutoArray< T , S , G >::operator[] (
|
|||
return isStatic( ) ? static_( )[ index ] : dynamic_( )[ index ];
|
||||
}
|
||||
|
||||
template< typename T , uint32_t S , uint32_t G >
|
||||
inline T& T_AutoArray< T , S , G >::last( ) noexcept
|
||||
{
|
||||
assert( !empty( ) );
|
||||
return (*this)[ size( ) - 1 ];
|
||||
}
|
||||
|
||||
template< typename T , uint32_t S , uint32_t G >
|
||||
inline T const& T_AutoArray< T , S , G >::last( ) const noexcept
|
||||
{
|
||||
assert( !empty( ) );
|
||||
return (*this)[ size( ) - 1 ];
|
||||
}
|
||||
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
template< typename T , uint32_t S , uint32_t G >
|
||||
|
@ -1881,7 +1957,7 @@ template< typename T , uint32_t S , uint32_t G >
|
|||
inline void T_AutoArray< T , S , G >::remove(
|
||||
const uint32_t index ) noexcept
|
||||
{
|
||||
return isStatic( )
|
||||
isStatic( )
|
||||
? static_( ).remove( index )
|
||||
: dynamic_( ).remove( index );
|
||||
}
|
||||
|
@ -1890,11 +1966,18 @@ template< typename T , uint32_t S , uint32_t G >
|
|||
inline void T_AutoArray< T , S , G >::removeSwap(
|
||||
const uint32_t index ) noexcept
|
||||
{
|
||||
return isStatic( )
|
||||
isStatic( )
|
||||
? static_( ).removeSwap( index )
|
||||
: dynamic_( ).removeSwap( index );
|
||||
}
|
||||
|
||||
template< typename T , uint32_t S , uint32_t G >
|
||||
inline void T_AutoArray< T , S , G >::removeLast( ) noexcept
|
||||
{
|
||||
assert( !empty( ) );
|
||||
remove( size( ) - 1 );
|
||||
}
|
||||
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
template< typename T , uint32_t S , uint32_t G >
|
||||
|
|
Loading…
Reference in a new issue