1 package org.djutils.decoderdumper;
2
3 /**
4 * Keep track of the address of the decoder-dumper and call flushLine when the last possible address of a line is received.
5 * <p>
6 * Copyright (c) 2013-2019 Delft University of Technology, PO Box 5, 2600 AA, Delft, the Netherlands. All rights reserved. <br>
7 * BSD-style license. See <a href="https://opentrafficsim.org/node/13">OpenTrafficSim License</a>.
8 * <p>
9 * @version $Revision$, $LastChangedDate$, by $Author$, initial version Jan 3, 2019 <br>
10 * @author <a href="https://www.tudelft.nl/averbraeck">Alexander Verbraeck</a>
11 * @author <a href="https://www.tudelft.nl/staff/p.knoppers/">Peter Knoppers</a>
12 * @author <a href="https://www.transport.citg.tudelft.nl">Wouter Schakel</a>
13 */
14 public class HexAddressDecoder implements Decoder
15 {
16 /** Round all printed addresses down to a multiple of this value. */
17 private final int roundToMultiple;
18
19 /**
20 * Construct a new HexAddressDecoder.
21 * @param roundToMultiple int; if > 1 round addresses down to the nearest (lower) multiple of this value and the append
22 * method will return true when the last byte before such a multiple is added.
23 */
24 public HexAddressDecoder(final int roundToMultiple)
25 {
26 this.roundToMultiple = roundToMultiple > 0 ? roundToMultiple : 1;
27 }
28
29 /** Result returned by getResult. */
30 String result = "";
31
32 /** {@inheritDoc} */
33 @Override
34 public String getResult()
35 {
36 String retVal = this.result;
37 this.result = "";
38 return retVal;
39 }
40
41 /** {@inheritDoc} */
42 @Override
43 public int getMaximumWidth()
44 {
45 return 8;
46 }
47
48 /** {@inheritDoc} */
49 @Override
50 public boolean append(int address, byte theByte)
51 {
52 this.result = String.format("%08x", address / this.roundToMultiple * this.roundToMultiple);
53 return this.roundToMultiple > 1 && address % this.roundToMultiple == this.roundToMultiple - 1;
54 }
55
56 /** {@inheritDoc} */
57 @Override
58 public boolean ignoreForIdenticalOutputCheck()
59 {
60 return true;
61 }
62
63 /** {@inheritDoc} */
64 @Override
65 public String toString()
66 {
67 return "HexAddressDecoder [result=" + this.result + "]";
68 }
69
70 }