|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES All Classes | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectgroovy.lang.GroovyObjectSupport
groovyx.gpars.dataflow.Dataflows
public final class Dataflows
Convenience class that makes working with DataflowVariables more comfortable.
See the implementation of groovyx.gpars.samples.dataflow.DemoDataflows for a full example.
A Dataflows instance is a bean with properties of type DataflowVariable. Property access is relayed to the access methods of DataflowVariable. Each property is initialized lazily the first time it is accessed. Non-String named properties can be also accessed using array-like indexing syntax This allows a rather compact usage of DataflowVariables like
final df = new Dataflows() start { df[0] = df.x + df.y } start { df.x = 10 } start { df.y = 5 } assert 15 == df[0]
Field Summary | |
---|---|
(package private) static int |
DEFAULT_CONCURRENCY_LEVEL
|
(package private) static int |
DEFAULT_INITIAL_CAPACITY
|
(package private) static float |
DEFAULT_LOAD_FACTOR
|
private static DataflowVariable<java.lang.Object> |
DUMMY
|
private java.lang.Object |
lock
|
private java.util.concurrent.ConcurrentMap<java.lang.Object,DataflowVariable<java.lang.Object>> |
variables
|
Constructor Summary | |
---|---|
Dataflows()
Constructor with default values for building the underlying ConcurrentHashMap |
|
Dataflows(int initialCapacity,
float loadFactor,
int concurrencyLevel)
Constructor that supports the various constructors of the underlying ConcurrentHashMap (unless the one with Map parameter). |
Method Summary | |
---|---|
boolean |
contains(java.lang.Object name)
Checks whether a certain key is contained in the map. |
private DataflowVariable<java.lang.Object> |
ensureToContainVariable(java.lang.Object name)
The idea is following: we try to putIfAbsent dummy DFV in to map if something real already there we are done if not we obtain lock and put new DFV with double check Unfortunately we have to sync on this as there is no better option (God forbid to sync on name) |
(package private) java.lang.Object |
getAt(int index)
Retrieves the DFV associated with the given index |
java.lang.Object |
getProperty(java.lang.String property)
|
java.lang.Object |
invokeMethod(java.lang.String name,
java.lang.Object args)
Invokes the given method. |
java.util.Iterator<java.util.Map.Entry<java.lang.Object,DataflowVariable<java.lang.Object>>> |
iterator()
Convenience method to play nicely with Groovy object iteration methods. |
(package private) void |
putAt(java.lang.Object index,
java.lang.Object value)
Binds the value to the DataflowVariable that is associated with the property "index". |
private DataflowVariable<java.lang.Object> |
putNewUnderLock(java.lang.Object name)
Utility method extracted just to help JIT |
DataflowVariable<java.lang.Object> |
remove(java.lang.Object name)
Removes a DFV from the map and binds it to null, if it has not been bound yet |
void |
setProperty(java.lang.String property,
java.lang.Object newValue)
Binds the value to the DataflowVariable that is associated with the property "name". |
Methods inherited from class groovy.lang.GroovyObjectSupport |
---|
getMetaClass, setMetaClass |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
---|
private static final DataflowVariable<java.lang.Object> DUMMY
private final java.lang.Object lock
private java.util.concurrent.ConcurrentMap<java.lang.Object,DataflowVariable<java.lang.Object>> variables
static final int DEFAULT_INITIAL_CAPACITY
static final float DEFAULT_LOAD_FACTOR
static final int DEFAULT_CONCURRENCY_LEVEL
Constructor Detail |
---|
public Dataflows(int initialCapacity, float loadFactor, int concurrencyLevel)
initialCapacity
- the initial capacity. The implementation
performs internal sizing to accommodate this many elements.loadFactor
- the load factor threshold, used to control resizing.
Resizing may be performed when the average number of elements per
bin exceeds this threshold.concurrencyLevel
- the estimated number of concurrently
updating threads. The implementation performs internal sizing
to try to accommodate this many threads.
java.lang.IllegalArgumentException
- if the initial capacity is
negative or the load factor or concurrencyLevel are
non-positive.ConcurrentHashMap
public Dataflows()
ConcurrentHashMap
Method Detail |
---|
public void setProperty(java.lang.String property, java.lang.Object newValue)
setProperty
in interface groovy.lang.GroovyObject
setProperty
in class groovy.lang.GroovyObjectSupport
newValue
- a scalar or a DataflowVariable that may block on value accessDataflowExpression.bind(T)
public java.lang.Object getProperty(java.lang.String property)
getProperty
in interface groovy.lang.GroovyObject
getProperty
in class groovy.lang.GroovyObjectSupport
DataflowExpression.getVal()
public java.lang.Object invokeMethod(java.lang.String name, java.lang.Object args)
def df = new Dataflows() df.var {* println "Variable bound to $it" }*
invokeMethod
in interface groovy.lang.GroovyObject
invokeMethod
in class groovy.lang.GroovyObjectSupport
name
- the name of the method to call (the variable name)args
- the arguments to use for the method call (a closure to invoke when a value is bound)
java.lang.Object getAt(int index) throws java.lang.InterruptedException
index
- The index to find a match for
java.lang.InterruptedException
- If the thread gets interruptedDataflowExpression.getVal()
void putAt(java.lang.Object index, java.lang.Object value)
index
- The index to associate the value withvalue
- a scalar or a DataflowVariable that may block on value accessDataflowExpression.bind(T)
private DataflowVariable<java.lang.Object> ensureToContainVariable(java.lang.Object name)
Unfortunately we have to sync on this as there is no better option (God forbid to sync on name)
name
- The key to ensure has a DFV bound to it
private DataflowVariable<java.lang.Object> putNewUnderLock(java.lang.Object name)
name
- The key to ensure has a DFV bound to it
public DataflowVariable<java.lang.Object> remove(java.lang.Object name)
name
- The name of the DFV to remove.
public boolean contains(java.lang.Object name)
name
- The name of the DFV to check.
public java.util.Iterator<java.util.Map.Entry<java.lang.Object,DataflowVariable<java.lang.Object>>> iterator()
|
Copyright © 2008–2013 Václav Pech. All Rights Reserved. | |||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES All Classes | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |