/************************************************************************************ * 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; } }