Class 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:
    Serialized Form
    • Field Detail

      • 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:
        Constant Field Values
      • 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:
        Constant Field Values
      • 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:
        Constant Field Values
      • 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:
        Constant Field Values
    • Constructor Detail

      • 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 Detail

      • 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
      • 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
        NotActiveException - if the object is not in its initial state, and therefore cannot be deserialized into
      • 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