14 #pragma managed( push, off ) 30 template<
typename Type >
33 : m_pBuffer(
nullptr )
40 template<
typename Type >
51 template<
typename Type >
57 Copy( pBuffer, nCount );
62 template<
typename Type >
68 Copy( rcInitializer );
73 template<
typename Type >
84 template<
typename Type >
90 Move( std::move( rcInstance ) );
95 template<
typename Type >
105 template<
typename Type >
116 template<
typename Type >
119 Move( std::move( rcInstance ) );
127 template<
typename Type >
138 template<
typename Type >
141 Copy( rcInitializer );
149 template<
typename Type >
152 Append( rcInstance );
160 template<
typename Type >
171 template<
typename Type >
174 Append( rcInitializer );
182 template<
typename Type >
188 Type* result = &element;
191 if ( ( 0 > nIndex ) || ( m_nCount <= nIndex ) ) {
197 result = &m_pBuffer[ nIndex ];
208 template<
typename Type >
221 template<
typename Type >
227 if ( m_nCount > nSize ) {
232 else if ( m_nSize != nSize ) {
234 Type* pNewBuffer =
new Type[ nSize ];
235 if (
nullptr == pNewBuffer ) {
240 else for (
int nIndex = 0; m_nCount > nIndex; ++nIndex ) {
242 pNewBuffer[ nIndex ] = m_pBuffer[ nIndex ];
246 for (
int nIndex = m_nCount; nSize > nIndex; ++nIndex ) {
248 ::memset( &pNewBuffer[ nIndex ], 0,
sizeof( Type ) );
255 m_pBuffer = pNewBuffer;
269 template<
typename Type >
275 if ( m_nSize < nCount ) {
277 int nSize = ( ( nCount + GetSegmentSize() ) / GetSegmentSize() * GetSegmentSize() );
280 if ( !CreateBuffer( nSize ) ) {
296 template<
typename Type >
302 if ( m_nSize > m_nCount ) {
304 if ( !CreateBuffer( m_nCount ) ) {
320 template<
typename Type >
326 return Insert( 0, rcInstance );
331 template<
typename Type >
337 return Insert( 0, rElement );
342 template<
typename Type >
348 return Insert( 0, pBuffer, nCount );
353 template<
typename Type >
359 return Insert( 0, rcInitializer );
364 template<
typename Type >
373 m_pBuffer = rcInstance.m_pBuffer;
374 m_nSize = rcInstance.m_nSize;
375 m_nCount = rcInstance.m_nCount;
378 rcInstance.m_pBuffer =
nullptr;
379 rcInstance.m_nSize = 0;
380 rcInstance.m_nCount = 0;
392 template<
typename Type >
395 return Insert( m_nCount, rcInstance );
400 template<
typename Type >
403 return Insert( m_nCount, rElement );
408 template<
typename Type >
411 return Insert( m_nCount, pBuffer, nCount );
416 template<
typename Type >
419 return Insert( m_nCount, rcInitializer );
424 template<
typename Type >
427 return Insert( nIndex, rcInstance.m_pBuffer, rcInstance.m_nCount );
432 template<
typename Type >
435 return Insert( nIndex, &rElement, 1 );
440 template<
typename Type >
446 if (
nullptr == pBuffer ) {
451 else if ( ( 0 > nIndex ) || ( m_nCount < nIndex ) ) {
456 else if ( 0 > nCount ) {
461 else if ( !UpdateBuffer( m_nCount + nCount ) ) {
467 int nMove = ( m_nCount - nIndex );
470 Type* pDst = &m_pBuffer[ m_nCount + nCount - 1 ];
471 Type
const* pSrc = &m_pBuffer[ m_nCount - 1 ];
472 for ( ; 0 < nMove; --nMove ) {
482 Type
const* pSrc = pBuffer;
483 Type* pDst = &m_pBuffer[ nIndex ];
484 for ( ; 0 < nCount; --nCount ) {
499 template<
typename Type >
505 for (
auto pcIter = rcInitializer.begin();; ++pcIter ) {
507 if ( rcInitializer.end() == pcIter ) {
514 if ( !Insert( nIndex++, *pcIter ) ) {
527 template<
typename Type >
530 return Remove( m_nCount - 1 );
535 template<
typename Type >
538 return Remove( nIndex, 1 );
543 template<
typename Type >
549 if ( ( 0 > nIndex ) || ( m_nCount <= nIndex ) ) {
554 else if ( ( m_nCount - nIndex ) < nCount ) {
560 int nMove = ( m_nCount - nIndex - nCount );
563 for ( ; 0 < nMove; --nMove, ++nIndex ) {
565 m_pBuffer[ nIndex ] = m_pBuffer[ nIndex + nCount ];
570 for ( ; m_nCount > nIndex; ++nIndex ) {
572 ::memset( &m_pBuffer[ nIndex ], 0,
sizeof( Type ) );
588 template<
typename Type >
594 if ( ( 0 > nIndex ) || ( m_nCount <= nIndex ) ) {
600 rElement = m_pBuffer[ nIndex ];
612 template<
typename Type >
618 if ( ( 0 > nIndex ) || ( m_nCount <= nIndex ) ) {
624 m_pBuffer[ nIndex ] = rElement;
636 template<
typename Type >
642 for (
int nIndex = 0; m_nCount > nIndex; ++nIndex ) {
644 if ( Compare( rElement, m_pBuffer[ nIndex ] ) ) {
658 template<
typename Type >
664 for (
int nIndex = 0;; ++nIndex ) {
666 if (
sizeof( Type ) <= nIndex ) {
672 else if ( reinterpret_cast< char const* >( &rElement1 )[ nIndex ] != reinterpret_cast< char const* >( &rElement2 )[ nIndex ] ) {
685 template<
typename Type >
688 return Append( rElement );
693 template<
typename Type >
696 return Append( pBuffer, nCount );
701 template<
typename Type >
704 return Append( rcInitializer );
709 template<
typename Type >
715 if ( !Get( ( m_nCount - 1 ), rElement ) ) {
720 else if ( !Remove() ) {
735 template<
typename Type >
741 if ( !Get( 0, rElement ) ) {
746 else if ( !Remove( 0 ) ) {
760 #pragma managed( pop ) virtual bool CreateBuffer(int nSize) noexcept
バッファ作成関数
virtual bool Set(int nIndex, Type const &rElement) noexcept
設定関数
virtual ~CArray() noexcept
デストラクタ
virtual bool Remove() noexcept
削除関数
virtual bool Move(CArray &&rcInstance) noexcept
ムーブ関数
virtual bool Append(CArray const &rcInstance) noexcept
追加関数
virtual void Clear() noexcept
クリア関数
virtual bool Push(Type const &rElement) noexcept
プッシュ関数
virtual int Find(Type const &rElement) const noexcept
検索関数
virtual bool Pop(Type &rElement) noexcept
ポップ関数
virtual bool Compare(Type const &rElement1, Type const &rElement2) const noexcept
比較関数
virtual CArray & operator+=(CArray const &rcInstance) noexcept
加算代入演算子オーバーロード関数
virtual bool Get(int nIndex, Type &rElement) const noexcept
取得関数
virtual Type & operator[](int nIndex) noexcept
配列添字演算子オーバーロード関数
virtual bool Insert(int nIndex, CArray const &rcInstance) noexcept
挿入関数
virtual bool CompactBuffer() noexcept
バッファサイズコンパクト化関数
virtual bool Copy(CArray const &rcInstance) noexcept
コピー関数
virtual CArray & operator=(CArray const &rcInstance) noexcept
コピー代入演算子オーバーロード関数
virtual bool PopFront(Type &rElement) noexcept
ポップフロント関数
virtual bool UpdateBuffer(int nCount) noexcept
バッファサイズ更新関数