Package ghidra.program.model.util

# Class DefaultPropertyMap<T>

java.lang.Object
ghidra.program.model.util.DefaultPropertyMap<T>

Type Parameters:
  `T` - property value type

All Implemented Interfaces:
  `PropertyMap<T>`

Direct Known Subclasses:
  `DefaultIntPropertyMap`

public abstract class DefaultPropertyMap<T> extends Object implements PropertyMap<T>
PropertyMap is used to store values for a fixed property at address locations given as longs. The values for the property must be homogeneous, i.e. all have the same type, and are determined by which subclass of PropertyMap is instantiated. For any long the property manager can be used to tell if the property exists there and what its value is. It also maintains information that allows it to efficiently search for the next and previous occurrence of the property relative to a given address. The subclass provides the createPage() method that dictates the type of PropertyPage that will be managed.

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `protected AddressMapImpl`
  `addrMap`
  `protected String`
  `description`
  `protected ValueMap<T>`
  `propertyMgr`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `DefaultPropertyMap(ValueMap<T> propertyMgr)`
  Construct a PropertyMap

- ## Method Summary

  Modifier and Type
  Method
  Description
  `String`
  `getDescription()`
  Return the property description.
  `Address`
  `getFirstPropertyAddress()`
  Get the first Address where a property value exists.
  `Address`
  `getLastPropertyAddress()`
  Get the last Address where a property value exists.
  `String`
  `getName()`
  Get the name for this property map.
  `Address`
  `getNextPropertyAddress(Address addr)`
  Get the next address where the property value exists.
  `Address`
  `getPreviousPropertyAddress(Address addr)`
  Get the previous Address where a property value exists.
  `AddressIterator`
  `getPropertyIterator()`
  Returns an iterator over the addresses that a property value.
  `AddressIterator`
  `getPropertyIterator(Address start, boolean forward)`
  Returns an iterator over the address having a property value.
  `AddressIterator`
  `getPropertyIterator(Address start, Address end)`
  Returns an iterator over the indices having a property value.
  `AddressIterator`
  `getPropertyIterator(Address start, Address end, boolean forward)`
  Returns an iterator over addresses that have a property value.
  `AddressIterator`
  `getPropertyIterator(AddressSetView asv)`
  Returns an iterator over the addresses that have a property value and are in the given address set.
  `AddressIterator`
  `getPropertyIterator(AddressSetView asv, boolean forward)`
  Returns an iterator over the addresses that have a property value and are in the given address set.
  `int`
  `getSize()`
  Get the number of properties in the map.
  `boolean`
  `hasProperty(Address addr)`
  returns whether there is a property value at addr.
  `boolean`
  `intersects(Address start, Address end)`
  Given two addresses, indicate whether there is an address in that range (inclusive) having the property.
  `boolean`
  `intersects(AddressSetView set)`
  Indicate whether there is an address within the set which exists within this map.
  `void`
  `moveRange(Address start, Address end, Address newStart)`
  Moves the properties defined in the range from the start address thru the end address to now be located beginning at the newStart address.
  `boolean`
  `remove(Address addr)`
  Remove the property value at the given address.
  `boolean`
  `removeRange(Address start, Address end)`
  Removes all property values within a given range.
  `void`
  `restoreProperties(ObjectInputStream ois)`
  Restore properties from the given input stream.
  `void`
  `saveProperties(ObjectOutputStream oos, Address start, Address end)`
  Save the properties in the given range to output stream.
  `void`
  `setDescription(String description)`
  Set the description for this property.

  ### Methods inherited from class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

  ### Methods inherited from interface ghidra.program.model.util.PropertyMap

  `add, get, getValueClass`

- ## Field Details

  - ### propertyMgr

    protected ValueMap<T> propertyMgr

  - ### addrMap

    protected AddressMapImpl addrMap

  - ### description

    protected String description

- ## Constructor Details

  - ### DefaultPropertyMap

    public DefaultPropertyMap(ValueMap<T> propertyMgr)
    Construct a PropertyMap
    Parameters:
      `propertyMgr` - property manager that manages storage of properties

