/*
 * Created on 18/08/2003
 *
 * To change the template for this generated file go to
 * Window>Preferences>Java>Code Generation>Code and Comments
 */
package sce.list;

/**
 * @author TOSHIBA
 *
 * To change the template for this generated type comment go to
 * Window>Preferences>Java>Code Generation>Code and Comments
 */
public aspect OrderingDListImplAspect {
	
	pointcut ordem():execution(DNode DListImpl.insertLast(Object));

	DNode around() : ordem() {
		Object[] argm = thisJoinPoint.getArgs(); 
		return ((DListImpl)thisJoinPoint.getThis()).insertLast(argm[0],0);
	}

	public DNode DListImpl.insertLast(Object parObject,int order) { 
		int position = 0;
		DNodeImpl toInsert=null;
		DNode navigator=null;
		if(!this.isEmpty()){
		 	navigator=this.header;
		}
		toInsert = new DNodeImpl(parObject,null,null);
		toInsert.setOrder(order);
		if(this.isEmpty()){
			this.insertFirst(toInsert);
		}else if((order > navigator.getNext().getOrder())){
			toInsert.setNext(navigator.getNext());
			toInsert.setPrevious(navigator);
			navigator.getNext().setPrevious(toInsert);
			navigator.setNext(toInsert);
			this.size++;
		}else{
			boolean ins = false;
			while(navigator.getNext()!=this.tailer){
				navigator = navigator.getNext();
				if(order>navigator.getOrder()){
					toInsert.setNext(navigator);
					toInsert.setPrevious(navigator.getPrevious());
					navigator.getPrevious().setNext(toInsert);
					navigator.setPrevious(toInsert);
					this.size++;
					ins=true;
					break;
				}	
			}
			if(!ins){
				toInsert.setNext(navigator.getNext());
		    	toInsert.setPrevious(navigator);
		    	navigator.getNext().setPrevious(toInsert);
				navigator.setNext(toInsert);
				this.size++;
			}
		}
		return(toInsert);
	}
}