mirror of https://github.com/tongzx/nt5src
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
125 lines
2.8 KiB
125 lines
2.8 KiB
// xlocmes internal header (from <locale>)
|
|
#pragma once
|
|
#ifndef _XLOCMES_
|
|
#define _XLOCMES_
|
|
#include <xiosbase>
|
|
|
|
#pragma pack(push,8)
|
|
#pragma warning(push,3)
|
|
_STD_BEGIN
|
|
|
|
// STRUCT messages_base
|
|
struct _CRTIMP2 messages_base
|
|
: public locale::facet
|
|
{ // base class for messages
|
|
typedef int catalog;
|
|
|
|
explicit messages_base(size_t _Refs = 0)
|
|
: locale::facet(_Refs)
|
|
{ // default constructor
|
|
}
|
|
};
|
|
|
|
// TEMPLATE CLASS messages
|
|
template<class _Elem>
|
|
class messages
|
|
: public messages_base
|
|
{ // facet for obtaining messages from a catalog
|
|
public:
|
|
typedef _Elem char_type;
|
|
typedef basic_string<_Elem, char_traits<_Elem>, allocator<_Elem> >
|
|
string_type;
|
|
|
|
catalog open(const string& _Catname, const locale& _Loc) const
|
|
{ // open catalog
|
|
return (do_open(_Catname, _Loc));
|
|
}
|
|
|
|
string_type get(catalog _Catval, int _Set, int _Message,
|
|
const string_type& _Dflt) const
|
|
{ // get message from set in catalog
|
|
return (do_get(_Catval, _Set, _Message, _Dflt));
|
|
}
|
|
|
|
void close(catalog _Catval) const
|
|
{ // close catalog
|
|
do_close(_Catval);
|
|
}
|
|
|
|
static locale::id id; // unique facet id
|
|
|
|
explicit messages(size_t _Refs = 0)
|
|
: messages_base(_Refs)
|
|
{ // construct from current locale
|
|
_Init(_Locinfo());
|
|
}
|
|
|
|
messages(const _Locinfo& _Lobj, size_t _Refs = 0)
|
|
: messages_base(_Refs)
|
|
{ // construct from specified locale
|
|
_Init(_Lobj);
|
|
}
|
|
|
|
static size_t __cdecl _Getcat(const locale::facet **_Ppf = 0)
|
|
{ // return locale category mask and construct standard facet
|
|
if (_Ppf != 0 && *_Ppf == 0)
|
|
*_Ppf = _NEW_CRT messages<_Elem>;
|
|
return (_X_MESSAGE);
|
|
}
|
|
|
|
protected:
|
|
void _Init(const _Locinfo&)
|
|
{ // initialize from _Locinfo object (do nothing)
|
|
}
|
|
|
|
virtual catalog do_open(const string&, const locale&) const
|
|
{ // open catalog (do nothing)
|
|
return (0);
|
|
}
|
|
|
|
virtual string_type do_get(catalog, int, int,
|
|
const string_type& _Dflt) const
|
|
{ // get message from set in catalog (return default)
|
|
return (_Dflt);
|
|
}
|
|
|
|
virtual void do_close(catalog) const
|
|
{ // close catalog (do nothing)
|
|
}
|
|
};
|
|
|
|
// STATIC messages::id OBJECT
|
|
template<class _Elem>
|
|
locale::id messages<_Elem>::id;
|
|
|
|
// TEMPLATE CLASS messages_byname
|
|
template<class _Elem>
|
|
class messages_byname
|
|
: public messages<_Elem>
|
|
{ // messages for named locale
|
|
public:
|
|
explicit messages_byname(const char *_Locname, size_t _Refs = 0)
|
|
: messages<_Elem>(_Locinfo(_Locname), _Refs)
|
|
{ // construct for named locale
|
|
}
|
|
|
|
_PROTECTED:
|
|
virtual ~messages_byname()
|
|
{ // destroy the object
|
|
}
|
|
};
|
|
|
|
#ifdef _DLL_CPPLIB
|
|
template class _CRTIMP2 messages<char>;
|
|
template class _CRTIMP2 messages<wchar_t>;
|
|
#endif // _DLL_CPPLIB
|
|
_STD_END
|
|
#pragma warning(pop)
|
|
#pragma pack(pop)
|
|
|
|
#endif /* _XLOCMES_ */
|
|
|
|
/*
|
|
* Copyright (c) 1992-2001 by P.J. Plauger. ALL RIGHTS RESERVED.
|
|
* Consult your license regarding permissions and restrictions.
|
|
V3.10:0009 */
|