Skip navigation links

Oracle® Coherence Java API Reference
Release 12.1.2.0.3

E26043-02


com.tangosol.util
Class MultiBinaryLongMap.PrimaryBinaryLongMap

java.lang.Object
  extended by com.tangosol.util.MultiBinaryLongMap.WrapperBinaryLongMap
      extended by com.tangosol.util.MultiBinaryLongMap.PrimaryBinaryLongMap

All Implemented Interfaces:
BinaryLongMap, MultiBinaryLongMap.BinaryLongMapListener, java.util.EventListener
Enclosing class:
MultiBinaryLongMap

public class MultiBinaryLongMap.PrimaryBinaryLongMap
extends MultiBinaryLongMap.WrapperBinaryLongMap
implements MultiBinaryLongMap.BinaryLongMapListener

A BinaryLongMap implementation that logically represents the "primary" BinaryLongMap of the containing MultiBinaryLongMap.

The implementation dynamically switches between a "compressed" form which uses the real key-tree to store the primary BLM's logical contents, and a "delegating" multi-form which uses the LongStorage to associate multiple long values (split over multiple delegating BinaryLongMap instances) with each key.

Note: the reference to the "wrapped" underlying BLM can change dynamically as the containing MultiBinaryLongMap grows or shrinks in size. The MultiBinaryLongMap.PrimaryBinaryLongMap.ValidatingLock provides a memory-barrier for this field, which is not otherwise declared "volatile".


Nested Class Summary
protected  class MultiBinaryLongMap.PrimaryBinaryLongMap.CompressedPrimaryBinaryLongMap
          The CompressedPrimaryBinaryLongMap is a trivial "Safe" wrapper around the main key-tree, which associates keys to their single (primary) long value.
protected  class MultiBinaryLongMap.PrimaryBinaryLongMap.DelegatingPrimaryBinaryLongMap
          An extension to the DelegatingBinaryLongMap for the "primary" or "owning" BinaryLongMap that is responsible for adding and removing keys.
protected  class MultiBinaryLongMap.PrimaryBinaryLongMap.RetryException
          Marker Exception thrown to indicate that the underlying BinaryLongMap implementation has concurrently changed and the operation needs to be resubmitted by the PrimaryBinaryLongMap.
protected  class MultiBinaryLongMap.PrimaryBinaryLongMap.ValidatingLock
          ValidatingLock is a Lock implementation specialized for the PrimaryBinaryLongMap that validates after every lock acquisition that the underlying BinaryLongMap implementation did not change.

 

Nested classes/interfaces inherited from class com.tangosol.util.MultiBinaryLongMap.WrapperBinaryLongMap
MultiBinaryLongMap.WrapperBinaryLongMap.WrapperIterator

 

Nested classes/interfaces inherited from interface com.tangosol.util.BinaryLongMap
BinaryLongMap.Entry, BinaryLongMap.EntryVisitor, BinaryLongMap.SimpleMapImpl

 

Field Summary
protected  Listeners f_listeners
          The listeners to notify of changes to the BinaryLongMap.
protected  MultiBinaryLongMap.PrimaryBinaryLongMap.CompressedPrimaryBinaryLongMap f_pblmCompressed
          The "compressed" PBLM implementation.
protected  BinaryLongMap f_pblmMulti
          The "full" or "multi-aware" PBLM implementation.
protected  java.util.concurrent.locks.ReentrantReadWriteLock f_rwLockMaster
          The "master" read-write lock for the MultiBinaryLongMap.

 

Fields inherited from class com.tangosol.util.MultiBinaryLongMap.WrapperBinaryLongMap
m_blm

 

Constructor Summary
MultiBinaryLongMap.PrimaryBinaryLongMap()
          Construct a PrimaryBinaryLongMap.

 

Method Summary
 void addListener(MultiBinaryLongMap.BinaryLongMapListener listener)
          Add the specified listener to the collection of listeners that this DelegatingPrimaryBinaryLongMap dispatches notifications to.
 void clear()
          Initialize the map to an empty state.
