Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #include "tao/debug.h"
00018 #include "tao/Codeset/UTF16_BOM_Factory.h"
00019 #include "ace/OS_NS_strings.h"
00020 #include "ace/Dynamic_Service.h"
00021 #include "ace/Log_Msg.h"
00022
00023 TAO_BEGIN_VERSIONED_NAMESPACE_DECL
00024
00025 ACE_STATIC_SVC_DEFINE (TAO_UTF16_BOM_Factory,
00026 ACE_TEXT ("UTF16_BOM_Factory"),
00027 ACE_SVC_OBJ_T,
00028 &ACE_SVC_NAME (TAO_UTF16_BOM_Factory),
00029 ACE_Service_Type::DELETE_THIS
00030 | ACE_Service_Type::DELETE_OBJ,
00031 0)
00032 ACE_FACTORY_DEFINE (TAO_Codeset, TAO_UTF16_BOM_Factory)
00033
00034
00035
00036 TAO_UTF16_BOM_Factory::TAO_UTF16_BOM_Factory ()
00037 : translator_ (0)
00038 , forceBE_ (false)
00039 {
00040 }
00041
00042 TAO_UTF16_BOM_Factory::~TAO_UTF16_BOM_Factory ()
00043 {
00044 delete this->translator_;
00045 }
00046
00047 int
00048 TAO_UTF16_BOM_Factory::init (int argc, ACE_TCHAR *argv[])
00049 {
00050 TAO_Codeset_Translator_Factory::init (argc, argv);
00051
00052 for (int narg = 0; narg < argc;)
00053 {
00054 int consumed = parse_one_arg (argc - narg, &argv[narg]);
00055 if (consumed > 0)
00056 {
00057 narg += consumed;
00058 }
00059 else
00060 {
00061 ACE_ERROR ((LM_ERROR,
00062 ACE_TEXT ("(%P|%t)TAO_UTF16_BOM_Factory parameter error: %s\n")
00063 ACE_TEXT ("Usage: TAO_UTF16_BOM_Factory \"-forceBE\"\n")
00064 , argv[narg]
00065 ));
00066 return -1;
00067 }
00068 }
00069 return 0;
00070 }
00071
00072 int
00073 TAO_UTF16_BOM_Factory::parse_one_arg (int argc, ACE_TCHAR *argv[])
00074 {
00075 int consumed = 0;
00076 if ((argc > 0) && (ACE_OS::strcasecmp (argv[0], ACE_TEXT("-forcebe")) == 0))
00077 {
00078 this->forceBE_ = true;
00079 consumed = 1;
00080 }
00081 return consumed;
00082 }
00083
00084 CONV_FRAME::CodeSetId
00085 TAO_UTF16_BOM_Factory::ncs () const
00086 {
00087 create_translator();
00088 return this->translator_->ncs();
00089 }
00090
00091 CONV_FRAME::CodeSetId
00092 TAO_UTF16_BOM_Factory::tcs () const
00093 {
00094 create_translator();
00095 return this->translator_->tcs();
00096 }
00097
00098
00099
00100 void
00101 TAO_UTF16_BOM_Factory::assign (TAO_InputCDR *cdr) const
00102 {
00103 if (cdr)
00104 {
00105 create_translator ();
00106 this->assign_i (cdr, this->translator_);
00107 }
00108 }
00109
00110
00111
00112 void
00113 TAO_UTF16_BOM_Factory::assign (TAO_OutputCDR *cdr) const
00114 {
00115 if (cdr)
00116 {
00117 create_translator ();
00118 this->assign_i (cdr, this->translator_);
00119 }
00120 }
00121
00122 void
00123 TAO_UTF16_BOM_Factory::create_translator () const
00124 {
00125 if (this->translator_ == 0)
00126 {
00127 TAO_UTF16_BOM_Factory * pthis = const_cast<TAO_UTF16_BOM_Factory *> (this);
00128 ACE_NEW (pthis->translator_, TAO_UTF16_BOM_Translator (this->forceBE_));
00129 if (this->translator_ == 0)
00130 {
00131 if (TAO_debug_level)
00132 ACE_ERROR ((LM_ERROR,
00133 ACE_TEXT ("TAO (%P|%t) - UTF16_BOM_Factory: ")
00134 ACE_TEXT ("Cannot create translator\n")
00135 ));
00136 }
00137 }
00138 }
00139
00140 TAO_END_VERSIONED_NAMESPACE_DECL