/************************************************************************************
* Copyright (C) 2008 by Politehnica University of Bucharest and Rutgers University
* All rights reserved.
* Refer to LICENSE for terms and conditions of use.
***********************************************************************************/
package vnsim.vehicular.simulator;
import java.util.*;
public class SortedCarVector implements java.io.Serializable {
// a sorted vector of CarInstance objects
/** serialVersionUID
*/
private static final long serialVersionUID = -5883719321862303634L;
private ArrayList cars;
public SortedCarVector() {
cars = new ArrayList();
}
public int size() {
return cars.size();
}
public CarInstance get(int i) {
return cars.get(i);
}
public CarInstance get(CarInstance ci, boolean direction) {
if (cars == null)
return null;
int i = Collections.binarySearch(cars, ci);
if (i < 0)
i = -i - 1;
CarInstance aux;
if (i == cars.size())
aux = cars.get(cars.size() - 1);
else
aux = cars.get(i);
if (aux.getVehicleId() == ci.ID)
return aux;
if (direction == true) {
i++;
while (i < cars.size()) {
aux = cars.get(i);
if (aux.getVehicleId() == ci.ID)
return aux;
i++;
}
} else {
i--;
while (i >= 0) {
aux = cars.get(i);
if (aux.getVehicleId() == ci.ID)
return aux;
i--;
}
}
return null;
}
public void set(int i, CarInstance c) {
cars.set(i, c);
}
public void addCarInstance(CarInstance newCar) {
// System.out.println("I HAVE TO ADD " +newCar );
// int i = Collections.binarySearch(cars,newCar);
// assert (i < 0);
// i = - i - 1;
for (int i = 0; i < cars.size(); i++) {
CarInstance c = cars.get(i);
if (newCar.compareTo(c) < 0) {
// insert it
newCar.index = i;
cars.add(i, newCar);
return;
}
}
newCar.index = cars.size();
cars.add(newCar);
}
public void remove(int ID) {
for (int i = 0; i < cars.size(); i++) {
CarInstance c = cars.get(i);
if (c.ID == ID) {
// remove it
cars.remove(i);
return;
}
}
}
public String toString() {
String ret = " [ ";
for (int i = 0; i < cars.size(); i++) {
ret = ret + " ( " + cars.get(i) + " ) ; ";
}
ret += " ] ";
return ret;
}
}