⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 facets_byname.cpp

📁 使用QT为linux 下的mplayer写的一个新的gui
💻 CPP
📖 第 1 页 / 共 3 页
字号:
      neg_format.field[2] = (char) money_base::sign;
      break;
    case 3: // The sign string immediately precedes the currency_symbol.
    case 4: // The sign string immediately succeeds the currency_symbol.
    default:
      if (_Locale_n_cs_precedes(monetary)) {
        // 1 if currency_symbol precedes a negative value
        neg_format.field[1] = (char) money_base::sign;
        neg_format.field[2] = (char) money_base::value;
      } else {
        // 0 if currency_symbol succeeds a negative value
        neg_format.field[1] = (char) money_base::value;
        neg_format.field[2] = (char) money_base::sign;
      }
      break;
  }
  neg_format.field[3] = (char) money_base::none;
}

_STLP_MOVE_TO_STD_NAMESPACE

//
// moneypunct_byname<>
//
moneypunct_byname<char, true>::moneypunct_byname(const char * name,
                                                 size_t refs, _Locale_name_hint* hint):
  moneypunct<char, true>(refs), _M_monetary(_STLP_PRIV __acquire_monetary(name, hint)) {
  if (!_M_monetary)
    locale::_M_throw_runtime_error();
  _STLP_PRIV _Init_monetary_formats_int(_M_pos_format, _M_neg_format, _M_monetary);
}

moneypunct_byname<char, true>::~moneypunct_byname()
{ _STLP_PRIV __release_monetary(_M_monetary); }

char moneypunct_byname<char, true>::do_decimal_point() const
{ return _Locale_mon_decimal_point(_M_monetary); }

char moneypunct_byname<char, true>::do_thousands_sep() const
{ return _Locale_mon_thousands_sep(_M_monetary); }

string moneypunct_byname<char, true>::do_grouping() const
{ return _Locale_mon_grouping(_M_monetary); }

string moneypunct_byname<char, true>::do_curr_symbol() const
{ return _Locale_int_curr_symbol(_M_monetary); }

string moneypunct_byname<char, true>::do_positive_sign() const
{ return _Locale_positive_sign(_M_monetary); }

string moneypunct_byname<char, true>::do_negative_sign() const
{ return _Locale_negative_sign(_M_monetary); }

int moneypunct_byname<char, true>::do_frac_digits() const
{ return _Locale_int_frac_digits(_M_monetary); }

moneypunct_byname<char, false>::moneypunct_byname(const char * name,
                                                  size_t refs, _Locale_name_hint* hint):
  moneypunct<char, false>(refs), _M_monetary(_STLP_PRIV __acquire_monetary(name, hint)) {
  if (!_M_monetary)
    locale::_M_throw_runtime_error();
  _STLP_PRIV _Init_monetary_formats(_M_pos_format, _M_neg_format, _M_monetary);
}

moneypunct_byname<char, false>::~moneypunct_byname()
{ _STLP_PRIV __release_monetary(_M_monetary); }

char moneypunct_byname<char, false>::do_decimal_point() const
{ return _Locale_mon_decimal_point(_M_monetary); }

char moneypunct_byname<char, false>::do_thousands_sep() const
{ return _Locale_mon_thousands_sep(_M_monetary); }

string moneypunct_byname<char, false>::do_grouping() const
{ return _Locale_mon_grouping(_M_monetary); }

string moneypunct_byname<char, false>::do_curr_symbol() const
{ return _Locale_currency_symbol(_M_monetary); }

string moneypunct_byname<char, false>::do_positive_sign() const
{ return _Locale_positive_sign(_M_monetary); }

string moneypunct_byname<char, false>::do_negative_sign() const
{ return _Locale_negative_sign(_M_monetary); }

int moneypunct_byname<char, false>::do_frac_digits() const
{ return _Locale_frac_digits(_M_monetary); }

//
// moneypunct_byname<wchar_t>
//
#if !defined (_STLP_NO_WCHAR_T)

moneypunct_byname<wchar_t, true>::moneypunct_byname(const char * name,
                                                    size_t refs, _Locale_name_hint* hint):
  moneypunct<wchar_t, true>(refs), _M_monetary(_STLP_PRIV __acquire_monetary(name, hint)) {
  if (!_M_monetary)
    locale::_M_throw_runtime_error();
  _STLP_PRIV _Init_monetary_formats_int(_M_pos_format, _M_neg_format, _M_monetary);
}

moneypunct_byname<wchar_t, true>::~moneypunct_byname()
{ _STLP_PRIV __release_monetary(_M_monetary); }

wchar_t moneypunct_byname<wchar_t, true>::do_decimal_point() const
{ return _Locale_mon_decimal_point(_M_monetary); }

wchar_t moneypunct_byname<wchar_t, true>::do_thousands_sep() const
{ return _Locale_mon_thousands_sep(_M_monetary); }

string moneypunct_byname<wchar_t, true>::do_grouping() const
{ return _Locale_mon_grouping(_M_monetary); }

