1 package org.opentrafficsim.road.gtu.lane.tactical;
2
3 import java.io.Serializable;
4 import java.util.Set;
5
6 import org.opentrafficsim.core.network.LateralDirectionality;
7 import org.opentrafficsim.core.network.Node;
8 import org.opentrafficsim.road.network.lane.Lane;
9
10 /**
11 * This class provides information for an operational plan about the next location where the network splits. if the networks
12 * splits, the node where it splits, and the current lanes that lead to the right node are calculated.
13 * <p>
14 * Copyright (c) 2013-2023 Delft University of Technology, PO Box 5, 2600 AA, Delft, the Netherlands. All rights reserved. <br>
15 * BSD-style license. See <a href="https://opentrafficsim.org/docs/license.html">OpenTrafficSim License</a>.
16 * </p>
17 * @author <a href="https://github.com/averbraeck">Alexander Verbraeck</a>
18 * @author <a href="https://tudelft.nl/staff/p.knoppers-1">Peter Knoppers</a>
19 */
20 public class NextSplitInfo implements Serializable
21 {
22 /** */
23 private static final long serialVersionUID = 20151231L;
24
25 /** If the route splits, at what node does it split? */
26 private final Node nextSplitNode;
27
28 /** Required direction. */
29 private final LateralDirectionality requiredDirection;
30
31 /**
32 * If the route splits, what are the lane(s) and/or adjacent lane(s) on which the reference point of the GTU is registered
33 * that lead us in the direction of the route provided by the strategical planner.
34 */
35 private final Set<Lane> correctCurrentLanes;
36
37 /**
38 * @param nextSplitNode Node; the first subsequent node at which the route splits.
39 * @param correctCurrentLanes Set<Lane>; the lane(s) and/or adjacent lane(s) on which the reference point of the GTU
40 * is registered that lead us in the direction of the route provided by the strategical planner.
41 */
42 public NextSplitInfo(final Node nextSplitNode, final Set<Lane> correctCurrentLanes)
43 {
44 this(nextSplitNode, correctCurrentLanes, null);
45 }
46
47 /**
48 * @param nextSplitNode Node; the first subsequent node at which the route splits.
49 * @param correctCurrentLanes Set<Lane>; the lane(s) and/or adjacent lane(s) on which the reference point of the GTU
50 * is registered that lead us in the direction of the route provided by the strategical planner.
51 * @param requiredDirection LateralDirectionality; required direction for lane changes for this split, beyond lane on
52 * current link
53 */
54 public NextSplitInfo(final Node nextSplitNode, final Set<Lane> correctCurrentLanes,
55 final LateralDirectionality requiredDirection)
56 {
57 this.nextSplitNode = nextSplitNode;
58 this.correctCurrentLanes = correctCurrentLanes;
59 this.requiredDirection = requiredDirection;
60 }
61
62 /**
63 * @return split indicates whether the route splits within the given distance.
64 */
65 public final boolean isSplit()
66 {
67 return this.nextSplitNode != null;
68 }
69
70 /**
71 * @return nextSplitNode the first subsequent node at which the route splits.
72 */
73 public final Node getNextSplitNode()
74 {
75 return this.nextSplitNode;
76 }
77
78 /**
79 * @return correctCurrentLanes the lane(s) and/or adjacent lane(s) on which the reference point of the GTU is registered
80 * that lead us in the direction of the route provided by the strategical planner.
81 */
82 public final Set<Lane> getCorrectCurrentLanes()
83 {
84 return this.correctCurrentLanes;
85 }
86
87 /**
88 * @return requiredDirection.
89 */
90 public final LateralDirectionality getRequiredDirection()
91 {
92 return this.requiredDirection;
93 }
94
95 /** {@inheritDoc} */
96 @Override
97 public final String toString()
98 {
99 return "NextSplitInfo [nextSplitNode=" + this.nextSplitNode + ", correctCurrentLanes=" + this.correctCurrentLanes
100 + ", requiredDirection=" + this.requiredDirection + "]";
101 }
102 }