| /******************************************************************************* |
| * 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; |
| } |
| |
| } |