⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 array.inl

📁 这个是symbian下的一个蛮庞大的3D游戏源代码!对于学习3D开发的人有很大的帮助!
💻 INL
字号:
template <class T> Array<T>& Array<T>::operator=( const Array<T>& other )
{
	resize( other.m_size );
	for ( int i = 0 ; i < m_size ; ++i )
		m_a[i] = other.m_a[i];
	return *this;
}

template <class T> void Array<T>::add( const T& item )
{
	T itemcopy( item );
	if ( m_size >= m_cap )
		realloc(m_size+1);
	m_a[m_size++] = itemcopy;
}

template <class T> void Array<T>::remove( int index )
{
	assert( index >= 0 && index < size() );
	rcopy( m_a+index, m_a+index+1, m_size-index-1 );
}

template <class T> void Array<T>::add( int index, const T& item )
{
	assert( index >= 0 && index <= size() );

	T itemcopy( item );
	resize( m_size + 1 );
	rcopy( m_a+(index+1), m_a+index, m_size-(index+1) );
	m_a[index] = itemcopy;
}

template <class T> void Array<T>::resize( int size, const T& defaultvalue )
{
	T itemcopy( defaultvalue );
	if ( m_cap <= size )
		realloc( size );

	for ( int i = m_size ; i < size ; ++i )
		m_a[i] = itemcopy;
	for ( int i = size ; i < m_size ; ++i )
		m_a[i] = T();
	m_size = size;
}

template <class T> void Array<T>::realloc( int size )
{
	int cap = m_cap * 2;
	if ( cap < 16 )
		cap = 16;
	if ( cap < size )
		cap = size;
	
	T* data = new T[cap];
	assert( data );

	int count = m_size;
	if ( count > cap )
		count = cap;
	for ( int i = 0 ; i < count ; ++i )
	{
		data[i] = m_a[i];
		m_a[i] = T();
	}

	delete[] m_a;
	m_a = data;
	m_cap = cap;
}

template <class T> void Array<T>::rcopy( T* dst, const T* src, int count )
{
	for ( int i = count-1 ; i >= 0 ; --i )
		dst[i] = src[i];
}

template <class T> int Array<T>::indexOf( const T& item ) const
{
	const T* begin = m_a;
	const T* end = begin + m_size;
	for ( const T* it = begin ; it != end ; ++it )
		if ( *it == item )
			return it - begin;
	return -1;
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -