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 capacity( ) const noexcept;
|
||||||
uint32_t size( ) const noexcept;
|
uint32_t size( ) const noexcept;
|
||||||
uint32_t growth( ) const noexcept;
|
uint32_t growth( ) const noexcept;
|
||||||
|
bool empty( ) const noexcept;
|
||||||
|
|
||||||
MyType_& ensureCapacity( uint32_t capacity ) noexcept;
|
MyType_& ensureCapacity( uint32_t capacity ) noexcept;
|
||||||
|
|
||||||
|
@ -124,6 +125,9 @@ class T_Array final
|
||||||
T& operator[] ( uint32_t index ) noexcept;
|
T& operator[] ( uint32_t index ) noexcept;
|
||||||
T const& operator[] ( uint32_t index ) const 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;
|
int32_t indexOf( T const& item ) const noexcept;
|
||||||
bool contains( 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 remove( uint32_t index ) noexcept;
|
||||||
void removeSwap( 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;
|
constexpr uint32_t capacity( ) const noexcept;
|
||||||
uint32_t size( ) const noexcept;
|
uint32_t size( ) const noexcept;
|
||||||
|
bool empty( ) const noexcept;
|
||||||
|
|
||||||
// ---------------------------------------------------------------------
|
// ---------------------------------------------------------------------
|
||||||
|
|
||||||
Type& operator[] ( uint32_t index ) noexcept;
|
Type& operator[] ( uint32_t index ) noexcept;
|
||||||
Type const& operator[] ( uint32_t index ) const 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;
|
int32_t indexOf( Type const& item ) const noexcept;
|
||||||
bool contains( 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 remove( uint32_t index ) noexcept;
|
||||||
void removeSwap( uint32_t index ) noexcept;
|
void removeSwap( uint32_t index ) noexcept;
|
||||||
|
void removeLast( ) noexcept;
|
||||||
|
|
||||||
// ---------------------------------------------------------------------
|
// ---------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -444,6 +454,7 @@ template<
|
||||||
uint32_t size( ) const noexcept;
|
uint32_t size( ) const noexcept;
|
||||||
constexpr uint32_t growth( ) const noexcept;
|
constexpr uint32_t growth( ) const noexcept;
|
||||||
bool isStatic( ) const noexcept;
|
bool isStatic( ) const noexcept;
|
||||||
|
bool empty( ) const noexcept;
|
||||||
|
|
||||||
T_Self& ensureCapacity( uint32_t capacity ) noexcept;
|
T_Self& ensureCapacity( uint32_t capacity ) noexcept;
|
||||||
|
|
||||||
|
@ -452,6 +463,9 @@ template<
|
||||||
T& operator[] ( uint32_t index ) noexcept;
|
T& operator[] ( uint32_t index ) noexcept;
|
||||||
T const& operator[] ( uint32_t index ) const 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;
|
int32_t indexOf( T const& item ) const noexcept;
|
||||||
bool contains( T const& item ) const noexcept;
|
bool contains( T const& item ) const noexcept;
|
||||||
|
|
||||||
|
@ -490,6 +504,7 @@ template<
|
||||||
|
|
||||||
void remove( uint32_t index ) noexcept;
|
void remove( uint32_t index ) noexcept;
|
||||||
void removeSwap( 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_;
|
return growth_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template< typename T >
|
||||||
|
inline bool T_Array< T >::empty( ) const noexcept
|
||||||
|
{
|
||||||
|
return size_ != 0;
|
||||||
|
}
|
||||||
|
|
||||||
/*----------------------------------------------------------------------------*/
|
/*----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
template< typename T >
|
template< typename T >
|
||||||
|
@ -191,6 +197,20 @@ inline T const& T_Array< T >::operator[] (
|
||||||
return data_[ index ];
|
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 >
|
template< typename T >
|
||||||
|
@ -401,6 +421,14 @@ inline void T_Array< T >::removeSwap(
|
||||||
size_ --;
|
size_ --;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template< typename T >
|
||||||
|
inline void T_Array< T >::removeLast( ) noexcept
|
||||||
|
{
|
||||||
|
assert( size_ );
|
||||||
|
data_[ size_ - 1 ].~T( );
|
||||||
|
size_ --;
|
||||||
|
}
|
||||||
|
|
||||||
/*----------------------------------------------------------------------------*/
|
/*----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
template< typename T >
|
template< typename T >
|
||||||
|
@ -1076,6 +1104,12 @@ inline uint32_t T_StaticArray< T , S >::size( ) const noexcept
|
||||||
return size_;
|
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 >
|
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 ] );
|
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 >
|
template< typename T , uint32_t S >
|
||||||
|
@ -1307,6 +1355,14 @@ inline void T_StaticArray< T , S >::removeSwap(
|
||||||
size_ --;
|
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 >
|
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_ >( );
|
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 >
|
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 ];
|
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 >
|
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(
|
inline void T_AutoArray< T , S , G >::remove(
|
||||||
const uint32_t index ) noexcept
|
const uint32_t index ) noexcept
|
||||||
{
|
{
|
||||||
return isStatic( )
|
isStatic( )
|
||||||
? static_( ).remove( index )
|
? static_( ).remove( index )
|
||||||
: dynamic_( ).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(
|
inline void T_AutoArray< T , S , G >::removeSwap(
|
||||||
const uint32_t index ) noexcept
|
const uint32_t index ) noexcept
|
||||||
{
|
{
|
||||||
return isStatic( )
|
isStatic( )
|
||||||
? static_( ).removeSwap( index )
|
? static_( ).removeSwap( index )
|
||||||
: dynamic_( ).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 >
|
template< typename T , uint32_t S , uint32_t G >
|
||||||
|
|
Loading…
Reference in a new issue