| #pragma once |
| |
| #ifndef GEODE_GFCPP_CACHEABLEBUILTINS_H_ |
| #define GEODE_GFCPP_CACHEABLEBUILTINS_H_ |
| |
| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| /** @file CacheableBuiltins.hpp |
| * @brief Contains generic template definitions for Cacheable types |
| * and instantiations for built-in types. |
| */ |
| |
| #include "Cacheable.hpp" |
| #include "CacheableKey.hpp" |
| #include "Serializer.hpp" |
| #include "CacheableKeys.hpp" |
| #include "CacheableString.hpp" |
| |
| namespace apache { |
| namespace geode { |
| namespace client { |
| |
| /** sprintf implementation. */ |
| extern int gf_sprintf(char* buffer, const char* fmt, ...); |
| |
| /** snprintf implementation. */ |
| extern int gf_snprintf(char* buffer, int32_t maxLength, const char* fmt, ...); |
| |
| /** Template CacheableKey class for primitive types. */ |
| template <typename TObj, int8_t TYPEID, const char* TYPENAME, |
| const char* SPRINTFSYM, int32_t STRSIZE> |
| class CacheableKeyType : public CacheableKey { |
| protected: |
| TObj m_value; |
| |
| inline CacheableKeyType() |
| : m_value(apache::geode::client::serializer::zeroObject<TObj>()) {} |
| |
| inline CacheableKeyType(const TObj value) : m_value(value) {} |
| |
| public: |
| /** Gets the contained value. */ |
| inline TObj value() const { return m_value; } |
| |
| // Cacheable methods |
| |
| /** Serialize this object to given <code>DataOutput</code>. */ |
| virtual void toData(DataOutput& output) const { |
| apache::geode::client::serializer::writeObject(output, m_value); |
| } |
| |
| /** Deserialize this object from given <code>DataInput</code>. */ |
| virtual Serializable* fromData(DataInput& input) { |
| apache::geode::client::serializer::readObject(input, m_value); |
| return this; |
| } |
| |
| /** |
| * Return the classId of the instance being serialized. |
| * |
| * This is used by deserialization to determine what instance |
| * type to create and deserialize into. |
| */ |
| virtual int32_t classId() const { return 0; } |
| |
| /** |
| * Return the typeId byte of the instance being serialized. |
| * |
| * This is used by deserialization to determine what instance |
| * type to create and deserialize into. |
| */ |
| virtual int8_t typeId() const { return TYPEID; } |
| |
| /** Return a string representation of the object. */ |
| virtual CacheableStringPtr toString() const { |
| char buffer[STRSIZE + 1]; |
| gf_sprintf(buffer, SPRINTFSYM, m_value); |
| return CacheableString::create(buffer); |
| } |
| |
| // CacheableKey methods |
| |
| /** Return the hashcode for this key. */ |
| virtual uint32_t hashcode() const { |
| return apache::geode::client::serializer::hashcode(m_value); |
| } |
| |
| /** Return true if this key matches other. */ |
| virtual bool operator==(const CacheableKey& other) const { |
| if (other.typeId() != TYPEID) { |
| return false; |
| } |
| const CacheableKeyType& otherValue = |
| static_cast<const CacheableKeyType&>(other); |
| return apache::geode::client::serializer::equals(m_value, |
| otherValue.m_value); |
| } |
| |
| /** Return true if this key matches other key value. */ |
| inline bool operator==(const TObj other) const { |
| return apache::geode::client::serializer::equals(m_value, other); |
| } |
| |
| /** |
| * Copy the string form of the object into a char* buffer for |
| * logging purposes. |
| */ |
| virtual int32_t logString(char* buffer, int32_t maxLength) const { |
| char fmt[64]; |
| gf_sprintf(fmt, "%s( %s )", TYPENAME, SPRINTFSYM); |
| return gf_snprintf(buffer, maxLength, fmt, m_value); |
| } |
| |
| /** |
| * Return the size in bytes of the instance being serialized. |
| * |
| * This is used to determine whether the cache is using up more |
| * physical memory than it has been configured to use. The method can |
| * return zero if the user does not require the ability to control |
| * cache memory utilization. |
| */ |
| virtual uint32_t objectSize() const { return sizeof(CacheableKeyType); } |
| }; |
| |
| // Forward declaration for SharedArrayPtr |
| template <typename TObj, int8_t TYPEID> |
| class SharedArrayPtr; |
| |
| /** Function to copy an array from source to destination. */ |
| template <typename TObj> |
| inline void copyArray(TObj* dest, const TObj* src, int32_t length) { |
| memcpy(dest, src, length * sizeof(TObj)); |
| } |
| |
| /** |
| * Function to copy an array of <code>SharedPtr</code>s from |
| * source to destination. |
| */ |
| template <typename TObj> |
| inline void copyArray(SharedPtr<TObj>* dest, const SharedPtr<TObj>* src, |
| int32_t length) { |
| for (int32_t index = 0; index < length; index++) { |
| dest[index] = src[index]; |
| } |
| } |
| |
| /** |
| * Function to copy an array of <code>SharedArrayPtr</code>s from |
| * source to destination. |
| */ |
| template <typename TObj, int8_t TYPEID> |
| inline void copyArray(SharedArrayPtr<TObj, TYPEID>* dest, |
| const SharedArrayPtr<TObj, TYPEID>* src, int32_t length) { |
| for (int32_t index = 0; index < length; index++) { |
| dest[index] = src[index]; |
| } |
| } |
| |
| /** Template class for array of primitive types. */ |
| template <typename TObj, int8_t TYPEID> |
| class CacheableArrayType : public Cacheable { |
| protected: |
| TObj* m_value; |
| int32_t m_length; |
| |
| inline CacheableArrayType() : m_value(NULL), m_length(0) {} |
| |
| inline CacheableArrayType(int32_t length) : m_length(length) { |
| if (length > 0) { |
| GF_NEW(m_value, TObj[length]); |
| } |
| } |
| |
| inline CacheableArrayType(TObj* value, int32_t length) |
| : m_value(value), m_length(length) {} |
| |
| inline CacheableArrayType(const TObj* value, int32_t length, bool copy) |
| : m_value(NULL), m_length(length) { |
| if (length > 0) { |
| GF_NEW(m_value, TObj[length]); |
| copyArray(m_value, value, length); |
| } |
| } |
| |
| virtual ~CacheableArrayType() { GF_SAFE_DELETE_ARRAY(m_value); } |
| |
| private: |
| // Private to disable copy constructor and assignment operator. |
| CacheableArrayType(const CacheableArrayType& other) |
| : m_value(other.m_value), m_length(other.m_length) {} |
| |
| CacheableArrayType& operator=(const CacheableArrayType& other) { |
| return *this; |
| } |
| |
| public: |
| /** Get the underlying array. */ |
| inline const TObj* value() const { return m_value; } |
| |
| /** Get the length of the array. */ |
| inline int32_t length() const { return m_length; } |
| |
| /** Get the element at given index. */ |
| inline TObj operator[](uint32_t index) const { |
| if (static_cast<int32_t>(index) >= m_length) { |
| throw OutOfRangeException( |
| "CacheableArray::operator[]: Index out of range."); |
| } |
| return m_value[index]; |
| } |
| |
| // Cacheable methods |
| |
| /** Serialize this object to the given <code>DataOutput</code>. */ |
| virtual void toData(DataOutput& output) const { |
| apache::geode::client::serializer::writeObject(output, m_value, m_length); |
| } |
| |
| /** Deserialize this object from the given <code>DataInput</code>. */ |
| virtual Serializable* fromData(DataInput& input) { |
| GF_SAFE_DELETE_ARRAY(m_value); |
| apache::geode::client::serializer::readObject(input, m_value, m_length); |
| return this; |
| } |
| |
| /** |
| * Return the classId of the instance being serialized. |
| * |
| * This is used by deserialization to determine what instance |
| * type to create and deserialize into. |
| */ |
| virtual int32_t classId() const { return 0; } |
| |
| /** |
| * Return the typeId byte of the instance being serialized. |
| * |
| * This is used by deserialization to determine what instance |
| * type to create and deserialize into. |
| */ |
| virtual int8_t typeId() const { return TYPEID; } |
| |
| /** |
| * Return the size in bytes of the instance being serialized. |
| * |
| * This is used to determine whether the cache is using up more |
| * physical memory than it has been configured to use. The method can |
| * return zero if the user does not require the ability to control |
| * cache memory utilization. |
| */ |
| virtual uint32_t objectSize() const { |
| return static_cast<uint32_t>( |
| sizeof(CacheableArrayType) + |
| apache::geode::client::serializer::objectSize(m_value, m_length)); |
| } |
| }; |
| |
| /** |
| * Template class for CacheableArrayType SharedPtr's that adds [] operator |
| */ |
| template <typename TObj, int8_t TYPEID> |
| class SharedArrayPtr : public SharedPtr<CacheableArrayType<TObj, TYPEID> > { |
| private: |
| typedef CacheableArrayType<TObj, TYPEID> TArray; |
| |
| public: |
| /** Default constructor. */ |
| inline SharedArrayPtr() : SharedPtr<CacheableArrayType<TObj, TYPEID> >() {} |
| |
| /** Constructor, given a pointer to array. */ |
| inline SharedArrayPtr(const TArray* ptr) |
| : SharedPtr<CacheableArrayType<TObj, TYPEID> >(ptr) {} |
| |
| /** Constructor, given a null SharedBase. */ |
| inline SharedArrayPtr(const NullSharedBase* ptr) |
| : SharedPtr<CacheableArrayType<TObj, TYPEID> >(ptr) {} |
| |
| /** Constructor, given another SharedArrayPtr. */ |
| inline SharedArrayPtr(const SharedArrayPtr& other) |
| : SharedPtr<CacheableArrayType<TObj, TYPEID> >(other) {} |
| |
| /** Constructor, given another kind of SharedArrayPtr. */ |
| template <typename TOther, int8_t OTHERID> |
| inline SharedArrayPtr(const SharedArrayPtr<TOther, OTHERID>& other) |
| : SharedPtr<CacheableArrayType<TObj, TYPEID> >(other) {} |
| |
| /** Constructor, given another SharedPtr. */ |
| template <typename TOther> |
| inline SharedArrayPtr(const SharedPtr<TOther>& other) |
| : SharedPtr<CacheableArrayType<TObj, TYPEID> >(other) {} |
| |
| /** Get the element at given index. */ |
| inline TObj operator[](uint32_t index) const { |
| return SharedPtr<CacheableArrayType<TObj, TYPEID> >::ptr()->operator[]( |
| index); |
| } |
| |
| /** Deserialize self */ |
| inline Serializable* fromData(DataInput& input) { |
| return SharedPtr<CacheableArrayType<TObj, TYPEID> >::ptr()->fromData(input); |
| } |
| }; |
| |
| /** Template class for container Cacheable types. */ |
| template <typename TBase, int8_t TYPEID> |
| class CacheableContainerType : public Cacheable, public TBase { |
| protected: |
| inline CacheableContainerType() : TBase() {} |
| |
| inline CacheableContainerType(const int32_t n) : TBase(n) {} |
| |
| public: |
| // Cacheable methods |
| |
| /** Serialize this object to the given <code>DataOutput</code>. */ |
| virtual void toData(DataOutput& output) const { |
| apache::geode::client::serializer::writeObject(output, *this); |
| } |
| |
| /** Deserialize this object from the given <code>DataInput</code>. */ |
| virtual Serializable* fromData(DataInput& input) { |
| apache::geode::client::serializer::readObject(input, *this); |
| return this; |
| } |
| |
| /** |
| * Return the classId of the instance being serialized. |
| * |
| * This is used by deserialization to determine what instance |
| * type to create and deserialize into. |
| */ |
| virtual int32_t classId() const { return 0; } |
| |
| /** |
| * Return the typeId byte of the instance being serialized. |
| * |
| * This is used by deserialization to determine what instance |
| * type to create and deserialize into. |
| */ |
| virtual int8_t typeId() const { return TYPEID; } |
| |
| /** |
| * Return the size in bytes of the instance being serialized. |
| * |
| * This is used to determine whether the cache is using up more |
| * physical memory than it has been configured to use. The method can |
| * return zero if the user does not require the ability to control |
| * cache memory utilization. |
| */ |
| virtual uint32_t objectSize() const { |
| return static_cast<uint32_t>( |
| sizeof(CacheableContainerType) + |
| apache::geode::client::serializer::objectSize(*this)); |
| } |
| }; |
| |
| #ifdef _SOLARIS |
| #define TEMPLATE_EXPORT template class |
| #else |
| #ifdef BUILD_CPPCACHE |
| #define TEMPLATE_EXPORT template class CPPCACHE_EXPORT |
| #else |
| #define TEMPLATE_EXPORT extern template class CPPCACHE_EXPORT |
| #endif |
| #endif |
| |
| // Disable extern template warning on MSVC compiler |
| #ifdef _MSC_VER |
| #pragma warning(disable : 4231) |
| #endif |
| |
| #define _GF_CACHEABLE_KEY_TYPE_DEF_(p, k, sz) \ |
| extern const char tName_##k[]; \ |
| extern const char tStr_##k[]; \ |
| TEMPLATE_EXPORT \ |
| CacheableKeyType<p, GeodeTypeIds::k, tName_##k, tStr_##k, sz>; \ |
| typedef CacheableKeyType<p, GeodeTypeIds::k, tName_##k, tStr_##k, sz> _##k; \ |
| class CPPCACHE_EXPORT k; \ |
| typedef SharedPtr<k> k##Ptr; |
| |
| // use a class instead of typedef for bug #283 |
| #define _GF_CACHEABLE_KEY_TYPE_(p, k, sz) \ |
| class CPPCACHE_EXPORT k : public _##k { \ |
| protected: \ |
| inline k() : _##k() {} \ |
| inline k(const p value) : _##k(value) {} \ |
| \ |
| public: \ |
| /** Factory function registered with serialization registry. */ \ |
| static Serializable* createDeserializable() { return new k(); } \ |
| /** Factory function to create a new default instance. */ \ |
| inline static k##Ptr create() { return k##Ptr(new k()); } \ |
| /** Factory function to create an instance with the given value. */ \ |
| inline static k##Ptr create(const p value) { \ |
| return k##Ptr(new k(value)); \ |
| } \ |
| }; \ |
| inline CacheableKeyPtr createKey(const p value) { return k::create(value); } \ |
| inline CacheablePtr createValue(const p value) { return k::create(value); } |
| |
| #define _GF_CACHEABLE_ARRAY_TYPE_DEF_(p, c) \ |
| TEMPLATE_EXPORT CacheableArrayType<p, GeodeTypeIds::c>; \ |
| typedef CacheableArrayType<p, GeodeTypeIds::c> _##c; \ |
| class CPPCACHE_EXPORT c; \ |
| typedef SharedArrayPtr<p, GeodeTypeIds::c> c##Ptr; |
| |
| // use a class instead of typedef for bug #283 |
| #define _GF_CACHEABLE_ARRAY_TYPE_(p, c) \ |
| class CPPCACHE_EXPORT c : public _##c { \ |
| protected: \ |
| inline c() : _##c() {} \ |
| inline c(int32_t length) : _##c(length) {} \ |
| inline c(p* value, int32_t length) : _##c(value, length) {} \ |
| inline c(const p* value, int32_t length, bool copy) \ |
| : _##c(value, length, true) {} \ |
| \ |
| private: \ |
| /* Private to disable copy constructor and assignment operator. */ \ |
| c(const c& other); \ |
| c& operator=(const c& other); \ |
| \ |
| public: \ |
| /** Factory function registered with serialization registry. */ \ |
| static Serializable* createDeserializable() { return new c(); } \ |
| /** Factory function to create a new default instance. */ \ |
| inline static c##Ptr create() { return c##Ptr(new c()); } \ |
| /** Factory function to create a cacheable array of given size. */ \ |
| inline static c##Ptr create(int32_t length) { \ |
| return c##Ptr(new c(length)); \ |
| } \ |
| /** Create a cacheable array copying from the given array. */ \ |
| inline static c##Ptr create(const p* value, int32_t length) { \ |
| return (value != NULL ? c##Ptr(new c(value, length, true)) : NULLPTR); \ |
| } \ |
| /** \ \ |
| * Create a cacheable array taking ownership of the given array \ \ |
| * without creating a copy. \ \ |
| * \ \ |
| * Note that the application has to ensure that the given array is \ \ |
| * not deleted (apart from this class) and is allocated on the heap \ \ |
| * using the "new" operator. \ \ |
| */ \ |
| inline static c##Ptr createNoCopy(p* value, int32_t length) { \ |
| return (value != NULL ? c##Ptr(new c(value, length)) : NULLPTR); \ |
| } \ |
| }; |
| |
| #define _GF_CACHEABLE_CONTAINER_TYPE_DEF_(p, c) \ |
| TEMPLATE_EXPORT CacheableContainerType<p, GeodeTypeIds::c>; \ |
| typedef CacheableContainerType<p, GeodeTypeIds::c> _##c; \ |
| class CPPCACHE_EXPORT c; \ |
| typedef SharedPtr<c> c##Ptr; |
| |
| // use a class instead of typedef for bug #283 |
| #define _GF_CACHEABLE_CONTAINER_TYPE_(p, c) \ |
| class CPPCACHE_EXPORT c : public _##c { \ |
| protected: \ |
| inline c() : _##c() {} \ |
| inline c(const int32_t n) : _##c(n) {} \ |
| \ |
| public: \ |
| /** Iterator for this type. */ \ |
| typedef p::Iterator Iterator; \ |
| /** Factory function registered with serialization registry. */ \ |
| static Serializable* createDeserializable() { return new c(); } \ |
| /** Factory function to create a default instance. */ \ |
| inline static c##Ptr create() { return c##Ptr(new c()); } \ |
| /** Factory function to create an instance with the given size. */ \ |
| inline static c##Ptr create(const int32_t n) { return c##Ptr(new c(n)); } \ |
| }; |
| |
| // Instantiations for the built-in CacheableKeys |
| |
| _GF_CACHEABLE_KEY_TYPE_DEF_(bool, CacheableBoolean, 3); |
| /** |
| * An immutable wrapper for booleans that can serve as |
| * a distributable key object for caching. |
| */ |
| _GF_CACHEABLE_KEY_TYPE_(bool, CacheableBoolean, 3); |
| |
| _GF_CACHEABLE_ARRAY_TYPE_DEF_(bool, BooleanArray); |
| /** |
| * An immutable wrapper for array of booleans that can serve as |
| * a distributable object for caching. |
| */ |
| _GF_CACHEABLE_ARRAY_TYPE_(bool, BooleanArray); |
| |
| _GF_CACHEABLE_KEY_TYPE_DEF_(uint8_t, CacheableByte, 15); |
| /** |
| * An immutable wrapper for bytes that can serve as |
| * a distributable key object for caching. |
| */ |
| _GF_CACHEABLE_KEY_TYPE_(uint8_t, CacheableByte, 15); |
| |
| _GF_CACHEABLE_KEY_TYPE_DEF_(double, CacheableDouble, 63); |
| /** |
| * An immutable wrapper for doubles that can serve as |
| * a distributable key object for caching. |
| */ |
| _GF_CACHEABLE_KEY_TYPE_(double, CacheableDouble, 63); |
| |
| _GF_CACHEABLE_KEY_TYPE_DEF_(float, CacheableFloat, 63); |
| /** |
| * An immutable wrapper for floats that can serve as |
| * a distributable key object for caching. |
| */ |
| _GF_CACHEABLE_KEY_TYPE_(float, CacheableFloat, 63); |
| |
| _GF_CACHEABLE_KEY_TYPE_DEF_(int16_t, CacheableInt16, 15); |
| /** |
| * An immutable wrapper for 16-bit integers that can serve as |
| * a distributable key object for caching. |
| */ |
| _GF_CACHEABLE_KEY_TYPE_(int16_t, CacheableInt16, 15); |
| |
| _GF_CACHEABLE_KEY_TYPE_DEF_(int32_t, CacheableInt32, 15); |
| /** |
| * An immutable wrapper for 32-bit integers that can serve as |
| * a distributable key object for caching. |
| */ |
| _GF_CACHEABLE_KEY_TYPE_(int32_t, CacheableInt32, 15); |
| |
| _GF_CACHEABLE_KEY_TYPE_DEF_(int64_t, CacheableInt64, 31); |
| /** |
| * An immutable wrapper for 64-bit integers that can serve as |
| * a distributable key object for caching. |
| */ |
| _GF_CACHEABLE_KEY_TYPE_(int64_t, CacheableInt64, 31); |
| |
| _GF_CACHEABLE_KEY_TYPE_DEF_(wchar_t, CacheableWideChar, 3); |
| /** |
| * An immutable wrapper for wide-characters that can serve as |
| * a distributable key object for caching. |
| */ |
| _GF_CACHEABLE_KEY_TYPE_(wchar_t, CacheableWideChar, 3); |
| |
| _GF_CACHEABLE_ARRAY_TYPE_DEF_(wchar_t, CharArray); |
| /** |
| * An immutable wrapper for array of wide-characters that can serve as |
| * a distributable object for caching. |
| */ |
| _GF_CACHEABLE_ARRAY_TYPE_(wchar_t, CharArray); |
| |
| // Instantiations for array built-in Cacheables |
| |
| _GF_CACHEABLE_ARRAY_TYPE_DEF_(uint8_t, CacheableBytes); |
| /** |
| * An immutable wrapper for byte arrays that can serve as |
| * a distributable object for caching. |
| */ |
| _GF_CACHEABLE_ARRAY_TYPE_(uint8_t, CacheableBytes); |
| |
| _GF_CACHEABLE_ARRAY_TYPE_DEF_(double, CacheableDoubleArray); |
| /** |
| * An immutable wrapper for array of doubles that can serve as |
| * a distributable object for caching. |
| */ |
| _GF_CACHEABLE_ARRAY_TYPE_(double, CacheableDoubleArray); |
| |
| _GF_CACHEABLE_ARRAY_TYPE_DEF_(float, CacheableFloatArray); |
| /** |
| * An immutable wrapper for array of floats that can serve as |
| * a distributable object for caching. |
| */ |
| _GF_CACHEABLE_ARRAY_TYPE_(float, CacheableFloatArray); |
| |
| _GF_CACHEABLE_ARRAY_TYPE_DEF_(int16_t, CacheableInt16Array); |
| /** |
| * An immutable wrapper for array of 16-bit integers that can serve as |
| * a distributable object for caching. |
| */ |
| _GF_CACHEABLE_ARRAY_TYPE_(int16_t, CacheableInt16Array); |
| |
| _GF_CACHEABLE_ARRAY_TYPE_DEF_(int32_t, CacheableInt32Array); |
| /** |
| * An immutable wrapper for array of 32-bit integers that can serve as |
| * a distributable object for caching. |
| */ |
| _GF_CACHEABLE_ARRAY_TYPE_(int32_t, CacheableInt32Array); |
| |
| _GF_CACHEABLE_ARRAY_TYPE_DEF_(int64_t, CacheableInt64Array); |
| /** |
| * An immutable wrapper for array of 64-bit integers that can serve as |
| * a distributable object for caching. |
| */ |
| _GF_CACHEABLE_ARRAY_TYPE_(int64_t, CacheableInt64Array); |
| |
| _GF_CACHEABLE_ARRAY_TYPE_DEF_(CacheableStringPtr, CacheableStringArray); |
| /** |
| * An immutable wrapper for array of strings that can serve as |
| * a distributable object for caching. |
| */ |
| _GF_CACHEABLE_ARRAY_TYPE_(CacheableStringPtr, CacheableStringArray); |
| |
| // Instantiations for container types (Vector/HashMap/HashSet) Cacheables |
| |
| _GF_CACHEABLE_CONTAINER_TYPE_DEF_(_VectorOfCacheable, CacheableVector); |
| /** |
| * A mutable <code>Cacheable</code> vector wrapper that can serve as |
| * a distributable object for caching. |
| */ |
| _GF_CACHEABLE_CONTAINER_TYPE_(_VectorOfCacheable, CacheableVector); |
| |
| _GF_CACHEABLE_CONTAINER_TYPE_DEF_(_HashMapOfCacheable, CacheableHashMap); |
| /** |
| * A mutable <code>CacheableKey</code> to <code>Serializable</code> |
| * hash map that can serve as a distributable object for caching. |
| */ |
| _GF_CACHEABLE_CONTAINER_TYPE_(_HashMapOfCacheable, CacheableHashMap); |
| |
| _GF_CACHEABLE_CONTAINER_TYPE_DEF_(_HashSetOfCacheableKey, CacheableHashSet); |
| /** |
| * A mutable <code>CacheableKey</code> hash set wrapper that can serve as |
| * a distributable object for caching. |
| */ |
| _GF_CACHEABLE_CONTAINER_TYPE_(_HashSetOfCacheableKey, CacheableHashSet); |
| |
| _GF_CACHEABLE_CONTAINER_TYPE_DEF_(_VectorOfCacheable, CacheableArrayList); |
| /** |
| * A mutable <code>Cacheable</code> array list wrapper that can serve as |
| * a distributable object for caching. |
| */ |
| _GF_CACHEABLE_CONTAINER_TYPE_(_VectorOfCacheable, CacheableArrayList); |
| |
| // linketlist for JSON formattor issue |
| _GF_CACHEABLE_CONTAINER_TYPE_DEF_(_VectorOfCacheable, CacheableLinkedList); |
| /** |
| * A mutable <code>Cacheable</code> array list wrapper that can serve as |
| * a distributable object for caching. |
| */ |
| _GF_CACHEABLE_CONTAINER_TYPE_(_VectorOfCacheable, CacheableLinkedList); |
| |
| _GF_CACHEABLE_CONTAINER_TYPE_DEF_(_VectorOfCacheable, CacheableStack); |
| /** |
| * A mutable <code>Cacheable</code> stack wrapper that can serve as |
| * a distributable object for caching. |
| */ |
| _GF_CACHEABLE_CONTAINER_TYPE_(_VectorOfCacheable, CacheableStack); |
| |
| _GF_CACHEABLE_CONTAINER_TYPE_DEF_(_HashMapOfCacheable, CacheableHashTable); |
| /** |
| * A mutable <code>CacheableKey</code> to <code>Serializable</code> |
| * hash map that can serve as a distributable object for caching. |
| */ |
| _GF_CACHEABLE_CONTAINER_TYPE_(_HashMapOfCacheable, CacheableHashTable); |
| |
| _GF_CACHEABLE_CONTAINER_TYPE_DEF_(_HashMapOfCacheable, |
| CacheableIdentityHashMap); |
| /** |
| * A mutable <code>CacheableKey</code> to <code>Serializable</code> |
| * hash map that can serve as a distributable object for caching. This is |
| * provided for compability with java side, though is functionally identical |
| * to <code>CacheableHashMap</code> i.e. does not provide the semantics of |
| * java <code>IdentityHashMap</code>. |
| */ |
| _GF_CACHEABLE_CONTAINER_TYPE_(_HashMapOfCacheable, CacheableIdentityHashMap); |
| |
| _GF_CACHEABLE_CONTAINER_TYPE_DEF_(_HashSetOfCacheableKey, |
| CacheableLinkedHashSet); |
| /** |
| * A mutable <code>CacheableKey</code> hash set wrapper that can serve as |
| * a distributable object for caching. This is provided for compability |
| * with java side, though is functionally identical to |
| * <code>CacheableHashSet</code> i.e. does not provide the predictable |
| * iteration semantics of java <code>LinkedHashSet</code>. |
| */ |
| _GF_CACHEABLE_CONTAINER_TYPE_(_HashSetOfCacheableKey, CacheableLinkedHashSet); |
| } // namespace client |
| } // namespace geode |
| } // namespace apache |
| |
| #endif // GEODE_GFCPP_CACHEABLEBUILTINS_H_ |