16 #ifndef HAZELCAST_CLIENT_ADAPTOR_RAWPOINTERMAP_H_
17 #define HAZELCAST_CLIENT_ADAPTOR_RAWPOINTERMAP_H_
19 #include "hazelcast/client/IMap.h"
20 #include "hazelcast/client/adaptor/MapEntryView.h"
21 #include "hazelcast/client/impl/DataArrayImpl.h"
22 #include "hazelcast/client/impl/EntryArrayImpl.h"
23 #include "hazelcast/client/impl/EntryArrayKeyAdaptor.h"
24 #include "hazelcast/client/impl/EntryArrayValueAdaptor.h"
25 #include "hazelcast/client/map/ClientMapProxy.h"
27 #if defined(WIN32) || defined(_WIN32) || defined(WIN64) || defined(_WIN64)
29 #pragma warning(disable: 4251) //for dll export
50 template<
typename K,
typename V>
54 mapProxy(*map.mapImpl) {
55 serializationService = &mapProxy.getSerializationService();
65 return map.containsKey(key);
75 return map.containsValue(value);
85 std::auto_ptr<V>
get(
const K &key) {
86 return serializationService->toObject<V>(
87 mapProxy.getData(serializationService->toData<K>(&key)).get());
98 std::auto_ptr<V>
put(
const K &key,
const V &value) {
99 return put(key, value, -1);
113 std::auto_ptr<V>
put(
const K &key,
const V &value,
long ttlInMillis) {
114 return serializationService->toObject<V>(
115 mapProxy.putData(serializationService->toData<K>(&key), serializationService->toData<V>(&value),
126 std::auto_ptr<V>
remove(
const K &key) {
127 return serializationService->toObject<V>(
128 mapProxy.removeData(serializationService->toData<K>(&key)).get());
138 bool remove(
const K &key,
const V &value) {
139 return map.remove(key, value);
149 map.deleteEntry(key);
171 return map.tryRemove(key, timeoutInMillis);
186 bool tryPut(
const K &key,
const V &value,
long timeoutInMillis) {
187 return map.tryPut(key, value, timeoutInMillis);
200 map.putTransient(key, value, ttlInMillis);
212 return serializationService->toObject<V>(mapProxy.putIfAbsentData(serializationService->toData<K>(&key),
213 serializationService->toData<V>(&value),
228 std::auto_ptr<V>
putIfAbsent(
const K &key,
const V &value,
long ttlInMillis) {
229 return serializationService->toObject<V>(
230 mapProxy.putIfAbsentData(serializationService->toData<K>(&key),
231 serializationService->toData<V>(&value),
242 bool replace(
const K &key,
const V &oldValue,
const V &newValue) {
243 return map.replace(key, oldValue, newValue);
253 std::auto_ptr<V>
replace(
const K &key,
const V &value) {
254 return serializationService->toObject<V>(mapProxy.replaceData(
255 serializationService->toData<K>(&key), serializationService->toData<V>(&value)).get());
265 void set(
const K &key,
const V &value) {
278 void set(
const K &key,
const V &value,
long ttl) {
279 map.set(key, value, ttl);
318 void lock(
const K &key,
long leaseTime) {
319 map.lock(key, leaseTime);
331 return map.isLocked(key);
344 return map.tryLock(key, 0);
363 bool tryLock(
const K &key,
long timeInMillis) {
364 return map.tryLock(key, timeInMillis);
393 map.forceUnlock(key);
407 template<
typename MapInterceptor>
409 return map.template addInterceptor<MapInterceptor>(interceptor);
419 map.removeInterceptor(
id);
437 return map.addEntryListener(listener, includeValue);
456 return map.addEntryListener(listener, predicate, includeValue);
469 return map.removeEntryListener(registrationId);
487 return map.addEntryListener(listener, key, includeValue);
499 std::auto_ptr<map::DataEntryView> dataView = mapProxy.getEntryViewData(serializationService->toData<K>(&key));
500 if ((map::DataEntryView *)NULL == dataView.get()) {
501 return std::auto_ptr<MapEntryView<K, V> >();
503 return std::auto_ptr<MapEntryView<K, V> >(
new MapEntryView<K, V>(dataView, *serializationService));
517 return map.evict(key);
541 std::auto_ptr<EntryArray<K, V> >
getAll(
const std::set<K> &keys) {
543 return std::auto_ptr<EntryArray<K, V> >();
546 std::map<int, std::vector<serialization::pimpl::Data> > partitionToKeyData;
548 for (
typename std::set<K>::const_iterator it = keys.begin();it != keys.end(); ++it) {
549 serialization::pimpl::Data keyData = mapProxy.template toData<K>(*it);
551 int partitionId = mapProxy.getPartitionId(keyData);
553 partitionToKeyData[partitionId].push_back(keyData);
556 EntryVector
entrySet = mapProxy.getAllData(partitionToKeyData);
558 return std::auto_ptr<EntryArray<K, V> >(
559 new client::impl::EntryArrayImpl<K, V>(
entrySet, *serializationService));
570 std::vector<serialization::pimpl::Data> dataResult = mapProxy.keySetData();
571 return std::auto_ptr<DataArray<K> >(
new hazelcast::client::impl::DataArrayImpl<K>(
572 dataResult, *serializationService));
586 std::vector<serialization::pimpl::Data> dataResult = mapProxy.keySetData(predicate);
587 return std::auto_ptr<DataArray<K> >(
new hazelcast::client::impl::DataArrayImpl<K>(
588 dataResult, *serializationService));
603 predicate.setIterationType(query::KEY);
605 std::vector<serialization::pimpl::Data> dataResult = mapProxy.keySetForPagingPredicateData(predicate);
607 EntryVector entryResult;
608 for (std::vector<serialization::pimpl::Data>::iterator it = dataResult.begin();it != dataResult.end(); ++it) {
609 entryResult.push_back(std::pair<serialization::pimpl::Data, serialization::pimpl::Data>(
610 *it, serialization::pimpl::Data()));
613 client::impl::EntryArrayImpl<K, V> entries(entryResult, *serializationService);
615 entries.sort(query::KEY, predicate.getComparator());
617 std::pair<size_t, size_t> range = mapProxy.template updateAnchor<K, V>(entries, predicate, query::KEY);
619 std::auto_ptr<EntryArray<K, V> > subList(
new client::impl::EntryArrayImpl<K, V>(
620 entries, range.first, range.second));
622 std::auto_ptr<DataArray<K> > result = std::auto_ptr<DataArray<K> >(
623 new impl::EntryArrayKeyAdaptor<K, V>(subList));
636 std::vector<serialization::pimpl::Data> dataResult = mapProxy.valuesData();
637 return std::auto_ptr<DataArray<V> >(
638 new hazelcast::client::impl::DataArrayImpl<V>(dataResult, *serializationService));
650 std::vector<serialization::pimpl::Data> dataResult = mapProxy.valuesData(predicate);
651 return std::auto_ptr<DataArray<V> >(
652 new hazelcast::client::impl::DataArrayImpl<V>(dataResult, *serializationService));
664 predicate.setIterationType(query::VALUE);
666 EntryVector entryResult = mapProxy.valuesForPagingPredicateData(predicate);
668 client::impl::EntryArrayImpl<K, V> entries(entryResult, *serializationService);
670 entries.sort(query::VALUE, predicate.getComparator());
672 std::pair<size_t, size_t> range = mapProxy.template updateAnchor<K, V>(entries, predicate, query::VALUE);
674 std::auto_ptr<EntryArray<K, V> > subList(
new client::impl::EntryArrayImpl<K, V>(entries, range.first, range.second));
675 std::auto_ptr<DataArray<V> > result = std::auto_ptr<DataArray<V> >(
676 new impl::EntryArrayValueAdaptor<K, V>(subList));
689 EntryVector entries = mapProxy.entrySetData();
690 return std::auto_ptr<EntryArray<K, V> >(
691 new client::impl::EntryArrayImpl<K, V>(entries, *serializationService));
705 EntryVector entries = mapProxy.entrySetData(predicate);
706 return std::auto_ptr<EntryArray<K, V> >(
707 new client::impl::EntryArrayImpl<K, V>(entries, *serializationService));
721 std::vector<std::pair<serialization::pimpl::Data, serialization::pimpl::Data> > dataResult =
722 mapProxy.entrySetForPagingPredicateData(predicate);
724 client::impl::EntryArrayImpl<K, V> entries(dataResult, *serializationService);
726 entries.sort(query::ENTRY, predicate.getComparator());
728 std::pair<size_t, size_t> range = mapProxy.template updateAnchor<K, V>(entries, predicate, query::ENTRY);
730 return std::auto_ptr<EntryArray<K, V> >(
731 new client::impl::EntryArrayImpl<K, V>(entries, range.first, range.second));
766 void addIndex(
const std::string &attribute,
bool ordered) {
767 map.addIndex(attribute, ordered);
784 template<
typename ResultType,
typename EntryProcessor>
785 std::auto_ptr<ResultType>
executeOnKey(
const K &key, EntryProcessor &entryProcessor) {
786 serialization::pimpl::Data keyData = serializationService->toData<K>(&key);
787 serialization::pimpl::Data processorData = serializationService->toData<EntryProcessor>(&entryProcessor);
789 std::auto_ptr<serialization::pimpl::Data> resultData = mapProxy.executeOnKeyInternal(keyData, processorData);
791 return serializationService->toObject<ResultType>(resultData.get());
803 template<
typename ResultType,
typename EntryProcessor>
805 return map.template submitToKey<ResultType, EntryProcessor>(key, entryProcessor);
808 template<
typename ResultType,
typename EntryProcessor>
809 std::auto_ptr<EntryArray<K, ResultType> > executeOnKeys(
const std::set<K> &keys, EntryProcessor &entryProcessor) {
810 EntryVector results = mapProxy.template executeOnKeysInternal<ResultType, EntryProcessor>(keys, entryProcessor);
812 return std::auto_ptr<EntryArray<K, ResultType> >(
813 new client::impl::EntryArrayImpl<K, ResultType>(results, *serializationService));
830 template<
typename ResultType,
typename EntryProcessor>
831 std::auto_ptr<EntryArray<K, ResultType> >
executeOnEntries(EntryProcessor &entryProcessor) {
832 EntryVector results = mapProxy.template executeOnEntriesData<EntryProcessor>(entryProcessor);
834 return std::auto_ptr<EntryArray<K, ResultType> >(
835 new client::impl::EntryArrayImpl<K, ResultType>(results, *serializationService));
852 template<
typename ResultType,
typename EntryProcessor>
854 EntryVector results = mapProxy.template executeOnEntriesData<EntryProcessor>(entryProcessor, predicate);
856 return std::auto_ptr<EntryArray<K, ResultType> >(
857 new client::impl::EntryArrayImpl<K, ResultType>(results, *serializationService));
877 return map.isEmpty();
891 void putAll(
const std::map<K, V> &entries) {
905 map::ClientMapProxy<K, V> &mapProxy;
906 serialization::pimpl::SerializationService *serializationService;
912 #if defined(WIN32) || defined(_WIN32) || defined(WIN64) || defined(_WIN64)
void flush()
If this map has a MapStore this method flushes all the local dirty entries by calling MapStore...
Definition: RawPointerMap.h:156
std::auto_ptr< EntryArray< K, V > > entrySet()
Returns a std::vector< std::pair<K, V> > clone of the mappings contained in this map.
Definition: RawPointerMap.h:688
void forceUnlock(const K &key)
Releases the lock for the specified key regardless of the lock owner.
Definition: RawPointerMap.h:392
void lock(const K &key, long leaseTime)
Acquires the lock for the specified key for the specified lease time.
Definition: RawPointerMap.h:318
Map Entry listener to get notified when a map entry is added, removed, updated or evicted...
Definition: EntryListener.h:45
void putAll(const std::map< K, V > &entries)
Copies all of the mappings from the specified map to this map (optional operation).
Definition: RawPointerMap.h:891
std::auto_ptr< ResultType > executeOnKey(const K &key, EntryProcessor &entryProcessor)
Applies the user defined EntryProcessor to the entry mapped by the key.
Definition: RawPointerMap.h:785
std::auto_ptr< EntryArray< K, ResultType > > executeOnEntries(EntryProcessor &entryProcessor)
Applies the user defined EntryProcessor to the all entries in the map.
Definition: RawPointerMap.h:831
bool removeEntryListener(const std::string ®istrationId)
Removes the specified entry listener Returns silently if there is no such listener added before...
Definition: RawPointerMap.h:468
bool containsKey(const K &key)
check if this map contains key.
Definition: RawPointerMap.h:64
std::auto_ptr< DataArray< V > > values(query::PagingPredicate< K, V > &predicate)
Returns a vector clone of the values contained in this map.
Definition: RawPointerMap.h:663
void addIndex(const std::string &attribute, bool ordered)
Adds an index to this map for the specified entries so that queries can run faster.
Definition: RawPointerMap.h:766
void lock(const K &key)
Acquires the lock for the specified key.
Definition: RawPointerMap.h:296
std::auto_ptr< V > replace(const K &key, const V &value)
Replaces the entry for a key only if currently mapped to some value.
Definition: RawPointerMap.h:253
bool containsValue(const V &value)
check if this map contains value.
Definition: RawPointerMap.h:74
std::auto_ptr< DataArray< V > > values()
Returns a vector clone of the values contained in this map.
Definition: RawPointerMap.h:635
bool evict(const K &key)
Evicts the specified key from this map.
Definition: RawPointerMap.h:516
void removeInterceptor(const std::string &id)
Removes the given interceptor for this map.
Definition: RawPointerMap.h:418
std::auto_ptr< EntryArray< K, V > > entrySet(const query::Predicate &predicate)
Queries the map based on the specified predicate and returns the matching entries.
Definition: RawPointerMap.h:704
std::string addEntryListener(EntryListener< K, V > &listener, const K &key, bool includeValue)
Adds the specified entry listener for the specified key.
Definition: RawPointerMap.h:486
void deleteEntry(const K &key)
removes entry from map.
Definition: RawPointerMap.h:148
bool tryRemove(const K &key, long timeoutInMillis)
Tries to remove the entry with the given key from this map within specified timeout value...
Definition: RawPointerMap.h:170
NOTE: PagingPredicate can only be used with values(), keySet() and entries() methods!!! ...
Definition: PagingPredicate.h:127
std::auto_ptr< V > putIfAbsent(const K &key, const V &value, long ttlInMillis)
Puts an entry into this map with a given ttl (time to live) value if the specified key is not already...
Definition: RawPointerMap.h:228
void putTransient(const K &key, const V &value, long ttlInMillis)
Same as put(K, V, long, TimeUnit) but MapStore, if defined, will not be called to store/persist the e...
Definition: RawPointerMap.h:199
Future< ResultType > submitToKey(const K &key, EntryProcessor &entryProcessor)
Applies the user defined EntryProcessor to the entry mapped by the key.
Definition: RawPointerMap.h:804
std::string addInterceptor(MapInterceptor &interceptor)
Adds an interceptor for this map.
Definition: RawPointerMap.h:408
bool isEmpty()
Returns true if this map contains no key-value mappings.
Definition: RawPointerMap.h:876
bool tryLock(const K &key, long timeInMillis)
Tries to acquire the lock for the specified key.
Definition: RawPointerMap.h:363
std::auto_ptr< MapEntryView< K, V > > getEntryView(const K &key)
Returns the MapEntryView for the specified key.
Definition: RawPointerMap.h:498
bool isLocked(const K &key)
Checks the lock for the specified key.
Definition: RawPointerMap.h:330
int size()
Returns the number of key-value mappings in this map.
Definition: RawPointerMap.h:867
Adaptor class to IMap which provides releasable raw pointers for returned objects.
Definition: RawPointerMap.h:51
void clear()
Removes all of the mappings from this map (optional operation).
Definition: RawPointerMap.h:899
bool replace(const K &key, const V &oldValue, const V &newValue)
Replaces the entry for a key only if currently mapped to a given value.
Definition: RawPointerMap.h:242
std::string addEntryListener(EntryListener< K, V > &listener, const query::Predicate &predicate, bool includeValue)
Adds an entry listener for this map.
Definition: RawPointerMap.h:455
std::auto_ptr< DataArray< K > > keySet()
Returns a snaphot of the deys data in the map.
Definition: RawPointerMap.h:569
std::auto_ptr< EntryArray< K, V > > entrySet(query::PagingPredicate< K, V > &predicate)
Queries the map based on the specified predicate and returns the matching entries.
Definition: RawPointerMap.h:720
std::auto_ptr< V > put(const K &key, const V &value)
put new entry into map.
Definition: RawPointerMap.h:98
This is a unique Future.
Definition: Future.h:111
std::auto_ptr< DataArray< K > > keySet(query::PagingPredicate< K, V > &predicate)
Queries the map based on the specified predicate and returns the keys of matching entries...
Definition: RawPointerMap.h:602
std::auto_ptr< EntryArray< K, ResultType > > executeOnEntries(EntryProcessor &entryProcessor, const query::Predicate &predicate)
Applies the user defined EntryProcessor to the all entries in the map.
Definition: RawPointerMap.h:853
This is a merker class for Predicate classes.
Definition: Predicate.h:36
Concurrent, distributed, observable and queryable map client.
Definition: IMap.h:66
std::auto_ptr< EntryArray< K, V > > getAll(const std::set< K > &keys)
Returns the entries for the given keys.
Definition: RawPointerMap.h:541
void set(const K &key, const V &value, long ttl)
Puts an entry into this map.
Definition: RawPointerMap.h:278
void set(const K &key, const V &value)
Puts an entry into this map.
Definition: RawPointerMap.h:265
std::auto_ptr< V > put(const K &key, const V &value, long ttlInMillis)
Puts an entry into this map with a given ttl (time to live) value.
Definition: RawPointerMap.h:113
std::string addEntryListener(EntryListener< K, V > &listener, bool includeValue)
Adds an entry listener for this map.
Definition: RawPointerMap.h:436
bool tryPut(const K &key, const V &value, long timeoutInMillis)
Tries to put the given key, value into this map within specified timeout value.
Definition: RawPointerMap.h:186
void evictAll()
Evicts all keys from this map except locked ones.
Definition: RawPointerMap.h:531
std::auto_ptr< DataArray< V > > values(const query::Predicate &predicate)
Returns a vector clone of the values contained in this map.
Definition: RawPointerMap.h:649
bool tryLock(const K &key)
Tries to acquire the lock for the specified key.
Definition: RawPointerMap.h:343
std::auto_ptr< V > putIfAbsent(const K &key, const V &value)
Puts an entry into this map, if the specified key is not already associated with a value...
Definition: RawPointerMap.h:211
void unlock(const K &key)
Releases the lock for the specified key.
Definition: RawPointerMap.h:380
MapEntryView represents a readonly view of a map entry.
Definition: MapEntryView.h:38
std::auto_ptr< DataArray< K > > keySet(const query::Predicate &predicate)
Queries the map based on the specified predicate and returns the keys of matching entries...
Definition: RawPointerMap.h:585