Class TwoColumnRangeStructure<K extends java.lang.Comparable<? super K>,​V extends SearchStructure<R> & MergeAndCopyStructure<V>,​R>

  • All Implemented Interfaces:
    MergeAndCopyStructure<TwoColumnRangeStructure<K,​V,​R>>

    public class TwoColumnRangeStructure<K extends java.lang.Comparable<? super K>,​V extends SearchStructure<R> & MergeAndCopyStructure<V>,​R>
    extends AbstractMapStructure<org.faktorips.runtime.internal.tableindex.TwoColumnRange<K>,​V,​R>
    implements MergeAndCopyStructure<TwoColumnRangeStructure<K,​V,​R>>
    A SearchStructure that maps ranges (keys) to nested SearchStructures i.e. sets of values. Each range in a TwoColumnRangeStructure is defined by lower and upper bound. Thus there might be "gaps" in between ranges, in contrast to RangeStructures. The TwoColumnRangeStructure also supports overlapping ranges, as well as "infinite" ranges.

    Ranges are set up by putting one or more key-key-value tuples into this structure. The keys are of a comparable data type (of course, as they define a range). The value is a nested SearchStructure. The first key defines the lower bound, the second the upper bound of the range. The value can be retrieved by calling get(Object) with a key inside the defined range.

    Example: In a TwoColumnRangeStructure by calling put(10, 24, "AAA") and put(25, 50, "BBB"), two ranges are defined. Calls to get(Object) with the:

    • keys 10, 24 and all in between will yield {"AAA"} as a result
    • keys 25, 50 and all in between will yield {"BBB"} respectively
    • keys outside these ranges, e.g. 0 or 100 will return an EmptySearchStructure.

    Overlapping ranges: In a TwoColumnRangeStructure by calling put(0, 100, "AAA") and put(50, 200, "BBB"), two ranges are defined. Calls to get(Object) with keys:

    • keys 0, 49 and all in between will yield {"AAA"} as a result
    • keys 101, 200 and all in between will yield {"BBB"} respectively
    • keys in the overlapping, 50, 100 and all in between, will yield the set union {"AAA", "BBB"} as a result
    • keys outside these ranges, e.g. -100 or 500 will return an EmptySearchStructure.

    Calling put(null, 100, "AAA") defines a range from negative infinity to 100, that maps to {"AAA"}. This range includes all values less than and equal to 100. Calling put(0, null, "BBB") in turn defines a range from 0 to positive infinity. This range includes all values greater than and equal to 0.

    • Method Detail

      • put

        public void put​(K lower,
                        K upper,
                        V value)
        Defines a range that maps to the given value. The keys define the upper and lower bound of the range. The lower and upper bounds are inclusive.
        Parameters:
        lower - the lower bound of the range (included)
        upper - the upper bound of the range (included)
        value - the nested SearchStructure to be added
      • put

        public void put​(K lower,
                        K upper,
                        boolean lowerInclusive,
                        boolean upperInclusive,
                        V value)
        Defines a range that maps to the given value. The keys define the upper and lower bound of the range.

        If the lower bound is greater than upper bound, the lower and upper bound are automatically switched (including lower- and upper-inclusive parameter).

        Parameters:
        lower - the lower bound of the range (included)
        upper - the upper bound of the range (included)
        lowerInclusive - true if the lower bound should be inclusive, false if it should be exclusive
        upperInclusive - true if the upper bound should be inclusive, false if it should be exclusive
        value - the nested SearchStructure to be added
      • put

        public void put​(org.faktorips.runtime.internal.tableindex.TwoColumnRange<K> key,
                        V value)
        Description copied from class: AbstractMapStructure
        Puts a new element in the map. If there is already a value for the given key, the two values will be merged together. Thus existing values will never be overwritten.
        Overrides:
        put in class AbstractMapStructure<org.faktorips.runtime.internal.tableindex.TwoColumnRange<K extends java.lang.Comparable<? super K>>,​V extends SearchStructure<R> & MergeAndCopyStructure<V>,​R>
        Parameters:
        key - key that maps to the specified value
        value - value to be associated with the specified key.
        See Also:
        Map.put(Object, Object), AbstractMapStructure.merge(AbstractMapStructure)
      • get

        public SearchStructure<R> get​(java.lang.Object key)
        Description copied from class: SearchStructure
        Returns the nested SearchStructure for the given key. This method never returns null. If no value exists for a given key an EmptySearchStructure is returned as a fall-back.
        Specified by:
        get in class SearchStructure<R>
        Parameters:
        key - The key for the requested nested SearchStructure
        Returns:
        The nested SearchStructure or an EmptySearchStructure if the key does not exist.
      • merge

        public void merge​(TwoColumnRangeStructure<K,​V,​R> map)
        Description copied from interface: MergeAndCopyStructure
        Merging adds the contents of the otherMergable to this object. This object then contains the combined content. The other object remains unchanged.Merging a SearchStructure deletes no content, instead equal values are being merged recursively.
        Specified by:
        merge in interface MergeAndCopyStructure<K extends java.lang.Comparable<? super K>>
        Parameters:
        map - The object that should be merged into this object