Class MemoryBufferImpl

  • All Implemented Interfaces:
    MemBuffer, MutableMemBuffer
    Direct Known Subclasses:
    DumbMemBufferImpl

    public class MemoryBufferImpl
    extends java.lang.Object
    implements MutableMemBuffer
    MemBufferImpl implements the MemBuffer interface. It buffers up N bytes at time, reducing the overall number of calls to Memory, greatly reducing the overhead of various error checks. This implementation will not wrap if the end of the memory space is encountered. The getByte(int) method can cause the buffer cache to adjust if outside the current cache range. This is not the case for other methods which will simply defer to the underlying memory if outside the cache range.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void advance​(int displacement)
      Advance the Address pointer.
      MemoryBufferImpl clone()
      Create a cloned copy of this MutableMemBuffer
      Address getAddress()
      Get the Address which corresponds to the offset 0.
      java.math.BigInteger getBigInteger​(int offset, int size, boolean signed)
      returns the value at the given offset, taking into account the endianess.
      byte getByte​(int offset)
      Get one byte from memory at the current position plus offset.
      int getBytes​(byte[] b, int offset)
      Reads b.length bytes from this memory buffer starting at the address of this memory buffer plus the given memoryBufferOffset from that position.
      int getInt​(int offset)
      returns the int at the given offset, taking into account the endianess.
      long getLong​(int offset)
      returns the long at the given offset, taking into account the endianess.
      Memory getMemory()
      Get the Memory object actually used by the MemBuffer.
      short getShort​(int offset)
      returns the short at the given offset, taking into account the endianess.
      boolean isBigEndian()
      Returns true if the underlying bytes are in big-endian order, false if they are little endian.
      void setPosition​(Address addr)
      Sets the Address to which offset of 0 points to.
      • Methods inherited from class java.lang.Object

        equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Constructor Detail

      • MemoryBufferImpl

        public MemoryBufferImpl​(Memory mem,
                                Address addr)
        Construct a new MemoryBufferImpl
        Parameters:
        mem - memory associated with the given address
        addr - start address
      • MemoryBufferImpl

        public MemoryBufferImpl​(Memory mem,
                                Address addr,
                                int bufSize)
        Construct a new MemoryBufferImpl
        Parameters:
        mem - memory associated with the given address
        addr - start address
        bufSize - the size of the memory buffer.
    • Method Detail

      • clone

        public MemoryBufferImpl clone()
        Description copied from interface: MutableMemBuffer
        Create a cloned copy of this MutableMemBuffer
        Specified by:
        clone in interface MutableMemBuffer
        Overrides:
        clone in class java.lang.Object
        Returns:
        new cloned instance of this buffer object
      • setPosition

        public void setPosition​(Address addr)
        Description copied from interface: MutableMemBuffer
        Sets the Address to which offset of 0 points to.
        Specified by:
        setPosition in interface MutableMemBuffer
        Parameters:
        addr - the new base Address.
      • getByte

        public byte getByte​(int offset)
                     throws MemoryAccessException
        Description copied from interface: MemBuffer
        Get one byte from memory at the current position plus offset.
        Specified by:
        getByte in interface MemBuffer
        Parameters:
        offset - the displacement from the current position.
        Returns:
        the data at offset from the current position.
        Throws:
        MemoryAccessException - if memory cannot be read at the specified offset
      • getAddress

        public Address getAddress()
        Description copied from interface: MemBuffer
        Get the Address which corresponds to the offset 0.
        Specified by:
        getAddress in interface MemBuffer
        Returns:
        the current address of offset 0.
      • getMemory

        public Memory getMemory()
        Description copied from interface: MemBuffer
        Get the Memory object actually used by the MemBuffer.
        Specified by:
        getMemory in interface MemBuffer
        Returns:
        the Memory used by this MemBuffer.
      • getBytes

        public int getBytes​(byte[] b,
                            int offset)
        Description copied from interface: MemBuffer
        Reads b.length bytes from this memory buffer starting at the address of this memory buffer plus the given memoryBufferOffset from that position. The actual number of bytes may be fewer if bytes can't be read.
        Specified by:
        getBytes in interface MemBuffer
        Parameters:
        b - the buffer into which bytes will be placed
        offset - the offset in this memory buffer from which to start reading bytes.
        Returns:
        the number of bytes read which may be fewer than b.length if available bytes are exhausted or no bytes are available at the specified offset.
      • isBigEndian

        public boolean isBigEndian()
        Description copied from interface: MemBuffer
        Returns true if the underlying bytes are in big-endian order, false if they are little endian.
        Specified by:
        isBigEndian in interface MemBuffer
        Returns:
        true if the underlying bytes are in big-endian order, false if they are little endian.
      • getShort

        public short getShort​(int offset)
                       throws MemoryAccessException
        Description copied from interface: MemBuffer
        returns the short at the given offset, taking into account the endianess.
        Specified by:
        getShort in interface MemBuffer
        Parameters:
        offset - the offset from the membuffers origin (the address that it is set at)
        Returns:
        the short at the given offset, taking into account the endianess.
        Throws:
        MemoryAccessException - if a 2-byte short value cannot be read at the specified offset
      • getInt

        public int getInt​(int offset)
                   throws MemoryAccessException
        Description copied from interface: MemBuffer
        returns the int at the given offset, taking into account the endianess.
        Specified by:
        getInt in interface MemBuffer
        Parameters:
        offset - the offset from the membuffers origin (the address that it is set at)
        Returns:
        the int at the given offset, taking into account the endianess.
        Throws:
        MemoryAccessException - if a 4-byte integer value cannot be read at the specified offset
      • getLong

        public long getLong​(int offset)
                     throws MemoryAccessException
        Description copied from interface: MemBuffer
        returns the long at the given offset, taking into account the endianess.
        Specified by:
        getLong in interface MemBuffer
        Parameters:
        offset - the offset from the membuffers origin (the address that it is set at)
        Returns:
        the long at the given offset, taking into account the endianess.
        Throws:
        MemoryAccessException - if a 8-byte long value cannot be read at the specified offset
      • getBigInteger

        public java.math.BigInteger getBigInteger​(int offset,
                                                  int size,
                                                  boolean signed)
                                           throws MemoryAccessException
        Description copied from interface: MemBuffer
        returns the value at the given offset, taking into account the endianess.
        Specified by:
        getBigInteger in interface MemBuffer
        Parameters:
        offset - the offset from the membuffers origin (the address that it is set at)
        size - the number of bytes to include in the value
        signed - true if value should be treated as a signed twos-compliment value.
        Returns:
        the value at the given offset, taking into account the endianess.
        Throws:
        MemoryAccessException - if the request size value cannot be read at the specified offset