📄 outputcharstream.h
字号:
// Copyright (c) 1994 James Clark// See the file COPYING for copying permission.#ifndef OutputCharStream_INCLUDED#define OutputCharStream_INCLUDED 1#include "types.h"#include <stddef.h>#include "StringC.h"#include "Owner.h"#include "CodingSystem.h"#include "OutputByteStream.h"#ifdef SP_NAMESPACEnamespace SP_NAMESPACE {#endifclass SP_API OutputCharStream {public: enum Newline { newline }; typedef void (*Escaper)(OutputCharStream &, Char); OutputCharStream(); virtual ~OutputCharStream(); OutputCharStream &put(Char); OutputCharStream &write(const Char *, size_t); virtual void flush() = 0; virtual void setEscaper(Escaper); OutputCharStream &operator<<(char); OutputCharStream &operator<<(const char *); OutputCharStream &operator<<(const StringC &); OutputCharStream &operator<<(unsigned long); OutputCharStream &operator<<(int); OutputCharStream &operator<<(Newline);private: OutputCharStream(const OutputCharStream &); // undefined void operator=(const OutputCharStream &); // undefined virtual void flushBuf(Char) = 0;protected: Char *ptr_; Char *end_;};class SP_API EncodeOutputCharStream : public OutputCharStream, private Encoder::Handler {public: EncodeOutputCharStream(); // the OutputByteStream will not be deleted EncodeOutputCharStream(OutputByteStream *, const OutputCodingSystem *); ~EncodeOutputCharStream(); void open(OutputByteStream *, const OutputCodingSystem *); void flush(); void setEscaper(Escaper);private: EncodeOutputCharStream(const EncodeOutputCharStream &); // undefined void operator=(const EncodeOutputCharStream &); // undefined EncodeOutputCharStream(OutputByteStream *, Encoder *); void allocBuf(int bytesPerChar); void flushBuf(Char); void handleUnencodable(Char c, OutputByteStream *); Char *buf_; OutputByteStream *byteStream_; Encoder *encoder_; Owner<Encoder> ownedEncoder_; Escaper escaper_;};class SP_API StrOutputCharStream : public OutputCharStream {public: StrOutputCharStream(); ~StrOutputCharStream(); void extractString(StringC &); void flush();private: void flushBuf(Char); void sync(size_t); StrOutputCharStream(const StrOutputCharStream &); // undefined void operator=(const StrOutputCharStream &); // undefined Char *buf_; size_t bufSize_;};class SP_API RecordOutputCharStream : public OutputCharStream {public: RecordOutputCharStream(OutputCharStream *); ~RecordOutputCharStream(); void flush(); void setEscaper(Escaper);private: RecordOutputCharStream(const RecordOutputCharStream &); // undefined void operator=(const RecordOutputCharStream &); // undefined void flushBuf(Char); void outputBuf(); OutputCharStream *os_; enum { bufSize_ = 1024 }; Char buf_[bufSize_];};inlineOutputCharStream &OutputCharStream::put(Char c){ if (ptr_ < end_) *ptr_++ = c; else flushBuf(c); return *this;}inlineOutputCharStream &OutputCharStream::operator<<(char c){ return put(Char(c));}inlineOutputCharStream &OutputCharStream::operator<<(Newline){ put(Char(SP_LINE_TERM1));#ifdef SP_LINE_TERM2 put(Char(SP_LINE_TERM2));#endif return *this;}inlineOutputCharStream &OutputCharStream::operator<<(const StringC &str){ return write(str.data(), str.size());}#ifdef SP_NAMESPACE}#endif#endif /* not OutputCharStream_INCLUDED */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -