X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=src%2Fencoding_reader.h;fp=src%2Fencoding_reader.h;h=cf7bb12bf2f41a3ef8f7d91890ccdd500be26eb3;hb=1ecdc6c5817ff35054a29102305a9023c4e4bc12;hp=0000000000000000000000000000000000000000;hpb=af70dac4da7f3e4c4967a6623a3ac8a6f14ed417;p=simplecms%2Futakata.git diff --git a/src/encoding_reader.h b/src/encoding_reader.h new file mode 100644 index 0000000..cf7bb12 --- /dev/null +++ b/src/encoding_reader.h @@ -0,0 +1,65 @@ +// 文字列、あるいはファイルからデータを読みだすためのフロントエンドです。 +// このフロントエンドは、文字列・ファイル等からデータを読出すだけの +// 機能を持つ別のインターフェースと組み合わせ、ITranscoderを適用した +// データを取得します。 +#ifndef _UTAKATA_SRC_READER_H_ +#define _UTAKATA_SRC_READER_H_ + +#include +#include +#include +#include + +#include "smart_ptr.h" + +namespace utakata { + +namespace transcoder { +class ITranscoder; +}; + +namespace reader { + + +class EncodingReader { + // 渡されたistreamから、Unicodeスカラー値を抽出する。 + // istreamからUnicodeスカラー値を抽出するのは、全て + // Transcoderを介するようにする。 + public: + + // 利用するistreamを指定する。 + StreamReader(smart_ptr& s, + const smart_ptr& t); + virtual ~StreamReader() {} + + virtual unsigned long read(); + virtual std::vector read(size_t num); + + virtual unsigned long peek(); + + // 現在streamのどこまでを読んでいるのかを返す。 + virtual size_t pos() const; + + // 渡されたvectorをstreamに戻す。 + virtual void unget(unsigned long ch); + + // 現在のportが終了時点かどうかを返す。 + virtual bool isEOF(); + + private: + + // 内部のvalidチェックを行う。 + // validチェックは成功しない場合にはPortExceptionが発生する。 + void validate(); + + smart_ptr stream_; + smart_ptr trans_; + + // 文字の変換単位で取得した文字の個数 + size_t pos_; +}; +}; + +}; + +#endif /* __HOME_DERUI_DEVELOP_UTAKATA_SRC_READER_H_ */