Oracle® Fusion Middleware C++ API Reference for Oracle Coherence
12c (12.2.1.4.0)

E90870-01

coherence/io/pof/PofBufferWriter.hpp

00001 /*
00002 * PofBufferWriter.hpp
00003 *
00004 * Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
00005 *
00006 * Oracle is a registered trademarks of Oracle Corporation and/or its
00007 * affiliates.
00008 *
00009 * This software is the confidential and proprietary information of Oracle
00010 * Corporation. You shall not disclose such confidential and proprietary
00011 * information and shall use it only in accordance with the terms of the
00012 * license agreement you entered into with Oracle.
00013 *
00014 * This notice may not be removed or altered.
00015 */
00016 #ifndef COH_POF_BUFFER_WRITER_HPP
00017 #define COH_POF_BUFFER_WRITER_HPP
00018 
00019 #include "coherence/lang.ns"
00020 
00021 #include "coherence/io/WriteBuffer.hpp"
00022 #include "coherence/io/pof/PofContext.hpp"
00023 #include "coherence/io/pof/PofHelper.hpp"
00024 #include "coherence/io/pof/PofWriter.hpp"
00025 #include "coherence/io/pof/RawDate.hpp"
00026 #include "coherence/io/pof/RawDateTime.hpp"
00027 #include "coherence/io/pof/RawDayTimeInterval.hpp"
00028 #include "coherence/io/pof/RawTime.hpp"
00029 #include "coherence/io/pof/RawTimeInterval.hpp"
00030 #include "coherence/io/pof/RawYearMonthInterval.hpp"
00031 #include "coherence/io/pof/ReferenceLibrary.hpp"
00032 #include "coherence/io/pof/WritingPofHandler.hpp"
00033 #include "coherence/util/Binary.hpp"
00034 #include "coherence/util/Collection.hpp"
00035 #include "coherence/util/LongArray.hpp"
00036 #include "coherence/util/Map.hpp"
00037 
00038 COH_OPEN_NAMESPACE3(coherence,io,pof)
00039 
00040 using coherence::io::WriteBuffer;
00041 using coherence::util::Binary;
00042 using coherence::util::Collection;
00043 using coherence::util::LongArray;
00044 using coherence::util::Map;
00045 
00046 
00047 /**
00048 * PofWriter implementation that writes POF-encoded data to a
00049 * WriteBuffer::BufferOutput.
00050 *
00051 * @author jh  2008.04.09
00052 */
00053 class COH_EXPORT PofBufferWriter
00054     : public class_spec<PofBufferWriter,
00055         extends<PofHelper>,
00056         implements<PofWriter> >
00057     {
00058     friend class factory<PofBufferWriter>;
00059 
00060     // ----- constructors ---------------------------------------------------
00061 
00062     protected:
00063         /**
00064         * Construct a new PofBufferWriter that will write a POF stream to the
00065         * passed BufferOutput object.
00066         *
00067         * @param hOut  the BufferOutput object to write to; must not be NULL
00068         * @param vCtx  the PofContext used by the new PofBufferWriter to
00069         *              serialize user types; must not be NULL
00070         */
00071         PofBufferWriter(WriteBuffer::BufferOutput::Handle hOut,
00072                 PofContext::View vCtx);
00073 
00074         /**
00075         * Construct a new PofBufferWriter that will write a POF stream using
00076         * the passed WritingPofHandler.
00077         *
00078         * @param hHandler  the WritingPofHandler used for writing; must not
00079         *                  be NULL
00080         * @param vCtx      the PofContext used by the new PofBufferWriter to
00081         *                  serialize user types; must not be NULL
00082         */
00083         PofBufferWriter(WritingPofHandler::Handle hHandler,
00084                 PofContext::View vCtx);
00085 
00086 
00087     // ----- PofWriter interface --------------------------------------------
00088 
00089     public:
00090         /**
00091         * {@inheritDoc}
00092         */
00093         virtual void writeBoolean(int32_t iProp, bool f);
00094 
00095         /**
00096         * {@inheritDoc}
00097         */
00098         virtual void writeOctet(int32_t iProp, octet_t b);
00099 
00100         /**
00101         * {@inheritDoc}
00102         */
00103         virtual void writeChar16(int32_t iProp, wchar16_t ch);
00104 
00105         /**
00106         * {@inheritDoc}
00107         */
00108         virtual void writeInt16(int32_t iProp, int16_t n);
00109 
00110         /**
00111         * {@inheritDoc}
00112         */
00113         virtual void writeInt32(int32_t iProp, int32_t n);
00114 
00115         /**
00116         * {@inheritDoc}
00117         */
00118         virtual void writeInt64(int32_t iProp, int64_t l);
00119 
00120         /**
00121         * {@inheritDoc}
00122         */
00123         virtual void writeFloat32(int32_t iProp, float32_t fl);
00124 
00125         /**
00126         * {@inheritDoc}
00127         */
00128         virtual void writeFloat64(int32_t iProp, float64_t dfl);
00129 
00130         /**
00131         * {@inheritDoc}
00132         */
00133         virtual void writeBooleanArray(int32_t iProp, Array<bool>::View vaf);
00134 
00135         /**
00136         * {@inheritDoc}
00137         */
00138         virtual void writeOctetArray(int32_t iProp, Array<octet_t>::View vab);
00139 
00140         /**
00141         * {@inheritDoc}
00142         */
00143         virtual void writeChar16Array(int32_t iProp, Array<wchar16_t>::View vach);
00144 
00145         /**
00146         * {@inheritDoc}
00147         */
00148         virtual void writeInt16Array(int32_t iProp, Array<int16_t>::View van);
00149 
00150         /**
00151         * {@inheritDoc}
00152         */
00153         virtual void writeInt32Array(int32_t iProp, Array<int32_t>::View van);
00154 
00155         /**
00156         * {@inheritDoc}
00157         */
00158         virtual void writeInt64Array(int32_t iProp, Array<int64_t>::View val);
00159 
00160         /**
00161         * {@inheritDoc}
00162         */
00163         virtual void writeFloat32Array(int32_t iProp, Array<float32_t>::View vafl);
00164 
00165         /**
00166         * {@inheritDoc}
00167         */
00168         virtual void writeFloat64Array(int32_t iProp, Array<float64_t>::View vadfl);
00169 
00170         /**
00171         * {@inheritDoc}
00172         */
00173         virtual void writeBinary(int32_t iProp, Binary::View vBin);
00174 
00175         /**
00176         * {@inheritDoc}
00177         */
00178         virtual void writeString(int32_t iProp, String::View vs);
00179 
00180         /**
00181         * {@inheritDoc}
00182         */
00183         virtual void writeRawDate(int32_t iProp, RawDate::View vDate);
00184 
00185         /**
00186         * {@inheritDoc}
00187         */
00188         virtual void writeRawDateTime(int32_t iProp, RawDateTime::View vdt);
00189 
00190         /**
00191         * {@inheritDoc}
00192         */
00193         virtual void writeRawDayTimeInterval(int32_t iProp,
00194                 RawDayTimeInterval::View vInterval);
00195 
00196         /**
00197         * {@inheritDoc}
00198         */
00199         virtual void writeRawTime(int32_t iProp, RawTime::View vTime);
00200 
00201         /**
00202         * {@inheritDoc}
00203         */
00204         virtual void writeRawTimeInterval(int32_t iProp,
00205                 RawTimeInterval::View vInterval);
00206 
00207         /**
00208         * {@inheritDoc}
00209         */
00210         virtual void writeRawYearMonthInterval(int32_t iProp,
00211                 RawYearMonthInterval::View vInterval);
00212 
00213         /**
00214         * {@inheritDoc}
00215         */
00216         virtual void writeObject(int32_t iProp, Object::View v);
00217 
00218         /**
00219         * {@inheritDoc}
00220         */
00221         virtual void writeObjectArray(int32_t iProp, ObjectArray::View va);
00222 
00223         /**
00224         * {@inheritDoc}
00225         */
00226         virtual void writeObjectArray(int32_t iProp, ObjectArray::View va,
00227                 Class::View vClass);
00228 
00229         /**
00230         * {@inheritDoc}
00231         */
00232         virtual void writeLongArray(int32_t iProp, LongArray::View vla);
00233 
00234         /**
00235         * {@inheritDoc}
00236         */
00237         virtual void writeLongArray(int32_t iProp, LongArray::View vla,
00238                 Class::View vClass);
00239 
00240         /**
00241         * {@inheritDoc}
00242         */
00243         virtual void writeCollection(int32_t iProp, Collection::View vCol);
00244 
00245         /**
00246         * {@inheritDoc}
00247         */
00248         virtual void writeCollection(int32_t iProp, Collection::View vCol,
00249                 Class::View vClass);
00250 
00251         /**
00252         * {@inheritDoc}
00253         */
00254         virtual void writeMap(int32_t iProp, Map::View vMap);
00255 
00256         /**
00257         * {@inheritDoc}
00258         */
00259         virtual void writeMap(int32_t iProp, Map::View vMap,
00260                 Class::View vClassKey);
00261 
00262         /**
00263         * {@inheritDoc}
00264         */
00265         virtual void writeMap(int32_t iProp, Map::View vMap,
00266                 Class::View vClassKey, Class::View vClassValue);
00267 
00268         /**
00269         * {@inheritDoc}
00270         */
00271         virtual PofContext::View getPofContext() const;
00272 
00273         /**
00274         * {@inheritDoc}
00275         */
00276         virtual void setPofContext(PofContext::View vCtx);
00277 
00278         /**
00279         * {@inheritDoc}
00280         */
00281         virtual int32_t getUserTypeId() const;
00282 
00283         /**
00284         * {@inheritDoc}
00285         */
00286         virtual int32_t getVersionId() const;
00287 
00288         /**
00289         * {@inheritDoc}
00290         */
00291         virtual void setVersionId(int32_t nVersionId);
00292 
00293         /**
00294         * {@inheritDoc}
00295         */
00296         virtual PofWriter::Handle createNestedPofWriter(int32_t iProp);
00297 
00298         /**
00299         * {@inheritDoc}
00300         */
00301         virtual PofWriter::Handle createNestedPofWriter(int32_t iProp, int32_t nTypeId);
00302 
00303         /**
00304         * {@inheritDoc}
00305         */
00306         virtual void writeRemainder(Binary::View vBinProps);
00307 
00308 
00309     // ----- internal methods -----------------------------------------------
00310 
00311     protected:
00312         /**
00313         * Write a property of user defined type to the POF stream.
00314         *
00315         * @param iProp  the property index
00316         * @param v      the <tt>user type</tt> property value to write
00317         *
00318         * @since Coherence 3.7.1
00319         */
00320         virtual void writeUserType(int32_t iProp, Object::View v);
00321 
00322        /**
00323         * If this writer is contextually within a user type, obtain the writer
00324         * which created this writer in order to write the user type.
00325         *
00326         * @return the containing writer
00327         */
00328         virtual PofBufferWriter::Handle getParentWriter();
00329 
00330         /**
00331         * If this writer is contextually within a user type, obtain the writer
00332         * which created this writer in order to write the user type.
00333         *
00334         * @return the containing writer
00335         */
00336         virtual PofBufferWriter::View getParentWriter() const;
00337 
00338         /**
00339         * Report that a POF property is about to be written to the POF
00340         * stream.
00341         *
00342         * This method call will be followed by one or more separate calls to
00343         * a "write" method and the property extent will then be terminated by
00344         * a call to {@link #endProperty}.
00345         *
00346         * @param iProp  the index of the property being written
00347         *
00348         * @throws IllegalArgumentException  if the property index is invalid,
00349         *         or is less than or equal to the index of the previous
00350         *         property written to the POF stream
00351         * @throws IOException  if an I/O error occurs
00352         */
00353         virtual void beginProperty(int32_t iProp);
00354 
00355         /**
00356         * Signifies the termination of the current POF property.
00357         *
00358         * @param iProp  the index of the current property
00359         */
00360         virtual void endProperty(int32_t iProp);
00361 
00362         /**
00363         * Assert that a class is equal to another class.
00364         *
00365         * @param vClass      the expected class; must not be NULL
00366         * @param vClassTest  the class to test for equality; must not be NULL
00367         *
00368         * @throws IllegalStateException if the second class is not equal to
00369         *         the first
00370         */
00371         static void assertEqual(Class::View vClass, Class::View vClassTest);
00372 
00373 
00374     // ----- accessors ------------------------------------------------------
00375 
00376     public:
00377         /**
00378         * Ensure that references (support for cyclic dependencies) are enabled.
00379         */
00380         virtual void enableReference();
00381 
00382         /**
00383         * Determine if reference support is enabled.
00384         *
00385         * @return true iff reference support is enabled
00386         *
00387         * @since Coherence 3.7.1
00388         */
00389         virtual bool isReferenceEnabled();
00390 
00391     protected:
00392         /**
00393         * Return the BufferOutput that this PofBufferWriter writes to.
00394         *
00395         * @return the BufferOutput
00396         */
00397         virtual WriteBuffer::BufferOutput::Handle getBufferOutput();
00398 
00399         /**
00400         * Return the BufferOutput that this PofBufferWriter writes to.
00401         *
00402         * @return the BufferOutput
00403         */
00404         virtual WriteBuffer::BufferOutput::View getBufferOutput() const;
00405 
00406         /**
00407         * Return the WritingPofHandler used internally by this
00408         * PofBufferWriter to write the POF stream.
00409         *
00410         * @return the PofHandler
00411         */
00412         virtual WritingPofHandler::Handle getPofHandler();
00413 
00414         /**
00415         * Return the WritingPofHandler used internally by this
00416         * PofBufferWriter to write the POF stream.
00417         *
00418         * @return the PofHandler
00419         */
00420         virtual WritingPofHandler::View getPofHandler() const;
00421 
00422         /**
00423         * Determine if the object to be written is either Evolvable or part of an
00424         * Evolvable object.
00425         *
00426         * @return true iff the object to be written is Evolvable
00427         *
00428         * @since Coherence 3.7.1
00429         */
00430         virtual bool isEvolvable();
00431 
00432         /**
00433         * Set the Evolvable flag to indicate if the object to be written is
00434         * Evolvable or part of an Evolvable object.
00435         *
00436         * @param fEvolvable  true iff the object to be written is Evolvable
00437         *
00438         * @since Coherence 3.7.1
00439         */
00440         virtual void setEvolvable(bool fEvolvable);
00441 
00442 
00443     // ----- data members ---------------------------------------------------
00444 
00445     protected:
00446         /**
00447         * The BufferOutput object that the PofBufferWriter writes to.
00448         */
00449         FinalHandle<WriteBuffer::BufferOutput> f_hOut;
00450 
00451         /**
00452         * The PofContext used by this PofBufferWriter to serialize user types.
00453         */
00454         FinalView<PofContext> f_vCtx;
00455 
00456         /**
00457         * Indicate if the object to be written is either Evolvable or part of an
00458         * Evolvable object.
00459         */
00460         bool m_fEvolvable;
00461 
00462         /**
00463         * The WritingPofHandler used to write a POF stream.
00464         */
00465         FinalHandle<WritingPofHandler> f_hHandler;
00466 
00467         /**
00468         * If references are used, then this is the ReferenceLibrary.
00469         */
00470         FinalHandle<ReferenceLibrary> f_hRefs;
00471 
00472 
00473     // ----- friends --------------------------------------------------------
00474 
00475     friend class UserTypeWriter;
00476     };
00477 
00478 COH_CLOSE_NAMESPACE3
00479 
00480 #endif // COH_POF_BUFFER_WRITER_HPP
Copyright © 2000, 2019, Oracle and/or its affiliates. All rights reserved.