summaryrefslogtreecommitdiff
path: root/trunk/TAO/tao/Codeset/UTF8_Latin1_Translator.h
diff options
context:
space:
mode:
Diffstat (limited to 'trunk/TAO/tao/Codeset/UTF8_Latin1_Translator.h')
-rw-r--r--trunk/TAO/tao/Codeset/UTF8_Latin1_Translator.h89
1 files changed, 89 insertions, 0 deletions
diff --git a/trunk/TAO/tao/Codeset/UTF8_Latin1_Translator.h b/trunk/TAO/tao/Codeset/UTF8_Latin1_Translator.h
new file mode 100644
index 00000000000..791ea994d43
--- /dev/null
+++ b/trunk/TAO/tao/Codeset/UTF8_Latin1_Translator.h
@@ -0,0 +1,89 @@
+// -*- C++ -*-
+
+//=============================================================================
+/**
+ * @file UTF8_Latin1_Translator.h
+ *
+ * $Id$
+ *
+ *
+ *
+ * @author Phil Mesnier <mesnier_p@ociweb.com>
+ */
+//=============================================================================
+
+#ifndef UTF8_LATIN1_TRANSLATOR_H
+#define UTF8_LATIN1_TRANSLATOR_H
+#include /**/ "ace/pre.h"
+
+#include "ace/config-all.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "tao/Codeset/codeset_export.h"
+#include "tao/Versioned_Namespace.h"
+#include "ace/CDR_Stream.h"
+
+// ****************************************************************
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+/**
+ * @class UTF8_Latin1_Translator
+ *
+ * @brief Codeset translation specialization - Manages Byte Order Marker
+ *
+ * This class performs the codeset translation:
+ * - Native: ISO-8859-1 (i.e. Latin 1)
+ * - Stream: UTF-8 (8 bit unicode mapping)
+ *
+ * When writing chars, it is possible to raise a DATA_CONVERSION exception
+ * because some valid Latin codepoints map to 2-byte utf-8 codepoints.
+ *
+ * When reading strings, it is possible to raise a DATA_CONVERSION exception
+ * because the string may include utf-8 unicode codepoints > 0x00FF.
+ */
+class TAO_Codeset_Export TAO_UTF8_Latin1_Translator
+ : public ACE_Char_Codeset_Translator
+{
+public:
+ /// constructor
+ TAO_UTF8_Latin1_Translator ();
+
+ /// Virtual destruction
+ virtual ~TAO_UTF8_Latin1_Translator (void);
+
+ // = Documented in $ACE_ROOT/ace/CDR_Stream.h
+ virtual ACE_CDR::Boolean read_char (ACE_InputCDR &,
+ ACE_CDR::Char &);
+ virtual ACE_CDR::Boolean read_string (ACE_InputCDR &,
+ ACE_CDR::Char *&);
+ virtual ACE_CDR::Boolean read_char_array (ACE_InputCDR &,
+ ACE_CDR::Char *,
+ ACE_CDR::ULong);
+ virtual ACE_CDR::Boolean write_char (ACE_OutputCDR &,
+ ACE_CDR::Char);
+ virtual ACE_CDR::Boolean write_string (ACE_OutputCDR &,
+ ACE_CDR::ULong,
+ const ACE_CDR::Char *);
+ virtual ACE_CDR::Boolean write_char_array (ACE_OutputCDR &,
+ const ACE_CDR::Char *,
+ ACE_CDR::ULong);
+ virtual ACE_CDR::ULong ncs () {return 0x00010001U;}
+ virtual ACE_CDR::ULong tcs () {return 0x05010001U;}
+
+private:
+ ACE_CDR::ULong read_char_i (ACE_InputCDR &,
+ ACE_CDR::Char &);
+
+ ACE_CDR::Boolean write_char_i (ACE_OutputCDR &,
+ ACE_CDR::Char);
+
+};
+
+TAO_END_VERSIONED_NAMESPACE_DECL
+
+#include /**/ "ace/post.h"
+#endif /* UTF8_LATIN1_TRANSLATOR_H */