| #pragma once |
| |
| #ifndef GEODE_GFCPP_PDXREADER_H_ |
| #define GEODE_GFCPP_PDXREADER_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 "CacheableBuiltins.hpp" |
| #include "PdxUnreadFields.hpp" |
| |
| namespace apache { |
| namespace geode { |
| namespace client { |
| |
| class PdxReader; |
| typedef SharedPtr<PdxReader> PdxReaderPtr; |
| |
| /** |
| * A PdxReader will be passed to PdxSerializable.fromData or |
| * during deserialization of a PDX. The domain class needs to deserialize field |
| * members |
| * using this abstract class. This class is implemented by Native Client. |
| * Each readXXX call will return the field's value. If the serialized |
| * PDX does not contain the named field then a default value will |
| * be returned. Standard Java defaults are used. For Objects this is |
| * null and for primitives it is 0 or 0.0. |
| * |
| * @note Implementations of PdxReader that are internal to the Native |
| * Client library may be returned to clients via instances of |
| * PdxReaderPtr. For those implementations, any |
| * non-<tt>NULL</tt>, non-empty strings returned from |
| * PdxReader::readString() or PdxReader::readWideString() must |
| * be freed with DataInput::freeUTFMemory(). Arrays returned |
| * from PdxReader::readStringArray() or |
| * PdxReader::readWideStringArray() must be freed with |
| * <tt>GF_SAFE_DELETE_ARRAY</tt> once their constituent strings |
| * have been freed with DataInput::freeUTFMemory(). |
| * @note Custom implementations of PdxReader are not subject |
| * to this restriction. |
| */ |
| class CPPCACHE_EXPORT PdxReader : public SharedBase { |
| public: |
| /** |
| * @brief constructors |
| */ |
| PdxReader() {} |
| |
| /** |
| * @brief destructor |
| */ |
| virtual ~PdxReader() {} |
| |
| /** |
| * Read a char value from the <code>PdxReader</code>. |
| * <p>C++ char is mapped to Java char</p> |
| * @param fieldName name of the field to read. |
| * @return value of type char. |
| * @throws IllegalStateException if PdxReader doesn't has the named field. |
| * |
| * @see PdxReader#hasField |
| */ |
| virtual char readChar(const char* fieldName) = 0; |
| |
| /** |
| * Read a wide char value from the <code>PdxReader</code>. |
| * <p>C++ wchar_t is mapped to Java char</p> |
| * @param fieldName name of the field to read. |
| * @return value of type wchar_t. |
| * @throws IllegalStateException if PdxReader doesn't has the named field. |
| * |
| * @see PdxReader#hasField |
| */ |
| virtual wchar_t readWideChar(const char* fieldName) = 0; |
| |
| /** |
| * Read a bool value from the <code>PdxReader</code>. |
| * <p>C++ bool is mapped to Java boolean</p> |
| * @param fieldName name of the field to read |
| * @return value of type bool. |
| * @throws IllegalStateException if PdxReader doesn't has the named field. |
| * |
| * @see PdxReader#hasField |
| */ |
| virtual bool readBoolean(const char* fieldName) = 0; |
| |
| /** |
| * Read a int8_t value from the <code>PdxReader</code>. |
| * <p>C++ int8_t is mapped to Java byte</p> |
| * @param fieldName name of the field to read |
| * @return value of type int8_t. |
| * @throws IllegalStateException if PdxReader doesn't has the named field. |
| * |
| * @see PdxReader#hasField |
| */ |
| virtual int8_t readByte(const char* fieldName) = 0; |
| |
| /** |
| * Read a int16_t value from the <code>PdxReader</code>. |
| * <p>C++ int16_t is mapped to Java short</p> |
| * @param fieldName name of the field to read |
| * @return value of type int16_t. |
| * @throws IllegalStateException if PdxReader doesn't has the named field. |
| * |
| * @see PdxReader#hasField |
| */ |
| virtual int16_t readShort(const char* fieldName) = 0; |
| |
| /** |
| * Read a int32_t value from the <code>PdxReader</code>. |
| * <p>C++ int32_t is mapped to Java int</p> |
| * @param fieldName name of the field to read |
| * @return value of type int32_t. |
| * @throws IllegalStateException if PdxReader doesn't has the named field. |
| * |
| * @see PdxReader#hasField |
| */ |
| virtual int32_t readInt(const char* fieldName) = 0; |
| |
| /** |
| * Read a int64_t value from the <code>PdxReader</code>. |
| * <p>C++ int64_t is mapped to Java long</p> |
| * @param fieldName name of the field to read |
| * @return value of type int64_t. |
| * @throws IllegalStateException if PdxReader doesn't has the named field. |
| * |
| * @see PdxReader#hasField |
| */ |
| virtual int64_t readLong(const char* fieldName) = 0; |
| |
| /** |
| * Read a float value from the <code>PdxReader</code>. |
| * <p>C++ float is mapped to Java float</p> |
| * @param fieldName name of the field to read |
| * @return value of type float. |
| * @throws IllegalStateException if PdxReader doesn't has the named field. |
| * |
| * @see PdxReader#hasField |
| */ |
| virtual float readFloat(const char* fieldName) = 0; |
| |
| /** |
| * Read a double value from the <code>PdxReader</code>. |
| * <p>C++ double is mapped to Java double</p> |
| * @param fieldName name of the field to read |
| * @return value of type double. |
| * @throws IllegalStateException if PdxReader doesn't has the named field. |
| * |
| * @see PdxReader#hasField |
| */ |
| virtual double readDouble(const char* fieldName) = 0; |
| |
| /** |
| * Read a char* value from the <code>PdxReader</code>. |
| * <p>C++ char* is mapped to Java String</p> |
| * @param fieldName name of the field to read |
| * @return value of type char*. Refer to the class description for |
| * how to free the return value. |
| * @throws IllegalStateException if PdxReader doesn't has the named field. |
| * |
| * @see PdxReader#hasField |
| */ |
| virtual char* readString(const char* fieldName) = 0; |
| |
| /** |
| * Read a wchar_t* value from the <code>PdxReader</code>. |
| * <p>C++ wchar_t* is mapped to Java String</p> |
| * @param fieldName name of the field to read |
| * @return value of type wchar_t*. Refer to the class description for |
| * how to free the return value. |
| * @throws IllegalStateException if PdxReader doesn't has the named field. |
| * |
| * @see PdxReader#hasField |
| */ |
| virtual wchar_t* readWideString(const char* fieldName) = 0; |
| |
| /** |
| * Read a CacheablePtr value from the <code>PdxReader</code>. |
| * <p>C++ CacheablePtr is mapped to Java object</p> |
| * @param fieldName name of the field to read |
| * @return value of type CacheablePtr. |
| * @throws IllegalStateException if PdxReader doesn't has the named field. |
| * |
| * @see PdxReader#hasField |
| */ |
| virtual CacheablePtr readObject(const char* fieldName) = 0; |
| |
| /** |
| * Read a char* value from the <code>PdxReader</code> and sets array length. |
| * <p>C++ char* is mapped to Java char[].</p> |
| * @param fieldName name of the field to read |
| * @param length length is set with number of wchar_t elements. |
| * @return value of type char*. |
| * @throws IllegalStateException if PdxReader doesn't has the named field. |
| * |
| * @see PdxReader#hasField |
| */ |
| virtual char* readCharArray(const char* fieldName, int32_t& length) = 0; |
| |
| /** |
| * Read a wchar_t* value from the <code>PdxReader</code> and sets array |
| * length. |
| * <p>C++ wchar_t* is mapped to Java char[].</p> |
| * @param fieldName name of the field to read |
| * @param length length is set with number of wchar_t elements. |
| * @return value of type wchar_t*. |
| * @throws IllegalStateException if PdxReader doesn't has the named field. |
| * |
| * @see PdxReader#hasField |
| */ |
| virtual wchar_t* readWideCharArray(const char* fieldName, |
| int32_t& length) = 0; |
| |
| /** |
| * Read a bool* value from the <code>PdxReader</code> and sets array length. |
| * <p>C++ bool* is mapped to Java boolean[]</p> |
| * @param fieldName name of the field to read |
| * @param length length is set with number of bool elements. |
| * @throws IllegalStateException if PdxReader doesn't has the named field. |
| * |
| * @see PdxReader#hasField |
| */ |
| virtual bool* readBooleanArray(const char* fieldName, int32_t& length) = 0; |
| |
| /** |
| * Read a int8_t* value from the <code>PdxReader</code> and sets array length. |
| * <p>C++ int8_t* is mapped to Java byte[].</p> |
| * @param fieldName name of the field to read |
| * @param length length is set with number of int8_t elements |
| * @return value of type int8_t*. |
| * @throws IllegalStateException if PdxReader doesn't has the named field. |
| * |
| * @see PdxReader#hasField |
| */ |
| virtual int8_t* readByteArray(const char* fieldName, int32_t& length) = 0; |
| |
| /** |
| * Read a int16_t* value from the <code>PdxReader</code> and sets array |
| * length. |
| * <p>C++ int16_t* is mapped to Java short[].</p> |
| * @param fieldName name of the field to read |
| * @param length length is set with number of int16_t elements |
| * @return value of type int16_t*. |
| * @throws IllegalStateException if PdxReader doesn't has the named field. |
| * |
| * @see PdxReader#hasField |
| */ |
| virtual int16_t* readShortArray(const char* fieldName, int32_t& length) = 0; |
| |
| /** |
| * Read a int32_t* value from the <code>PdxReader</code> and sets array |
| * length. |
| * <p>C++ int32_t* is mapped to Java int[].</p> |
| * @param fieldName name of the field to read |
| * @param length length is set with number of int32_t elements |
| * @return value of type int32_t*. |
| * @throws IllegalStateException if PdxReader doesn't has the named field. |
| * |
| * @see PdxReader#hasField |
| */ |
| virtual int32_t* readIntArray(const char* fieldName, int32_t& length) = 0; |
| |
| /** |
| * Read a int64_t* value from the <code>PdxReader</code> and sets array |
| * length. |
| * <p>C++ int64_t* is mapped to Java long[].</p> |
| * @param fieldName name of the field to read |
| * @param length length is set with number of int64_t elements |
| * @return value of type int64_t*. |
| * @throws IllegalStateException if PdxReader doesn't has the named field. |
| * |
| * @see PdxReader#hasField |
| */ |
| virtual int64_t* readLongArray(const char* fieldName, int32_t& length) = 0; |
| |
| /** |
| * Read a float* value from the <code>PdxReader</code> and sets array length. |
| * <p>C++ float* is mapped to Java float[].</p> |
| * @param fieldName name of the field to read |
| * @param length length is set with number of float elements |
| * @return value of type float*. |
| * @throws IllegalStateException if PdxReader doesn't has the named field. |
| * |
| * @see PdxReader#hasField |
| */ |
| virtual float* readFloatArray(const char* fieldName, int32_t& length) = 0; |
| |
| /** |
| * Read a double* value from the <code>PdxReader</code> and sets array length. |
| * <p>C++ double* is mapped to Java double[].</p> |
| * @param fieldName name of the field to read |
| * @param length length is set with number of double elements |
| * @return value of type double*. |
| * @throws IllegalStateException if PdxReader doesn't has the named field. |
| * |
| * @see PdxReader#hasField |
| */ |
| virtual double* readDoubleArray(const char* fieldName, int32_t& length) = 0; |
| |
| /** |
| * Read a char** value from the <code>PdxReader</code> and sets array length. |
| * <p>C++ char** is mapped to Java String[].</p> |
| * @param fieldName name of the field to read |
| * @param length length is set with number of char* elements |
| * @return value of type char**. Refer to the class description for |
| * how to free the return value. |
| * @throws IllegalStateException if PdxReader doesn't has the named field. |
| * |
| * @see PdxReader#hasField |
| */ |
| virtual char** readStringArray(const char* fieldName, int32_t& length) = 0; |
| |
| /** |
| * Read a wchar_t** value from the <code>PdxReader</code> and sets array |
| * length. |
| * <p>C++ wchar_t** is mapped to Java String[].</p> |
| * @param fieldName name of the field to read |
| * @param length length is set with number of wchar_t* elements |
| * @return value of type wchar_t**. Refer to the class description for |
| * how to free the return value. |
| * @throws IllegalStateException if PdxReader doesn't has the named field. |
| * |
| * @see PdxReader#hasField |
| */ |
| virtual wchar_t** readWideStringArray(const char* fieldName, |
| int32_t& length) = 0; |
| |
| /** |
| * Read a CacheableObjectArrayPtr value from the <code>PdxReader</code>. |
| * C++ CacheableObjectArrayPtr is mapped to Java Object[]. |
| * @param fieldName name of the field to read |
| * @return value of type CacheableObjectArrayPtr. |
| * @throws IllegalStateException if PdxReader doesn't has the named field. |
| * |
| * @see PdxReader#hasField |
| */ |
| virtual CacheableObjectArrayPtr readObjectArray(const char* fieldName) = 0; |
| |
| /** |
| * Read a int8_t** value from the <code>PdxReader</code> and sets |
| * ArrayOfByteArray's length and individual ByteArray's length. |
| * <p>C++ int8_t** is mapped to Java byte[][].</p> |
| * @param fieldName name of the field to read |
| * @param arrayLength length is set with number of int8_t* elements |
| * @param elementLength elementLength is set with the length value of |
| * individual byte arrays. |
| * @return value of type int8_t**. |
| * @throws IllegalStateException if PdxReader doesn't has the named field. |
| * |
| * @see PdxReader#hasField |
| */ |
| virtual int8_t** readArrayOfByteArrays(const char* fieldName, |
| int32_t& arrayLength, |
| int32_t** elementLength) = 0; |
| |
| /** |
| * Read a CacheableDatePtr value from the <code>PdxReader</code>. |
| * <p>C++ CacheableDatePtr is mapped to Java Date</p> |
| * @param fieldName name of the field to read |
| * @return value of type CacheableDatePtr. |
| * @throws IllegalStateException if PdxReader doesn't has the named field. |
| * |
| * @see PdxReader#hasField |
| */ |
| virtual CacheableDatePtr readDate(const char* fieldName) = 0; |
| |
| /** |
| * Checks if the named field exists and returns the result. |
| * This can be useful when writing code that handles more than one version of |
| * a PDX class. |
| * @param fieldname the name of the field to check |
| * @return <code>true</code> if the named field exists; otherwise |
| * <code>false</code> |
| */ |
| virtual bool hasField(const char* fieldName) = 0; |
| |
| /** |
| * Checks if the named field was {@link PdxWriter#markIdentityField}marked as |
| * an identity field. |
| * Note that if no fields have been marked then all the fields are used as |
| * identity fields even though |
| * this method will return <code>false</code> since none of them have been |
| * <em>marked</em>. |
| * @param fieldname the name of the field to check |
| * @return <code>true</code> if the named field exists and was marked as an |
| * identify field; otherwise <code>false</code> |
| */ |
| virtual bool isIdentityField(const char* fieldName) = 0; |
| |
| /** |
| * This method returns an object that represents all the unread fields which |
| * must be |
| * passed to {@link PdxWriter#writeUnreadFields} in the toData code. |
| * <P>Note that if {@link CacheFactory#setPdxIgnoreUnreadFields} |
| * is set to <code>true</code> then this method will always return an object |
| * that has no unread fields. |
| * |
| * @return an object that represents the unread fields. |
| */ |
| virtual PdxUnreadFieldsPtr readUnreadFields() = 0; |
| }; |
| } // namespace client |
| } // namespace geode |
| } // namespace apache |
| |
| #endif // GEODE_GFCPP_PDXREADER_H_ |