Class PartitionSet

java.lang.Object
com.tangosol.util.Base
com.tangosol.net.partition.PartitionSet
All Implemented Interfaces:
ExternalizableLite, PortableObject, Serializable, Iterable<Integer>

public class PartitionSet extends Base implements ExternalizableLite, PortableObject, Iterable<Integer>
PartitionSet is a light-weight data structure that represents a set of partitions that are used in parallel processing. This set quite often accompanies a result of partial parallel execution and is used to determine whether or not the entire set of partitions was successfully processed.

Note that all PartitionSet operations that take another set as an argument assume that both sets have the same partition count.

This implementation is not thread-safe.

Since:
Coherence 3.1
Author:
gg 2005.12.20
See Also:
  • Field Details

    • MARKED_NONE

      protected static final int MARKED_NONE
      Serialization format indicator: Indicates that no partitions are marked; MARKED_NONE requires no additional data.
      See Also:
    • MARKED_FEW

      protected static final int MARKED_FEW
      Serialization format indicator: Indicates that a small number of partitions are marked; followed by stream of packed integers indicating gaps between each marked partition, terminated with a -1.
      See Also:
    • MARKED_MANY

      protected static final int MARKED_MANY
      Serialization format indicator: Indicates that a large number of partitions are marked; followed by a sequence of 64-bit values sufficient to represent the cardinality of the PartitionSet.
      See Also:
    • MARKED_ALL

      protected static final int MARKED_ALL
      Serialization format indicator: Indicates that all partitions are marked; MARKED_ALL requires no additional data.
      See Also:
  • Constructor Details

    • PartitionSet

      public PartitionSet()
      Default constructor (necessary for the ExternalizableLite interface).
    • PartitionSet

      public PartitionSet(int cPartitions)
      Construct an empty partition set with a given count.
      Parameters:
      cPartitions - the partition count
    • PartitionSet

      public PartitionSet(int cPartitions, Collection<? extends Integer> colPartitions)
      Construct a partition set with a given partition count and the specified partitions set.
      Parameters:
      cPartitions - the partition count
      colPartitions - the partitions to set
    • PartitionSet

      public PartitionSet(int cPartitions, int... aiPartitions)
      Construct a partition set with a given partition count and the specified partitions set.
      Parameters:
      cPartitions - the partition count
      aiPartitions - the partitions to set
    • PartitionSet

      public PartitionSet(PartitionSet partitions)
      Copy constructor: construct a new PartitionSet object equivalent to the specified one.
      Parameters:
      partitions - the partition set to copy
  • Method Details

    • add

      public boolean add(int nPartition)
      Add the specified partition to the set.
      Parameters:
      nPartition - the partition to add
      Returns:
      true if the specified partition was actually added as a result of this call; false otherwise
    • add

      public boolean add(PartitionSet partitions)
      Add the specified PartitionSet to this set.
      Parameters:
      partitions - the PartitionSet to add
      Returns:
      true if all of the partitions were actually added as a result of this call; false otherwise
    • remove

      public boolean remove(int nPartition)
      Remove the specified partition from the set.
      Parameters:
      nPartition - the partition to remove
      Returns:
      true if the specified partition was actually removed as a result of this call; false otherwise
    • removeNext

      public int removeNext(int nPartition)
      Remove the first marked partition starting at the specified partition. If there are no marked partitions greater or equal to the specified partition, the first marked partition greater or equal to 0 but less than the specified partition is removed. If this PartitionSet is empty, -1 is returned.
      Parameters:
      nPartition - the partition to start checking from (inclusive)
      Returns:
      the marked partition that was removed or -1 if this PartitionSet is empty
      Throws:
      IndexOutOfBoundsException - if the specified partition is invalid
    • remove

      public boolean remove(PartitionSet partitions)
      Remove the specified PartitionSet from this set.
      Parameters:
      partitions - the PartitionSet to remove
      Returns:
      true if all of the specified partitions were actually removed; false otherwise
    • retain

      public boolean retain(PartitionSet partitions)
      Retain only partitions in this set that are contained in the specified PartitionSet.
      Parameters:
      partitions - the PartitionSet to retain
      Returns:
      true if this PartitionSet changes as a result of this call; false otherwise
    • contains

      public boolean contains(int nPartition)
      Check whether or not the specified partition belongs to the set.
      Parameters:
      nPartition - the partition to check
      Returns:
      true if the specified partition is in the set; false otherwise
    • contains

      public boolean contains(PartitionSet partitions)
      Check whether or not the specified partition set belongs to this set.
      Parameters:
      partitions - the partition set to check
      Returns:
      true if all the partitions from the specified set are in this set; false otherwise
    • intersects

      public boolean intersects(PartitionSet partitions)
      Check whether or not the specified partition set intersects with this set.
      Parameters:
      partitions - the partition set to check
      Returns:
      true if the specified set contains at least one partition that is also present in this partition set; false otherwise
    • isEmpty

      public boolean isEmpty()
      Check whether or not the partition set is empty.
      Returns:
      true if none of the partitions are marked; false otherwise
    • isFull

      public boolean isFull()
      Check whether or not the partition set is full.
      Returns:
      true if all the partitions are marked; false otherwise
    • clear

      public PartitionSet clear()
      Clear the set.
      Returns:
      this PartitionSet
    • fill

      public PartitionSet fill()
      Fill the set to contain all the partitions.
      Returns:
      this PartitionSet
    • invert

      public PartitionSet invert()
      Invert all the partitions. As a result of this operation, all marked partitions will be cleared and all cleared partitions will become marked.
      Returns:
      this PartitionSet
    • first

      public int first()
      Return an index of the first marked partition. If no marked partitions exists then -1 is returned.
      Returns:
      the first marked partition, or -1 if no marked partitions exists in the set
    • next

      public int next(int nPartition)
      Return an index of the first marked partition that is greater than or equal to the specified partition. If no such partition exists then -1 is returned.

      This method could be used to iterate over all marked partitions:

      
       for (int i = ps.next(0); i >= 0; i = ps.next(i+1))
           {
           // process partition
           }
       
      Parameters:
      nPartition - the partition to start checking from (inclusive)
      Returns:
      the next marked partition, or -1 if no next marked partition exists in the set
      Throws:
      IndexOutOfBoundsException - if the specified partition is invalid
    • cardinality

      public int cardinality()
      Returns the number of marked partitions.
      Returns:
      the number of marked partitions
    • toArray

      public int[] toArray()
      Convert the partition set to an array of partition identifiers.
      Returns:
      an array of integer partition identifiers
    • rnd

      public int rnd()
      Obtain a random partition from the partition set.
      Returns:
      a randomly selected marked partition, or -1 if no partitions are marked
    • split

      public PartitionSet split()
      Split this partition set into two partition sets that are mutually exclusive.
      Returns:
      a new PartitionSet containing approximately half of the marked partitions from this set, or null if this PartitionSet cannot be split
    • union

      public static PartitionSet union(PartitionSet partsA, PartitionSet partsB)
      Return a union of the two provided PartitionSets.

      This method will return a reference to one of the provided sets (or null), and may mutate the returned set.

      Parameters:
      partsA - set A
      partsB - set B
      Returns:
      union of A & B
    • iterator

      public Iterator<Integer> iterator()
      Specified by:
      iterator in interface Iterable<Integer>
    • readExternal

      public void readExternal(DataInput in) throws IOException
      Restore the contents of this object by loading the object's state from the passed DataInput object.
      Specified by:
      readExternal in interface ExternalizableLite
      Parameters:
      in - the DataInput stream to read data from in order to restore the state of this object
      Throws:
      IOException - if an I/O exception occurs
    • writeExternal

      public void writeExternal(DataOutput out) throws IOException
      Save the contents of this object by storing the object's state into the passed DataOutput object.
      Specified by:
      writeExternal in interface ExternalizableLite
      Parameters:
      out - the DataOutput stream to write the state of this object to
      Throws:
      IOException - if an I/O exception occurs
    • readExternal

      public void readExternal(PofReader in) throws IOException
      Restore the contents of a user type instance by reading its state using the specified PofReader object.
      Specified by:
      readExternal in interface PortableObject
      Parameters:
      in - the PofReader from which to read the object's state
      Throws:
      IOException - if an I/O error occurs
    • writeExternal

      public void writeExternal(PofWriter out) throws IOException
      Save the contents of a POF user type instance by writing its state using the specified PofWriter object.
      Specified by:
      writeExternal in interface PortableObject
      Parameters:
      out - the PofWriter to which to write the object's state
      Throws:
      IOException - if an I/O error occurs
    • equals

      public boolean equals(Object o)
      Indicates whether some other object is "equal to" this one.
      Overrides:
      equals in class Object
      Parameters:
      o - the object to test for equality
      Returns:
      true if this object is the same as the given one; false otherwise.
    • hashCode

      public int hashCode()
      Returns a hash code value for this PartitionSet.
      Overrides:
      hashCode in class Object
      Returns:
      the hash code value for this PartitionSet
    • toString

      public String toString()
      Returns a string representation of this PartitionSet.
      Overrides:
      toString in class Object
      Returns:
      a string representation of this PartitionSet
    • toString

      public String toString(boolean fVerbose)
      Returns a string representation of this PartitionSet.
      Parameters:
      fVerbose - true for full information, false for terse
      Returns:
      a string representation of this PartitionSet
    • getPartitionCount

      public int getPartitionCount()
      Return the number of partitions represented by this PartitionSet.
      Returns:
      the total partition count