110 lines
2.8 KiB
Plaintext
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.
|
||
|
*/
|