Oracle Coherence for C++ API
Release 3.7.1.0
E22845-01
00001 /* 00002 * AbstractWriteBuffer.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_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(char16_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 MemberHandle<AbstractWriteBuffer> m_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