View Javadoc
1   package org.opentrafficsim.road.gtu.lane.perception;
2   
3   import java.util.Iterator;
4   import java.util.NoSuchElementException;
5   import java.util.TreeSet;
6   import java.util.function.Supplier;
7   
8   import org.opentrafficsim.road.gtu.lane.LaneBasedGTU;
9   import org.opentrafficsim.road.gtu.lane.perception.headway.Headway;
10  import org.opentrafficsim.road.network.OTSRoadNetwork;
11  
12  /**
13   * Simple class implementing a SortedSet. This is mainly for backwards compatibility. Methods that determine the elements 1-by-1
14   * are much preferred for efficiency.
15   * <p>
16   * Copyright (c) 2013-2019 Delft University of Technology, PO Box 5, 2600 AA, Delft, the Netherlands. All rights reserved. <br>
17   * BSD-style license. See <a href="http://opentrafficsim.org/node/13">OpenTrafficSim License</a>.
18   * <p>
19   * @version $Revision$, $LastChangedDate$, by $Author$, initial version 19 feb. 2018 <br>
20   * @author <a href="http://www.tbm.tudelft.nl/averbraeck">Alexander Verbraeck</a>
21   * @author <a href="http://www.tudelft.nl/pknoppers">Peter Knoppers</a>
22   * @author <a href="http://www.transport.citg.tudelft.nl">Wouter Schakel</a>
23   * @param <H> headway type
24   */
25  @Deprecated
26  public class SortedSetPerceptionIterable<H extends Headway> extends TreeSet<H> implements PerceptionCollectable<H, LaneBasedGTU>
27  {
28  
29      /** */
30      private static final long serialVersionUID = 20180219L;
31  
32      /** Network to obtain LaneBasedGTU. */
33      private final OTSRoadNetwork network;
34  
35      /**
36       * Constructor.
37       * @param otsNetwork OTSRoadNetwork; network to obtain LaneBasedGTU
38       */
39      public SortedSetPerceptionIterable(final OTSRoadNetwork otsNetwork)
40      {
41          this.network = otsNetwork;
42      }
43  
44      /** {@inheritDoc} */
45      @Override
46      public <C, I> C collect(final Supplier<I> identity, final PerceptionAccumulator<? super LaneBasedGTU, I> accumulator,
47              final PerceptionFinalizer<C, I> finalizer)
48      {
49          Intermediate<I> intermediate = new Intermediate<>(identity.get());
50          Iterator<H> it = iterator();
51          while (it.hasNext() && !intermediate.isStop())
52          {
53              H next = it.next();
54              intermediate =
55                      accumulator.accumulate(intermediate, (LaneBasedGTU) this.network.getGTU(next.getId()), next.getDistance());
56              intermediate.step();
57          }
58          return finalizer.collect(intermediate.getObject());
59      }
60  
61      /** {@inheritDoc} */
62      @Override
63      public Iterator<LaneBasedGTU> underlying()
64      {
65          return new Iterator<LaneBasedGTU>()
66          {
67              /** {@inheritDoc} */
68              @Override
69              public boolean hasNext()
70              {
71                  return false;
72              }
73  
74              /** {@inheritDoc} */
75              @Override
76              public LaneBasedGTU next()
77              {
78                  throw new NoSuchElementException();
79              }
80  
81          };
82      }
83  
84  }