protected  void deflateRep()
          Deflate the underlying representation of the PrimaryBinaryLongMap to use the main key-tree to associate a single long value with each key (logically represented by this PrimaryBinaryLongMap).
 long get(Binary binKey)
          Find the specified key in the map and return the value associated with it.
protected  void inflateRep()
          Inflate the underlying representation of the PrimaryBinaryLongMap to use the LongStorage to support multiple delegating BinaryLongMap instances.
 void internKeys(java.lang.Object o)
          Internal opaque method: De-duplicate keys.
 void keyAdded(Binary binKey)
          A notification that the primary map has added a new Binary/long key/value mapping; this implicitly creates a new key/value mapping in each delegating map, with the value being 0L.
 void keyRemoving(Binary binKey)
          A notification that the primary map is removing a Binary/long key/value mapping; this implies that the existing key/value mapping for the same Binary key in each delegating map is also being removed.
 java.util.Iterator keys()
          Obtain an iterator of the keys stored in the map.
 java.util.Iterator keys(com.oracle.common.base.Predicate predicate)
          Obtain an iterator of the keys stored in the map whose corresponding Entry matches the passed Predicate<Entry>.
 void mapCleared()
          A notification that the primary map has been cleared; this implies that all of the existing key/value mappings in each delegating map have also been removed.
 void mapClearing()
          A notification that the primary map is about to be cleared; this implies that all of the existing key/value mappings in each delegating map are about to be removed, but that no per-mapping events will be generated in response to those removals.
 void put(Binary binKey, long lValue)
          Blindly store the passed value for the specified key, adding the key if it is not already in the map, or replacing the current value if the key is in the map.
 boolean putIfAbsent(Binary binKey, long lValue)
          Store the passed value for the specified key, only if the key does not currently exist in the map.
 void remove(Binary binKey)
          Blindly remove the specified Binary key from the map.
 boolean remove(Binary binKey, long lValue)
          Remove the specified Binary key from the map iff it exists in the map and is associated with the specified value.
 void removeListener(MultiBinaryLongMap.BinaryLongMapListener listener)
          Remove the specified listener from the collection of listeners that this DelegatingPrimaryBinaryLongMap dispatches notifications to.
 boolean replace(Binary binKey, long lValueOld, long lValueNew)
          Store the passed "new" value for the specified key, only if the current value associated with the specified key is the same as the specified "old" value.
 int size()
          Determine the size of the map.
 void visit(Binary binKey, BinaryLongMap.EntryVisitor visitor)
          Apply the specified visitor to the entry associated with the specified key, if the entry exists or may be added.
 void visitAll(BinaryLongMap.EntryVisitor visitor)
          Apply the specified visitor to all entries in the BinaryLongMap.

 

Methods inherited from class com.tangosol.util.MultiBinaryLongMap.WrapperBinaryLongMap
getMap, setMap

 

Field Detail

f_rwLockMaster

protected final java.util.concurrent.locks.ReentrantReadWriteLock f_rwLockMaster
The "master" read-write lock for the MultiBinaryLongMap.

f_pblmCompressed

protected final MultiBinaryLongMap.PrimaryBinaryLongMap.CompressedPrimaryBinaryLongMap f_pblmCompressed
The "compressed" PBLM implementation.

f_pblmMulti

protected final BinaryLongMap f_pblmMulti
The "full" or "multi-aware" PBLM implementation.

f_listeners

protected final Listeners f_listeners
The listeners to notify of changes to the BinaryLongMap.

Constructor Detail

MultiBinaryLongMap.PrimaryBinaryLongMap

public MultiBinaryLongMap.PrimaryBinaryLongMap()
Construct a PrimaryBinaryLongMap.

Method Detail

inflateRep

protected void inflateRep()
Inflate the underlying representation of the PrimaryBinaryLongMap to use the LongStorage to support multiple delegating BinaryLongMap instances.

Note: it is the caller's responsibility to hold the master exclusive lock during this operation


deflateRep

