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/codecvt.h

348 lines
11 KiB
C
Raw Normal View History

#ifndef __CODECVT_H
#define __CODECVT_H
#pragma option push -b -a8 -pc -Vx- -Ve- -w-inl -w-aus -w-sig
// -*- C++ -*-
/***************************************************************************
*
* codecvt - Declarations for the Standard Library code conversion facet
*
***************************************************************************
*
* 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 <EFBFBD> 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_CODECVT__
#define __STD_CODECVT__
#ifndef __STD_RWLOCALE__
#include <rw/rwlocale>
#endif
#ifndef __STD_LIMITS
#include <limits>
#endif
#ifndef _RWSTD_NO_NAMESPACE
namespace std {
#endif
class _RWSTDExport codecvt_base {
public:
enum result { ok, partial, error, noconv };
};
// ------------------------------------------------------
// Codeset conversion facet -- codecvt<fromT,toT,stateT>.
// ------------------------------------------------------
_RWSTD_TEMPLATE
class _RWSTDExport codecvt<char,char,mbstate_t>:
public locale::facet, public codecvt_base
{
public:
typedef char extern_type;
typedef char intern_type;
typedef mbstate_t state_type;
_EXPLICIT codecvt (size_t refs=0):
locale::facet(refs,locale::__rw_ctype_category) { }
result out (mbstate_t& state,
const char* from, const char* from_end, const char*& from_next,
char* to, char* to_limit, char*& to_next) const
{ return do_out(state,from,from_end,from_next,to,to_limit,to_next); }
result unshift (mbstate_t& state,
char* to, char* to_limit, char*& to_next) const
{ return do_unshift(state,to,to_limit,to_next); }
result in(mbstate_t& state,
const char* from, const char* from_end, const char*& from_next,
char* to, char* to_limit, char*& to_next) const
{ return do_in(state,from,from_end,from_next,to,to_limit,to_next); }
int encoding() const _RWSTD_THROW_SPEC_NULL
{ return do_encoding(); }
bool always_noconv() const _RWSTD_THROW_SPEC_NULL
{ return do_always_noconv(); }
int length (const mbstate_t& state, const char* from, const char* end,
size_t max) const { return do_length(state,from,end,max); }
int max_length() const _RWSTD_THROW_SPEC_NULL
{ return do_max_length(); }
#if !defined(_MSC_VER) || defined(__BORLANDC__)
static locale::id _RWSTDExport id;
#else
static locale::id id;
#endif
// Rogue Wave extension:
typedef string internal_string_type;
typedef string external_string_type;
internal_string_type in (const external_string_type &s) const { return s; }
external_string_type out (const internal_string_type &s) const { return s; }
// Implementation:
enum { __facet_cat = locale::__rw_ctype_category, __ok_implicit = 1 };
protected:
virtual ~codecvt();
virtual result do_out(mbstate_t& state,
const char* from, const char* from_end, const char*& from_next,
char* to, char* to_limit, char*& to_next) const;
virtual result do_in(mbstate_t& state,
const char* from, const char* from_end, const char*& from_next,
char* to, char* to_limit, char*& to_next) const;
virtual result do_unshift(mbstate_t& state,
char* to, char* to_limit, char*& to_next) const;
virtual int do_encoding() const _RWSTD_THROW_SPEC_NULL;
virtual bool do_always_noconv() const _RWSTD_THROW_SPEC_NULL;
virtual int do_length (const mbstate_t&, const char* from, const char* end,
size_t max) const;
virtual int do_max_length() const _RWSTD_THROW_SPEC_NULL;
private:
#ifdef _RWSTD_NO_MEMBER_TEMPLATES
locale::id &__get_id (void) const { return id; }
#endif
};
#ifndef _RWSTD_NO_WIDE_CHAR
_RWSTD_TEMPLATE
class _RWSTDExport codecvt<wchar_t,char,mbstate_t>:
public locale::facet, public codecvt_base
{
public:
typedef wchar_t intern_type;
typedef char extern_type;
typedef mbstate_t state_type;
_EXPLICIT codecvt (size_t refs=0):
locale::facet(refs,locale::__rw_ctype_category) { }
result out (mbstate_t& state,
const wchar_t* from, const wchar_t* from_end, const wchar_t*& from_next,
char* to, char* to_limit, char*& to_next) const
{ return do_out(state,from,from_end,from_next,to,to_limit,to_next); }
result unshift (mbstate_t& state,
char* to, char* to_limit, char*& to_next) const
{ return do_unshift(state,to,to_limit,to_next); }
result in (mbstate_t& state,
const char* from, const char* from_end, const char*& from_next,
wchar_t* to, wchar_t* to_limit, wchar_t*& to_next) const
{ return do_in(state,from,from_end,from_next,to,to_limit,to_next); }
int encoding() const _RWSTD_THROW_SPEC_NULL
{ return do_encoding(); }
bool always_noconv() const _RWSTD_THROW_SPEC_NULL
{ return do_always_noconv(); }
int length (const mbstate_t& state, const char* from, const char* end,
size_t max) const
{ return do_length(state,from,end,max); }
int max_length() const _RWSTD_THROW_SPEC_NULL
{ return do_max_length(); }
#if !defined(_MSC_VER) || defined(__BORLANDC__)
static locale::id _RWSTDExport id;
#else
static locale::id id;
#endif
// Rogue Wave extension:
typedef string external_string_type;
typedef wstring internal_string_type;
internal_string_type in (const external_string_type &s) const;
external_string_type out (const internal_string_type &s) const;
// Implementation:
enum { __facet_cat = locale::__rw_ctype_category, __ok_implicit = 1 };
protected:
virtual ~codecvt();
virtual result do_out (mbstate_t& state,
const wchar_t* from, const wchar_t* from_end, const wchar_t*& from_next,
char* to, char* to_limit, char*& to_next) const;
virtual result do_in (mbstate_t& state,
const char* from, const char* from_end, const char*& from_next,
wchar_t* to, wchar_t* to_limit, wchar_t*& to_next) const;
virtual result do_unshift (mbstate_t& state,
char* to, char* to_limit, char*& to_next) const;
virtual bool do_always_noconv() const _RWSTD_THROW_SPEC_NULL;
virtual int do_encoding() const _RWSTD_THROW_SPEC_NULL;
virtual int do_length (const mbstate_t&, const char* from,
const char* end, size_t max) const;
virtual int do_max_length() const _RWSTD_THROW_SPEC_NULL;
private:
#ifdef _RWSTD_NO_MEMBER_TEMPLATES
locale::id &__get_id (void) const { return id; }
#endif
};
#endif // _RWSTD_NO_WIDE_CHAR
template <class internT, class externT, class stateT>
class _RWSTDExportTemplate codecvt: public locale::facet, public codecvt_base {
public:
typedef internT intern_type;
typedef externT extern_type;
typedef stateT state_type;
_EXPLICIT codecvt (size_t refs=0): locale::facet(refs) { }
result out (stateT& state,
const internT* from, const internT* from_end, const internT*& from_next,
externT* to, externT* to_limit, externT*& to_next) const
{ return do_out(state,from,from_end,from_next,to,to_limit,to_next); }
result unshift (stateT& state,
externT* to, externT* to_limit, externT*& to_next) const
{ return do_unshift(state,to,to_limit,to_next); }
result in (stateT& state,
const externT* from, const externT* from_end, const externT*& from_next,
internT* to, internT* to_limit, internT*& to_next) const
{ return do_in(state,from,from_end,from_next,to,to_limit,to_next); }
bool always_noconv() const _RWSTD_THROW_SPEC_NULL
{ return do_always_noconv(); }
int encoding() const _RWSTD_THROW_SPEC_NULL
{ return do_encoding(); }
int length (const stateT& state, const externT* from, const externT* end,
size_t max) const
{ return do_length(state,from,end,max); }
int max_length() const _RWSTD_THROW_SPEC_NULL
{ return do_max_length(); }
static locale::id id;
// Rogue Wave extension:
typedef basic_string<externT,char_traits<externT>,allocator<externT> >
external_string_type;
typedef basic_string<internT,char_traits<internT>,allocator<internT> >
internal_string_type;
internal_string_type in (const external_string_type &s) const;
external_string_type out (const internal_string_type &s) const;
// Implementation:
enum { __facet_cat = locale::__rw_ctype_category, __ok_implicit = 1 };
protected:
virtual ~codecvt();
virtual result do_out (stateT& state,
const internT* from, const internT* from_end, const internT*& from_next,
externT* to, externT* to_limit, externT*& to_next) const;
virtual result do_in (stateT& state,
const externT* from, const externT* from_end, const externT*& from_next,
internT* to, internT* to_limit, internT*& to_next) const;
virtual result do_unshift (stateT& state,
externT* to, externT* to_limit, externT*& to_next) const;
virtual int do_encoding() const _RWSTD_THROW_SPEC_NULL;
virtual bool do_always_noconv() const _RWSTD_THROW_SPEC_NULL;
virtual int do_length (const stateT&, const externT* from, const externT* end,
size_t max) const;
virtual int do_max_length() const _RWSTD_THROW_SPEC_NULL;
private:
#ifdef _RWSTD_NO_MEMBER_TEMPLATES
locale::id &__get_id (void) const { return id; }
#endif
};
template <class internT, class externT, class stateT>
class codecvt_byname: public codecvt<internT,externT,stateT> {
public:
typedef internT intern_type;
typedef externT extern_type;
typedef stateT state_type;
_EXPLICIT codecvt_byname (const char*, size_t refs=0);
protected:
virtual ~codecvt_byname();
virtual codecvt_base::result do_out (stateT&,
const internT*, const internT*, const internT*&,
externT*, externT*, externT*&) const;
virtual codecvt_base::result do_in (stateT&,
const externT*, const externT*, const externT*&,
internT*, internT*, internT*&) const;
virtual codecvt_base::result do_unshift (stateT&,
externT*, externT*, externT*&) const;
virtual int do_encoding () const _RWSTD_THROW_SPEC_NULL;
virtual bool do_always_noconv () const _RWSTD_THROW_SPEC_NULL;
// Virtual member functions inherited from codecvt<,,>:
// virtual int do_length (const stateT &state, const externT* from,
// const externT* end, size_t max) const;
// virtual int do_max_length() const _RWSTD_THROW_SPEC_NULL;
};
#ifndef _RWSTD_NO_NAMESPACE
}
#endif
#ifdef _RWSTD_COMPILE_INSTANTIATE
#include <rw/codecvt.cc>
#endif
#endif // __STD_CODECVT__
#pragma option pop
#endif /* __CODECVT_H */