--- /dev/null
+// IReaderよりバイナリデータを読出し、特定のエンコーディングである
+// と解釈し、結果をunicode文字として返します。
+// ITranscoderインターフェースを実装したクラスは、Encode/Decodeが
+// 失敗した場合の処理を実装する必要があります。
+#ifndef _UTAKATA_SRC_TRANSCODER_INTERFACE_H_
+#define _UTAKATA_SRC_TRANSCODER_INTERFACE_H_
+
+#include <string>
+#include <vector>
+#include "src/exception.h"
+
+namespace utakata {
+
+namespace reader {
+class IReader;
+}
+
+namespace transcoder {
+
+class EncodeException : public exception::Exception {
+ // ITranscoderインターフェースの派生クラスにおいて、Encode時に
+ // 例外が発生した場合に返すことが想定されている例外です。
+ public:
+ // 表示する文字列と、例外が発生した位置を設定します。
+ EncodeException(const std::string& message,
+ const utakata::exception::ExceptionInfo& info) :
+ Exception(message, info) {}
+ EncodeException(const utakata::exception::Exception& exception,
+ const std::string& message,
+ const utakata::exception::ExceptionInfo& info) :
+ Exception(exception, message, info) {}
+};
+
+class DecodeException : public exception::Exception {
+ // ITranscoderインターフェースの派生クラスにおいて、Encode時に
+ // 例外が発生した場合に返すことが想定されている例外です。
+ public:
+ // 表示する文字列と、例外が発生した位置を設定します。
+ DecodeException(const std::string& message,
+ const utakata::exception::ExceptionInfo& info) :
+ Exception(message, info) {}
+
+ DecodeException(const utakata::exception::Exception& exception,
+ const std::string& message,
+ const utakata::exception::ExceptionInfo& info) :
+ Exception(exception, message, info) {}
+};
+
+class ITranscoder {
+ // 入力されたバイト列を、それぞれの判定によってUniCharに
+ // 変換する。
+ // このインターフェースは入力値を変換するためだけのものであり、
+ // schemeのtranscoderとは多少機能が異なる。
+ // これはlexerのインターフェースで利用される。
+ public:
+ virtual ~ITranscoder() {}
+
+ // 渡されたInputPortから一文字分だけ読み出して、unicode値を返す。
+ virtual unsigned int Encode(reader::IReader* reader) = 0;
+ // 渡されたcodeに対応する、自身のエンコードとなるバイト列を返す。
+ virtual std::vector<unsigned int> Decode(unsigned int code) = 0;
+};
+};
+};
+
+#endif /* _UTAKATA_SRC_TRANSCODER_INTERFACE_H_ */