// Create a locale from a name.
                _STLP_EXP_DECLSPEC locale::locale(const char* name)
                    : _M_impl(0)
                {
                    if (!name)
                        _M_throw_runtime_error(0);
                    else if(strcmp(name,"")==0)
                        name = _Locale_ctype_default(NULL);

                    _Locale* impl = 0;

                    _STLP_TRY {
#if defined(__LIBSTD_CPP_SYMBIAN32_WSD__) || defined(_STLP_LIBSTD_CPP_NO_STATIC_VAR_)
impl = new _Locale(get_locale_id_S_max(), name);
# else
impl = new _Locale(locale::id::_S_max, name);
# endif


                        // Insert categories one at a time.
                        impl->insert_ctype_facets(name);
                        impl->insert_numeric_facets(name);
                        impl->insert_time_facets(name);
                        impl->insert_collate_facets(name);
                        impl->insert_monetary_facets(name);
                        impl->insert_messages_facets(name);
                        // reassign impl
                        _M_impl = impl;
                    }
                    _STLP_UNWIND(delete impl);
                }
// Create a locale that's a copy of L, except that all of the facets
// in category c are instead constructed by name.
                _STLP_EXP_DECLSPEC locale::locale(const locale& L, const char* name, locale::category c)
                    : _M_impl(0)
                {
                    if (name == 0 || strcmp(name, "*") == 0)
                        _M_throw_runtime_error(name);

                    _Locale* impl = 0;

                    _STLP_TRY {
                        impl = new _Locale(*L._M_impl);
                        _Stl_loc_combine_names(impl, L._M_impl->name.c_str(), name, c);

                        if (c & locale::ctype)
                            impl->insert_ctype_facets(name);
                        if (c & locale::numeric)
                            impl->insert_numeric_facets(name);
                        if (c & locale::time)
                            impl->insert_time_facets(name);
                        if (c & locale::collate)
                            impl->insert_collate_facets(name);
                        if (c & locale::monetary)
                            impl->insert_monetary_facets(name);
                        if (c & locale::messages)
                            impl->insert_messages_facets(name);
                        _M_impl = impl;
                    }
                    _STLP_UNWIND(delete impl)

                }
Example #3
0
// Create a locale from a name.
locale::locale(const char* name)
  : _M_impl(0) {
  if (!name)
    _M_throw_runtime_error(0);

  if (is_C_locale_name(name)) {
    _M_impl = _get_Locale_impl( locale::classic()._M_impl );
    return;
  }

  _Locale_impl* impl = 0;
  _STLP_TRY {
    impl = new _Locale_impl(locale::id::_S_max, name);

    // Insert categories one at a time.
    impl->insert_ctype_facets(name);
    impl->insert_numeric_facets(name);
    impl->insert_time_facets(name);
    impl->insert_collate_facets(name);
    impl->insert_monetary_facets(name);
    impl->insert_messages_facets(name);
    // reassign impl
    _M_impl = _get_Locale_impl( impl );
  }
  _STLP_UNWIND(delete impl);
}