epoc32/include/tools/stlport/stl/_codecvt.h
author William Roberts <williamr@symbian.org>
Wed, 31 Mar 2010 12:33:34 +0100
branchSymbian3
changeset 4 837f303aceeb
permissions -rw-r--r--
Current Symbian^3 public API header files (from PDK 3.0.h)
This is the epoc32/include tree with the "platform" subtrees removed, and
all but a selected few mbg and rsg files removed.
williamr@4
     1
/*
williamr@4
     2
 * Copyright (c) 1999
williamr@4
     3
 * Silicon Graphics Computer Systems, Inc.
williamr@4
     4
 *
williamr@4
     5
 * Copyright (c) 1999
williamr@4
     6
 * Boris Fomitchev
williamr@4
     7
 *
williamr@4
     8
 * This material is provided "as is", with absolutely no warranty expressed
williamr@4
     9
 * or implied. Any use is at your own risk.
williamr@4
    10
 *
williamr@4
    11
 * Permission to use or copy this software for any purpose is hereby granted
williamr@4
    12
 * without fee, provided the above notices are retained on all copies.
williamr@4
    13
 * Permission to modify the code and to distribute modified code is granted,
williamr@4
    14
 * provided the above notices are retained, and a notice that the code was
williamr@4
    15
 * modified is included with the above copyright notice.
williamr@4
    16
 *
williamr@4
    17
 */
williamr@4
    18
// WARNING: This is an internal header file, included by other C++
williamr@4
    19
// standard library headers.  You should not attempt to use this header
williamr@4
    20
// file directly.
williamr@4
    21
williamr@4
    22
williamr@4
    23
#ifndef _STLP_INTERNAL_CODECVT_H
williamr@4
    24
#define _STLP_INTERNAL_CODECVT_H
williamr@4
    25
williamr@4
    26
#ifndef _STLP_C_LOCALE_H
williamr@4
    27
#  include <stl/c_locale.h>
williamr@4
    28
#endif
williamr@4
    29
williamr@4
    30
#ifndef _STLP_INTERNAL_LOCALE_H
williamr@4
    31
#  include <stl/_locale.h>
williamr@4
    32
#endif
williamr@4
    33
williamr@4
    34
#ifndef _STLP_INTERNAL_ALGOBASE_H
williamr@4
    35
#  include <stl/_algobase.h>
williamr@4
    36
#endif
williamr@4
    37
williamr@4
    38
_STLP_BEGIN_NAMESPACE
williamr@4
    39
williamr@4
    40
class _STLP_CLASS_DECLSPEC codecvt_base {
williamr@4
    41
public:
williamr@4
    42
  enum result {ok, partial, error, noconv};
williamr@4
    43
};
williamr@4
    44
williamr@4
    45
template <class _InternT, class _ExternT, class _StateT>
williamr@4
    46
class codecvt : public locale::facet, public codecvt_base {
williamr@4
    47
public:
williamr@4
    48
  typedef _InternT intern_type;
williamr@4
    49
  typedef _ExternT extern_type;
williamr@4
    50
  typedef _StateT state_type;
williamr@4
    51
williamr@4
    52
#if defined (_STLP_MSVC) && (_STLP_MSVC < 1300)
williamr@4
    53
  /* For the moment VC6 do not support this facet default implementation
williamr@4
    54
   * because of the static locale::id instance. When VC6 see this definition
williamr@4
    55
   * it goes crasy with locale::id static instances and all the has_facet tests
williamr@4
    56
   * unit tests are failing.
williamr@4
    57
   */
williamr@4
    58
};
williamr@4
    59
#else
williamr@4
    60
  explicit codecvt(size_t __refs = 0) : locale::facet(__refs) {}
williamr@4
    61
williamr@4
    62
  result out(state_type&          __state,
williamr@4
    63
             const intern_type*   __from,
williamr@4
    64
             const intern_type*   __from_end,
williamr@4
    65
             const intern_type*&  __from_next,
williamr@4
    66
             extern_type*         __to,
williamr@4
    67
             extern_type*         __to_limit,
williamr@4
    68
             extern_type*&        __to_next) const {
williamr@4
    69
    return do_out(__state,
williamr@4
    70
                  __from, __from_end, __from_next,
williamr@4
    71
                  __to,   __to_limit, __to_next);
williamr@4
    72
  }
williamr@4
    73
williamr@4
    74
  result unshift(state_type&    __state,
williamr@4
    75
                 extern_type*   __to,
williamr@4
    76
                 extern_type*   __to_limit,
williamr@4
    77
                 extern_type*&  __to_next) const {
williamr@4
    78
    return do_unshift(__state, __to, __to_limit, __to_next);
williamr@4
    79
  }
williamr@4
    80
williamr@4
    81
  result in(state_type&         __state,
williamr@4
    82
            const extern_type*  __from,
williamr@4
    83
            const extern_type*  __from_end,
williamr@4
    84
            const extern_type*& __from_next,
williamr@4
    85
            intern_type*        __to,
williamr@4
    86
            intern_type*        __to_limit,
williamr@4
    87
            intern_type*&       __to_next) const {
williamr@4
    88
    return do_in(__state,
williamr@4
    89
                 __from, __from_end, __from_next,
williamr@4
    90
                 __to,  __to_limit, __to_next);
williamr@4
    91
  }
williamr@4
    92
williamr@4
    93
  int encoding() const _STLP_NOTHROW { return do_encoding(); }
williamr@4
    94
williamr@4
    95
  bool always_noconv() const _STLP_NOTHROW { return do_always_noconv(); }
williamr@4
    96
williamr@4
    97
  int length(const state_type&  __state,
williamr@4
    98
             const extern_type* __from,
williamr@4
    99
             const extern_type* __end,
williamr@4
   100
             size_t             __max) const {
williamr@4
   101
    return do_length(__state, __from, __end, __max);
williamr@4
   102
  }
williamr@4
   103
williamr@4
   104
  int max_length() const _STLP_NOTHROW { return do_max_length(); }
williamr@4
   105
williamr@4
   106
  static _STLP_STATIC_MEMBER_DECLSPEC locale::id id;
williamr@4
   107
williamr@4
   108
protected:
williamr@4
   109
  ~codecvt() {}
williamr@4
   110
williamr@4
   111
  virtual result do_out(state_type&,
williamr@4
   112
                        const intern_type*  __from,
williamr@4
   113
                        const intern_type*,
williamr@4
   114
                        const intern_type*& __from_next,
williamr@4
   115
                        extern_type*        __to,
williamr@4
   116
                        extern_type*,
williamr@4
   117
                        extern_type*&       __to_next) const
williamr@4
   118
  { __from_next = __from; __to_next   = __to; return noconv; }
williamr@4
   119
williamr@4
   120
  virtual result do_in (state_type&,
williamr@4
   121
                        const extern_type*  __from,
williamr@4
   122
                        const extern_type*,
williamr@4
   123
                        const extern_type*& __from_next,
williamr@4
   124
                        intern_type*        __to,
williamr@4
   125
                        intern_type*,
williamr@4
   126
                        intern_type*&       __to_next) const
williamr@4
   127
  { __from_next = __from; __to_next = __to; return noconv; }
williamr@4
   128
williamr@4
   129
  virtual result do_unshift(state_type&,
williamr@4
   130
                            extern_type* __to,
williamr@4
   131
                            extern_type*,
williamr@4
   132
                            extern_type*& __to_next) const
williamr@4
   133
  { __to_next = __to; return noconv; }
williamr@4
   134
williamr@4
   135
  virtual int do_encoding() const _STLP_NOTHROW
williamr@4
   136
  { return 1; }
williamr@4
   137
williamr@4
   138
  virtual bool do_always_noconv() const _STLP_NOTHROW
williamr@4
   139
  { return true; }
williamr@4
   140