protected void deflateRep()
Deflate the underlying representation of the PrimaryBinaryLongMap to use the main key-tree to associate a single long value with each key (logically represented by this PrimaryBinaryLongMap).

Note: it is the caller's responsibility to hold the master exclusive lock during this operation


addListener

public void addListener(MultiBinaryLongMap.BinaryLongMapListener listener)
Add the specified listener to the collection of listeners that this DelegatingPrimaryBinaryLongMap dispatches notifications to.
Parameters:
listener - the listener to add to the collection of listeners that this DelegatingPrimaryBinaryLongMap dispatches notifications to

removeListener

public void removeListener(MultiBinaryLongMap.BinaryLongMapListener listener)
Remove the specified listener from the collection of listeners that this DelegatingPrimaryBinaryLongMap dispatches notifications to.
Parameters:
listener - the listener to remove from the collection of listeners that this DelegatingPrimaryBinaryLongMap dispatches notifications to

get

public long get(Binary binKey)
Find the specified key in the map and return the value associated with it.
Specified by:
get in interface BinaryLongMap
Overrides:
get in class MultiBinaryLongMap.WrapperBinaryLongMap
Parameters:
binKey - a Binary key
Returns:
the value associated with the specified key, or 0L if the specified key is not in the map

put

public void put(Binary binKey,
                long lValue)
Blindly store the passed value for the specified key, adding the key if it is not already in the map, or replacing the current value if the key is in the map.

Note that associating the value zero with a key is analogous to removing the key.

Specified by:
put in interface BinaryLongMap
Overrides:
put in class MultiBinaryLongMap.WrapperBinaryLongMap
Parameters:
binKey - the Binary key to add or update
lValue - the value to associate with the key

putIfAbsent

public boolean putIfAbsent(Binary binKey,
                           long lValue)
Store the passed value for the specified key, only if the key does not currently exist in the map.

Note that associating the value zero with a key using this method will have no effect, since were that key already present, there would be no change, and were it not present, the value zero is analogous to removing the key, which again is no change (since it is not present).

Specified by:
putIfAbsent in interface BinaryLongMap
Overrides:
putIfAbsent in class MultiBinaryLongMap.WrapperBinaryLongMap
Parameters:
binKey - a Binary key
lValue - the new value to associate with the passed key
Returns:
true iff the key was not present in the map, and now it is present in the map associated with the passed value

replace

public boolean replace(Binary binKey,
                       long lValueOld,
                       long lValueNew)
Store the passed "new" value for the specified key, only if the current value associated with the specified key is the same as the specified "old" value.

Note that replacing the value of zero is analogous to putIfAbsent, and associating the value zero with a key using this method is the same as remove passing the old value to match.

Specified by:
replace in interface BinaryLongMap
Overrides:
replace in class MultiBinaryLongMap.WrapperBinaryLongMap
Parameters:
binKey - a Binary key
lValueOld - the assumed old value to replace
lValueNew - the new value to associate with the passed key
Returns:
true iff the key was associated with the passed "old" value, and now it is associated with the passed "new" value

remove

public void remove(Binary binKey)
Blindly remove the specified Binary key from the map.
Specified by:
remove in interface BinaryLongMap
Overrides:
remove in class MultiBinaryLongMap.WrapperBinaryLongMap
Parameters:
binKey - a Binary key

remove

public boolean remove(Binary binKey,
                      long lValue)
Remove the specified Binary key from the map iff it exists in the map and is associated with the specified value.

Note that removing an association whose value is zero has no effect.

Specified by:
remove in interface BinaryLongMap
Overrides:
remove in class MultiBinaryLongMap.WrapperBinaryLongMap
Parameters:
binKey - a Binary key
lValue - the value that the key must have in order to be removed
Returns:
true iff the map contained the key, it was associated with the specified value, and has now been removed

clear

public void clear()
Initialize the map to an empty state.
Specified by:
clear in interface BinaryLongMap
Overrides:
clear in class MultiBinaryLongMap.WrapperBinaryLongMap

size

