4 Notes on the ctype implementation.
8 prepared by Benjamin Kosnik (bkoz@redhat.com) on August
30,
2000
21 2. What the standard says
27 3. Problems with
"C
" ctype : global locales, termination.
31 For the required specialization codecvt
<wchar_t, char, mbstate_t
> ,
32 conversions are made between the internal character set (always UCS4
33 on GNU/Linux) and whatever the currently selected locale for the
34 LC_CTYPE category implements.
40 The two required specializations are implemented as follows:
47 This is simple specialization. Implementing this was a piece of cake.
54 This specialization, by specifying all the template parameters, pretty
55 much ties the hands of implementors. As such, the implementation is
56 straightforward, involving mcsrtombs for the conversions between char
57 to wchar_t and wcsrtombs for conversions between wchar_t and char.
60 Neither of these two required specializations deals with Unicode
61 characters. As such, libstdc++-v3 implements
71 typedef ctype
<char> cctype;
74 More information can be found in the following testcases:
76 <LI> testsuite/
22_locale/ctype_char_members.cc
77 <LI> testsuite/
22_locale/ctype_wchar_t_members.cc
86 <LI> how to deal with the global locale issue?
88 <LI> how to deal with different types than char, wchar_t?
90 <LI> codecvt/ctype overlap: narrow/widen
92 <LI> mask typedef in codecvt_base, argument types in codecvt.
93 what is know about this type?
95 <LI> why mask* argument in codecvt?
97 <LI> can this be made (more) generic? is there a simple way to
98 straighten out the configure-time mess that is a by-product of
101 <LI> get the ctype
<wchar_t>::mask stuff under control. Need to
102 make some kind of static table, and not do lookup evertime
103 somebody hits the do_is... functions. Too bad we can't just
104 redefine mask for ctype
<wchar_t>
106 <LI> rename abstract base class. See if just smash-overriding
107 is a better approach. Clarify, add sanity to naming.
116 Ulrich Drepper for patient answering of late-night questions, skeletal
117 examples, and C language expertise.
121 8. Bibliography / Referenced Documents
124 Drepper, Ulrich, GNU libc (glibc)
2.2 manual. In particular, Chapters
"6. Character Set Handling
" and
"7 Locales and Internationalization
"
127 Drepper, Ulrich, Numerous, late-night email correspondence
130 ISO/IEC
14882:
1998 Programming languages - C++
133 ISO/IEC
9899:
1999 Programming languages - C
136 Langer, Angelika and Klaus Kreft, Standard C++ IOStreams and Locales, Advanced Programmer's Guide and Reference, Addison Wesley Longman, Inc.
2000
139 Stroustrup, Bjarne, Appendix D, The C++ Programming Language, Special Edition, Addison Wesley, Inc.
2000
142 System Interface Definitions, Issue
6 (IEEE Std.
1003.1-
200x)
143 The Open Group/The Institute of Electrical and Electronics Engineers, Inc.
144 http://www.opennc.org/austin/docreg.html