windows-nt/Source/XPSP1/NT/public/sdk/inc/crt/xlocinfo
2020-09-26 16:20:57 +08:00

110 lines
2.8 KiB
Plaintext

// xlocinfo internal header
#ifndef _XLOCINFO_
#define _XLOCINFO_
#include <xlocinfo.h>
#include <cstdlib>
#include <xstddef>
#ifdef _MSC_VER
#pragma pack(push,8)
#endif /* _MSC_VER */
_STD_BEGIN
// CLASS _Timevec
class _CRTIMP _Timevec {
public:
_Timevec(void *_P = 0)
: _Ptr(_P) {}
_Timevec(const _Timevec& _Rhs)
{*this = _Rhs; }
~_Timevec()
{free(_Ptr); }
_Timevec& operator=(const _Timevec& _Rhs)
{_Ptr = _Rhs._Ptr;
((_Timevec *)&_Rhs)->_Ptr = 0;
return (*this); }
void *_Getptr() const
{return (_Ptr); }
private:
void *_Ptr;
};
// CLASS _Locinfo
class _CRTIMP _Locinfo {
public:
typedef ::_Collvec _Collvec;
typedef ::_Ctypevec _Ctypevec;
typedef ::_Cvtvec _Cvtvec;
typedef std::_Timevec _Timevec;
_Locinfo(const char * = "C");
_Locinfo(int, const char *);
~_Locinfo();
_Locinfo& _Addcats(int, const char *);
string _Getname() const
{return (_Nname); }
_Collvec _Getcoll() const
{return (::_Getcoll()); }
_Ctypevec _Getctype() const
{return (::_Getctype()); }
_Cvtvec _Getcvt() const
{return (::_Getcvt()); }
const lconv *_Getlconv() const
{return (localeconv()); }
_Timevec _Gettnames() const
{return (_Timevec(::_Gettnames())); }
const char *_Getdays() const
{char *_S = ::_Getdays();
if (_S != 0)
{((_Locinfo *)this)->_Days = _S, free(_S); }
return (_Days.size() != 0 ? _Days.c_str()
: ":Sun:Sunday:Mon:Monday:Tue:Tuesday"
":Wed:Wednesday:Thu:Thursday:Fri:Friday"
":Sat:Saturday"); }
const char *_Getmonths() const
{char *_S = ::_Getmonths();
if (_S != 0)
{((_Locinfo *)this)->_Months = _S, free(_S); }
return (_Months.size() != 0 ? _Months.c_str()
: ":Jan:January:Feb:February:Mar:March"
":Apr:April:May:May:Jun:June"
":Jul:July:Aug:August:Sep:September"
":Oct:October:Nov:November:Dec:December"); }
const char *_Getfalse() const
{return ("false"); }
const char *_Gettrue() const
{return ("true"); }
const char *_Getno() const
{return ("no"); }
const char *_Getyes() const
{return ("yes"); }
private:
string _Days, _Months, _Oname, _Nname;
};
// TEMPLATE FUNCTIONS
template<class _E> inline
int __cdecl _Strcoll(const _E *_F1, const _E *_L1,
const _E *_F2, const _E *_L2, const _Locinfo::_Collvec *)
{for (; _F1 != _L1 && _F2 != _L2; ++_F1, ++_F2)
if (*_F1 < *_F2)
return (-1);
else if (*_F2 < *_F1)
return (+1);
return (_F2 != _L2 ? -1 : _F1 != _L1 ? +1 : 0); }
template<class _E> inline
size_t __cdecl _Strxfrm(_E *_F1, _E *_L1,
const _E *_F2, const _E *_L2, const _Locinfo::_Collvec *)
{size_t _N = _L2 - _F2;
if (_N <= _L1 - _F1)
memcpy(_F1, _F2, _N * sizeof (_E));
return (_N); }
_STD_END
#ifdef _MSC_VER
#pragma pack(pop)
#endif /* _MSC_VER */
#endif /* _XLOCINFO_ */
/*
* Copyright (c) 1996 by P.J. Plauger. ALL RIGHTS RESERVED.
* Consult your license regarding permissions and restrictions.
*/