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-2022 Delft University of Technology, PO Box 5, 2600 AA, Delft, the Netherlands. All rights reserved. <br> 7 * BSD-style license. See <a href="https://djutils.org/docs/current/djutils/licenses.html">DJUTILS 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 */ 13 public class HexAddressDecoder implements Decoder 14 { 15 /** Round all printed addresses down to a multiple of this value. */ 16 private final int roundToMultiple; 17 18 /** 19 * Construct a new HexAddressDecoder. 20 * @param roundToMultiple int; if > 1 round addresses down to the nearest (lower) multiple of this value and the append 21 * method will return true when the last byte before such a multiple is added. 22 */ 23 public HexAddressDecoder(final int roundToMultiple) 24 { 25 this.roundToMultiple = roundToMultiple > 0 ? roundToMultiple : 1; 26 } 27 28 /** Result returned by getResult. */ 29 private String result = ""; 30 31 /** {@inheritDoc} */ 32 @Override 33 public String getResult() 34 { 35 String retVal = this.result; 36 this.result = ""; 37 return retVal; 38 } 39 40 /** {@inheritDoc} */ 41 @Override 42 public int getMaximumWidth() 43 { 44 return 8; 45 } 46 47 /** {@inheritDoc} */ 48 @Override 49 public boolean append(final int address, final byte theByte) 50 { 51 this.result = String.format("%08x", address / this.roundToMultiple * this.roundToMultiple); 52 return this.roundToMultiple > 1 && address % this.roundToMultiple == this.roundToMultiple - 1; 53 } 54 55 /** {@inheritDoc} */ 56 @Override 57 public boolean ignoreForIdenticalOutputCheck() 58 { 59 return true; 60 } 61 62 /** {@inheritDoc} */ 63 @Override 64 public String toString() 65 { 66 return "HexAddressDecoder [result=" + this.result + "]"; 67 } 68 69 }