MATSIM
ArrayBasedTravelTimeInfoProvider.java
Go to the documentation of this file.
1 /* *********************************************************************** *
2  * project: org.matsim.*
3  * ArrayBasedTravelTimeInfoProvider.java
4  * *
5  * *********************************************************************** *
6  * *
7  * copyright : (C) 2013 by the members listed in the COPYING, *
8  * LICENSE and WARRANTY file. *
9  * email : info at matsim dot org *
10  * *
11  * *********************************************************************** *
12  * *
13  * This program is free software; you can redistribute it and/or modify *
14  * it under the terms of the GNU General Public License as published by *
15  * the Free Software Foundation; either version 2 of the License, or *
16  * (at your option) any later version. *
17  * See also COPYING, LICENSE and WARRANTY file *
18  * *
19  * *********************************************************************** */
20 
21 package org.matsim.withinday.trafficmonitoring;
22 
23 import java.util.Map;
24 
25 import org.matsim.api.core.v01.Id;
30 
32 
33  private final TravelTimeInfo[] arrayLinkData;
35 
36  public ArrayBasedTravelTimeInfoProvider(Map<Id<Link>, TravelTimeInfo> linkData, Network network) {
37  this.delegate = new MapBasedTravelTimeInfoProvider(linkData);
38  this.arrayLinkData = new TravelTimeInfo[linkData.size()];
39  }
40 
41  /*
42  * This method is called from the EventHandler part of the WithinDayTravelTime.
43  * There, only link ids are available. We cannot optimize this.
44  */
45  @Override
46  public TravelTimeInfo getTravelTimeInfo(final Id<Link> linkId) {
47  return this.delegate.getTravelTimeInfo(linkId);
48  }
49 
50  /*
51  * This method is called from the TravelTime part of the WithinDayTravelTime.
52  * There, link are available. we can optimize this by using an array instead of a map.
53  */
54  @Override
55  public TravelTimeInfo getTravelTimeInfo(Link link) {
56  if (link instanceof HasIndex) {
57  int index = ((HasIndex) link).getArrayIndex();
58  TravelTimeInfo data = this.arrayLinkData[index];
59  if (data == null) {
60  data = this.delegate.getTravelTimeInfo(link);
61  this.arrayLinkData[index] = data;
62  }
63  return data;
64  } else {
65  return this.delegate.getTravelTimeInfo(link);
66  }
67  }
68 
69 }
ArrayBasedTravelTimeInfoProvider(Map< Id< Link >, TravelTimeInfo > linkData, Network network)
TravelTimeInfo getTravelTimeInfo(final Id< Link > linkId)