inline wstring __do_widen (string const& str) {
#if defined (_STLP_NO_MEMBER_TEMPLATES) || defined (_STLP_MSVC) || defined(__MRC__) || defined(__SC__) //*ty 05/26/2001 - added workaround for mpw
  wstring::_Reserve_t __Reserve;
  size_t __size = str.size();
  wstring result(__Reserve, __size);
  copy(str.begin(), str.end(), result.begin());
#else
  wstring result(str.begin(), str.end());
#endif
  return result;
}

wstring moneypunct_byname<wchar_t, true>::do_curr_symbol() const
{ return __do_widen(_Locale_int_curr_symbol(_M_monetary)); }

wstring moneypunct_byname<wchar_t, true>::do_positive_sign() const
{ return __do_widen(_Locale_positive_sign(_M_monetary)); }

wstring moneypunct_byname<wchar_t, true>::do_negative_sign() const
{ return __do_widen(_Locale_negative_sign(_M_monetary)); }

int moneypunct_byname<wchar_t, true>::do_frac_digits() const
{ return _Locale_int_frac_digits(_M_monetary); }

moneypunct_byname<wchar_t, false>::moneypunct_byname(const char * name,
                                                     size_t refs, _Locale_name_hint* hint):
  moneypunct<wchar_t, false>(refs), _M_monetary(_STLP_PRIV __acquire_monetary(name, hint)) {
  if (!_M_monetary)
    locale::_M_throw_runtime_error() ;
  _STLP_PRIV _Init_monetary_formats(_M_pos_format, _M_neg_format, _M_monetary);
}

moneypunct_byname<wchar_t, false>::~moneypunct_byname()
{ _STLP_PRIV __release_monetary(_M_monetary); }

wchar_t moneypunct_byname<wchar_t, false>::do_decimal_point() const
{ return _Locale_mon_decimal_point(_M_monetary); }

wchar_t moneypunct_byname<wchar_t, false>::do_thousands_sep() const
{ return _Locale_mon_thousands_sep(_M_monetary); }

string moneypunct_byname<wchar_t, false>::do_grouping() const
{ return _Locale_mon_grouping(_M_monetary); }

wstring moneypunct_byname<wchar_t, false>::do_curr_symbol() const
{ return __do_widen(_Locale_currency_symbol(_M_monetary)); }

wstring moneypunct_byname<wchar_t, false>::do_positive_sign() const
{ return __do_widen(_Locale_positive_sign(_M_monetary)); }

wstring moneypunct_byname<wchar_t, false>::do_negative_sign() const
{ return __do_widen(_Locale_negative_sign(_M_monetary)); }

int moneypunct_byname<wchar_t, false>::do_frac_digits() const
{ return _Locale_frac_digits(_M_monetary); }

#endif

_STLP_END_NAMESPACE

#include "message_facets.h"

_STLP_BEGIN_NAMESPACE

_STLP_MOVE_TO_PRIV_NAMESPACE

void _Catalog_locale_map::insert(nl_catd_type key, const locale& L) {
  _STLP_TRY {
#if !defined(_STLP_NO_TYPEINFO) && !defined(_STLP_NO_RTTI)
    // Don't bother to do anything unless we're using a non-default ctype facet
# ifdef _STLP_NO_WCHAR_T
    typedef char _Char;
# else
    typedef wchar_t _Char;
# endif

    typedef ctype<_Char> wctype;
    wctype const& wct = use_facet<wctype>(L);
    if (typeid(wct) != typeid(wctype)) {
# endif /* _STLP_NO_TYPEINFO */
      if (!M)
        M = new map_type;

#if defined (__SC__)
      if (!M) delete M;
#endif
      M->insert(map_type::value_type(key, L));
#if !defined(_STLP_NO_TYPEINFO) && !defined(_STLP_NO_RTTI)
    }
# endif /* _STLP_NO_TYPEINFO */
  }
  _STLP_CATCH_ALL {}
}

void _Catalog_locale_map::erase(nl_catd_type key) {
  if (M)
    M->erase(key);
}

locale _Catalog_locale_map::lookup(nl_catd_type key) const {
  if (M) {
    map_type::const_iterator i = M->find(key);
    return i != M->end() ? (*i).second : locale::classic();
  }
  else
    return locale::classic();
}


#if defined (_STLP_USE_NL_CATD_MAPPING)
_STLP_VOLATILE __stl_atomic_t _Catalog_nl_catd_map::_count = 0;

messages_base::catalog _Catalog_nl_catd_map::insert(nl_catd_type cat) {
  messages_base::catalog &res = Mr[cat];
  if ( res == 0 ) {
#if defined (_STLP_ATOMIC_INCREMENT)
    res = __STATIC_CAST(int, _STLP_ATOMIC_INCREMENT(&_count));
#else
    static _STLP_STATIC_MUTEX _Count_lock _STLP_MUTEX_INITIALIZER;
    {
      _STLP_auto_lock sentry(_Count_lock);
      res = __STATIC_CAST(int, ++_count);
    }
#endif
    M[res] = cat;
  }
  return res;
}

