blob: d576c0ea19cd950504d91f22517183e4f8f85973 [file] [log] [blame]
#pragma once
#ifndef GEODE_GFCPP_WRITABLEPDXINSTANCE_H_
#define GEODE_GFCPP_WRITABLEPDXINSTANCE_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.
*/
#include "SharedPtr.hpp"
#include "Cacheable.hpp"
#include "PdxInstance.hpp"
namespace apache {
namespace geode {
namespace client {
/**
* WritablePdxInstance is a {@link PdxInstance} that also supports field
* modification
* using the {@link #setField} method.
* To get a WritablePdxInstance call {@link PdxInstance#createWriter}.
*/
class CPPCACHE_EXPORT WritablePdxInstance : public PdxInstance {
/**
* @brief public methods
*/
public:
/**
* @brief destructor
*/
virtual ~WritablePdxInstance() {}
/**
* Set the existing named field to the given value.
* The setField method has copy-on-write semantics.
* So for the modifications to be stored in the cache the WritablePdxInstance
* must be put into a region after setField has been called one or more times.
* CacheablePtr type is corresponding to java object type.
* @param fieldName
* name of the field whose value will be set
* @param value
* value that will be set to the field of type CacheablePtr
* @throws IllegalStateException if the named field does not exist
* or if the type of the value is not compatible with the field.
*/
virtual void setField(const char* fieldName, CacheablePtr value) = 0;
/**
* Set the existing named field to the given value.
* The setField method has copy-on-write semantics.
* So for the modifications to be stored in the cache the WritablePdxInstance
* must be put into a region after setField has been called one or more times.
* bool type is corresponding to java boolean type.
* @param fieldName
* name of the field whose value will be set
* @param value
* value that will be set to the field of type bool
* @throws IllegalStateException if the named field does not exist
* or if the type of the value is not compatible with the field.
*/
virtual void setField(const char* fieldName, bool value) = 0;
/**
* Set the existing named field to the given value.
* The setField method has copy-on-write semantics.
* So for the modifications to be stored in the cache the WritablePdxInstance
* must be put into a region after setField has been called one or more times.
* signed char type is corresponding to java byte type.
* For C++ on Windows and Linux, signed char type is corresponding to int8_t
* type.
* However C++ users on Solaris should always use this api after casting int8_t
* to signed char.
* @param fieldName
* name of the field whose value will be set
* @param value
* value that will be set to the field of type signed char
* @throws IllegalStateException if the named field does not exist
* or if the type of the value is not compatible with the field.
*/
virtual void setField(const char* fieldName, signed char value) = 0;
/**
* Set the existing named field to the given value.
* The setField method has copy-on-write semantics.
* So for the modifications to be stored in the cache the WritablePdxInstance
* must be put into a region after setField has been called one or more times.
* unsigned char type is corresponding to java byte type.
* For C++ on Windows and Linux, unsigned char type is corresponding to int8_t
* type.
* However C++ users on Solaris should always use this api after casting int8_t
* to unsigned char.
* @param fieldName
* name of the field whose value will be set
* @param value
* value that will be set to the field of type unsigned char
* @throws IllegalStateException if the named field does not exist
* or if the type of the value is not compatible with the field.
*/
virtual void setField(const char* fieldName, unsigned char value) = 0;
/**
* Set the existing named field to the given value.
* The setField method has copy-on-write semantics.
* So for the modifications to be stored in the cache the WritablePdxInstance
* must be put into a region after setField has been called one or more times.
* int16_t type is corresponding to java short type.
* @param fieldName
* name of the field whose value will be set
* @param value
* value that will be set to the field of type int16_t
* @throws IllegalStateException if the named field does not exist
* or if the type of the value is not compatible with the field.
*/
virtual void setField(const char* fieldName, int16_t value) = 0;
/**
* Set the existing named field to the given value.
* The setField method has copy-on-write semantics.
* So for the modifications to be stored in the cache the WritablePdxInstance
* must be put into a region after setField has been called one or more times.
* int32_t type is corresponding to java int type.
* @param fieldName
* name of the field whose value will be set
* @param value
* value that will be set to the field of type int32_t
* @throws IllegalStateException if the named field does not exist
* or if the type of the value is not compatible with the field.
*/
virtual void setField(const char* fieldName, int32_t value) = 0;
/**
* Set the existing named field to the given value.
* The setField method has copy-on-write semantics.
* So for the modifications to be stored in the cache the WritablePdxInstance
* must be put into a region after setField has been called one or more times.
* int64_t type is corresponding to java long type.
* @param fieldName
* name of the field whose value will be set
* @param value
* value that will be set to the field of type int64_t
* @throws IllegalStateException if the named field does not exist
* or if the type of the value is not compatible with the field.
*/
virtual void setField(const char* fieldName, int64_t value) = 0;
/**
* Set the existing named field to the given value.
* The setField method has copy-on-write semantics.
* So for the modifications to be stored in the cache the WritablePdxInstance
* must be put into a region after setField has been called one or more times.
* float type is corresponding to java float type.
* @param fieldName
* name of the field whose value will be set
* @param value
* value that will be set to the field of type float
* @throws IllegalStateException if the named field does not exist
* or if the type of the value is not compatible with the field.
*/
virtual void setField(const char* fieldName, float value) = 0;
/**
* Set the existing named field to the given value.
* The setField method has copy-on-write semantics.
* So for the modifications to be stored in the cache the WritablePdxInstance
* must be put into a region after setField has been called one or more times.
* double type is corresponding to java double type.
* @param fieldName
* name of the field whose value will be set
* @param value
* value that will be set to the field of type double
* @throws IllegalStateException if the named field does not exist
* or if the type of the value is not compatible with the field.
*/
virtual void setField(const char* fieldName, double value) = 0;
/**
* Set the existing named field to the given value.
* The setField method has copy-on-write semantics.
* So for the modifications to be stored in the cache the WritablePdxInstance
* must be put into a region after setField has been called one or more times.
* wchar_t type is corresponding to java char type.
* @param fieldName
* name of the field whose value will be set
* @param value
* value that will be set to the field of type wchar_t
* @throws IllegalStateException if the named field does not exist
* or if the type of the value is not compatible with the field.
*/
virtual void setField(const char* fieldName, wchar_t value) = 0;
/**
* Set the existing named field to the given value.
* The setField method has copy-on-write semantics.
* So for the modifications to be stored in the cache the WritablePdxInstance
* must be put into a region after setField has been called one or more times.
* char type is corresponding to java char type.
* @param fieldName
* name of the field whose value will be set
* @param value
* value that will be set to the field of type char
* @throws IllegalStateException if the named field does not exist
* or if the type of the value is not compatible with the field.
*/
virtual void setField(const char* fieldName, char value) = 0;
/**
* Set the existing named field to the given value.
* The setField method has copy-on-write semantics.
* So for the modifications to be stored in the cache the WritablePdxInstance
* must be put into a region after setField has been called one or more times.
* CacheableDatePtr type is corresponding to java Java.util.date type.
* @param fieldName
* name of the field whose value will be set
* @param value
* value that will be set to the field of type CacheableDatePtr
* @throws IllegalStateException if the named field does not exist
* or if the type of the value is not compatible with the field.
*/
virtual void setField(const char* fieldName, CacheableDatePtr value) = 0;
/**
* Set the existing named field to the given value.
* The setField method has copy-on-write semantics.
* So for the modifications to be stored in the cache the WritablePdxInstance
* must be put into a region after setField has been called one or more times.
* bool* type is corresponding to java boolean[] type.
* @param fieldName
* name of the field whose value will be set
* @param value
* value that will be set to the field of type bool array
* @param length
* The number of elements in bool array type.
* @throws IllegalStateException if the named field does not exist
* or if the type of the value is not compatible with the field.
*/
virtual void setField(const char* fieldName, bool* value, int32_t length) = 0;
/**
* Set the existing named field to the given value.
* The setField method has copy-on-write semantics.
* So for the modifications to be stored in the cache the WritablePdxInstance
* must be put into a region after setField has been called one or more times.
* signed char* type is corresponding to java byte[] type.
* For C++ on Windows and Linux, signed char* type is corresponding to int8_t*
* type.
* However C++ users on Solaris should always use this api after casting
* int8_t* to signed char*.
* @param fieldName
* name of the field whose value will be set
* @param value
* value that will be set to the field of type signed char array
* @param length
* The number of elements in signed char array type.
* @throws IllegalStateException if the named field does not exist
* or if the type of the value is not compatible with the field.
*/
virtual void setField(const char* fieldName, signed char* value,
int32_t length) = 0;
/**
* Set the existing named field to the given value.
* The setField method has copy-on-write semantics.
* So for the modifications to be stored in the cache the WritablePdxInstance
* must be put into a region after setField has been called one or more times.
* unsigned char* type is corresponding to java byte[] type.
* For C++ on Windows and Linux, unsigned char* type is corresponding to
* int8_t* type.
* However C++ users on Solaris should always use this api after casting
* int8_t* to unsigned char*.
* @param fieldName
* name of the field whose value will be set
* @param value
* value that will be set to the field of type unsigned char array
* @param length
* The number of elements in unsigned char array type.
* @throws IllegalStateException if the named field does not exist
* or if the type of the value is not compatible with the field.
*/
virtual void setField(const char* fieldName, unsigned char* value,
int32_t length) = 0;
/**
* Set the existing named field to the given value.
* The setField method has copy-on-write semantics.
* So for the modifications to be stored in the cache the WritablePdxInstance
* must be put into a region after setField has been called one or more times.
* int16_t* type is corresponding to java short[] type.
* @param fieldName
* name of the field whose value will be set
* @param value
* value that will be set to the field of type int16_t array
* @param length
* The number of elements in int16_t array type.
* @throws IllegalStateException if the named field does not exist
* or if the type of the value is not compatible with the field.
*/
virtual void setField(const char* fieldName, int16_t* value,
int32_t length) = 0;
/**
* Set the existing named field to the given value.
* The setField method has copy-on-write semantics.
* So for the modifications to be stored in the cache the WritablePdxInstance
* must be put into a region after setField has been called one or more times.
* int32_t* type is corresponding to java int[] type.
* @param fieldName
* name of the field whose value will be set
* @param value
* value that will be set to the field of type int32_t array
* @param length
* The number of elements in int32_t array type.
* @throws IllegalStateException if the named field does not exist
* or if the type of the value is not compatible with the field.
*/
virtual void setField(const char* fieldName, int32_t* value,
int32_t length) = 0;
/**
* Set the existing named field to the given value.
* The setField method has copy-on-write semantics.
* So for the modifications to be stored in the cache the WritablePdxInstance
* must be put into a region after setField has been called one or more times.
* int64_t* type is corresponding to java long[] type.
* @param fieldName
* name of the field whose value will be set
* @param value
* value that will be set to the field of type int64_t array
* @param length
* The number of elements in int64_t array type.
* @throws IllegalStateException if the named field does not exist
* or if the type of the value is not compatible with the field.
*/
virtual void setField(const char* fieldName, int64_t* value,
int32_t length) = 0;
/**
* Set the existing named field to the given value.
* The setField method has copy-on-write semantics.
* So for the modifications to be stored in the cache the WritablePdxInstance
* must be put into a region after setField has been called one or more times.
* float* type is corresponding to java float[] type.
* @param fieldName
* name of the field whose value will be set
* @param value
* value that will be set to the field of type float array
* @param length
* The number of elements in float array type.
* @throws IllegalStateException if the named field does not exist
* or if the type of the value is not compatible with the field.
*/
virtual void setField(const char* fieldName, float* value,
int32_t length) = 0;
/**
* Set the existing named field to the given value.
* The setField method has copy-on-write semantics.
* So for the modifications to be stored in the cache the WritablePdxInstance
* must be put into a region after setField has been called one or more times.
* double* type is corresponding to java double[] type.
* @param fieldName
* name of the field whose value will be set
* @param value
* value that will be set to the field of type double array
* @param length
* The number of elements in double array type.
* @throws IllegalStateException if the named field does not exist
* or if the type of the value is not compatible with the field.
*/
virtual void setField(const char* fieldName, double* value,
int32_t length) = 0;
/**
* Set the existing named field to the given value.
* The setField method has copy-on-write semantics.
* So for the modifications to be stored in the cache the WritablePdxInstance
* must be put into a region after setField has been called one or more times.
* wchar_t* type is corresponding to java String type.
* @param fieldName
* name of the field whose value will be set
* @param value
* value that will be set to the field of type wchar_t*
* @throws IllegalStateException if the named field does not exist
* or if the type of the value is not compatible with the field.
*/
virtual void setField(const char* fieldName, const wchar_t* value) = 0;
/**
* Set the existing named field to the given value.
* The setField method has copy-on-write semantics.
* So for the modifications to be stored in the cache the WritablePdxInstance
* must be put into a region after setField has been called one or more times.
* char* type is corresponding to java String type.
* @param fieldName
* name of the field whose value will be set
* @param value
* value that will be set to the field of type char*
* @throws IllegalStateException if the named field does not exist
* or if the type of the value is not compatible with the field.
*/
virtual void setField(const char* fieldName, const char* value) = 0;
/**
* Set the existing named field to the given value.
* The setField method has copy-on-write semantics.
* So for the modifications to be stored in the cache the WritablePdxInstance
* must be put into a region after setField has been called one or more times.
* wchar_t* type is corresponding to java char[] type.
* @param fieldName
* name of the field whose value will be set
* @param value
* value that will be set to the field of type wchar_t array
* @param length
* The number of elements in wchar_t array type.
* @throws IllegalStateException if the named field does not exist
* or if the type of the value is not compatible with the field.
*/
virtual void setField(const char* fieldName, wchar_t* value,
int32_t length) = 0;
/**
* Set the existing named field to the given value.
* The setField method has copy-on-write semantics.
* So for the modifications to be stored in the cache the WritablePdxInstance
* must be put into a region after setField has been called one or more times.
* char* type is corresponding to java char[] type.
* @param fieldName
* name of the field whose value will be set
* @param value
* value that will be set to the field of type char array
* @param length
* The number of elements in char array type.
* @throws IllegalStateException if the named field does not exist
* or if the type of the value is not compatible with the field.
*/
virtual void setField(const char* fieldName, char* value, int32_t length) = 0;
/**
* Set the existing named field to the given value.
* The setField method has copy-on-write semantics.
* So for the modifications to be stored in the cache the WritablePdxInstance
* must be put into a region after setField has been called one or more times.
* wchar_t** type is corresponding to java String[] type.
* @param fieldName
* name of the field whose value will be set
* @param value
* value that will be set to the field of type wchar_t* array
* @param length
* The number of elements in WCString array type.
* @throws IllegalStateException if the named field does not exist
* or if the type of the value is not compatible with the field.
*/
virtual void setField(const char* fieldName, wchar_t** value,
int32_t length) = 0;
/**
* Set the existing named field to the given value.
* The setField method has copy-on-write semantics.
* So for the modifications to be stored in the cache the WritablePdxInstance
* must be put into a region after setField has been called one or more times.
* char** type is corresponding to java String[] type.
* @param fieldName
* name of the field whose value will be set
* @param value
* value that will be set to the field of type char* array
* @param length
* The number of elements in CString array type.
* @throws IllegalStateException if the named field does not exist
* or if the type of the value is not compatible with the field.
*/
virtual void setField(const char* fieldName, char** value,
int32_t length) = 0;
/**
* Set the existing named field to the given value.
* The setField method has copy-on-write semantics.
* So for the modifications to be stored in the cache the WritablePdxInstance
* must be put into a region after setField has been called one or more times.
* int8_t** type is corresponding to java byte[][] type.
* @param fieldName
* name of the field whose value will be set
* @param value
* value that will be set to the field of type array of byte arrays
* @param arrayLength
* The number of byte arrays.
* @param elementLength
* The lengths of individual byte arrays.
* @throws IllegalStateException if the named field does not exist
* or if the type of the value is not compatible with the field.
*/
virtual void setField(const char* fieldName, int8_t** value,
int32_t arrayLength, int32_t* elementLength) = 0;
/**
* Set the existing named field to the given value.
* The setField method has copy-on-write semantics.
* So for the modifications to be stored in the cache the WritablePdxInstance
* must be put into a region after setField has been called one or more times.
* CacheableObjectArrayPtr type is corresponding to java Object[] type.
* @param fieldName
* name of the field whose value will be set
* @param value
* value that will be set to the field of type CacheableObjectArrayPtr
* @throws IllegalStateException if the named field does not exist
* or if the type of the value is not compatible with the field.
*/
virtual void setField(const char* fieldName,
CacheableObjectArrayPtr value) = 0;
protected:
/**
* @brief constructors
*/
WritablePdxInstance(){};
private:
// never implemented.
WritablePdxInstance(const WritablePdxInstance& other);
void operator=(const WritablePdxInstance& other);
};
} // namespace client
} // namespace geode
} // namespace apache
#endif // GEODE_GFCPP_WRITABLEPDXINSTANCE_H_