/******************************************************************************* * Copyright (c) 2016 Ericsson and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Ericsson - initial API and implementation *******************************************************************************/ package org.eclipse.cdt.dsf.gdb.internal.memory; import java.math.BigInteger; import org.eclipse.cdt.debug.core.model.IMemoryBlockAddressInfoRetrieval.IMemoryBlockAddressInfoItem; /** * A base partial implementation of a a memory block address information item * */ public abstract class MemoryBlockAddressInfoItem implements IMemoryBlockAddressInfoItem { private final String fName; private String fLabel; private BigInteger fAddress; private BigInteger fLength = BigInteger.ONE; private int fColor = 0; private MemoryBlockAddressInfoItem(String id, BigInteger address) { fName = id; fLabel = id; fAddress = address; } /** * @param address String representation of a memory address in hex format */ public MemoryBlockAddressInfoItem(String id, String address) { this(id, convertValue(address)); } /** * @param color int value where the lowest three octets represent the corresponding RGB value */ public MemoryBlockAddressInfoItem(String id, BigInteger address, BigInteger length, int color) { this(id, address); fLength = length; fColor = color; } @Override public String getId() { return fName; } @Override public BigInteger getRangeInAddressableUnits() { return fLength; } @Override public int getRegionRGBColor() { return fColor; } @Override public String getLabel() { return fLabel; } @Override public void setLabel(String label) { fLabel = label; } @Override public BigInteger getAddress() { return fAddress; } private static BigInteger convertValue(String inValue) { // Make sure we provide a valid hex representation or zero int radix = 16; BigInteger hexValue = null; String value = inValue.replaceAll("0x", ""); //$NON-NLS-1$ //$NON-NLS-2$ try { hexValue = new BigInteger(value, radix); } catch (NumberFormatException e) { hexValue = BigInteger.ZERO; } return hexValue; } @Override public void setRangeInAddressableUnits(BigInteger length) { fLength = length; } @Override public void setRegionRGBColor(int color) { fColor = color; } @Override public void setAddress(BigInteger address) { fAddress = address; } }