Ne.app NeANT
The Ne.app NeANT User module of the NeANT distribution.
locale_combine.cpp
Go to the documentation of this file.
1
30#define _RWSTD_LIB_SRC
31
32#include <rw/_defs.h>
33
34#include <locale.h>
35#include <stdio.h>
36#include <string.h> // for memxxx() and strxxx() functions
37
38#include <loc/_locale.h>
39
40#include "access.h"
41#include "locale_body.h"
42#include "setlocale.h"
43
44#if 6 == _RWSTD_HP_aCC_MAJOR && _RWSTD_HP_aCC_MINOR <= 1600
45 // silence bogus HP aCC 6.16/cadvise warning #20200-D:
46 // Potential null pointer dereference
47# pragma diag_suppress 20200
48#endif
49
50
52
53
54// constructs a new locale name from two locale names, combining
55// all but the category given by `cat' from `name_1' and the rest
56// from `name_2'
57static void
58__rw_combine_names (__rw_chararray &locname,
59 const char *name_1, const char *name_2, int cat)
60{
61 _RWSTD_ASSERT (0 != name_1);
62 _RWSTD_ASSERT (0 != name_2);
63
64 // `cat' must be a locale::category (and not a LC_XXX value)
65 _RWSTD_ASSERT (__rw_locale::_C_check_category (cat));
66
67 for (_RWSTD_SIZE_T i = 0; i != __rw_n_cats; ++i) {
68 const char *nxt1 = strchr (name_1, *_RWSTD_CAT_SEP);
69 const char *nxt2 = strchr (name_2, *_RWSTD_CAT_SEP);
70
71 if (!nxt1 || !*nxt1)
72 nxt1 = name_1 + strlen (name_1);
73
74 if (!nxt2 || !*nxt2)
75 nxt2 = name_2 + strlen (name_2);
76
77 // convert a LC_XXX constant to a locale::category value
78 const int c = __rw_locale::_C_LC2category (__rw_cats [i].cat);
79
80 const char *from; // copy from where
81 _RWSTD_SIZE_T len; // this many chars
82
83 if (cat & c) { // category comes from `other'
84 from = name_2;
85 len = nxt2 - name_2;
86 }
87 else { // category comes from `one'
88 from = name_1;
89 len = nxt1 - name_1;
90 }
91
92 if (locname.size ())
93 locname.append (_RWSTD_CAT_SEP, 1);
94
95 locname.append (from, len);
96
97 // advance to the next category name in each name
98 if (*nxt1)
99 name_1 = nxt1 + 1;
100
101 if (*nxt2)
102 name_2 = nxt2 + 1;
103 }
104}
105
106
107void __rw_locale::
108_C_construct (const __rw_locale &rhs, const __rw_facet *pfacet)
109{
110 // called from ctor only, members are not initialized
111 _C_ref = 1;
112
113 // copy standard facets from other locale
114#if defined (__i386__) || !defined (__GNUG__) || __GNUG__ < 3
115
116 memcpy (_C_std_facets, rhs._C_std_facets,
117 _C_n_std_facets * sizeof *_C_std_facets);
118
119#else // !i86 || !gcc 3.x
120
121 // Working around a bug (most probably) identical to the one described
122 // and fixed in __rw_locale::__rw_locale, but related to the use of
123 // memcpy.
124
125 for(_RWSTD_SIZE_T i = 0; i != _C_n_std_facets; i++)
126 _C_std_facets [i] = rhs._C_std_facets [i];
127
128#endif // i86/gcc 3.x
129
130 _RWSTD_ASSERT (!pfacet || pfacet->_C_pid);
131
132 // get facet's index into one of the facet arrays
133 _RWSTD_SIZE_T inx = pfacet
134 ? rhs._C_get_facet_inx (*pfacet->_C_pid) : (_RWSTD_SIZE_T)(-1);
135
136 // extend size if facet isn't installed in `rhs'
137 _C_n_usr_facets = rhs._C_n_usr_facets
138 + (inx > rhs._C_n_usr_facets + _C_n_std_facets);
139
140 // allocate a buffer for user facets if necesary
141 _C_usr_facets = _C_n_usr_facets ? new __rw_facet* [_C_n_usr_facets] : 0;
142
143 // copy facets from other locale
144 memcpy (_C_usr_facets, rhs._C_usr_facets,
145 rhs._C_n_usr_facets * sizeof *_C_usr_facets);
146
147 _RWSTD_ASSERT (rhs._C_name);
148
149 _C_name = 0;
150
151 // copy facet bits from `rhs' and adjust below as necessary
152 _C_std_facet_bits = rhs._C_std_facet_bits;
153 _C_byname_facet_bits = rhs._C_byname_facet_bits;
154
155 if (pfacet) {
156 __rw_facet* const pf = _RWSTD_CONST_CAST (__rw_facet*, pfacet);
157 // overwrite an existing pointer or add a new one
158 if (inx < _C_n_std_facets) {
159 _C_std_facets [inx] = pf;
160
161 const _RWSTD_SIZE_T facet_bit = 1UL << inx;
162
163 // set or clear a corresponding bit based on whether
164 // the facet is one of the standard facets or not
165 // (user-defined objects even if they are of standard
166 // facet types, are not considered standard facets)
167 if (pf->_C_type > 0)
168 _C_std_facet_bits |= facet_bit;
169 else
170 _C_std_facet_bits &= ~facet_bit;
171
172 // ditto for named facet bitmap
173 if (pf->_C_type & 1) // even types are _byname
174 _C_byname_facet_bits &= ~facet_bit;
175 else
176 _C_byname_facet_bits |= facet_bit;
177
178 // construct a new name
179 // _C_name =
180 // _C_make_name (_C_namebuf, sizeof _C_namebuf, rhs, *pfacet);
181 }
182 else if ((_RWSTD_SIZE_T)(-1) == inx)
183 _C_usr_facets [_C_n_usr_facets - 1] = pf;
184 else
185 _C_usr_facets [inx - _C_n_std_facets] = pf;
186 }
187
188 if (!_C_name) {
189 // simply copy name from `rhs'
190 const _RWSTD_SIZE_T size = strlen (rhs._C_name) + 1;
191 char* const name = size <= sizeof _C_namebuf
192 ? _C_namebuf : new char [size];
193
194 memcpy (name, rhs._C_name, size);
195 _C_name = name;
196 }
197
198 // increment reference counts for facets (including the newly added one)
199 for (inx = 0; inx != _C_n_std_facets; ++inx) {
200 if (_C_std_facets [inx])
201 _RWSTD_ATOMIC_PREINCREMENT (_C_std_facets [inx]->_C_ref,
202 _C_std_facets [inx]->_C_mutex);
203 }
204
205 for (inx = 0; inx != _C_n_usr_facets; ++inx) {
206 _RWSTD_ATOMIC_PREINCREMENT (_C_usr_facets [inx]->_C_ref,
207 _C_usr_facets [inx]->_C_mutex);
208 }
209}
210
211
212void __rw_locale::
213_C_construct (const __rw_locale &one, const __rw_locale &other, int cat)
214{
215 // category must be valid at this point (checked by caller)
216 _RWSTD_ASSERT (_C_check_category (cat));
217
218 // called from ctor only, members are not initialized
219 _C_ref = 1;
220
221 // size is the same as that of `one'
222 _C_n_usr_facets = one._C_n_usr_facets;
223
224 // allocate only if internal buffer is insufficient
225 _C_usr_facets = _C_n_usr_facets ? new __rw_facet* [_C_n_usr_facets] : 0;
226
227 // copy standard facets to `one' from `other'
228 memcpy (_C_std_facets, one._C_std_facets,
229 _C_n_std_facets * sizeof *_C_std_facets);
230
231 // copy user-defined facets (if any)
232 memcpy (_C_usr_facets, one._C_usr_facets,
233 _C_n_usr_facets * sizeof *_C_usr_facets);
234
235 // compute and assign facet bitmaps
236 const int bits = _C_LC2facet_bits (cat);
237
238 _C_std_facet_bits = one._C_std_facet_bits & ~bits
239 | other._C_std_facet_bits & bits;
240
241 _C_byname_facet_bits = one._C_byname_facet_bits & ~bits
242 | other._C_byname_facet_bits & bits;
243
244 for (_RWSTD_SIZE_T i = 0; i != _C_n_std_facets; ++i) {
245
246 // each facet is stored at an index equal to its (id - 1)
247 // convert an LC_XXX constant to a locale::category value
248 const int c = _C_LC2category (__rw_get_cat (int (i) + 1));
249
250 if (cat & c) {
251 // assign/overwrite corresponding facets
252 _C_std_facets [i] = other._C_std_facets [i];
253 }
254
255 if (_C_std_facets [i]) {
256 // bump up the facet's reference count of *this' facet
257 _RWSTD_ATOMIC_PREINCREMENT (_C_std_facets [i]->_C_ref,
258 _C_std_facets [i]->_C_mutex);
259 }
260 }
261
262 // increment the ref count of user-defined facets (if any)
263 for (_RWSTD_SIZE_T j = 0; j != _C_n_usr_facets; ++j) {
264
265 _RWSTD_ASSERT (_C_usr_facets [j]);
266
267 _RWSTD_ATOMIC_PREINCREMENT (_C_usr_facets [j]->_C_ref,
268 _C_usr_facets [j]->_C_mutex);
269 }
270
271 __rw_chararray locname;
272
273 __rw_combine_names (locname, one._C_name, other._C_name, cat);
274
275 if (locname.size () >= one._C_namebuf_size)
276 _C_name = locname.release ();
277 else {
278 _C_name = _C_namebuf;
279 memcpy (_C_namebuf, locname.data (), locname.size () + 1);
280 }
281}
282
283
284_RW::__rw_locale* __rw_locale::
285_C_combine (const __rw_facet *pfacet) const
286{
287 _RWSTD_ASSERT (pfacet);
288
289 // template ctor: locale::locale (const locale&, Facet*)
290 // with `facet' being installed (e.g., adding or replacing
291 // an existing one)
292
293 // verify that Facet::id has been initialized
294 _RWSTD_ASSERT (pfacet->_C_pid);
295 _RWSTD_ASSERT (*pfacet->_C_pid);
296
297 // get the locale name ("C" if it's NUL)
298 const char* const one_locname = _C_name ? _C_name : "C";
299
300 // get the name of the locale `*pfacet' belongs to
301 const char* const facet_locname =
302 pfacet->_C_name ? pfacet->_C_name : "C";
303
304 // get the locale::category that `*pfacet' belongs to
305 const int facet_cat =
306 _C_LC2category (__rw_get_cat (int (*pfacet->_C_pid)));
307
308 bool managed = false;
309
310 if (pfacet->_C_type && !_C_n_usr_facets) {
311
312 // facet is one of the (perhaps byname) standard facets
313
314 // compute the number of the bit in _C_std_facet_bits or
315 //_C_byname_facet_bits corresponding to the facet being
316 // used (i.e., `*pfacet')
317 const _RWSTD_SIZE_T facet_bit =
318 (_RWSTD_SIZE_T)1U << (*pfacet->_C_pid - 1U);
319
320 // a locale object is globally managed if all its facets are objects
321 // of standard facet types (ordinary or byname) that were constructed
322 // by the library and within each locale category all facets belong
323 // to the same facet
324 // managed locales have names that completely describe their facets
325 // and from which they can be unambiguously and fully constructed
326 //
327 // note that in the code snippet below, x0 is not a managed locale
328 // (its name is "*"), but y0 is a managed locale (on SunOS, its name
329 // is "/de_DE/de_DE/de_DE/de_DE/de_DE/en_US"); x1 is the same as x0
330 // and y1 is the same as de:
331 //
332 // locale de ("de_DE");
333 // locale en ("en_US");
334 // locale x0 = de.combine<messages<char> >(en);
335 // locale y0 = x0.combine<messages<wchar_t> >(en);
336 // locale x1 = y0.combine<messages<wchar_t> >(de);
337 // locale y1 = x1.combine<messages<char> >(de);
338 // assert (de == y1);
339 // assert (x0 == x1);
340
341 if (__rw_locale::_C_all == (_C_std_facet_bits | facet_bit)) {
342
343 // compute the bitmask corresponding to all the facets in
344 // the same category as the one to which `*pfacet' belongs
345 const int cat_bits = _C_LC2facet_bits (facet_cat);
346
347 // get the index into the _C_std_facets array for `pfacet'
348 const _RWSTD_SIZE_T facet_inx =
349 _C_get_facet_inx (*pfacet->_C_pid);
350
351 managed = true;
352
353 // iterate over all facets that belong the same category
354 // as `*pfacet' and compare the name of each with the name
355 // of `*pfacet' to determine if they all have the same name
356 // _byname facets that are not installed yet (i.e., whose
357 // pointers are 0 come from a locale whose name is given
358 // by the name of the whole locale
359 for (_RWSTD_SIZE_T i = 0; i != _C_n_std_facets; ++i) {
360
361 // skip facets from other categories
362 if (!((1 << i) & cat_bits))
363 continue;
364
365 // skip the facet being replaced
366 if (facet_inx == i)
367 continue;
368
369 const char* const ones_facet_locname =
370 _C_std_facets [i] ? _C_std_facets [i]->_C_name
371 ? _C_std_facets [i]->_C_name : "C" : one_locname;
372
373 if (strcmp (facet_locname, ones_facet_locname)) {
374 managed = false;
375 break;
376 }
377 }
378 }
379 }
380
381 __rw_locale *plocale;
382
383 if (managed) {
384
385 __rw_chararray locname;
386 __rw_combine_names (locname, one_locname, facet_locname, facet_cat);
387
388 plocale = __rw_locale::_C_manage (0, locname.data ());
389
390 _RWSTD_ASSERT (0 != plocale);
391 _RWSTD_ASSERT (plocale->_C_is_managed (_STD::locale::none));
392 }
393 else {
394 plocale = new __rw_locale (*this, pfacet);
395
396 _RWSTD_ASSERT (0 != plocale);
397 _RWSTD_ASSERT (!plocale->_C_is_managed (_STD::locale::none));
398 }
399
400 return plocale;
401}
402
403
404__rw_locale* __rw_locale::
405_C_combine (const __rw_locale &other, int cat)
406{
407 // convert a possible LC_XXX constant to a locale::category value
408 cat = _C_LC2category (cat);
409
410 // verify that the category argument is valid
411 if (!_C_check_category (cat))
412 return 0;
413
414
415 // combining ctor: locale (const locale&, const locale&, cat)
416
417 if (this == &other || _STD::locale::none == cat) {
418 // same as copy ctor (copying all facets from `*this')
419 // body may or may not be globally managed
420 _RWSTD_ATOMIC_PREINCREMENT (_C_ref, false);
421
422 return this;
423 }
424
425#if 0 // disabled
426
427 // 22.1.1.2, p14: only facets that implement categories in `cat' are
428 // to be copied from `other', i.e., not necessarily user-defined facets
429
430 if (_RWSTD_LC_ALL == cat || _STD::locale::all == cat) {
431 // same as copy ctor (copying all facets from `other')
432 // body may or may not be globally managed
433 _RWSTD_ATOMIC_PREINCREMENT (other._C_ref, false);
434 return &other;
435 }
436
437#endif // 0/1
438
439 if ( _C_is_managed (_STD::locale::all & ~cat)
440 && other._C_is_managed (cat)) {
441
442 // determine new locale name from `*this' and `other's, taking all of
443 // this's category names except for those given by `cat', which come
444 // from `other'
445
446 const char *name_1 = _C_name;
447 const char *name_2 = other._C_name;
448
449 if (0 == strcmp (name_1, name_2)) {
450 // if locale names are the same, return a globally managed body
451 __rw_locale* const plocale = __rw_locale::_C_manage (0, name_1);
452
453 _RWSTD_ASSERT (0 != plocale);
454 _RWSTD_ASSERT (plocale->_C_is_managed (_STD::locale::none));
455
456 return plocale;
457 }
458
459 __rw_chararray locname;
460
461 // compose the new name
462 __rw_combine_names (locname, name_1, name_2, cat);
463
464 // return a globally managed body
465 __rw_locale* const plocale =
466 __rw_locale::_C_manage (0, locname.data ());
467
468 _RWSTD_ASSERT (0 != plocale);
469 _RWSTD_ASSERT (plocale->_C_is_managed (_STD::locale::none));
470
471 return plocale;
472 }
473
474 // one or both locales are not globally managed (one or more of
475 // their facets are of use-defined types, possibly derived from
476 // the standard facets), and thus the combined locale cannot be
477 // globally managed either
478 __rw_locale *plocale = new __rw_locale (*this, other, cat);
479
480 _RWSTD_ASSERT (!plocale->_C_is_managed (_STD::locale::none));
481
482 return plocale;
483}
484
485
486/* static */ __rw_locale* __rw_locale::
487_C_get_body (__rw_locale *one,
488 __rw_locale *other,
489 const char *locname,
490 int cat,
491 const __rw_facet *pfacet)
492{
493 __rw_chararray realname;
494
495 // see if `locname' contains embedded "LC_XXX=..." sequences
496 if (locname && !strncmp (locname, "LC_", 3)) {
497
498 // convert a combined locale name (consisting of a sequence
499 // of `sep'-separated LC_XXX=<name> substrings) to a normalized
500 // form in the expected (internal) format and order
501
502 const char *pcatnames [__rw_n_cats] = { 0 };
503
504 // try the libc "native" separator first, semicolon next
505 const char *sep = strchr (locname, *_RWSTD_CAT_SEP);
506 if (!sep)
507 sep = ";";
508
509 for (const char *s = locname; *s; ) {
510
511 const char *next = strchr (s, *sep);
512 if (!next)
513 next = s + strlen (s);
514
515 const char* const endcat = strchr (s, '=');
516 if (!endcat)
517 return 0; // error: missing `=' after LC_XXX
518
519 // go through the LC_XXX category names, trying to find
520 // a match; if found, remember its position (duplicates
521 // are not allowed)
522
523 for (_RWSTD_SIZE_T i = 0; i != __rw_n_cats; ++i) {
524 if (!strncmp (__rw_cats [i].name, s, endcat - s)) {
525 if (pcatnames [i])
526 return 0; // error: duplicate LC_XXX
527
528 pcatnames [i] = endcat + 1;
529 break;
530 }
531 }
532
533 s = *next ? next + 1 : next;
534 }
535
536 // compose a normalized locale name out of category names
537 _RWSTD_SIZE_T size = 0;
538 for (_RWSTD_SIZE_T i = 0; i != __rw_n_cats; ++i) {
539
540 if (!pcatnames [i]) {
541 // use "C" for missing LC_XXX values
542 pcatnames [i] = "C";
543 }
544
545 const char *endcat = strchr (pcatnames [i], *sep);
546
547 if (!endcat)
548 endcat = pcatnames [i] + strlen (pcatnames [i]);
549
550 const _RWSTD_SIZE_T catsize = endcat - pcatnames [i];
551
552 // append name followed by the libc "native" separator
553 realname.append (pcatnames [i], catsize);
554 realname.append (_RWSTD_CAT_SEP, 1);
555
556 size += catsize;
557 }
558
559 locname = realname.data ();
560 }
561 else if (locname && *locname == *_RWSTD_CAT_SEP) {
562 // advance past the leading category separator if present
563 ++locname;
564 }
565
566 if (!one && !other && !locname && _STD::locale::none == cat && !pfacet) {
567 // implements default ctor: locale::locale () throw ()
568 __rw_locale* const global = __rw_locale::_C_manage (0, 0);
569
570 _RWSTD_ASSERT (0 != global);
571
572 return global;
573 }
574
575 if (one && !other && !locname && _STD::locale::none == cat && !pfacet) {
576 // copy ctor: locale::locale (const locale&)
577 // or combining ctor: locale::locale (const locale&, Facet*)
578 // (in the second case with Facet* being 0)
579 // body may or may not be globally managed
580 // or locale::operator=(const locale&)
581 _RWSTD_ATOMIC_PREINCREMENT (one->_C_ref, false);
582 return one;
583 }
584
585 if (!one && !other && locname && _STD::locale::none == cat && !pfacet) {
586 // ctor: locale::locale (const char*)
587 // if successful, body is globally managed
588 __rw_locale* const plocale = __rw_locale::_C_manage (0, locname);
589
590 _RWSTD_ASSERT (!plocale || plocale->_C_is_managed (_STD::locale::none));
591
592 return plocale;
593 }
594
595 if (one && !other && !locname && _STD::locale::none == cat && pfacet) {
596 // template ctor: locale::locale (const locale&, Facet*)
597 // with `pfacet' being installed (e.g., adding or replacing
598 // an existing one)
599 // template <class Facet> locale::combine(const locale&) is
600 // trivially implemented inline in terms of the template ctor
601 __rw_locale* const plocale = one->_C_combine (pfacet);
602
603 _RWSTD_ASSERT (0 != plocale);
604
605 return plocale;
606 }
607
608 if (one && !other && locname && !pfacet) {
609 // combining ctor: locale (const locale&, const char*, category)
610
611 // construct a temporary locale from locale name `locname'
612 const _STD::locale tmp (locname);
613
614 // construct a locale combined from `one' and the temporary
615 __rw_locale* const plocale = one->_C_combine (*tmp._C_body, cat);
616
617 return plocale;
618 }
619
620 if (one && other && !locname && !pfacet) {
621 // combining ctor: locale (const locale&, const locale&, category)
622 return one->_C_combine (*other, cat);
623 }
624
625 _RWSTD_ASSERT (!"logic error: bad combination of arguments");
626
627 return 0;
628}
629
630} // namespace __rw
631
632
634
635
636// outlined to hide implementation details
637locale::
638locale (const char *locname)
639{
640 // verify 22.1.1.2, p7: `locname' must not be null
641 _RWSTD_REQUIRES (locname,
643 _RWSTD_FUNC ("locale::locale (const char*)"), "(null)"));
644
645 _C_body = _RW::__rw_locale::_C_get_body (0, 0, locname, none, 0);
646
647 // verify 22.1.1.2, p7: `locname' must be valid
648 _RWSTD_REQUIRES (_C_body,
650 _RWSTD_FUNC ("locale::locale (const char*)"), locname));
651}
652
653
654// outlined to hide implementation details
655locale::
656locale (const locale &rhs, const char *locname, category cat)
657{
658 // verify 22.1.1.2, p10: `locname' must not ne null
659 _RWSTD_REQUIRES (locname,
661 _RWSTD_FUNC ("locale::locale (const locale&, "
662 "const char*, category)"), "(null"));
663
664 _C_body = _RW::__rw_locale::_C_get_body (rhs._C_body, 0, locname, cat, 0);
665
666 // verify 22.1.1.2, p10: `locname' must be valid
667 _RWSTD_REQUIRES (_C_body,
669 _RWSTD_FUNC ("locale::locale (const locale&, "
670 "const char*, category)"), locname));
671}
672
673
674// outlined to hide implementation details
675locale::
676locale (const locale &one, const locale &other, category cat)
677 : _C_body (_RW::__rw_locale::_C_get_body (one._C_body, other._C_body,
678 0, cat, 0))
679{
680 // verify 22.1.1.2, p14 (missing requirement): category must be valid
681 _RWSTD_REQUIRES (_C_body,
683 _RWSTD_FUNC ("locale::locale (const locale&, "
684 "const locale&, category)"), cat));
685}
686
687
688// outlined to hide implementation details
689/* private */ locale::
690locale (_RW::__rw_locale &rhs, const facet *pfacet)
691 : _C_body (_RW::__rw_locale::_C_get_body (&rhs, 0, 0, none, pfacet))
692{
693 // empty
694}
695
696
697const locale::facet* locale::
698_C_get_facet (const id &fid) const
699{
700 // initialize id if not yet initialized
701 if (!fid._C_id)
702 fid._C_init ();
703
704 // properly initialized facet id's are non-zero
705 _RWSTD_ASSERT (0 != fid._C_id);
706
707 _RWSTD_ASSERT (0 != _C_body);
708
709 // find the index at which the facet is stored in one of the facet arrays
710 const _RWSTD_SIZE_T inx = _C_body->_C_get_facet_inx (fid._C_id);
711 if ((_RWSTD_SIZE_T)(-1) == inx)
712 return 0;
713
714 const locale::facet* const pfacet = inx < _RW::__rw_locale::_C_n_std_facets
715 ? _C_body->_C_std_facets [inx]
716 : _C_body->_C_usr_facets [inx - _RW::__rw_locale::_C_n_std_facets];
717
718 if (pfacet) {
719 // facet id must have been initialized to point
720 // to the numeric member of the static Facet::id
721 _RWSTD_ASSERT (pfacet->_C_pid);
722
723 // make sure the static Facet::id matches its (non-static) id member
724 _RWSTD_ASSERT (*pfacet->_C_pid == fid._C_id);
725 }
726
727 return pfacet;
728}
729
730
731} // namespace std
#define i
Definition 17.names.cpp:126
#define rhs
Definition 17.names.cpp:536
#define pf
Definition 17.names.cpp:516
#define j
Definition 17.names.cpp:127
#define c
Definition 17.names.cpp:111
#define tmp
Definition 17.names.cpp:553
#define s
#define len
Definition 17.names.cpp:488
#define inx
Definition 17.names.cpp:484
volatile int one
Definition LIMITS.cpp:61
#define _RWSTD_REQUIRES(pred, args)
Definition _defs.h:1132
#define _RWSTD_ATOMIC_PREINCREMENT(x, ignore)
Definition _defs.h:699
#define _RWSTD_NAMESPACE(name)
Definition _defs.h:567
#define _RWSTD_FUNC(ignore)
Definition _defs.h:1120
#define _RWSTD_ASSERT(ignore)
Definition _defs.h:1108
#define _RWSTD_CONST_CAST(T, x)
Definition _defs.h:536
#define _RWSTD_ERROR_LOCALE_BAD_NAME
Definition _error.h:105
#define _RWSTD_ERROR_LOCALE_BAD_CAT
Definition _error.h:111
const char * name
Definition codecvt1.cpp:72
#define _RWSTD_CAT_SEP
Definition json.h:5363