blob: 4ab4a13836b18247607a6003bec416f1fe42efe8 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2006 IBM Corporation 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.debug.internal.ui.views.memory.renderings;
import java.math.BigInteger;
import org.eclipse.debug.core.DebugException;
import org.eclipse.debug.core.model.IMemoryBlock;
import org.eclipse.debug.core.model.IMemoryBlockExtension;
public class TableRenderingContentDescriptor{
private AbstractBaseTableRendering fRendering;
private int fPreBuffer; // number of lines before the top visible line
private int fPostBuffer; // number of lines after thes last visible line
private BigInteger fLoadAddress; // Top address to load at the table
private int fNumLines; // number of visible lines
private BigInteger fMemoryBlockBaseAddress; // base address of the memory block when this input is set
private BigInteger fStartAddress;
private BigInteger fEndAddress;
private int fAddressSize = -1;
private int fAddressableSize = -1;
private boolean fAlignAddress = true;
private boolean fIsDynamicLoad;
public TableRenderingContentDescriptor(AbstractBaseTableRendering rendering)
{
fRendering = rendering;
}
public int getPostBuffer() {
return fPostBuffer;
}
public int getPreBuffer() {
return fPreBuffer;
}
public BigInteger getLoadAddress() {
return fLoadAddress;
}
public IMemoryBlock getMemoryBlock()
{
return fRendering.getMemoryBlock();
}
public void setPostBuffer(int postBuffer) {
fPostBuffer = postBuffer;
}
public void setPreBuffer(int preBuffer) {
fPreBuffer = preBuffer;
}
public void setLoadAddress(BigInteger address)
{
fLoadAddress = address;
}
public BigInteger getContentBaseAddress() {
if (fMemoryBlockBaseAddress == null)
{
try {
updateContentBaseAddress();
} catch (DebugException e) {
fMemoryBlockBaseAddress = new BigInteger("0"); //$NON-NLS-1$
}
}
return fMemoryBlockBaseAddress;
}
public void updateContentBaseAddress() throws DebugException {
IMemoryBlock memoryBlock = fRendering.getMemoryBlock();
if (memoryBlock instanceof IMemoryBlockExtension)
fMemoryBlockBaseAddress = ((IMemoryBlockExtension)memoryBlock).getBigBaseAddress();
else
fMemoryBlockBaseAddress = BigInteger.valueOf(memoryBlock.getStartAddress());
}
/**
* @return start address of the memory block
*/
public BigInteger getStartAddress()
{
if (fStartAddress == null)
{
try {
IMemoryBlock memoryBlock = fRendering.getMemoryBlock();
if(memoryBlock instanceof IMemoryBlockExtension)
{
BigInteger startAddress = ((IMemoryBlockExtension)memoryBlock).getMemoryBlockStartAddress();
if (startAddress != null)
fStartAddress = startAddress;
}
} catch (DebugException e) {
// default to 0 if we have trouble getting the start address
fStartAddress = BigInteger.valueOf(0);
}
if (fStartAddress == null)
fStartAddress = BigInteger.valueOf(0);
}
return fStartAddress;
}
/**
* @return end address of the memory block
*/
public BigInteger getEndAddress()
{
if (fEndAddress == null)
{
IMemoryBlock memoryBlock = fRendering.getMemoryBlock();
if(memoryBlock instanceof IMemoryBlockExtension)
{
BigInteger endAddress;
try {
endAddress = ((IMemoryBlockExtension)memoryBlock).getMemoryBlockEndAddress();
if (endAddress != null)
fEndAddress = endAddress;
} catch (DebugException e) {
fEndAddress = null;
}
if (fEndAddress == null)
{
int addressSize;
try {
addressSize = ((IMemoryBlockExtension)memoryBlock).getAddressSize();
} catch (DebugException e) {
addressSize = 4;
}
endAddress = BigInteger.valueOf(2);
endAddress = endAddress.pow(addressSize*8);
endAddress = endAddress.subtract(BigInteger.valueOf(1));
fEndAddress = endAddress;
}
}
if (fEndAddress == null)
fEndAddress = BigInteger.valueOf(Integer.MAX_VALUE);
}
return fEndAddress;
}
public int getNumLines()
{
return fNumLines;
}
public void setNumLines(int numLines)
{
fNumLines = numLines;
}
public AbstractBaseTableRendering getRendering()
{
return fRendering;
}
public int getAddressableSize() {
return fAddressableSize;
}
public void setAddressableSize(int addressableSize) {
fAddressableSize = addressableSize;
}
public int getAddressSize() {
return fAddressSize;
}
public void setAddressSize(int addressSize) {
fAddressSize = addressSize;
}
public void setDynamicLoad(boolean dynamic)
{
fIsDynamicLoad = dynamic;
}
public boolean isDynamicLoad()
{
return fIsDynamicLoad;
}
public boolean isMemoryBlockBaseAddressInitialized()
{
return (fMemoryBlockBaseAddress != null);
}
public boolean isAlignAddressToBoundary()
{
return fAlignAddress;
}
public void setAlignAddressToBoundary(boolean align)
{
fAlignAddress = align;
}
}