CGrowableArray解析 _ DXUT容器

 

 

 

CGrowableArray的声明                                       in  DXUTmisc.h

 1 //--------------------------------------------------------------------------------------
 2 // A growable array .
 3 //--------------------------------------------------------------------------------------
 4 template<typename TYPE> class CGrowableArray
 5 {
 6 public:
 7             CGrowableArray()
 8             {
 9                 m_pData = NULL; m_nSize = 0; m_nMaxSize = 0;
10             }
11             CGrowableArray( const CGrowableArray <TYPE>& a )
12             {
13                 for( int i = 0; i < a.m_nSize; i++ ) Add( a.m_pData[i] );
14             }
15             ~CGrowableArray()
16             {
17                 RemoveAll();
18             }
19 
20     const TYPE& operator[]( int nIndex ) const
21     {
22         return GetAt( nIndex );
23     }
24     TYPE& operator[]( int nIndex )
25     {
26         return GetAt( nIndex );
27     }
28 
29     CGrowableArray& operator=( const CGrowableArray <TYPE>& a )
30     {
31         if( this == &a ) return *this; RemoveAll(); for( int i = 0; i < a.m_nSize;
32                                                          i++ ) Add( a.m_pData[i] ); return *this;
33     }
34 
35     HRESULT SetSize( int nNewMaxSize );
36     HRESULT Add( const TYPE& value );
37     HRESULT Insert( int nIndex, const TYPE& value );
38     HRESULT SetAt( int nIndex, const TYPE& value );
39     TYPE& GetAt( int nIndex ) const
40     {
41         assert( nIndex >= 0 && nIndex < m_nSize ); return m_pData[nIndex];
42     }
43     int     GetSize() const
44     {
45         return m_nSize;
46     }
47     TYPE* GetData()
48     {
49         return m_pData;
50     }
51     bool    Contains( const TYPE& value )
52     {
53         return ( -1 != IndexOf( value ) );
54     }
55 
56     int     IndexOf( const TYPE& value )
57     {
58         return ( m_nSize > 0 ) ? IndexOf( value, 0, m_nSize ) : -1;
59     }
60     int     IndexOf( const TYPE& value, int iStart )
61     {
62         return IndexOf( value, iStart, m_nSize - iStart );
63     }
64     int     IndexOf( const TYPE& value, int nIndex, int nNumElements );
65 
66     int     LastIndexOf( const TYPE& value )
67     {
68         return ( m_nSize > 0 ) ? LastIndexOf( value, m_nSize - 1, m_nSize ) : -1;
69     }
70     int     LastIndexOf( const TYPE& value, int nIndex )
71     {
72         return LastIndexOf( value, nIndex, nIndex + 1 );
73     }
74     int     LastIndexOf( const TYPE& value, int nIndex, int nNumElements );
75 
76     HRESULT Remove( int nIndex );
77     void    RemoveAll()
78     {
79         SetSize( 0 );
80     }
81     void    Reset()
82     {
83         m_nSize = 0;
84     }
85 
86 protected:
87     TYPE* m_pData;      // the actual array of data
88     int m_nSize;        // # of elements (upperBound - 1)
89     int m_nMaxSize;     // max allocated
90 
91     HRESULT SetSizeInternal( int nNewMaxSize );  // This version doesn't call ctor or dtor.
92 };
View Code

 

posted @ 2016-01-20 23:34  Agravity  阅读(215)  评论(0编辑  收藏  举报