williamr@4
   141
  virtual int do_length(const state_type&,
williamr@4
   142
                        const extern_type* __from,
williamr@4
   143
                        const extern_type* __end,
williamr@4
   144
                        size_t __max) const
williamr@4
   145
  { return (int)(min) ( __STATIC_CAST(size_t, (__end - __from)), __max); }
williamr@4
   146
williamr@4
   147
  virtual int do_max_length() const _STLP_NOTHROW
williamr@4
   148
  { return 1; }
williamr@4
   149
williamr@4
   150
private:
williamr@4
   151
  codecvt(const codecvt<intern_type, extern_type, state_type>&);
williamr@4
   152
  codecvt<intern_type, extern_type, state_type>& operator = (const codecvt<intern_type, extern_type, state_type>&);
williamr@4
   153
};
williamr@4
   154
williamr@4
   155
#  if defined (_STLP_EXPOSE_STREAM_IMPLEMENTATION) && !defined (_STLP_LINK_TIME_INSTANTIATION)
williamr@4
   156
#    if (_STLP_STATIC_TEMPLATE_DATA > 0)
williamr@4
   157
#      if !defined (__BORLANDC__)
williamr@4
   158
template <class _InternT, class _ExternT, class _StateT>
williamr@4
   159
locale::id codecvt<_InternT, _ExternT, _StateT>::id;
williamr@4
   160
#      endif
williamr@4
   161
#    endif
williamr@4
   162
#  endif
williamr@4
   163
#endif
williamr@4
   164
williamr@4
   165
template <class _InternT, class _ExternT, class _StateT>
williamr@4
   166
class codecvt_byname : public codecvt<_InternT, _ExternT, _StateT> {};
williamr@4
   167
williamr@4
   168
_STLP_TEMPLATE_NULL
williamr@4
   169
class _STLP_CLASS_DECLSPEC codecvt<char, char, mbstate_t>
williamr@4
   170
  : public locale::facet, public codecvt_base