void _Catalog_nl_catd_map::erase(messages_base::catalog cat) {
  map_type::iterator mit(M.find(cat));
  if (mit != M.end()) {
    Mr.erase((*mit).second);
    M.erase(mit);
  }
}
#endif

//----------------------------------------------------------------------
//
//

_Messages_impl::_Messages_impl(bool is_wide, _Locale_name_hint* hint) :
  _M_message_obj(0), _M_map(0) {
  _M_delete = true;
  if (is_wide)
    _M_map = new _Catalog_locale_map;
  _M_message_obj = __acquire_messages("C", hint);
}

_Messages_impl::_Messages_impl(bool is_wide, _Locale_messages* msg_obj ) :
  _M_message_obj(msg_obj), _M_map(0) {
  _M_delete = true;
  if (is_wide)
    _M_map = new _Catalog_locale_map;
}

_Messages_impl::~_Messages_impl() {
  __release_messages(_M_message_obj);
  if (_M_map) delete _M_map;
}

_Messages::catalog _Messages_impl::do_open(const string& filename, const locale& L) const {
  nl_catd_type result = _M_message_obj ? _Locale_catopen(_M_message_obj, filename.c_str())
    : (nl_catd_type)(-1);

  if ( result != (nl_catd_type)(-1) ) {
    if ( _M_map != 0 ) {
      _M_map->insert(result, L);
    }
    return _M_cat.insert( result );
  }

  return -1;
}

string _Messages_impl::do_get(catalog cat,
                              int set, int p_id, const string& dfault) const {
  return _M_message_obj != 0 && cat >= 0
    ? string(_Locale_catgets(_M_message_obj, _M_cat[cat], set, p_id, dfault.c_str()))
    : dfault;
}

#if !defined (_STLP_NO_WCHAR_T)

wstring
_Messages_impl::do_get(catalog thecat,
                       int set, int p_id, const wstring& dfault) const {
  typedef ctype<wchar_t> wctype;
  const wctype& ct = use_facet<wctype>(_M_map->lookup( _M_cat[thecat] ) );

  const char* str = _Locale_catgets(_M_message_obj, _M_cat[thecat], set, p_id, "");

  // Verify that the lookup failed; an empty string might represent success.
  if (!str)
    return dfault;
  else if (str[0] == '\0') {
    const char* str2 = _Locale_catgets(_M_message_obj, _M_cat[thecat], set, p_id, "*");
    if (!str2 || ((str2[0] == '*') && (str2[1] == '\0')))
      return dfault;
  }

  // str is correct.  Now we must widen it to get a wstring.
  size_t n = strlen(str);

  // NOT PORTABLE.  What we're doing relies on internal details of the
  // string implementation.  (Contiguity of string elements.)
  wstring result(n, wchar_t(0));
  ct.widen(str, str + n, &*result.begin());
  return result;
}

#endif

void _Messages_impl::do_close(catalog thecat) const {
  if (_M_message_obj)
    _Locale_catclose(_M_message_obj, _M_cat[thecat]);
  if (_M_map) _M_map->erase(_M_cat[thecat]);
  _M_cat.erase( thecat );
}

_STLP_MOVE_TO_STD_NAMESPACE

//----------------------------------------------------------------------
// messages<char>

messages<char>::messages(size_t refs) :
  locale::facet(refs), _M_impl(new _STLP_PRIV _Messages_impl(false)) {}

messages<char>::messages(size_t refs, _Locale_messages* msg_obj) : locale::facet(refs),
  _M_impl(new _STLP_PRIV _Messages_impl(false, msg_obj)) {}


//----------------------------------------------------------------------
// messages_byname<char>

messages_byname<char>::messages_byname(const char* name, size_t refs, _Locale_name_hint* hint)
  : messages<char>(refs, name ? _STLP_PRIV __acquire_messages(name, hint) : 0) {}

messages_byname<char>::~messages_byname() {}

#if !defined (_STLP_NO_WCHAR_T)

//----------------------------------------------------------------------
// messages<wchar_t>

messages<wchar_t>::messages(size_t refs)  :
  locale::facet(refs), _M_impl(new _STLP_PRIV _Messages_impl(true)) {}

messages<wchar_t>::messages(size_t refs, _Locale_messages* msg_obj)
  : locale::facet(refs),
    _M_impl(new _STLP_PRIV _Messages_impl(true, msg_obj)) {}

//----------------------------------------------------------------------
// messages_byname<wchar_t>


messages_byname<wchar_t>::messages_byname(const char* name, size_t refs, _Locale_name_hint* hint)
  : messages<wchar_t>(refs, name ? _STLP_PRIV __acquire_messages(name, hint) : 0) {}

messages_byname<wchar_t>::~messages_byname() {}

#endif

_STLP_END_NAMESPACE

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -