21 package org.matsim.core.trafficmonitoring;
25 import java.util.Arrays;
34 class TravelTimeDataArray
extends TravelTimeData {
59 private final long[] data;
60 private final Link link;
62 TravelTimeDataArray(
final Link link,
final int numSlots) {
63 this.data =
new long[numSlots];
68 static long encode(
int count,
double traveltime) {
70 int lo = (int) (traveltime * 1000);
71 long val = hi << 32 | (lo & 0xffffffffL);
75 static int count(
long encoded) {
76 return (
int) (encoded >>> 32);
79 static double traveltime(
long encoded) {
80 int tt = (int) (encoded);
85 public void resetTravelTimes() {
86 long val = encode(0, -1.0);
87 Arrays.fill(this.data, val);
91 public void setTravelTime(
final int timeSlot,
final double traveltime ) {
92 this.data[timeSlot] = encode(1, traveltime);
96 public void addTravelTime(
final int timeSlot,
final double traveltime) {
97 long val = this.data[timeSlot];
99 double tt = traveltime(val);
100 double sum = tt * cnt;
105 this.data[timeSlot] = encode(cnt, sum / cnt);
109 public double getTravelTime(
final int timeSlot,
final double now) {
110 long val = this.data[timeSlot];
111 double ttime = traveltime(val);
112 if (ttime >= 0.0)
return ttime;
115 double freespeed = this.link.getLength() / this.link.getFreespeed(now);
116 this.data[timeSlot] = encode(0, freespeed);
120 String cntToString(){
121 StringBuilder strb =
new StringBuilder().append(
"cnt=[ " );
122 for(
int ii = 0 ; ii < this.data.length ; ii++ ){
123 strb.append( count(this.data[ii]) ).append(
" " );
126 return strb.toString();
128 String ttToString() {
129 StringBuilder strb =
new StringBuilder().append(
"tt=[ " );
130 for (
int ii=0 ; ii<this.data.length ; ii++ ) {
131 strb.append( traveltime(this.data[ii]) ).append(
" " );
134 return strb.toString();