22template <
typename T>
class SPtr {
25 bool operator==(
const T* pobj )
const {
return pobj == pObj; }
26 bool operator!=(
const T* pobj )
const {
return pobj != pObj; }
31 SPtr( T* pobj = 0 ) : pObj( pobj ) {
32 if ( pObj ) { pObj->count++; }
35 if ( pObj ) { pObj->count++; }
39 if (
this == &ptr ) {
return *
this; }
40 if ( pObj && --( pObj->count ) == 0 ) {
delete pObj; }
41 if ( ( pObj = ptr.pObj ) ) { pObj->count++; }
46 if ( pObj && --( pObj->count ) == 0 ) {
delete pObj; }
53template <
typename T,
int N>
class DArray;
55template <
typename T,
int N>
class NIter {
73 NIter( T* begin,
int last ) : ptr( begin ), idx( last ) {}
81template <
typename T,
int N>
class DArray {
90 len = ( len == N ? len : len + 1 );
91 last = ( ( last - 1 ) + N ) % N;
96# ifdef USE_SMART_INSERT
103 memmove( &elems[last + 1], &elems[last], ( i - last ) *
sizeof( T ) );
104 memset( &elems[last], 0,
sizeof( T ) );
105 last = ( last + 1 ) % N;
109 memmove( &elems[i], &elems[i + 1], ( last - i - 1 ) *
sizeof( T ) );
110 memset( &elems[last - 1], 0,
sizeof( T ) );
117# ifndef USE_DIRTY_RESET
118 for (
int i = 0; i < len; i++ ) { elems[i] = T(); }
125 const T&
operator[](
const int idx )
const {
return elems[idx]; }
135template <
typename T,
int N>
class CArray {
137 typedef std::auto_ptr<CArray>
Ptr;
149 const T&
operator[](
const int idx )
const {
return elems[idx]; }
T & operator[](const int idx)
std::auto_ptr< CArray > Ptr
const T & operator[](const int idx) const
NIter< Entry5, N > iterator
const T & operator[](const int idx) const
T & operator[](const int idx)
bool operator==(const NIter &iter)
NIter(T *begin, int last)
bool operator!=(const NIter &iter)
NIter & operator+=(int n)
bool operator!=(const T *pobj) const
bool operator!=(const SPtr< T > &spobj) const
SPtr & operator=(const SPtr &ptr)
bool operator==(const SPtr< T > &spobj) const
bool operator==(const T *pobj) const