williamr@4
   171
{
williamr@4
   172
  friend class _Locale_impl;
williamr@4
   173
williamr@4
   174
public:
williamr@4
   175
  typedef char       intern_type;
williamr@4
   176
  typedef char       extern_type;
williamr@4
   177
  typedef mbstate_t  state_type;
williamr@4
   178
williamr@4
   179
  explicit codecvt(size_t __refs = 0) : locale::facet(__refs) {}
williamr@4
   180
williamr@4
   181
  result out(mbstate_t&   __state,
williamr@4
   182
             const char*  __from,
williamr@4
   183
             const char*  __from_end,
williamr@4
   184
             const char*& __from_next,
williamr@4
   185
             char*        __to,
williamr@4
   186
             char*        __to_limit,
williamr@4
   187
             char*&       __to_next) const {
williamr@4
   188
    return do_out(__state,
williamr@4
   189
                  __from, __from_end, __from_next,
williamr@4
   190
                  __to,   __to_limit, __to_next);
williamr@4
   191
  }
williamr@4
   192
williamr@4
   193
  result unshift(mbstate_t& __state,
williamr@4
   194
                 char* __to, char* __to_limit, char*& __to_next) const
williamr@4
   195
    { return do_unshift(__state, __to, __to_limit, __to_next); }
williamr@4
   196
williamr@4
   197
  result in(state_type&   __state,
williamr@4
   198
            const char*  __from,
williamr@4
   199
            const char*  __from_end,
williamr@4
   200
            const char*& __from_next,
williamr@4
   201
            char*        __to,
williamr@4
   202
            char*        __to_limit,
williamr@4
   203
            char*&       __to_next) const {
williamr@4
   204
    return do_in(__state,
williamr@4
   205
                 __from, __from_end, __from_next,
williamr@4
   206
                 __to,   __to_limit, __to_next);
williamr@4
   207
  }
williamr@4
   208
williamr@4
   209
  int encoding() const _STLP_NOTHROW { return do_encoding(); }
williamr@4
   210
williamr@4
   211
  bool always_noconv() const _STLP_NOTHROW { return do_always_noconv(); }
williamr@4
   212
williamr@4
   213
  int length(const state_type& __state,
williamr@4
   214
             const char* __from, const char* __end,
williamr@4
   215
             size_t __max) const
williamr@4
   216
    { return do_length(__state, __from, __end, __max); }
williamr@4
   217
williamr@4
   218
  int max_length() const _STLP_NOTHROW { return do_max_length(); }
williamr@4
   219
williamr@4
   220
  static _STLP_STATIC_MEMBER_DECLSPEC locale::id id;
williamr@4
   221
williamr@4
   222
protected:
williamr@4
   223
  ~codecvt();
williamr@4
   224
williamr@4
   225
  virtual result do_out(mbstate_t&   /* __state */,
williamr@4
   226
                        const char*  __from,
williamr@4
   227
                        const char*  /* __from_end */,
williamr@4
   228
                        const char*& __from_next,
williamr@4
   229
                        char*        __to,
williamr@4
   230
                        char*        /* __to_limit */,
williamr@4
   231
                        char*&       __to_next) const;
williamr@4
   232
williamr@4
   233
  virtual result do_in (mbstate_t&   /* __state */ ,
williamr@4
   234
                        const char*  __from,
williamr@4
   235
                        const char*  /* __from_end */,
williamr@4
   236
                        const char*& __from_next,
williamr@4
   237
                        char*        __to,
williamr@4
   238
                        char*        /* __to_end */,
williamr@4
   239
                        char*&       __to_next) const;
williamr@4
   240
williamr@4
   241
  virtual result do_unshift(mbstate_t& /* __state */,
williamr@4
   242
                            char*      __to,
williamr@4
   243
                            char*      /* __to_limit */,
williamr@4
   244
                            char*&     __to_next) const;
williamr@4
   245
williamr@4
   246
  virtual int do_encoding() const _STLP_NOTHROW;
williamr@4
   247
  virtual bool do_always_noconv() const _STLP_NOTHROW;
williamr@4
   248
  virtual int do_length(const mbstate_t&         __state,
williamr@4
   249
                        const  char* __from,
williamr@4
   250
                        const  char* __end,
williamr@4
   251
                        size_t __max) const;
williamr@4
   252
  virtual int do_max_length() const _STLP_NOTHROW;
williamr@4
   253
private:
williamr@4
   254
  codecvt(const codecvt<char, char, mbstate_t>&);
williamr@4
   255
  codecvt<char, char, mbstate_t>& operator =(const codecvt<char, char, mbstate_t>&);
williamr@4
   256
};
williamr@4
   257
williamr@4
   258
# ifndef _STLP_NO_WCHAR_T
williamr@4
   259
williamr@4
   260
_STLP_TEMPLATE_NULL
williamr@4
   261
class _STLP_CLASS_DECLSPEC codecvt<wchar_t, char, mbstate_t>
williamr@4
   262
  : public locale::facet, public codecvt_base