public int size()
Determine the size of the map.
Specified by:
size in interface BinaryLongMap
Overrides:
size in class MultiBinaryLongMap.WrapperBinaryLongMap
Returns:
the number of unique keys stored in the map

keys

public java.util.Iterator keys()
Obtain an iterator of the keys stored in the map.
Specified by:
keys in interface BinaryLongMap
Overrides:
keys in class MultiBinaryLongMap.WrapperBinaryLongMap
Returns:
an Iterator of Binary keys

keys

public java.util.Iterator keys(com.oracle.common.base.Predicate predicate)
Obtain an iterator of the keys stored in the map whose corresponding Entry matches the passed Predicate<Entry>.

The entry passed to the predicate should be treated as read-only, and any attempt to modify the entry may have undefined behavior and/or throw an Exception. Modifications to entries should instead be performed using an BinaryLongMap.EntryVisitor via the BinaryLongMap.visit(com.tangosol.util.Binary, com.tangosol.util.BinaryLongMap.EntryVisitor) or BinaryLongMap.visitAll(com.tangosol.util.BinaryLongMap.EntryVisitor) methods.

Specified by:
keys in interface BinaryLongMap
Overrides:
keys in class MultiBinaryLongMap.WrapperBinaryLongMap
Parameters:
predicate - a Predicate<Entry> to apply to each Entry
Returns:
an Iterator of Binary keys

visit

public void visit(Binary binKey,
                  BinaryLongMap.EntryVisitor visitor)
Apply the specified visitor to the entry associated with the specified key, if the entry exists or may be added. The visited entry may or may not logically exist in the BinaryLongMap (e.g. it may be associated with a value of 0L) but is guaranteed to be safe to be added or removed (via BinaryLongMap.Entry.setValue(long)).
Specified by:
visit in interface BinaryLongMap
Overrides:
visit in class MultiBinaryLongMap.WrapperBinaryLongMap
Parameters:
binKey - the key to visit
visitor - the visitor to apply

visitAll

public void visitAll(BinaryLongMap.EntryVisitor visitor)
Apply the specified visitor to all entries in the BinaryLongMap.
Specified by:
visitAll in interface BinaryLongMap
Overrides:
visitAll in class MultiBinaryLongMap.WrapperBinaryLongMap
Parameters:
visitor - the visitor to apply

internKeys

public void internKeys(java.lang.Object o)
Internal opaque method: De-duplicate keys.
Specified by:
internKeys in interface BinaryLongMap
Overrides:
internKeys in class MultiBinaryLongMap.WrapperBinaryLongMap
Parameters:
o - some implementation-specific object

keyAdded

public void keyAdded(Binary binKey)
A notification that the primary map has added a new Binary/long key/value mapping; this implicitly creates a new key/value mapping in each delegating map, with the value being 0L.
Specified by:
keyAdded in interface MultiBinaryLongMap.BinaryLongMapListener
Parameters:
binKey - the key that was added

keyRemoving

public void keyRemoving(Binary binKey)
A notification that the primary map is removing a Binary/long key/value mapping; this implies that the existing key/value mapping for the same Binary key in each delegating map is also being removed.
Specified by:
keyRemoving in interface MultiBinaryLongMap.BinaryLongMapListener
Parameters:
binKey - the key that is being removed

mapClearing

public void mapClearing()
A notification that the primary map is about to be cleared; this implies that all of the existing key/value mappings in each delegating map are about to be removed, but that no per-mapping events will be generated in response to those removals.
Specified by:
mapClearing in interface MultiBinaryLongMap.BinaryLongMapListener

mapCleared

public void mapCleared()
A notification that the primary map has been cleared; this implies that all of the existing key/value mappings in each delegating map have also been removed.
Specified by:
mapCleared in interface MultiBinaryLongMap.BinaryLongMapListener

Skip navigation links

Oracle® Coherence Java API Reference
Release 12.1.2.0.3

E26043-02


Copyright © 2000, 2014, Oracle and/or its affiliates. All rights reserved.