array.cpp

来自「SimpleGraphicOperatingSystem 32位图形化操作系统 」· C++ 代码 · 共 125 行

CPP
125
字号

//#include <System.h>

namespace System{

    template<class T>
    Array<T>::Array()
    {
        count = 0;
        firstItem = (ArrayItem<T>*)0;
    }

    template<class T>
	ArrayItem<T>* Array<T>::FirstItem()
	{
	    return firstItem;
	}

    template<class T>
	ArrayItem<T>* Array<T>::LastItem()
	{
	    ArrayItem<T>* p=firstItem;
	    while( p && p->next )
            p = p->next;
        return p;
	}

    template<class T>
	ArrayItem<T>* Array<T>::GetItemByIndex(int index)
	{
	    ArrayItem<T>* p;
	    int i=0;
        if( index < 0 || index >= count )
            return (ArrayItem<T>*)0;
	    for( p=firstItem; p; p = p->next, i++ )
        {
            if( i==index )
            {
                return p;
            }
        }
        return (ArrayItem<T>*)0;
	}

    template<class T>
	int Array<T>::GetIndexByItem( ArrayItem<T>* item )
	{
	    int index=0;
	    ArrayItem<T>* p;
	    for( p = firstItem; p; p = p->next, index ++ )
	    {
	        if( p == item )
	        {
	            return index;
	        }
	    }
	    return -1;
	}

    template<class T>
	int Array<T>::Add( T e )
	{
        Add( -1, e );
        return true;
	}

    template<class T>
	int Array<T>::Add( int preIndex, T e )
	{
        ArrayItem<T>* pre = GetItemByIndex( preIndex );
        ArrayItem<T>* p = new ArrayItem<T>;
        if( pre == null )
            pre = LastItem();
        if( pre ){
            if( pre->next ){
                pre->next->pre = p;
            }
            pre->next = p;
        }else{
            firstItem = p;
        }
        p->pre = pre ;
        p->element = e;
        count ++;
        return true;
	}

    template<class T>
	T& Array<T>::operator[]( int index )
	{
	    ArrayItem<T>* item = GetItemByIndex( index );
	    return item->element;
	}

    template<class T>
	int Array<T>::Remove( int index )
	{
        if( index < 0 || index >= count )
            return false;
	    ArrayItem<T>* item = GetItemByIndex( index );
	    if( item ){
            if( item->pre )
            {
                item->pre->next = item->next;
            }else{
                firstItem = item->next;
            }
            if( item->next )
            {
                item->next->pre = item->pre;
            }
            count --;
            delete item;
            return true;
	    }
	    return false;
	}

    template<class T>
	int Array<T>::Count()
	{
	    return count;
	}
}

⌨️ 快捷键说明

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