williamr@4
   263
{
williamr@4
   264
  friend class _Locale_impl;
williamr@4
   265
public:
williamr@4
   266
  typedef wchar_t    intern_type;
williamr@4
   267
  typedef char       extern_type;
williamr@4
   268
  typedef mbstate_t  state_type;
williamr@4
   269
williamr@4
   270
  explicit codecvt(size_t __refs = 0) : locale::facet(__refs) {}
williamr@4
   271
williamr@4
   272
  result out(mbstate_t&      __state,
williamr@4
   273
             const wchar_t*  __from,
williamr@4
   274
             const wchar_t*  __from_end,
williamr@4
   275
             const wchar_t*& __from_next,
williamr@4
   276
             char*           __to,
williamr@4
   277
             char*           __to_limit,
williamr@4
   278
             char*&          __to_next) const {
williamr@4
   279
    return do_out(__state,
williamr@4
   280
                  __from, __from_end, __from_next,
williamr@4
   281
                  __to,   __to_limit, __to_next);
williamr@4
   282
  }
williamr@4
   283
williamr@4
   284
  result unshift(mbstate_t& __state,
williamr@4
   285
                 char*  __to, char*  __to_limit, char*& __to_next) const {
williamr@4
   286
    return do_unshift(__state, __to, __to_limit, __to_next);
williamr@4
   287
  }
williamr@4
   288
williamr@4
   289
  result in(mbstate_t&   __state,
williamr@4
   290
            const char*  __from,
williamr@4
   291
            const char*  __from_end,
williamr@4
   292
            const char*& __from_next,
williamr@4
   293
            wchar_t*     __to,
williamr@4
   294
            wchar_t*     __to_limit,
williamr@4
   295
            wchar_t*&    __to_next) const {
williamr@4
   296
    return do_in(__state,
williamr@4
   297
                 __from, __from_end, __from_next,
williamr@4
   298
                 __to,   __to_limit, __to_next);
williamr@4
   299
  }
williamr@4
   300
williamr@4
   301
  int encoding() const _STLP_NOTHROW { return do_encoding(); }
williamr@4
   302
williamr@4
   303
  bool always_noconv() const _STLP_NOTHROW { return do_always_noconv(); }
williamr@4
   304
williamr@4
   305
  int length(const mbstate_t& __state,
williamr@4
   306
             const char* __from, const char* __end,
williamr@4
   307
             size_t __max) const
williamr@4
   308
    { return do_length(__state, __from, __end, __max); }
williamr@4
   309
williamr@4
   310
  int max_length() const _STLP_NOTHROW { return do_max_length(); }
williamr@4
   311
williamr@4
   312
  static _STLP_STATIC_MEMBER_DECLSPEC locale::id id;
williamr@4
   313
williamr@4
   314
protected:
williamr@4
   315
  ~codecvt();
williamr@4
   316
williamr@4
   317
  virtual result do_out(mbstate_t&         __state,
williamr@4
   318
                        const wchar_t*  __from,
williamr@4
   319
                        const wchar_t*  __from_end,
williamr@4
   320
                        const wchar_t*& __from_next,
williamr@4
   321
                        char*        __to,
williamr@4
   322
                        char*        __to_limit,
williamr@4
   323
                        char*&       __to_next) const;
williamr@4
   324
williamr@4
   325
  virtual result do_in (mbstate_t&         __state,
williamr@4
   326
                        const char*  __from,
williamr@4
   327
                        const char*  __from_end,
williamr@4
   328
                        const char*& __from_next,
williamr@4
   329
                        wchar_t*        __to,
williamr@4
   330
                        wchar_t*        __to_limit,
williamr@4
   331
                        wchar_t*&       __to_next) const;
williamr@4
   332
williamr@4
   333
  virtual result do_unshift(mbstate_t&   __state,
williamr@4
   334
                            char*  __to,
williamr@4
   335
                            char*  __to_limit,
williamr@4
   336
                            char*& __to_next) const;
williamr@4
   337
williamr@4
   338
  virtual int do_encoding() const _STLP_NOTHROW;
williamr@4
   339
williamr@4
   340
  virtual bool do_always_noconv() const _STLP_NOTHROW;
williamr@4
   341
williamr@4
   342
  virtual int do_length(const mbstate_t& __state,
williamr@4
   343
                        const  char* __from,
williamr@4
   344
                        const  char* __end,
williamr@4
   345
                        size_t __max) const;
williamr@4
   346
williamr@4
   347
  virtual int do_max_length() const _STLP_NOTHROW;
williamr@4
   348
williamr@4
   349
private:
williamr@4
   350
  codecvt(const codecvt<wchar_t, char, mbstate_t>&);
williamr@4
   351
  codecvt<wchar_t, char, mbstate_t>& operator = (const codecvt<wchar_t, char, mbstate_t>&);
williamr@4
   352
};
williamr@4
   353
williamr@4
   354
# endif
williamr@4
   355
williamr@4
   356
_STLP_TEMPLATE_NULL
williamr@4
   357
class _STLP_CLASS_DECLSPEC codecvt_byname<char, char, mbstate_t>
williamr@4
   358
  : public codecvt<char, char, mbstate_t> {
williamr@4
   359
public:
williamr@4
   360
  explicit codecvt_byname(const char* __name, size_t __refs = 0);
williamr@4
   361
  ~codecvt_byname();
williamr@4
   362
private:
williamr@4
   363
  codecvt_byname(const codecvt_byname<char, char, mbstate_t>&);
williamr@4
   364
  codecvt_byname<char, char, mbstate_t>& operator =(const codecvt_byname<char, char, mbstate_t>&);
williamr@4
   365
};
williamr@4
   366
williamr@4
   367
# ifndef _STLP_NO_WCHAR_T
williamr@4
   368
_STLP_TEMPLATE_NULL
williamr@4
   369
class _STLP_CLASS_DECLSPEC codecvt_byname<wchar_t, char, mbstate_t>
williamr@4
   370
  : public codecvt<wchar_t, char, mbstate_t>
williamr@4
   371
{
williamr@4
   372
public:
williamr@4
   373
  explicit codecvt_byname(const char * __name, size_t __refs = 0, _Locale_name_hint* __hint = 0);
williamr@4
   374
williamr@4
   375
protected:
williamr@4
   376
  ~codecvt_byname();
williamr@4
   377
williamr@4
   378
  virtual result do_out(mbstate_t&         __state,
williamr@4
   379
                        const wchar_t*  __from,
williamr@4
   380
                        const wchar_t*  __from_end,
williamr@4
   381
                        const wchar_t*& __from_next,
williamr@4
   382
                        char*        __to,
williamr@4
   383
                        char*        __to_limit,
williamr@4
   384
                        char*&       __to_next) const;
williamr@4
   385
williamr@4
   386
  virtual result do_in (mbstate_t&         __state,
williamr@4
   387
                        const char*  __from,
williamr@4
   388
                        const char*  __from_end,
williamr@4
   389
                        const char*& __from_next,
williamr@4
   390
                        wchar_t*        __to,
williamr@4
   391
                        wchar_t*        __to_limit,
williamr@4
   392
                        wchar_t*&       __to_next) const;
williamr@4
   393
williamr@4
   394
  virtual result do_unshift(mbstate_t&   __state,
williamr@4
   395
                            char*  __to,
williamr@4
   396
                            char*  __to_limit,
williamr@4
   397
                            char*& __to_next) const;
williamr@4
   398
williamr@4
   399
  virtual int do_encoding() const _STLP_NOTHROW;
williamr@4
   400
williamr@4
   401
  virtual bool do_always_noconv() const _STLP_NOTHROW;
williamr@4
   402
williamr@4
   403
  virtual int do_length(const mbstate_t&         __state,
williamr@4
   404
                        const  char* __from,
williamr@4
   405
                        const  char* __end,
williamr@4
   406
                        size_t __max) const;
williamr@4
   407
williamr@4
   408
  virtual int do_max_length() const _STLP_NOTHROW;
williamr@4
   409
williamr@4
   410
private:
williamr@4
   411
  _Locale_ctype* _M_ctype;
williamr@4
   412
  codecvt_byname(const codecvt_byname<wchar_t, char, mbstate_t>&);
williamr@4
   413
  codecvt_byname<wchar_t, char, mbstate_t>& operator =(const codecvt_byname<wchar_t, char, mbstate_t>&);
williamr@4
   414
};
williamr@4
   415
williamr@4
   416
# endif
williamr@4
   417
williamr@4
   418
_STLP_END_NAMESPACE
williamr@4
   419
williamr@4
   420
#endif /* _STLP_INTERNAL_CODECVT_H */
williamr@4
   421
williamr@4
   422
// Local Variables:
williamr@4
   423
// mode:C++
williamr@4
   424
// End:
williamr@4
   425