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 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 __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 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 */