00001 00002 00003 00004 00005 00006 00007 00008 00009 00010 00011 00012 00013 00014 00015 00016 00017 00018 00019 00020 00021 00022 00023 00024 00025 00026 00027 00028 00029 00030 00031 00032 00033 00034 00035 00036 00037 00038 00039 00040 00041 00042 00043 00044 00045 00046 00047 00048 00049 00050 00051 00052 00053 00054 00055
00056
00057 00058 00059 00060 00061 00062 00063 00064 00065 00066 00067 00068 00069 00070 00071 00072 00073 00074 00075 00076 00077 00078 00079
00080
00081
00082 #if !defined(XMLBUFFERMGR_HPP)
00083 #define XMLBUFFERMGR_HPP
00084
00085 #include <util/XercesDefs.hpp>
00086 #include <framework/XMLBuffer.hpp>
00087
00088 class XMLBufBid;
00089
00098 class XMLBufferMgr
00099 {
00100 public :
00101
00102
00103
00104
00106
00107 XMLBufferMgr();
00108
00109
00111
00112 ~XMLBufferMgr();
00113
00114
00115
00116
00117
00118
00119 XMLBuffer& bidOnBuffer();
00120 void releaseBuffer(XMLBuffer& toRelease);
00121
00122
00123 private :
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134 unsigned int fBufCount;
00135 XMLBuffer** fBufList;
00136 };
00137
00138
00144 class XMLBufBid
00145 {
00146 public :
00147
00148
00149
00150 XMLBufBid(XMLBufferMgr* const srcMgr) :
00151
00152 fBuffer(srcMgr->bidOnBuffer())
00153 , fMgr(srcMgr)
00154 {
00155 }
00156
00157 ~XMLBufBid()
00158 {
00159 fMgr->releaseBuffer(fBuffer);
00160 }
00161
00162
00163
00164
00165
00166
00167 void append(const XMLCh toAppend)
00168 {
00169 fBuffer.append(toAppend);
00170 }
00171
00172 void append(const XMLCh* const toAppend, const unsigned int count = 0)
00173 {
00174 fBuffer.append(toAppend, count);
00175 }
00176
00177 const XMLBuffer& getBuffer() const
00178 {
00179 return fBuffer;
00180 }
00181
00182 XMLBuffer& getBuffer()
00183 {
00184 return fBuffer;
00185 }
00186
00187 const XMLCh* getRawBuffer() const
00188 {
00189 fBuffer.fBuffer[fBuffer.fIndex] = 0;
00190 return fBuffer.fBuffer;
00191 }
00192
00193 XMLCh* getRawBuffer()
00194 {
00195 fBuffer.fBuffer[fBuffer.fIndex] = 0;
00196 return fBuffer.fBuffer;
00197 }
00198
00199 unsigned int getLen() const
00200 {
00201 return fBuffer.fIndex;
00202 }
00203
00204 bool isEmpty()
00205 {
00206 return (fBuffer.fIndex == 0);
00207 }
00208
00209 void reset()
00210 {
00211 fBuffer.reset();
00212 }
00213
00214 void set(const XMLCh* const chars, const unsigned int count = 0)
00215 {
00216 fBuffer.set(chars, count);
00217 }
00218
00219
00220 private :
00221
00222
00223
00224
00225
00226
00227
00228
00229
00230
00231 XMLBuffer& fBuffer;
00232 XMLBufferMgr* const fMgr;
00233 };
00234
00235 #endif