1 package org.opentrafficsim.road.gtu.lane.tactical.routesystem;
2
3 import org.djunits.value.vdouble.scalar.Length;
4 import org.djutils.exceptions.Throw;
5 import org.opentrafficsim.core.network.LateralDirectionality;
6
7 /**
8 * Lane change info.
9 * <p>
10 * Copyright (c) 2013-2019 Delft University of Technology, PO Box 5, 2600 AA, Delft, the Netherlands. All rights reserved. <br>
11 * BSD-style license. See <a href="http://opentrafficsim.org/node/13">OpenTrafficSim License</a>.
12 * <p>
13 * @version $Revision$, $LastChangedDate$, by $Author$, initial version 7 nov. 2019 <br>
14 * @author <a href="http://www.tbm.tudelft.nl/averbraeck">Alexander Verbraeck</a>
15 * @author <a href="http://www.tudelft.nl/pknoppers">Peter Knoppers</a>
16 * @author <a href="http://www.transport.citg.tudelft.nl">Wouter Schakel</a>
17 */
18 public class LaneChangeInfo implements Comparable<LaneChangeInfo>
19 {
20
21 /** Required number of lane changes. */
22 private final int n;
23
24 /** Remaining distance. */
25 private final Length remainingDistance;
26
27 /** Whether the need to change lane comes from a dead-end. */
28 private final boolean deadEnd;
29
30 /** Lateral directionality of required lane changes. */
31 private final LateralDirectionality lat;
32
33 /**
34 * Constructor.
35 * @param n int; required number of lane changes
36 * @param remainingDistance Length; remaining distance
37 * @param deadEnd boolean; whether the need to change lane comes from a dead-end
38 * @param lat LateralDirectionality; lateral directionality of required lane changes
39 */
40 public LaneChangeInfo(final int n, final Length remainingDistance, final boolean deadEnd, final LateralDirectionality lat)
41 {
42 Throw.whenNull(remainingDistance, "remainingDistance may not be null");
43 Throw.whenNull(lat, "lat may not be null");
44 this.n = n;
45 this.remainingDistance = remainingDistance;
46 this.deadEnd = deadEnd;
47 this.lat = lat;
48 }
49
50 /**
51 * Returns the required number of lane changes.
52 * @return int; required number of lane changes
53 */
54 public int getNumberOfLaneChanges()
55 {
56 return this.n;
57 }
58
59 /**
60 * Return the remaining distance.
61 * @return Length; remaining distance
62 */
63 public Length getRemainingDistance()
64 {
65 return this.remainingDistance;
66 }
67
68 /**
69 * Returns whether the need to change lane comes from a dead-end.
70 * @return boolean; whether the need to change lane comes from a dead-end
71 */
72 public boolean deadEnd()
73 {
74 return this.deadEnd;
75 }
76
77 /**
78 * Returns the lateral directionality of the required lane changes.
79 * @return LateralDirectionality; lateral directionality of the required lane changes
80 */
81 public final LateralDirectionality getLateralDirectionality()
82 {
83 return this.lat;
84 }
85
86 /** {@inheritDoc} */
87 @Override
88 public int compareTo(final LaneChangeInfo o)
89 {
90 if (o == null)
91 {
92 return 1;
93 }
94 if (o.remainingDistance.equals(this.remainingDistance))
95 {
96 return Integer.compare(this.n, o.n);
97 }
98 return this.remainingDistance.compareTo(o.remainingDistance);
99 }
100
101 }