Oracle Coherence for C++ API
Release 3.7.1.0

E22845-01

coherence/io/pof/PofBufferWriter.hpp

00001 /*
00002 * PofBufferWriter.hpp
00003 *
00004 * Copyright (c) 2000, 2011, 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, char16_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<char16_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 void writeRemainder(Binary::View vBinProps);
00302 
00303 
00304     // ----- internal methods -----------------------------------------------
00305 
00306     protected:
00307         /**
00308         * Write a property of user defined type to the POF stream.
00309         *
00310         * @param iProp  the property index
00311         * @param v      the <tt>user type</tt> property value to write
00312         *
00313         * @since Coherence 3.7.1
00314         */
00315         virtual void writeUserType(int32_t iProp, Object::View v);
00316 
00317        /**
00318         * If this writer is contextually within a user type, obtain the writer
00319         * which created this writer in order to write the user type.
00320         *
00321         * @return the containing writer
00322         */
00323         virtual PofBufferWriter::Handle getParentWriter();
00324 
00325         /**
00326         * If this writer is contextually within a user type, obtain the writer
00327         * which created this writer in order to write the user type.
00328         *
00329         * @return the containing writer
00330         */
00331         virtual PofBufferWriter::View getParentWriter() const;
00332 
00333         /**
00334         * Report that a POF property is about to be written to the POF
00335         * stream.
00336         *
00337         * This method call will be followed by one or more separate calls to
00338         * a "write" method and the property extent will then be terminated by
00339         * a call to {@link #endProperty}.
00340         *
00341         * @param iProp  the index of the property being written
00342         *
00343         * @throws IllegalArgumentException  if the property index is invalid,
00344         *         or is less than or equal to the index of the previous
00345         *         property written to the POF stream
00346         * @throws IOException  if an I/O error occurs
00347         */
00348         virtual void beginProperty(int32_t iProp);
00349 
00350         /**
00351         * Signifies the termination of the current POF property.
00352         *
00353         * @param iProp  the index of the current property
00354         */
00355         virtual void endProperty(int32_t iProp);
00356 
00357         /**
00358         * Assert that a class is equal to another class.
00359         *
00360         * @param vClass      the expected class; must not be NULL
00361         * @param vClassTest  the class to test for equality; must not be NULL
00362         *
00363         * @throws IllegalStateException if the second class is not equal to
00364         *         the first
00365         */
00366         static void assertEqual(Class::View vClass, Class::View vClassTest);
00367 
00368 
00369     // ----- accessors ------------------------------------------------------
00370 
00371     public:
00372         /**
00373         * Ensure that references (support for cyclic dependencies) are enabled.
00374         */
00375         virtual void enableReference();
00376 
00377         /**
00378         * Determine if reference support is enabled.
00379         *
00380         * @return true iff reference support is enabled
00381         *
00382         * @since Coherence 3.7.1
00383         */
00384         virtual bool isReferenceEnabled();
00385 
00386     protected:
00387         /**
00388         * Return the BufferOutput that this PofBufferWriter writes to.
00389         *
00390         * @return the BufferOutput
00391         */
00392         virtual WriteBuffer::BufferOutput::Handle getBufferOutput();
00393 
00394         /**
00395         * Return the BufferOutput that this PofBufferWriter writes to.
00396         *
00397         * @return the BufferOutput
00398         */
00399         virtual WriteBuffer::BufferOutput::View getBufferOutput() const;
00400 
00401         /**
00402         * Return the WritingPofHandler used internally by this
00403         * PofBufferWriter to write the POF stream.
00404         *
00405         * @return the PofHandler
00406         */
00407         virtual WritingPofHandler::Handle getPofHandler();
00408 
00409         /**
00410         * Return the WritingPofHandler used internally by this
00411         * PofBufferWriter to write the POF stream.
00412         *
00413         * @return the PofHandler
00414         */
00415         virtual WritingPofHandler::View getPofHandler() const;
00416 
00417         /**
00418         * Determine if the object to be written is either Evolvable or part of an
00419         * Evolvable object.
00420         *
00421         * @return true iff the object to be written is Evolvable
00422         *
00423         * @since Coherence 3.7.1
00424         */
00425         virtual bool isEvolvable();
00426 
00427         /**
00428         * Set the Evolvable flag to indicate if the object to be written is
00429         * Evolvable or part of an Evolvable object.
00430         *
00431         * @param fEvolvable  true iff the object to be written is Evolvable
00432         *
00433         * @since Coherence 3.7.1
00434         */
00435         virtual void setEvolvable(bool fEvolvable);
00436 
00437 
00438     // ----- data members ---------------------------------------------------
00439 
00440     protected:
00441         /**
00442         * The BufferOutput object that the PofBufferWriter writes to.
00443         */
00444         FinalHandle<WriteBuffer::BufferOutput> m_hOut;
00445 
00446         /**
00447         * The PofContext used by this PofBufferWriter to serialize user types.
00448         */
00449         MemberView<PofContext> m_vCtx;
00450 
00451         /**
00452         * Indicate if the object to be written is either Evolvable or part of an
00453         * Evolvable object.
00454         */
00455         bool m_fEvolvable;
00456 
00457         /**
00458         * The WritingPofHandler used to write a POF stream.
00459         */
00460         FinalHandle<WritingPofHandler> m_hHandler;
00461 
00462         /**
00463         * If references are used, then this is the ReferenceLibrary.
00464         */
00465         MemberHandle<ReferenceLibrary> m_hRefs;
00466 
00467 
00468     // ----- friends --------------------------------------------------------
00469 
00470     friend class UserTypeWriter;
00471     };
00472 
00473 COH_CLOSE_NAMESPACE3
00474 
00475 #endif // COH_POF_BUFFER_WRITER_HPP
Copyright © 2000, 2011, Oracle and/or its affiliates. All rights reserved.