jsr166z.forkjoin
Class ParallelLongArray

java.lang.Object
  extended by jsr166z.forkjoin.ParallelLongArray

public class ParallelLongArray
extends java.lang.Object

An array of longs supporting parallel operations. This class provides methods supporting the same operations as ParallelArray, but specialized for scalar long integers. It additionally provides a few methods specific to numerical values.


Nested Class Summary
static class ParallelLongArray.WithBounds
          A restriction of parallel array operations to apply only within a given range of indices.
static class ParallelLongArray.WithDoubleMapping
          A modifier for parallel array operations to apply to mappings of elements to doubles, not to the elements themselves
static class ParallelLongArray.WithFilter
          A restriction of parallel array operations to apply only to elements for which a selector returns true
static class ParallelLongArray.WithIntMapping
          A modifier for parallel array operations to apply to mappings of elements to ints, not to the elements themselves
static class ParallelLongArray.WithLongMapping
          A modifier for parallel array operations to apply to mappings of elements to longs, not to the elements themselves
static class ParallelLongArray.WithMapping<U>
          A modifier for parallel array operations to apply to mappings of elements, not to the elements themselves
 
Constructor Summary
ParallelLongArray(ForkJoinExecutor executor, int size)
          Creates a new ParallelLongArray using the given executor and an array of the given size.
ParallelLongArray(ForkJoinExecutor executor, int size, long[] sourceToCopy)
          Creates a new ParallelLongArray using the given executor and an array of the given size, initially holding copies of the given source truncated or padded with zero to obtain the specified length.
ParallelLongArray(ForkJoinExecutor executor, long[] handoff)
          Creates a new ParallelLongArray using the given executor and array.
 
Method Summary
 void apply({long=>void} procedure)
          Applies the given procedure to elements
 ParallelLongArray combine(long[] other, {long,long=>long} combiner)
          Returns a ParallelArray containing results of applying combine(thisElement, otherElement) for each element.
 ParallelLongArray combine(ParallelLongArray other, {long,long=>long} combiner)
          Returns a ParallelArray containing results of applying combine(thisElement, otherElement) for each element.
 void cumulate({long,long=>long} reducer, long base)
          Replaces each element with the running cumulation of applying the given reducer.
 void cumulateSum()
          Replaces each element with the running sum
 long get(int i)
          Returns the element of the array at the given index
 long[] getArray()
          Returns the underlying array used for computations
 ForkJoinExecutor getExecutor()
          Returns the executor used for computations
 int indexOfMax()
          Returns the index of the greatest element , or -1 if empty assuming that all elements are Comparables
 int indexOfMax({long,long=>int} comparator)
          Returns the index of the greatest element , or -1 if empty
 int indexOfMin()
          Returns the index of the least element , or -1 if empty assuming that all elements are Comparables
 int indexOfMin({long,long=>int} comparator)
          Returns the index of the least element , or -1 if empty
 long max()
          Returns the maximum element, or Long.MIN_VALUE if empty assuming that all elements are Comparables
 long max({long,long=>int} comparator)
          Returns the maximum element, or Long.MIN_VALUE if empty
 long min()
          Returns the minimum element, or Long.MAX_VALUE if empty, assuming that all elements are Comparables
 long min({long,long=>int} comparator)
          Returns the minimum element, or Long.MAX_VALUE if empty
 ParallelLongArray newArray()
          Returns a new ParallelArray holding elements
 long precumulate({long,long=>long} reducer, long base)
          Replaces each element with the cumulation of applying the given reducer to all previous values, and returns the total reduction.
 long precumulateSum()
          Replaces each element with its prefix sum
 void randomFill()
          Sets each element to a uniform random value having the same properties as Random.nextLong()
 void randomFill(long bound)
          Sets each element to a uniform random value having the same properties as Random.nextInt(int)
 long reduce({long,long=>long} reducer, long base)
          Returns reduction of elements
 void replaceWithCombination(long[] other, {long,long=>long} combiner)
          Replaces elements with results of applying combine(thisElement, otherElement)
 void replaceWithCombination(ParallelLongArray other, {long,long=>long} combiner)
          Replaces elements with results of applying combine(thisElement, otherElement)
 void replaceWithGeneratedValue({=>long} generator)
          Replaces elements with the results of applying the given generator.
 void replaceWithMappedIndex({int=>long} mapper)
          Replaces elements with the results of applying the given mapper to their indices.
 void replaceWithTransform({long=>long} mapper)
          Replaces elements with the results of applying the given mapper to their current values.
 void replaceWithValue(long value)
          Replaces elements with the given value.
 void set(int i, long x)
          Sets the element of the array at the given index to the given value
 int size()
          Returns the length of the underlying array
 void sort()
          Sorts the array, using natural comparator.
 void sort({long,long=>int} comparator)
          Sorts the array
 long sum()
          Returns the sum of elements
 ParallelLongArray.WithBounds withBounds(int firstIndex, int upperBound)
          Returns an operation prefix that causes a method to operate only on the elements of the array between firstIndex (inclusive) and upperBound (exclusive).
 ParallelLongArray.WithFilter withFilter({long=>boolean} selector)
          Returns an operation prefix that causes a method to operate only on the elements of the array for which the given selector returns true
 ParallelLongArray.WithDoubleMapping withMapping({long=>double} mapper)
          Returns an operation prefix that causes a method to operate on mapped elements of the array using the given mapper.
 ParallelLongArray.WithIntMapping withMapping({long=>int} mapper)
          Returns an operation prefix that causes a method to operate on mapped elements of the array using the given mapper.
 ParallelLongArray.WithLongMapping withMapping({long=>long} mapper)
          Returns an operation prefix that causes a method to operate on mapped elements of the array using the given mapper.
<U> ParallelLongArray.WithMapping<U>
withMapping({long=>U} mapper)
          Returns an operation prefix that causes a method to operate on mapped elements of the array using the given mapper.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ParallelLongArray

public ParallelLongArray(ForkJoinExecutor executor,
                         long[] handoff)
Creates a new ParallelLongArray using the given executor and array. In general, the handed off array should not be used for other purposes once constructing this ParallelLongArray.

Parameters:
executor - the executor
handoff - the array

ParallelLongArray

public ParallelLongArray(ForkJoinExecutor executor,
                         int size,
                         long[] sourceToCopy)
Creates a new ParallelLongArray using the given executor and an array of the given size, initially holding copies of the given source truncated or padded with zero to obtain the specified length.

Parameters:
executor - the executor
size - the array size
sourceToCopy - the source of initial elements

ParallelLongArray

public ParallelLongArray(ForkJoinExecutor executor,
                         int size)
Creates a new ParallelLongArray using the given executor and an array of the given size.

Parameters:
executor - the executor
size - the array size
Method Detail

getExecutor

public ForkJoinExecutor getExecutor()
Returns the executor used for computations

Returns:
the executor

getArray

public long[] getArray()
Returns the underlying array used for computations

Returns:
the array

size

public int size()
Returns the length of the underlying array

Returns:
the length of the underlying array

get

public long get(int i)
Returns the element of the array at the given index

Parameters:
i - the index
Returns:
the element of the array at the given index

set

public void set(int i,
                long x)
Sets the element of the array at the given index to the given value

Parameters:
i - the index
x - the value

apply

public void apply({long=>void} procedure)
Applies the given procedure to elements

Parameters:
procedure - the procedure

reduce

public long reduce({long,long=>long} reducer,
                   long base)
Returns reduction of elements

Parameters:
reducer - the reducer
base - the result for an empty array
Returns:
reduction

newArray

public ParallelLongArray newArray()
Returns a new ParallelArray holding elements

Returns:
a new ParallelArray holding elements

combine

public ParallelLongArray combine(long[] other,
                                 {long,long=>long} combiner)
Returns a ParallelArray containing results of applying combine(thisElement, otherElement) for each element.

Parameters:
other - the other array
combiner - the combiner
Returns:
the array of mappings
Throws:
java.lang.ArrayIndexOutOfBoundsException - if other array is shorter than this array.

combine

public ParallelLongArray combine(ParallelLongArray other,
                                 {long,long=>long} combiner)
Returns a ParallelArray containing results of applying combine(thisElement, otherElement) for each element.

Parameters:
other - the other array
combiner - the combiner
Returns:
the array of mappings
Throws:
java.lang.ArrayIndexOutOfBoundsException - if other array is not the same length as this array.

replaceWithTransform

public void replaceWithTransform({long=>long} mapper)
Replaces elements with the results of applying the given mapper to their current values.

Parameters:
mapper - the mapper

replaceWithMappedIndex

public void replaceWithMappedIndex({int=>long} mapper)
Replaces elements with the results of applying the given mapper to their indices.

Parameters:
mapper - the mapper

replaceWithGeneratedValue

public void replaceWithGeneratedValue({=>long} generator)
Replaces elements with the results of applying the given generator.

Parameters:
generator - the generator

randomFill

public void randomFill()
Sets each element to a uniform random value having the same properties as Random.nextLong()


randomFill

public void randomFill(long bound)
Sets each element to a uniform random value having the same properties as Random.nextInt(int)

Parameters:
bound - the upper bound of each random value
Throws:
java.lang.IllegalArgumentException - if bound less than or equal to zero

replaceWithValue

public void replaceWithValue(long value)
Replaces elements with the given value.

Parameters:
value - the value

replaceWithCombination

public void replaceWithCombination(ParallelLongArray other,
                                   {long,long=>long} combiner)
Replaces elements with results of applying combine(thisElement, otherElement)