- ## Method Details

  - ### getName

    public String getName()
    Description copied from interface: `PropertyMap`
    Get the name for this property map.
    Specified by:
      `getName` in interface `PropertyMap<T>`
    Returns:
      map name

  - ### setDescription

    public void setDescription(String description)
    Set the description for this property.
    Parameters:
      `description` - property description

  - ### getDescription

    public String getDescription()
    Return the property description.
    Returns:
      the property description

  - ### intersects

    public boolean intersects(Address start, Address end)
    Description copied from interface: `PropertyMap`
    Given two addresses, indicate whether there is an address in that range (inclusive) having the property.
    Specified by:
      `intersects` in interface `PropertyMap<T>`
    Parameters:
      `start` - the start of the range.
      `end` - the end of the range.
    Returns:
      boolean true if at least one address in the range has the property, false otherwise.

  - ### intersects

    public boolean intersects(AddressSetView set)
    Description copied from interface: `PropertyMap`
    Indicate whether there is an address within the set which exists within this map.
    Specified by:
      `intersects` in interface `PropertyMap<T>`
    Parameters:
      `set` - set of addresses
    Returns:
      boolean true if at least one address in the set has the property, false otherwise.

  - ### removeRange

    public boolean removeRange(Address start, Address end)
    Description copied from interface: `PropertyMap`
    Removes all property values within a given range.
    Specified by:
      `removeRange` in interface `PropertyMap<T>`
    Parameters:
      `start` - begin range
      `end` - end range, inclusive
    Returns:
      true if any property value was removed; return false otherwise.

  - ### remove

    public boolean remove(Address addr)
    Description copied from interface: `PropertyMap`
    Remove the property value at the given address.
    Specified by:
      `remove` in interface `PropertyMap<T>`
    Parameters:
      `addr` - the address where the property should be removed
    Returns:
      true if the property value was removed, false otherwise.

  - ### hasProperty

    public boolean hasProperty(Address addr)
    Description copied from interface: `PropertyMap`
    returns whether there is a property value at addr.
    Specified by:
      `hasProperty` in interface `PropertyMap<T>`
    Parameters:
      `addr` - the address in question
    Returns:
      true if map has value at specified address

  - ### getNextPropertyAddress

    public Address getNextPropertyAddress(Address addr)
    Description copied from interface: `PropertyMap`
    Get the next address where the property value exists.
    Specified by:
      `getNextPropertyAddress` in interface `PropertyMap<T>`
    Parameters:
      `addr` - the address from which to begin the search (exclusive).
    Returns:
      property value location after specified `addr` or null if none found

  - ### getPreviousPropertyAddress

    public Address getPreviousPropertyAddress(Address addr)
    Description copied from interface: `PropertyMap`
    Get the previous Address where a property value exists.
    Specified by:
      `getPreviousPropertyAddress` in interface `PropertyMap<T>`
    Parameters:
      `addr` - the address from which to begin the search (exclusive).
    Returns:
      property value location after specified `addr` or null if none found

  - ### getFirstPropertyAddress

    public Address getFirstPropertyAddress()
    Description copied from interface: `PropertyMap`
    Get the first Address where a property value exists.
    Specified by:
      `getFirstPropertyAddress` in interface `PropertyMap<T>`
    Returns:
      first property value location or null if none found

  - ### getLastPropertyAddress

    public Address getLastPropertyAddress()
    Description copied from interface: `PropertyMap`
    Get the last Address where a property value exists.
    Specified by:
      `getLastPropertyAddress` in interface `PropertyMap<T>`
    Returns:
      last property value location or null if none found

  - ### getSize

    public int getSize()
    Description copied from interface: `PropertyMap`
    Get the number of properties in the map.
    Specified by:
      `getSize` in interface `PropertyMap<T>`
    Returns:
      number of stored property values

  - ### getPropertyIterator

    public AddressIterator getPropertyIterator(Address start, Address end)
    Description copied from interface: `PropertyMap`
    Returns an iterator over the indices having a property value.
    Specified by:
      `getPropertyIterator` in interface `PropertyMap<T>`
    Parameters:
      `start` - minimum address
      `end` - maximum address
    Returns:
      forward property address iterator

  - ### getPropertyIterator

    public AddressIterator getPropertyIterator(Address start, Address end, boolean forward)
    Description copied from interface: `PropertyMap`
    Returns an iterator over addresses that have a property value.
    Specified by:
      `getPropertyIterator` in interface `PropertyMap<T>`
    Parameters:
      `start` - minimum address
      `end` - maximum address
      `forward` - if true will iterate in increasing address order, otherwise it will start at the end and iterate in decreasing address order
    Returns:
      property address iterator

  - ### getPropertyIterator

    public AddressIterator getPropertyIterator()
    Description copied from interface: `PropertyMap`
    Returns an iterator over the addresses that a property value.
    Specified by:
      `getPropertyIterator` in interface `PropertyMap<T>`
    Returns:
      forward property address iterator

  - ### getPropertyIterator

    public AddressIterator getPropertyIterator(AddressSetView asv)
    Description copied from interface: `PropertyMap`
    Returns an iterator over the addresses that have a property value and are in the given address set.
    Specified by:
      `getPropertyIterator` in interface `PropertyMap<T>`
    Parameters:
      `asv` - the set of addresses to iterate over.
    Returns:
      forward property address iterator

  - ### getPropertyIterator

    public AddressIterator getPropertyIterator(AddressSetView asv, boolean forward)
    Description copied from interface: `PropertyMap`
    Returns an iterator over the addresses that have a property value and are in the given address set.
    Specified by:
      `getPropertyIterator` in interface `PropertyMap<T>`
    Parameters:
      `asv` - the set of addresses to iterate over.
      `forward` - if true will iterate in increasing address order, otherwise it will start at the end and iterate in decreasing address order
    Returns:
      property address iterator

  - ### getPropertyIterator

    public AddressIterator getPropertyIterator(Address start, boolean forward)
    Description copied from interface: `PropertyMap`
    Returns an iterator over the address having a property value.
    Specified by:
      `getPropertyIterator` in interface `PropertyMap<T>`
    Parameters:
      `start` - the starting address
      `forward` - if true will iterate in increasing address order, otherwise it will start at the end and iterate in decreasing address order
    Returns:
      property address iterator

  - ### moveRange

    public void moveRange(Address start, Address end, Address newStart)
    Description copied from interface: `PropertyMap`
    Moves the properties defined in the range from the start address thru the end address to now be located beginning at the newStart address. The moved properties will be located at the same relative location to the newStart address as they were previously to the start address.
    Specified by:
      `moveRange` in interface `PropertyMap<T>`
    Parameters:
      `start` - the start of the range to move.
      `end` - the end of the range to move.
      `newStart` - the new start location of the range of properties after the move.

  - ### saveProperties

    public void saveProperties(ObjectOutputStream oos, Address start, Address end) throws IOException
    Save the properties in the given range to output stream.
    Parameters:
      `oos` - output stream to write to
      `start` - start address in the range
      `end` - end address in the range
    Throws:
      `IOException` - if there a problem doing the write

  - ### restoreProperties

    public void restoreProperties(ObjectInputStream ois) throws IOException, ClassNotFoundException
    Restore properties from the given input stream.
    Parameters:
      `ois` - input stream
    Throws:
      `IOException` - if there is a problem reading from the stream
      `ClassNotFoundException` - if the class for the object being read is not in the class path