Rimosso ArraySequenceFake. Implementato positions() in NodePositionList. Creato il DefaultComparator. Prima implementazione di SortedPriorityList

This commit is contained in:
2014-04-01 22:06:51 +02:00
parent 9836790893
commit 5e892f4961
10 changed files with 230 additions and 305 deletions

View File

@@ -290,4 +290,9 @@ public class ArraySequence<E> implements Sequence<E> {
public Iterator<E> iterator() {
return null;
}
@Override
public Iterator<Position<E>> positions() {
return null;
}
}

View File

@@ -1,228 +0,0 @@
package sequence;
import arraylist.ArrayIndexList;
import exceptions.BoundaryViolationException;
import exceptions.EmptyListException;
import exceptions.EmptySequenceException;
import exceptions.InvalidPositionException;
import position.Position;
import sequence.utility.DNodeFake;
import java.util.Iterator;
/**
* Created with MONSTER.
* User: xgiovio
* Date: 30/03/2014
* Time: 17:19
*/
// fake positions created on the fly. if the element in the array change, it doesn't change on the position retrieved before.
public class ArraySequenceFake<E> extends ArrayIndexList<E> implements Sequence<E> {
public ArraySequenceFake(int in){
super(in);
}
@Override
public E getFirst() throws EmptySequenceException {
try {
E ele = get(0);
return ele;
}
catch (IndexOutOfBoundsException err){
throw new EmptySequenceException();
}
}
@Override
public E getLast() throws EmptySequenceException {
try {
E ele = get(size()-1);
return ele;
}
catch (IndexOutOfBoundsException err){
throw new EmptySequenceException();
}
}
@Override
public E removeFirst() throws EmptySequenceException {
try {
E ele = remove(0);
return ele;
}
catch (IndexOutOfBoundsException err){
throw new EmptySequenceException();
}
}
@Override
public E removeLast() throws EmptySequenceException {
try {
E ele = remove(size() - 1);
return ele;
}
catch (IndexOutOfBoundsException err){
throw new EmptySequenceException();
}
}
@Override
public Position<E> atIndex(int in_index) throws BoundaryViolationException {
try {
checkIndex(in_index, size());
return new DNodeFake<E>(get(in_index),in_index);
}
catch (IndexOutOfBoundsException err){
throw new BoundaryViolationException();
}
}
@Override
public int indexOf(Position<E> position) throws InvalidPositionException {
checkPosition(position);
return ((DNodeFake<E>) position).getIndex();
}
@Override
public Position<E> first() throws EmptyListException {
try{
return new DNodeFake<E>(get(0),0);
}
catch (IndexOutOfBoundsException err){
throw new EmptyListException("Empty Array");
}
}
@Override
public Position<E> last() throws EmptyListException {
try{
return new DNodeFake<E>(get(size() - 1),size() - 1);
}
catch (IndexOutOfBoundsException err){
throw new EmptyListException("Empty Array");
}
}
@Override
public Position<E> next(Position<E> p) throws InvalidPositionException, BoundaryViolationException {
DNodeFake<E> t = checkPosition(p);
if (t.getIndex()< size() -1){
return new DNodeFake<E>(get(t.getIndex() + 1),t.getIndex() + 1);
}else{
throw new BoundaryViolationException();
}
}
@Override
public Position<E> prev(Position<E> p) throws InvalidPositionException, BoundaryViolationException {
DNodeFake<E> t = checkPosition(p);
if (t.getIndex()> 0){
return new DNodeFake<E>(get(t.getIndex() - 1),t.getIndex() - 1);
}else{
throw new BoundaryViolationException();
}
}
@Override
public void addFirst(E e) {
add (0,e);
}
@Override
public void addLast(E e) {
add (size(),e);
}
@Override
public Position<E> addAfter(Position<E> p, E e) throws InvalidPositionException {
try {
DNodeFake<E> t = checkPosition(p);
add(t.getIndex() + 1, e);
return new DNodeFake<E>(get(t.getIndex() + 1),t.getIndex() + 1);
}
catch (IndexOutOfBoundsException err){
throw new InvalidPositionException();
}
}
@Override
public Position<E> addBefore(Position<E> p, E e) throws InvalidPositionException {
try {
DNodeFake<E> t = checkPosition(p);
add(t.getIndex() - 1,e);
return new DNodeFake<E>(get(t.getIndex() - 1),t.getIndex() - 1);
}
catch (IndexOutOfBoundsException err){
throw new InvalidPositionException();
}
}
@Override
public E remove(Position<E> p) throws InvalidPositionException {
try {
DNodeFake<E> t = checkPosition(p);
return remove(t.getIndex());
}
catch (IndexOutOfBoundsException err){
throw new InvalidPositionException();
}
}
@Override
public E set(Position<E> p, E e) throws InvalidPositionException {
try {
DNodeFake<E> t = checkPosition(p);
return set (t.getIndex(),e);
}
catch (IndexOutOfBoundsException err){
throw new InvalidPositionException();
}
}
@Override
public String toString() {
String to_return = "";
to_return = to_return + "[";
for ( int i = 0; i< size() ; i++){
if ( i== size() -1){
to_return+=(get(i).toString());
}else{
to_return+=(get(i).toString() + ",");
}
}
to_return = to_return + "]";
return to_return;
}
protected DNodeFake<E> checkPosition(Position<E> p) throws InvalidPositionException {
if (p == null)
throw new InvalidPositionException
("Null position passed");
try {
DNodeFake<E> temp = (DNodeFake<E>) p;
if ( temp.getIndex() >= size() || temp.getIndex() < 0 )
throw new InvalidPositionException
("Position does not belong to a valid value");
return temp;
} catch (ClassCastException e) {
throw new InvalidPositionException
("Position is of wrong type for this array");
}
}
@Override
public Iterator<E> iterator() {
return null;
}
}

View File

@@ -1,51 +0,0 @@
package sequence.utility;
import exceptions.InvalidPositionException;
import position.Position;
/**
* A simple node class for a doubly-linked list. Each DNode has a
* reference to a stored element, a previous node, and a next node.
*
* @author Roberto Tamassia
*/
//Copyright (c) 2003 Brown University, Providence, RI
//Additional modifications and methods by xgiovio
// used on ArraySequenceFake
public class DNodeFake<E> implements Position<E> {
private E element = null;
private int index = -1;
public DNodeFake(E elem, int in_idex) {
element = elem;
index = in_idex;
}
public DNodeFake(E elem) {
element = elem;
}
public E element() throws InvalidPositionException {
if (index == -1)
throw new InvalidPositionException("Position is not in a list!");
return element;
}
public void setElement(E newElement) { element = newElement; }
public int getIndex() {
return index;
}
public void setIndex(int index) {
this.index = index;
}
}