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

E80355-01

coherence/io/AbstractWriteBuffer.hpp

00001 /*
00002 * AbstractWriteBuffer.hpp
00003 *
00004 * Copyright (c) 2000, 2017, 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_ABSTRACT_WRITE_BUFFER_HPP
00017 #define COH_ABSTRACT_WRITE_BUFFER_HPP
00018 
00019 #include "coherence/lang.ns"
00020 
00021 #include "coherence/io/ReadBuffer.hpp"
00022 #include "coherence/io/WriteBuffer.hpp"
00023 
00024 // ----- forward declarations -----------------------------------------------
00025 
00026 COH_OPEN_NAMESPACE2(coherence,util)
00027 
00028 class Binary;
00029 
00030 COH_CLOSE_NAMESPACE2
00031 
00032 COH_OPEN_NAMESPACE2(coherence,io)
00033 
00034 
00035 /**
00036 * The AbstractWriteBuffer is a partial implementation of the WriteBuffer
00037 * interface intended to be used as a base class for easily creating concrete
00038 * WriteBuffer implementations.
00039 * <p>
00040 * This implementation is explicitly not thread-safe.
00041 *
00042 * @author jh  2008.01.08
00043 */
00044 class COH_EXPORT AbstractWriteBuffer
00045     : public abstract_spec<AbstractWriteBuffer,
00046         extends<Object>,
00047         implements<WriteBuffer> >
00048     {
00049     // ----- handle definitions (needed for nested classes) -----------------
00050 
00051     public:
00052         typedef this_spec::Handle Handle;
00053         typedef this_spec::View   View;
00054         typedef this_spec::Holder Holder;
00055 
00056         /**
00057         * Binary View definition.
00058         */
00059         typedef TypedHandle<const coherence::util::Binary> BinaryView;
00060 
00061 
00062     // ----- constructors ---------------------------------------------------
00063 
00064     protected:
00065         /**
00066         * @internal
00067         */
00068         AbstractWriteBuffer();
00069 
00070         /**
00071         * @internal
00072         */
00073         AbstractWriteBuffer(const AbstractWriteBuffer& that);
00074 
00075 
00076     // ----- WriteBuffer interface ------------------------------------------
00077 
00078     public:
00079         /**
00080         * {@inheritDoc}
00081         */
00082         virtual size32_t getMaximumCapacity() const;
00083 
00084         /**
00085         * {@inheritDoc}
00086         */
00087         virtual void write(size32_t ofDest, Array<octet_t>::View vabSrc);
00088 
00089         /**
00090         * {@inheritDoc}
00091         */
00092         virtual void write(size32_t ofDest, ReadBuffer::View vBufSrc);
00093 
00094         /**
00095         * {@inheritDoc}
00096         */
00097         virtual void write(size32_t ofDest, ReadBuffer::View vBufSrc,
00098                 size32_t ofSrc, size32_t cbSrc);
00099 
00100         /**
00101         * {@inheritDoc}
00102         */
00103         using WriteBuffer::write;
00104 
00105         /**
00106         * {@inheritDoc}
00107         */
00108         virtual void retain(size32_t of);
00109 
00110         /**
00111         * {@inheritDoc}
00112         */
00113         using WriteBuffer::retain;
00114 
00115         /**
00116         * {@inheritDoc}
00117         */
00118         virtual void clear();
00119 
00120         /**
00121         * {@inheritDoc}
00122         */
00123         virtual WriteBuffer::Handle getWriteBuffer(size32_t of);
00124 
00125         /**
00126         * {@inheritDoc}
00127         */
00128         virtual WriteBuffer::Handle getWriteBuffer(size32_t of, size32_t cb);
00129 
00130         /**
00131         * {@inheritDoc}
00132         */
00133         virtual ReadBuffer::View getReadBuffer() const;
00134 
00135         /**
00136         * {@inheritDoc}
00137         */
00138         virtual Array<octet_t>::View toOctetArray() const;
00139 
00140         /**
00141         * {@inheritDoc}
00142         */
00143         virtual BinaryView toBinary() const;
00144 
00145 
00146     // ----- internal methods -----------------------------------------------
00147 
00148     protected:
00149         /**
00150         * Factory method: Instantiate a BufferOutput object to write data to
00151         * the WriteBuffer.
00152         *
00153         * @return a new BufferOutput writing to this ReadBuffer
00154         */
00155         virtual BufferOutput::Handle instantiateBufferOutput();
00156 
00157         /**
00158         * Get a small buffer for formating data.
00159         *
00160         * @return a small octet array
00161         */
00162         virtual Array<octet_t>::Handle tmpbuf();
00163 
00164         /**
00165         * Get a buffer for formating data.
00166         *
00167         * @param cb  the minimum size for the buffer
00168         *
00169         * @return an octet array that is at least <tt>cb</tt> octets long
00170         */
00171         virtual Array<octet_t>::Handle tmpbuf(size32_t cb);
00172 
00173 
00174     // ----- AbstractBufferOutput inner class -------------------------------
00175 
00176     public:
00177         /**
00178         * AbstractBufferOutput is a concrete implementation of BufferOutput
00179         * for the non-concrete AbstractWriteBuffer implementation.
00180         *
00181         * @author jh  2008.01.08
00182         */
00183         class COH_EXPORT AbstractBufferOutput
00184             : public class_spec<AbstractBufferOutput,
00185                 extends<Object>,
00186                 implements<BufferOutput> >
00187             {
00188             friend class factory<AbstractBufferOutput>;
00189 
00190             // ----- constructors ---------------------------------------
00191 
00192             protected:
00193                 /**
00194                 * Create a new AbstractBufferOutput instance that delegates
00195                 * to the given AbstractWriteBuffer.
00196                 *
00197                 * @param hBuf  the delegate AbstractWriteBuffer
00198                 */
00199                 AbstractBufferOutput(AbstractWriteBuffer::Handle hBuf);
00200 
00201             // ----- BufferOutput interface -----------------------------
00202 
00203             public:
00204                 /**
00205                 * {@inheritDoc}
00206                 */
00207                 virtual WriteBuffer::Handle getBuffer();
00208 
00209                 /**
00210                 * {@inheritDoc}
00211                 */
00212                 virtual WriteBuffer::View getBuffer() const;
00213 
00214                 /**
00215                 * {@inheritDoc}
00216                 */
00217                 virtual size32_t getOffset() const;
00218 
00219                 /**
00220                 * {@inheritDoc}
00221                 */
00222                 virtual void setOffset(size32_t of);
00223 
00224                 /**
00225                 * {@inheritDoc}
00226                 */
00227                 virtual void write(octet_t b);
00228 
00229                 /**
00230                 * {@inheritDoc}
00231                 */
00232                 virtual void write(Array<octet_t>::View vab);
00233 
00234                 /**
00235                 * {@inheritDoc}
00236                 */
00237                 virtual void write(Array<octet_t>::View vab, size32_t of,
00238                         size32_t cb);
00239 
00240                 /**
00241                 * {@inheritDoc}
00242                 */
00243                 virtual void writeBuffer(ReadBuffer::View vBuf);
00244 
00245                 /**
00246                 * {@inheritDoc}
00247                 */
00248                 virtual void writeBuffer(ReadBuffer::View vBuf, size32_t of,
00249                         size32_t cb);
00250 
00251                 /**
00252                 * {@inheritDoc}
00253                 */
00254                 virtual void writeBoolean(bool f);
00255 
00256                 /**
00257                 * {@inheritDoc}
00258                 */
00259                 virtual void writeChar16(wchar16_t ch);
00260 
00261                 /**
00262                 * {@inheritDoc}
00263                 */
00264                 virtual void writeString(String::View vs);
00265 
00266                 /**
00267                 * {@inheritDoc}
00268                 */
00269                 virtual void writeInt16(int16_t n);
00270 
00271                 /**
00272                 * {@inheritDoc}
00273                 */
00274                 virtual void writeInt32(int32_t n);
00275 
00276                 /**
00277                 * {@inheritDoc}
00278                 */
00279                 virtual void writeInt64(int64_t n);
00280 
00281                 /**
00282                 * {@inheritDoc}
00283                 */
00284                 virtual void writeFloat32(float32_t fl);
00285 
00286                 /**
00287                 * {@inheritDoc}
00288                 */
00289                 virtual void writeFloat64(float64_t dfl);
00290 
00291             // ----- data members ---------------------------------------
00292 
00293             protected:
00294                 /**
00295                 * The delegate AbstractWriteBuffer.
00296                 */
00297                 FinalHandle<AbstractWriteBuffer> f_hBuf;
00298 
00299                 /**
00300                 * Current write offset within the AbstractWriteBuffer.
00301                 */
00302                 size32_t m_ofWrite;
00303             };
00304 
00305         /**
00306         * {@inheritDoc}
00307         */
00308         virtual BufferOutput::Handle getBufferOutput(size32_t of = 0);
00309 
00310         /**
00311         * {@inheritDoc}
00312         */
00313         virtual BufferOutput::Handle getAppendingBufferOutput();
00314 
00315 
00316     // ----- data members ---------------------------------------------------
00317 
00318     protected:
00319         /**
00320         * A temp buffer to use for building the data to write.
00321         */
00322         MemberHandle<Array<octet_t> > m_habBuf;
00323     };
00324 
00325 COH_CLOSE_NAMESPACE2
00326 
00327 #endif // COH_ABSTRACT_WRITE_BUFFER_HPP
Copyright © 2000, 2017, Oracle and/or its affiliates. All rights reserved.