OSDN Git Service

utakataの標準となる例外クラス及びマクロを定義した。
[simplecms/utakata.git] / src / transcoder_interface.h
diff --git a/src/transcoder_interface.h b/src/transcoder_interface.h
new file mode 100755 (executable)
index 0000000..c4925ca
--- /dev/null
@@ -0,0 +1,66 @@
+// 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_ */