Parameters:
other - the other array
combiner - the combiner
Throws:
java.lang.ArrayIndexOutOfBoundsException - if other array has fewer elements than this array.

replaceWithCombination

public void replaceWithCombination(long[] other,
                                   {long,long=>long} combiner)
Replaces elements with results of applying combine(thisElement, otherElement)

Parameters:
other - the other array
combiner - the combiner
Throws:
java.lang.ArrayIndexOutOfBoundsException - if other array has fewer elements than this array.

indexOfMin

public int indexOfMin({long,long=>int} comparator)
Returns the index of the least element , or -1 if empty

Parameters:
comparator - the comparator
Returns:
the index of least element or -1 if empty.

indexOfMax

public int indexOfMax({long,long=>int} comparator)
Returns the index of the greatest element , or -1 if empty

Parameters:
comparator - the comparator
Returns:
the index of greatest element or -1 if empty.

indexOfMin

public int indexOfMin()
Returns the index of the least element , or -1 if empty assuming that all elements are Comparables

Returns:
the index of least element or -1 if empty.

indexOfMax

public int indexOfMax()
Returns the index of the greatest element , or -1 if empty assuming that all elements are Comparables

Returns:
the index of greatest element or -1 if empty.

min

public long min({long,long=>int} comparator)
Returns the minimum element, or Long.MAX_VALUE if empty

Parameters:
comparator - the comparator
Returns:
minimum element, or Long.MAX_VALUE if empty

min

public long min()
Returns the minimum element, or Long.MAX_VALUE if empty, assuming that all elements are Comparables

Returns:
minimum element, or Long.MAX_VALUE if empty

max

public long max({long,long=>int} comparator)
Returns the maximum element, or Long.MIN_VALUE if empty

Parameters:
comparator - the comparator
Returns:
maximum element, or Long.MIN_VALUE if empty

max

public long max()
Returns the maximum element, or Long.MIN_VALUE if empty assuming that all elements are Comparables

Returns:
maximum element, or Long.MIN_VALUE if empty

sum

public long sum()
Returns the sum of elements

Returns:
the sum of elements

cumulate

public void cumulate({long,long=>long} reducer,
                     long base)
Replaces each element with the running cumulation of applying the given reducer. For example, if the contents are the numbers 1, 2, 3, and the reducer operation adds numbers, then after invocation of this method, the contents would be 1, 3, 6 (that is, 1, 1+2, 1+2+3);

Parameters:
reducer - the reducer
base - the result for an empty array

precumulate

public long precumulate({long,long=>long} reducer,
                        long base)
Replaces each element with the cumulation of applying the given reducer to all previous values, and returns the total reduction. For example, if the contents are the numbers 1, 2, 3, and the reducer operation adds numbers, then after invocation of this method, the contents would be 0, 1, 3 (that is, 0, 0+1, 0+1+2, and the return value would be 6 (that is, 1+2+3);

Parameters:
reducer - the reducer
base - the result for an empty array
Returns:
the total reduction

cumulateSum

public void cumulateSum()
Replaces each element with the running sum


precumulateSum

public long precumulateSum()
Replaces each element with its prefix sum

Returns:
the total sum

sort

public void sort({long,long=>int} comparator)
Sorts the array

Parameters:
comparator - the comparator to use

sort

public void sort()
Sorts the array, using natural comparator.


withBounds

public ParallelLongArray.WithBounds withBounds(int firstIndex,
                                               int upperBound)
Returns an operation prefix that causes a method to operate only on the elements of the array between firstIndex (inclusive) and upperBound (exclusive).

Parameters:
firstIndex - the lower bound (inclusive)
upperBound - the upper bound (exclusive)
Returns:
operation prefix

withFilter

public ParallelLongArray.WithFilter withFilter({long=>boolean} selector)
Returns an operation prefix that causes a method to operate only on the elements of the array for which the given selector returns true

Parameters:
selector - the selector
Returns:
operation prefix

withMapping

public <U> ParallelLongArray.WithMapping<U> withMapping({long=>U} mapper)
Returns an operation prefix that causes a method to operate on mapped elements of the array using the given mapper.

Parameters:
mapper - the mapper
Returns:
operation prefix

withMapping

public ParallelLongArray.WithDoubleMapping withMapping({long=>double} mapper)
Returns an operation prefix that causes a method to operate on mapped elements of the array using the given mapper.

Parameters:
mapper - the mapper
Returns:
operation prefix

withMapping

public ParallelLongArray.WithLongMapping withMapping({long=>long} mapper)
Returns an operation prefix that causes a method to operate on mapped elements of the array using the given mapper.

Parameters:
mapper - the mapper
Returns:
operation prefix

withMapping

public ParallelLongArray.WithIntMapping withMapping({long=>int} mapper)
Returns an operation prefix that causes a method to operate on mapped elements of the array using the given mapper.

Parameters:
mapper - the mapper
Returns:
operation prefix