Class MultiBinaryLongMap.SafeBinaryLongMap
- java.lang.Object
-
- com.tangosol.util.MultiBinaryLongMap.WrapperBinaryLongMap
-
- com.tangosol.util.MultiBinaryLongMap.SafeBinaryLongMap
-
- All Implemented Interfaces:
BinaryLongMap
- Direct Known Subclasses:
MultiBinaryLongMap.PrimaryBinaryLongMap.CompressedPrimaryBinaryLongMap
- Enclosing class:
- MultiBinaryLongMap
public static class MultiBinaryLongMap.SafeBinaryLongMap extends MultiBinaryLongMap.WrapperBinaryLongMap
The SafeBinaryLongMap is a BinaryLongMap implementation that wraps an underlying BinaryLongMap in order to add thread safety.
-
-
Nested Class Summary
-
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
Fields Modifier and Type Field Description protected Lockf_lockExclusiveThe exclusive lock.protected Lockf_lockSharedThe shared lock.-
Fields inherited from class com.tangosol.util.MultiBinaryLongMap.WrapperBinaryLongMap
m_blm
-
-
Constructor Summary
Constructors Constructor Description SafeBinaryLongMap(BinaryLongMap blm, Lock lockShared, Lock lockExclusive)Construct a SafeBinaryLongMap around the specified map, protected by the specified locks.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidclear()Initialize the map to an empty state.longget(Binary binKey)Find the specified key in the map and return the value associated with it.BinaryLongMapgetMap()Return the underlying BinaryLongMap.voidinternKeys(Object o)Internal opaque method: De-duplicate keys.Iterator<Binary>keys()Obtain an iterator of the keys stored in the map.Iterator<Binary>keys(Predicate<BinaryLongMap.Entry> predicate)Obtain an iterator of the keys stored in the map whose correspondingEntrymatches the passedPredicate<Entry>.voidput(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.booleanputIfAbsent(Binary binKey, long lValue)Store the passed value for the specified key, only if the key does not currently exist in the map.voidrelease()Release the SafeBinaryLongMap.voidremove(Binary binKey)Blindly remove the specified Binary key from the map.booleanremove(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.booleanreplace(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.intsize()Determine the size of the map.voidvisit(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.voidvisitAll(BinaryLongMap.EntryVisitor visitor)Apply the specified visitor to all entries in the BinaryLongMap.-
Methods inherited from class com.tangosol.util.MultiBinaryLongMap.WrapperBinaryLongMap
setMap
-
-
-
-
Constructor Detail
-
SafeBinaryLongMap
public SafeBinaryLongMap(BinaryLongMap blm, Lock lockShared, Lock lockExclusive)
Construct a SafeBinaryLongMap around the specified map, protected by the specified locks.It is assumed that the specified locks have the following reentrant properties:
- a thread holding one or both of the locks may reacquire those locks (and must release them accordingly)
- a thread holding the exclusive lock may acquire the shared lock (but not vice-versa).
- Parameters:
blm- the underlying BinaryLongMaplockShared- the lock to acquire for shared accesslockExclusive- the lock to acquire for exclusive access
-
-
Method Detail
-
getMap
public BinaryLongMap getMap()
Return the underlying BinaryLongMap.- Overrides:
getMapin classMultiBinaryLongMap.WrapperBinaryLongMap- Returns:
- the underlying BinaryLongMap
-
release
public void release()
Release the SafeBinaryLongMap. Any future operations against this map will result in an exception.
-
get
public long get(Binary binKey)
Find the specified key in the map and return the value associated with it.- Specified by:
getin interfaceBinaryLongMap- Overrides:
getin classMultiBinaryLongMap.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:
putin interfaceBinaryLongMap- Overrides:
putin classMultiBinaryLongMap.WrapperBinaryLongMap- Parameters:
binKey- the Binary key to add or updatelValue- 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:
putIfAbsentin interfaceBinaryLongMap- Overrides:
putIfAbsentin classMultiBinaryLongMap.WrapperBinaryLongMap- Parameters:
binKey- a Binary keylValue- 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 asremovepassing the old value to match.- Specified by:
replacein interfaceBinaryLongMap- Overrides:
replacein classMultiBinaryLongMap.WrapperBinaryLongMap- Parameters:
binKey- a Binary keylValueOld- the assumed old value to replacelValueNew- 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:
removein interfaceBinaryLongMap- Overrides:
removein classMultiBinaryLongMap.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:
removein interfaceBinaryLongMap- Overrides:
removein classMultiBinaryLongMap.WrapperBinaryLongMap- Parameters:
binKey- a Binary keylValue- 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:
clearin interfaceBinaryLongMap- Overrides:
clearin classMultiBinaryLongMap.WrapperBinaryLongMap
-
size
public int size()
Determine the size of the map.- Specified by:
sizein interfaceBinaryLongMap- Overrides:
sizein classMultiBinaryLongMap.WrapperBinaryLongMap- Returns:
- the number of unique keys stored in the map
-
keys
public Iterator<Binary> keys()
Obtain an iterator of the keys stored in the map.- Specified by:
keysin interfaceBinaryLongMap- Overrides:
keysin classMultiBinaryLongMap.WrapperBinaryLongMap- Returns:
- an Iterator of Binary keys
-
keys
public Iterator<Binary> keys(Predicate<BinaryLongMap.Entry> predicate)
Obtain an iterator of the keys stored in the map whose correspondingEntrymatches the passedPredicate<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.EntryVisitorvia theBinaryLongMap.visit(com.tangosol.util.Binary, com.tangosol.util.BinaryLongMap.EntryVisitor)orBinaryLongMap.visitAll(com.tangosol.util.BinaryLongMap.EntryVisitor)methods.- Specified by:
keysin interfaceBinaryLongMap- Overrides:
keysin classMultiBinaryLongMap.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 (viaBinaryLongMap.Entry.setValue(long)).- Specified by:
visitin interfaceBinaryLongMap- Overrides:
visitin classMultiBinaryLongMap.WrapperBinaryLongMap- Parameters:
binKey- the key to visitvisitor- the visitor to apply
-
visitAll
public void visitAll(BinaryLongMap.EntryVisitor visitor)
Apply the specified visitor to all entries in the BinaryLongMap.- Specified by:
visitAllin interfaceBinaryLongMap- Overrides:
visitAllin classMultiBinaryLongMap.WrapperBinaryLongMap- Parameters:
visitor- the visitor to apply
-
internKeys
public void internKeys(Object o)
Internal opaque method: De-duplicate keys.- Specified by:
internKeysin interfaceBinaryLongMap- Overrides:
internKeysin classMultiBinaryLongMap.WrapperBinaryLongMap- Parameters:
o- some implementation-specific object
-
-