The attached file contains some predicates that allow using standard algorithms on character ranges in a locale-aware fashion. For instance they allow writing the classical ltrim() function (remove all trailing whitespaces) as:
template <typename stringT> stringT ltrim(const stringT& s, const std::locale & loc = std::locale()) { typedef typename stringT::value_type char_type; typename stringT::const_iterator it = std::find_if( s.begin(), s.end(), std::not1(is_classified_as<char_type>(std::ctype_base::space, loc)) ); return stringT(it, s.end()); } I'm posting them here to have some feedback and ask if there's any interest for inclusion into boost. They are quite trivial stuff but IMHO useful enough to have it somewhere in a reusable form :-) There are some little design details which are not settled yet. Comments on them are very welcome. In particular: - is_classified_as<> defaults its template parameter to char, for ease of use. Objections? - should is_classified_as::m_ctype be a reference or a non-const pointer? That has of course to do with whether we want the function object to be assignable with the compiler-generated operator=(). Thoughts? Please, Beware that the code is untested. Just checking if there's interest... Genny. begin 644 char_functors.hpp M#0HO+R!!(&)U;F-H(&]F('1R:[EMAIL PROTECTED]<G,@=&[EMAIL PROTECTED]('-T86YD M87)D(&QI8G)A<[EMAIL PROTECTED];W)I=&AM<PT*+R\@;[EMAIL PROTECTED]<F%C=&5R(')A;F=E M<[EMAIL PROTECTED],I($=E;FYA<[EMAIL PROTECTED]')O=&$@,C`P,PT*+R\-"B\O($QA<W0@;6]D:69I M960Z(#,Q($UA>2`R,#`S#0H-"@[EMAIL PROTECTED]@24Y#3%5$12!'54%2 M1"`M+2T-"@T*#0HC:6YC;'5D92`\;&]C86QE/@T*(VEN8VQU9&4@/&9U;F-T M:6]N86P^#0H-"B\O(%%U97-T:6]N<SH-"B\O("[EMAIL PROTECTED]:&%R5"`](&-H87(_ M#0HO+R`@("T@<&]I;G1E<B!A<R!M96UB97(_(&]R(')E9C\-"B\O#0IT96UP M;&%T92`\8VQA<W,@8VAA<E0@/2!C:&%R/@T*8VQA<W,@:7-?8VQA<W-I9FEE M9%]A<PT*("`Z('!U8FQI8R!S=&0Z.G5N87)Y7V9U;F-T:6]N/&-H87)4+"!B M;V]L/@T*>PT*<')I=F%T93H-"[EMAIL PROTECTED]<W0@<W1D.CIC='EP93QC:&%R5#XJ M(&-O;G-T(&U?8W0[("\O('!O:6YT97(@;W(@<F5F/PT*("!C;VYS="!S=&0Z M.F-T>7!E7V)A<V4Z.FUA<VL@("`@;5]M87-K.PT*#0IP=6)L:6,Z#0H@("\O M(&-T;W(@9G)O;2!C='EP90T*("!I<U]C;&%S<VEF:65D7V%S*'-T9#HZ8W1Y M<&5?8F%S93HZ;6%S:R!M+`T*("`@("`@("`@("`@("`@("`@(&-O;G-T('-T M9#HZ8W1Y<&4\8VAA<E0^)B!C=`T*("`@("`@("`@("`@("`@("[EMAIL PROTECTED]("`@ M(#H@;5]C="@F8W0I+`T*("`@("`@;5]M87-K*&TI#0H@('[EMAIL PROTECTED]@("\O M8W1O<B!F<F]M(&QO8V%L90T*("!I<U]C;&%S<VEF:65D7V%S*'-T9#HZ8W1Y M<&5?8F%S93HZ;6%S:R!M+`T*("`@("`@("`@("`@("`@("`@(&-O;G-T('-T M9#HZ;&]C86QE("8@;&]C(#T@<W1D.CIL;V-A;&4H*0T*("`@("`@("`@("`@ M("`@("[EMAIL PROTECTED]("`@(#H@;5]C="@F<W1D.CIU<V5?9F%C970\<W1D.CIC='EP M93QC:&%R5#X@/BAL;V,I*2P-"B`@("`@(&U?;6%S:RAM*0T*("![('T-"@T* M("!B;V]L(&]P97)A=&]R*"DH8VAA<[EMAIL PROTECTED]@8V]N<W0@>PT*("`@(')E='5R M;B!M7V-T+3YI<RAM7VUA<VLL(&,I.PT*("!]#0I].PT*#0H-"G1E;7!L871E M(#QC;&%S<R!T<F%I='-4/@T*8VQA<W,@8VAA<E]E<75A;%]T;SH@<'5B;&EC M('-T9#HZ8FEN87)Y7V9U;F-T:6]N/`T*("`@("`@("`@("`@("`@("`@("`@ M("`@("`@('1Y<&5N86UE('1R86ET<U0Z.F-H87)?='EP92P-"B`@("`@("`@ M("`@("`@("`@("`@("`@("`@("!T>7!E;F%M92!T<F%I='-4.CIC:&%R7W1Y M<&4L#0H@("`@("`@("`@("`@("`@("`@("`@("`@("[EMAIL PROTECTED];`T*("`@("`@ M("`@("`@("`@("`@("`@/@T*>PT*<'5B;&[EMAIL PROTECTED]("`@('1Y<&[EMAIL PROTECTED]'EP M96YA;[EMAIL PROTECTED]')A:71S5#HZ8VAA<E]T>7!E(&-H87)?='EP93L-"@T*("`@(&)O M;VP@;W!E<F%T;W(H*2AC;VYS="!C:&%R7W1Y<&4@)B!C,2P-"B`@("`@("`@ M("`@("`@("`@("[EMAIL PROTECTED]<[EMAIL PROTECTED]<E]T>7!E("[EMAIL PROTECTED](I(&-O;G-T#0H@("`@ M>R!R971U<[EMAIL PROTECTED]')A:71S5#HZ97$H8S$L(&,[EMAIL PROTECTED] M9&5N=&[EMAIL PROTECTED]&[EMAIL PROTECTED]&AE(&%B;W9E+"[EMAIL PROTECTED]@;VX@:6YT7W1Y<&4- M"G1E;7!L871E(#QC;&%S<R!T<F%I='-4/@T*8VQA<W,@8VAA<E]I;G1?97%U M86Q?=&[EMAIL PROTECTED])L:6,@<W1D.CIB:6YA<GE?9G5N8W1I;VX\#0H@("`@("`@ M("`@("`@("`@("`@("`@("`@("`@("`@("!T>7!E;F%M92!T<F%I='-4.CII M;G1?='EP92P-"B`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@('1Y M<&5N86UE('1R86ET<U0Z.FEN=%]T>7!E+`T*("`@("`@("`@("`@("`@("`@ M("`@("`@("`@("`@("[EMAIL PROTECTED];`T*("`@("`@("`@("`@("`@("`@("`@("`@ M("`^#0I[#0IP=6)L:6,Z#0H@("[EMAIL PROTECTED]'EP961E9B!T>7!E;F%M92!T<F%I='-4 M.CII;G1?='EP92!I;G1?='EP93L-"@T*("`@(&)O;VP@;W!E<F%T;W(H*2AC M;VYS="!I;G1?='EP92`F('@Q+`T*("`@("`@("`@("`@("`@("`@("!C;VYS M="!I;G1?='EP92`F('@R*2!C;VYS=`T*("`@('L@<F5T=7)N('1R86ET<U0Z M.F5Q7VEN=%]T>7!E*'@Q+"!X,BD[('T-"@T*?3L-"@T*#0H-"B\O($-A;B!A M;B!I;7!L96UE;G1A=&EO;B!R971U<[EMAIL PROTECTED]&EF9F5R96YT('9A;'5E<PT*+R\@ M9G)O;2!D:69F97)E;[EMAIL PROTECTED];',@;[EMAIL PROTECTED]')A:71S5#HZ96]F*"D_#0HO+R!) M(&1O;B=T(&MN;W<N($EN(&%N>2!C87-E(&ET)W,@<[EMAIL PROTECTED]&AA=`T* [EMAIL PROTECTED]:6YT7W1Y<&[EMAIL PROTECTED]:W,@87,@[EMAIL PROTECTED](Q+C$N,2!486)L M92`S-RD-"B\O('-O('=E(&-A;B!C86-H92!T:&[EMAIL PROTECTED]@;[EMAIL PROTECTED] M(&EN('1H92!C;VYS=')U8W1O<@T*+R\-"G1E;7!L871E(#QT>7!E;F%M92!T M<F%I='-4/@T*8VQA<W,@:7-?96]F('L-"B!P=6)L:6,Z#0H@("`@('1Y<&5D [EMAIL PROTECTED]'EP96YA;[EMAIL PROTECTED]')A:71S5#HZ:6YT7W1Y<&4@:6YT7W1Y<&4[#0H-"B`@ M("`@:7-?96]F*"D-"B`@("`@("`Z(&U?96]F*'1R86ET<[EMAIL PROTECTED] M("`@("![?0T*#0H@("`@(&)O;VP@;W!E<F%T;W(H*2AC;VYS="!I;G1?='EP [EMAIL PROTECTED]@8V]N<W0@>PT*("`@("`@("`@<F5T=7)N('1R86ET<U0Z.F5Q7VEN M=%]T>7!E*&,L(&U?96]F*3L-"B`@("[EMAIL PROTECTED]('!R:79A=&4Z#0H@("`@(&EN 5=%]T>7!E(&U?96]F.PT*#0I].PT* ` end _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost