The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Интерактивная система просмотра системных руководств (man-ов)

 ТемаНаборКатегория 
 
 [Cписок руководств | Печать]

codecvt (3)
  • >> codecvt (3) ( Solaris man: Библиотечные вызовы )
  • 
                           Standard C++ Library
                 Copyright 1998, Rogue Wave Software, Inc.
    
    
    NAME
         codecvt
    
          - A code conversion facet.
    
    
    
    SYNOPSIS
         #include <locale>
         class codecvt_base;
         template <class internT, class externT, class stateT>
         class codecvt;
    
    
    
    DESCRIPTION
         The   codecvt<internT,externT,stateT>_template   has    code
         conversion    facilities.    Default    implementations   of
         codecvt<char,wchar_t,mbstate_t>                          and
         codecvt<wchar_t,char,mbstate_t>    use_ctype<wchar_t>::widen
         and ctype<wchar_t>::narrow respectively. The default  imple-
         mentation  of codecvt<wchar_t,wchar_t,mbstate_t> simply uses
         memcpy (no particular conversion applied).
    
    
    
    INTERFACE
         class codecvt_base {
         public:
          enum result { ok, partial, error, noconv };
         };
    
         template <class internT, class externT, class stateT>
         class codecvt : public locale::facet, public codecvt_base {
         public:
          typedef internT  intern_type;
          typedef externT  extern_type;
          typedef stateT   state_type;
    
          explicit codecvt(size_t = 0)
          result out(stateT&, const internT*,
                     const internT*, const internT*&,
                     externT*, externT*, externT*&) const;
          result unshift(stateT&, externT*, externT*, extern*&)
                         const;
    
          result in(stateT&, const externT*,
                    const externT*, const externT*&,
                    internT*, internT*, internT*&) const;
    
          int encoding() const throw();
          bool always_noconv() const throw();
    
          int length(const stateT&, const externT*, const externT*,
                     size_t) const;
    
          int max_length() const throw();
          static locale::id id;
    
         protected:
           ~codecvt();  // virtual
          virtual result do_out(stateT&,
                                const internT*,
                                const internT*,
                                const internT*&,
                                externT*, externT*,
                                externT*&) const;
          virtual result do_in(stateT&,
                               const externT*,
                               const externT*,
                               const externT*&,
                               internT*, internT*,
                               internT*&) const;
          virtual result do_unshift(stateT&,
                                    externT*, externT*,
                                    externT*&) const;
    
          virtual int do_encoding() const throw();
          virtual bool do_always_noconv() const throw();
          virtual int do_length(const stateT&, const internT*,
                                const internT*,
                                size_t) const;
    
          virtual int do_max_length() const throw();
         };
    
    
    
    TYPES
         intern_type
    
    
            Type of character to convert from.
    
    
    
         extern_type
            Type of character to convert to.
    
    
    
         state_type
    
    
            Type to keep track of state and determine the  codeset(s)
            to be converted.
    
    
    
    CONSTRUCTORS
         explicit codecvt(size_t refs = 0)
    
    
            Construct a codecvt facet. If  the  refs  argument  is  0
            (default), then destruction of the object is delegated to
            the locale, or locales, containing it.  This  allows  the
            user  to  ignore lifetime management issues. On the other
            hand, if refs is 1, then the object  must  be  explicitly
            deleted; the locale does not do so.
    
    
    
    DESTRUCTORS
         ~codecvt();  // virtual and protected
    
    
            Destroy the facet.
    
    
    
    FACET ID
         static locale::id id;
    
    
            Unique identifier for this type of facet.
    
    
    
    PUBLIC MEMBER FUNCTIONS
         The public members of the codecvt facet include an interface
         to   protected   members.  Each  public  member  xxx  has  a
         corresponding virtual protected member do_xxx. All  work  is
         delegated  to  these  protected members.   For instance, the
         public length function simply  calls  its  protected  cousin
         do_length.
    
    
         bool
         always_noconv() const
          throw();
         int
         encoding() const
          throw();
         result
         in(stateT& state, const externT* from,
           const externT* from_end, const externT*& from_next,
           internT* to, internT* to_limit, internT*& to_next) const;
         int
         length(const stateT& state, const internT* from,
               const internT* end,
               size_t max) const;
         int
         max_length() const
          throw();
         result
         out(stateT& state, const internT* from,
            const internT* from_end, const internT*& from_next,
            externT* to, externT* to_limit, externT*& to_next)
            const;
         result
         unshift(stateT& state, externT* to, externT* to_limit,
                externT*& to) const;
    
    
            Each of these public member functions  xxx  simply  calls
            the corresponding protected do_xxx function.
    
    
    
    PROTECTED MEMBER FUNCTIONS
         virtual bool
         do_always_noconv() const
          throw();
    
    
            Returns true if no conversion is required.  This  is  the
            case  if  do_in  and  do_out  return noconv for all valid
            arguments. The instantiation codecvt<char,char,mbstate_t>
            returns  true,  while  all  other  default instantiations
            return false.
    
         virtual int
         do_encoding() const
          throw();
    
    
            Returns one of the following
    
    
    
                 -    -1 if the encoding on  the  external  character
                      sequence is dependent on state.
    
                 -    A constant number representing  the  number  of
                      external characters per internal character in a
                      fixed width encoding.
    
                 -    0 if the encoding is uses a variable width.
    
    
    
         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_out(stateT& state,
               const internT* from,
               const internT* from_end,
               const internT*& from_next,
               externT* to, externT* to_limit,
               externT*& to_next) const;
    
    
            Both  functions  take  characters   in   the   range   of
            [from,from_end),  apply  an  appropriate  conversion, and
            place the resulting characters in the buffer starting  at
            to.  Each function converts at most from_end-from internT
            characters, and stores no more than  to_limit-to  externT
            characters.  Both  do_out  and  do_in stop if they find a
            character they cannot convert. In any case, from_next and
            to_next  are  always  left pointing to the next character
            beyond the last one successfully converted.
    
            do_out and do_in must be called under the following  pre-
            conditions:
    
    
    
                 -    from <= from_end
    
                 -    to <= to_end
    
                 -    state is either initialized to the beginning of
                      a sequence or equal to the result of the previ-
                      ous conversion on the sequence.
    
    
            In the case where no conversion is required, from_next is
            set to from and to_next set to to.
    
            do_out and do_in return one the following:
    
            RETURN VALUE        MEANING
    
            ok                  completed the conversion
    
            partial             not all source characters converted
    
            error               encountered   a   source    character
                                it could not convert
    
            noconv              no conversion was needed
    
    
            If  either  function  returns  partial   and   (from   ==
            from_end), then one of two conditions prevail:
    
    
    
                 -    The destination sequence has not  accepted  all
                      the converted characters, or
    
                 -    Additional source characters are needed  before
                      another     destination    element    can    be
                      assembled..RE
    
    
    
         virtual int
         do_length(const stateT&, const externT* from,
                  const externT* end,
                  size_t max) const;
    
    
            Determines the largest number <= max of  internT  charac-
            ters  that  can be produced from the sequence [from,end),
            and returns the number of externT characters  that  would
            be  consumed  from  [from,end)  in  order to produce this
            number of internT characters.
            do_length  must  be  called  under  the  following   pre-
            conditions:
    
    
    
                 -    from <= from_end
    
                 -    state is either initialized to the beginning of
                      a sequence or equal to the result of the previ-
                      ous conversion on the sequence.
    
    
    
         virtual int
         do_max_length() const throw();
    
    
            Returns the maximum value that do_length can  return  for
            any  valid combination of its first three arguments, with
            the fourth argument (max) set to 1.
    
    
    
         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;
    
    
            See do_in above.
    
    
    
         virtual result
         do_unshift(stateT& state, externT* to, externT* to_limit,
                   externT*& to_next) const;
    
    
            Determines the sequence of externT characters that should
            be  appended to a sequence whose state is given by state,
            in order to terminate the sequence (that is, to return it
            to the default or initial or unshifted state). Stores the
            terminating  sequence  starting  at  to,  proceeding   no
            farther than to_limit. Sets to_end to point past the last
            externT character stored.
    
            do_unshift  must  be  called  under  the  following  pre-
            conditions:
                 -    from <= from_end
    
                 -    state is either initialized to the beginning of
                      a sequence or equal to the result of the previ-
                      ous conversion on the sequence.
    
    
            The return value from do_unshift is as follows:
    
            RETURN VALUE        MEANING
    
    
            ok                  terminating       sequence        was
                                stored successfully
    
            partial             only    part    of    the    sequence
                                was stored
    
            error               the state is invalid
    
            noconv              no    terminating     sequence     is
                                needed for this state
    
    
    
    EXAMPLE
         //
         // codecvt.cpp
         //
         #include <sstream>
         #include "codecvte.h"
    
         int main ()
         {
          using namespace std;
    
          mbstate_t state;
    
           // A string of ISO characters and buffers to hold
           // conversions
          string ins("\xfc \xcc \xcd \x61 \xe1 \xd9 \xc6 \xf5");
          string ins2(ins.size(),'.');
          string outs(ins.size(),'.');
    
           // Print initial contents of buffers
          cout << "Before:\n" << ins << endl;
          cout << ins2 << endl;
          cout << outs << endl << endl;
    
           // Initialize buffers
          string::iterator in_it = ins.begin();
          string::iterator out_it = outs.begin();
           // Create a user defined codecvt fact
           // This facet converts from ISO Latin
           // Alphabet No. 1 (ISO 8859-1) to
           // U.S. ASCII code page 437
           // This facet replaces the default for
           // codecvt<char,char,mbstate_t>
          locale loc(locale(),new ex_codecvt);
    
           // Now get the facet from the locale
          const codecvt<char,char,mbstate_t>& cdcvt =
         #ifndef _RWSTD_NO_TEMPLATE_ON_RETURN_TYPE
            use_facet<codecvt<char,char,mbstate_t> >(loc);
         #else
            use_facet(loc,(codecvt<char,char,mbstate_t>*)0);
         #endif
    
           // convert the buffer
          cdcvt.in(state,ins.begin(),ins.end(),in_it,
                   outs.begin(),outs.end(),out_it);
    
          cout << "After in:\n" << ins << endl;
          cout << ins2 << endl;
          cout << outs << endl << endl;
    
           // Lastly, convert back to the original codeset
          in_it = ins.begin();
          out_it = outs.begin();
          cdcvt.out(state, outs.begin(),outs.end(),out_it,
                    ins2.begin(),ins2.end(),in_it);
    
          cout << "After out:\n" << ins << endl;
          cout << ins2 << endl;
          cout << outs << endl;
    
          return 0;
         }
    
    
    
    SEE ALSO
         locale, facets, codecvt_byname
    
    
    
    


    Поиск по тексту MAN-ов: 




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру