Go to the documentation of this file.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 #ifndef __BYTESTREAM_H__
00031 #define __BYTESTREAM_H__
00032
00038 #include "unicode/utypes.h"
00039 #include "unicode/uobject.h"
00040 #include "unicode/std_string.h"
00041
00042 U_NAMESPACE_BEGIN
00043
00048 class U_COMMON_API ByteSink : public UMemory {
00049 public:
00054 ByteSink() { }
00059 virtual ~ByteSink() { }
00060
00067 virtual void Append(const char* bytes, int32_t n) = 0;
00068
00111 virtual char* GetAppendBuffer(int32_t min_capacity,
00112 int32_t desired_capacity_hint,
00113 char* scratch, int32_t scratch_capacity,
00114 int32_t* result_capacity);
00115
00124 virtual void Flush();
00125
00126 private:
00127 ByteSink(const ByteSink &);
00128 ByteSink &operator=(const ByteSink &);
00129 };
00130
00131
00132
00133
00143 class U_COMMON_API CheckedArrayByteSink : public ByteSink {
00144 public:
00151 CheckedArrayByteSink(char* outbuf, int32_t capacity);
00160 virtual CheckedArrayByteSink& Reset();
00167 virtual void Append(const char* bytes, int32_t n);
00182 virtual char* GetAppendBuffer(int32_t min_capacity,
00183 int32_t desired_capacity_hint,
00184 char* scratch, int32_t scratch_capacity,
00185 int32_t* result_capacity);
00191 int32_t NumberOfBytesWritten() const { return size_; }
00198 UBool Overflowed() const { return overflowed_; }
00206 int32_t NumberOfBytesAppended() const { return appended_; }
00207 private:
00208 char* outbuf_;
00209 const int32_t capacity_;
00210 int32_t size_;
00211 int32_t appended_;
00212 UBool overflowed_;
00213 CheckedArrayByteSink();
00214 CheckedArrayByteSink(const CheckedArrayByteSink &);
00215 CheckedArrayByteSink &operator=(const CheckedArrayByteSink &);
00216 };
00217
00218 #if U_HAVE_STD_STRING
00219
00225 template<typename StringClass>
00226 class StringByteSink : public ByteSink {
00227 public:
00233 StringByteSink(StringClass* dest) : dest_(dest) { }
00240 virtual void Append(const char* data, int32_t n) { dest_->append(data, n); }
00241 private:
00242 StringClass* dest_;
00243 StringByteSink();
00244 StringByteSink(const StringByteSink &);
00245 StringByteSink &operator=(const StringByteSink &);
00246 };
00247
00248 #endif
00249
00250 U_NAMESPACE_END
00251
00252 #endif // __BYTESTREAM_H__