This repository has been archived on 2024-12-16. You can view files and clone it, but cannot push or open issues or pull requests.
CodeBlocksPortable/Borland/BCC55/Include/Rw/time.h

313 lines
11 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef __BOR_RW__TIME_H
#define __BOR_RW__TIME_H
#pragma option push -b -a8 -pc -Vx- -Ve- -w-inl -w-aus -w-sig
// -*- C++ -*-
/***************************************************************************
*
* time - Declarations for the Standard Library time facets
*
***************************************************************************
*
* Copyright (c) 1994-1999 Rogue Wave Software, Inc. All Rights Reserved.
*
* This computer software is owned by Rogue Wave Software, Inc. and is
* protected by U.S. copyright laws and other laws and by international
* treaties. This computer software is furnished by Rogue Wave Software,
* Inc. pursuant to a written license agreement and may be used, copied,
* transmitted, and stored only in accordance with the terms of such
* license and with the inclusion of the above copyright notice. This
* computer software or any other copies thereof may not be provided or
* otherwise made available to any other person.
*
* U.S. Government Restricted Rights. This computer software is provided
* with Restricted Rights. Use, duplication, or disclosure by the
* Government is subject to restrictions as set forth in subparagraph (c)
* (1) (ii) of The Rights in Technical Data and Computer Software clause
* at DFARS 252.227-7013 or subparagraphs (c) (1) and (2) of the
* Commercial Computer Software Restricted Rights at 48 CFR 52.227-19,
* as applicable. Manufacturer is Rogue Wave Software, Inc., 5500
* Flatiron Parkway, Boulder, Colorado 80301 USA.
*
**************************************************************************/
#ifndef __STD_TIME__
#define __STD_TIME__
#ifndef __STD_RWLOCALE__
#include <rw/rwlocale>
#endif
#ifndef __STD_RW_LOCNUMRW__
#include <rw/numbrw>
#endif
#ifndef __STD_RW_LOCHELP__
#include <rw/lochelp>
#endif
#ifndef _RWSTD_NO_NAMESPACE
namespace std {
#endif
struct _RWSTDExport time_base {
enum dateorder { no_order, dmy, mdy, ymd, ydm };
};
#ifndef _RWSTD_NO_NAMESPACE
} namespace __rwstd {
#endif
#if !defined (_RWSTD_NO_NEW_HEADER) && !defined (_RWSTD_NO_NAMESPACE)
using std::tm;
#endif
// ------------------------------------------------------------------
// Implementation class template -- time_reader<charT,InputIterator>.
// ------------------------------------------------------------------
template <class charT,class InputIterator>
class _RWSTDExportTemplate time_reader :
public digit_reader<charT,InputIterator>
{
public:
typedef _TYPENAME timepunct<charT>::string_type string_type;
const timepunct<charT> &__timp;
time_reader (InputIterator& in,InputIterator& end,
_RW_STD::ios_base& io, const timepunct<charT>& timepunct);
bool get_time_pattern (const string_type& pattern,tm *time);
static const timepunct<charT>& __idiocy (_RW_STD::ios_base& io) {
const _RW_STD::locale loc=io.getloc();
#ifndef _RWSTD_NO_TEMPLATE_ON_RETURN_TYPE
return _RW_STD::use_facet<timepunct<charT> >(loc);
#else
return _RW_STD::use_facet(loc,(timepunct<charT>*)0);
#endif // _RWSTD_NO_TEMPLATE_ON_RETURN_TYPE
}
};
#ifndef _RWSTD_NO_NAMESPACE
} namespace std {
#endif
// ----------------------------------------------------------------------
// Standard time and date parsing facet -- time_get<charT,InputIterator>.
// ----------------------------------------------------------------------
template <class charT,class InputIterator>
class _RWSTDExportTemplate time_get: public locale::facet, public time_base {
public:
typedef charT char_type;
typedef InputIterator iter_type;
_EXPLICIT time_get (size_t refs=0): locale::facet(refs,locale::time)
{ ; }
dateorder date_order() const { return do_date_order(); }
iter_type get_time (iter_type start, iter_type end, ios_base& format,
ios_base::iostate &err, tm* time) const
{ return do_get_time (start,end,format,err,time); }
iter_type get_date (iter_type start, iter_type end, ios_base& format,
ios_base::iostate &err, tm* time) const
{ return do_get_date(start,end,format,err,time); }
iter_type get_weekday (iter_type start, iter_type end, ios_base& format,
ios_base::iostate &err, tm* time) const
{ return do_get_weekday(start,end,format,err,time); }
iter_type get_monthname (iter_type start, iter_type end, ios_base& format,
ios_base::iostate &err, tm* time) const
{ return do_get_monthname(start,end,format,err,time); }
iter_type get_year (iter_type start, iter_type end, ios_base& format,
ios_base::iostate &err, tm* time) const
{ return do_get_year(start,end,format,err,time); }
static locale::id id;
// Implementation:
enum { __facet_cat = locale::time, __ok_implicit = 1 };
protected:
virtual ~time_get();
virtual dateorder do_date_order() const;
virtual iter_type do_get_time
(iter_type, iter_type, ios_base&, ios_base::iostate&, tm*) const;
virtual iter_type do_get_date
(iter_type, iter_type, ios_base&, ios_base::iostate&, tm*) const;
virtual iter_type do_get_weekday
(iter_type, iter_type, ios_base&, ios_base::iostate&, tm*) const;
virtual iter_type do_get_monthname
(iter_type, iter_type, ios_base&, ios_base::iostate&, tm*) const;
virtual iter_type do_get_year
(iter_type, iter_type, ios_base&, ios_base::iostate&, tm*) const;
// Implementation:
protected:
const __RWSTD::timepunct<charT>* __timp;
string __name;
private:
void __initfacet (const locale* loc)
{
__RWSTD::use_Clib_locale clocale(__name.c_str(),LC_TIME);
#ifndef _RWSTD_NO_TEMPLATE_ON_RETURN_TYPE
__timp = &_RW_STD::use_facet<__RWSTD::timepunct<charT> >(*loc);
#else
__timp = &_RW_STD::use_facet(*loc,(__RWSTD::timepunct<charT>*)0);
#endif
}
#ifdef _RWSTD_NO_MEMBER_TEMPLATES
locale::id &__get_id (void) const { return id; }
#endif
};
// --------------------------------------------------------------------------
// Standard time and date formatting facet -- time_put<charT,OutputIterator>.
// --------------------------------------------------------------------------
template <class charT,class OutputIterator>
class _RWSTDExportTemplate time_put: public locale::facet {
public:
typedef charT char_type;
typedef OutputIterator iter_type;
_EXPLICIT time_put (size_t refs=0) : locale::facet(refs,locale::time)
{ ; }
iter_type put (iter_type start, ios_base& format, char_type fill,
const tm* time, const char_type *pattern, const char_type *pat_end) const;
iter_type put (iter_type start, ios_base& format, char_type fill,
const tm* time, char fmt, char modifier = 0) const
{ return do_put(start,format,fill,time,fmt,modifier); }
static locale::id id;
// Implementation:
enum { __facet_cat = locale::time, __ok_implicit = 1 };
protected:
virtual ~time_put();
virtual iter_type do_put (iter_type, ios_base&, char_type fill,
const tm* time, char fmt, char modifier) const;
protected:
const __RWSTD::timepunct<charT>* __timp;
string __name;
private:
void __initfacet (const locale* loc)
{
__RWSTD::use_Clib_locale clocale(__name.c_str(),LC_TIME);
#ifndef _RWSTD_NO_TEMPLATE_ON_RETURN_TYPE
__timp = &_RW_STD::use_facet<__RWSTD::timepunct<charT> >(*loc);
#else
__timp = &_RW_STD::use_facet(*loc,(__RWSTD::timepunct<charT>*)0);
#endif
}
#ifdef _RWSTD_NO_MEMBER_TEMPLATES
locale::id &__get_id (void) const { return id; }
#endif
};
// -------------------------------------------------
// Standard derived facet -- time_get_byname<charT>.
// -------------------------------------------------
template <class charT, class InputIterator>
class time_get_byname: public time_get<charT,InputIterator> {
public:
_EXPLICIT time_get_byname (const char*, size_t refs=0);
protected:
virtual ~time_get_byname();
// Virtual member functions inherited from time_get<charT,InputIterator>:
// virtual dateorder do_date_order() const;
// virtual iter_type do_get_time (iter_type i, iter_type e, ios_base&,
// ios_base::iostate &err, tm* t) const;
// virtual iter_type do_get_date (iter_type i, iter_type e, ios_base&,
// ios_base::iostate &err, tm* t) const;
// virtual iter_type do_get_weekday (iter_type i, iter_type e, ios_base&,
// ios_base::iostate &err, tm* t) const;
// virtual iter_type do_get_monthname (iter_type i, iter_type e, ios_base&,
// ios_base::iostate &err, tm* t) const;
// virtual iter_type do_get_year (iter_type i, iter_type e, ios_base&,
// ios_base::iostate &err, tm* t) const;
};
// -------------------------------------------------
// Standard derived facet -- time_put_byname<charT>.
// -------------------------------------------------
template <class charT, class OutputIterator>
class time_put_byname: public time_put<charT,OutputIterator> {
public:
_EXPLICIT time_put_byname (const char*, size_t refs=0);
protected:
virtual ~time_put_byname();
// Virtual member functions inherited from time_put<charT,OutputIterator>:
// virtual iter_type do_put (iter_type s, ios_base&, char_type fill,
// const tm* t, char format, char modifier) const;
};
#ifndef _RWSTD_NO_NAMESPACE
} namespace __rwstd {
#endif
#ifndef _RWSTD_NO_FUNC_PARTIAL_SPEC
template <class charT, class InputIterator>
inline _RW_STD::time_get<charT,InputIterator>* create_named_facet
(_RW_STD::time_get<charT,InputIterator>*,const char *name,size_t refs)
{ return new _RW_STD::time_get_byname<charT,InputIterator>(name,refs); }
template <class charT, class OutputIterator>
inline _RW_STD::time_put<charT,OutputIterator>* create_named_facet
(_RW_STD::time_put<charT,OutputIterator>*,const char *name,size_t refs)
{ return new _RW_STD::time_put_byname<charT,OutputIterator>(name,refs); }
#else
_RWSTD_TEMPLATE
inline _RW_STD::time_get<char,_RW_STD::istreambuf_iterator<char,_RW_STD::char_traits<char> > >* create_named_facet
(_RW_STD::time_get<char,_RW_STD::istreambuf_iterator<char,_RW_STD::char_traits<char> > >*,const char *name,size_t refs)
{ return new _RW_STD::time_get_byname<char,_RW_STD::istreambuf_iterator<char,_RW_STD::char_traits<char> > >(name,refs); }
inline _RW_STD::time_put<char,_RW_STD::ostreambuf_iterator<char,_RW_STD::char_traits<char> > >* create_named_facet
(_RW_STD::time_put<char,_RW_STD::ostreambuf_iterator<char,_RW_STD::char_traits<char> > >*,const char *name,size_t refs)
{ return new _RW_STD::time_put_byname<char,_RW_STD::ostreambuf_iterator<char,_RW_STD::char_traits<char> > >(name,refs); }
#ifndef _RWSTD_NO_WIDE_CHAR
_RWSTD_TEMPLATE
inline _RW_STD::time_get<wchar_t,_RW_STD::istreambuf_iterator<wchar_t,_RW_STD::char_traits<wchar_t> > >* create_named_facet
(_RW_STD::time_get<wchar_t,_RW_STD::istreambuf_iterator<wchar_t,_RW_STD::char_traits<wchar_t> > >*,const char *name,size_t refs)
{ return new _RW_STD::time_get_byname<wchar_t,_RW_STD::istreambuf_iterator<wchar_t,_RW_STD::char_traits<wchar_t> > >(name,refs); }
inline _RW_STD::time_put<wchar_t,_RW_STD::ostreambuf_iterator<wchar_t,_RW_STD::char_traits<wchar_t> > >* create_named_facet
(_RW_STD::time_put<wchar_t,_RW_STD::ostreambuf_iterator<wchar_t,_RW_STD::char_traits<wchar_t> > >*,const char *name,size_t refs)
{ return new _RW_STD::time_put_byname<wchar_t,_RW_STD::ostreambuf_iterator<wchar_t,_RW_STD::char_traits<wchar_t> > >(name,refs); }
#endif // _RWSTD_NO_WIDE_CHAR
#endif // _RWSTD_NO_FUNC_PARTIAL_SPEC
#ifndef _RWSTD_NO_NAMESPACE
} // namespace __rwstd
#endif
#ifdef _RWSTD_COMPILE_INSTANTIATE
#include <rw/time.cc>
#endif
#endif // __STD_TIME__
#pragma option pop
#endif /* __BOR_RW__TIME_H */