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
バッファサイズ更新関数