diff --git a/_unit_tests_2compat_8hpp_source.html b/_unit_tests_2compat_8hpp_source.html index 064b838ea..97416b2f3 100644 --- a/_unit_tests_2compat_8hpp_source.html +++ b/_unit_tests_2compat_8hpp_source.html @@ -170,7 +170,7 @@ $(document).ready(function() { init_codefold(0); }); diff --git a/annotated.html b/annotated.html index cdfb0becc..22f408f97 100644 --- a/annotated.html +++ b/annotated.html @@ -268,7 +268,7 @@ $(function() { diff --git a/base64_8hpp_source.html b/base64_8hpp_source.html index b59ed440d..bcc0ec97d 100644 --- a/base64_8hpp_source.html +++ b/base64_8hpp_source.html @@ -541,7 +541,7 @@ $(document).ready(function() { init_codefold(0); }); diff --git a/chrono_8hpp_source.html b/chrono_8hpp_source.html index 480f359bc..904a372d2 100644 --- a/chrono_8hpp_source.html +++ b/chrono_8hpp_source.html @@ -466,7 +466,7 @@ $(document).ready(function() { init_codefold(0); }); diff --git a/classes.html b/classes.html index f7b4081dc..7f2ce6ca3 100644 --- a/classes.html +++ b/classes.html @@ -136,7 +136,7 @@ $(function() { diff --git a/classstdex_1_1base64__dec-members.html b/classstdex_1_1base64__dec-members.html index faa8c60f5..4eb4c2881 100644 --- a/classstdex_1_1base64__dec-members.html +++ b/classstdex_1_1base64__dec-members.html @@ -90,7 +90,7 @@ $(function() { diff --git a/classstdex_1_1base64__dec.html b/classstdex_1_1base64__dec.html index b18ac7ae6..db04f0b10 100644 --- a/classstdex_1_1base64__dec.html +++ b/classstdex_1_1base64__dec.html @@ -239,7 +239,7 @@ template<class _Ty , class _Ax , class _Tchr > diff --git a/classstdex_1_1base64__enc-members.html b/classstdex_1_1base64__enc-members.html index 04bb6994c..10fe49300 100644 --- a/classstdex_1_1base64__enc-members.html +++ b/classstdex_1_1base64__enc-members.html @@ -91,7 +91,7 @@ $(function() { diff --git a/classstdex_1_1base64__enc.html b/classstdex_1_1base64__enc.html index 6a353e610..9284e647a 100644 --- a/classstdex_1_1base64__enc.html +++ b/classstdex_1_1base64__enc.html @@ -244,7 +244,7 @@ template<class _Elem , class _Traits , class _Ax > diff --git a/classstdex_1_1base64__reader-members.html b/classstdex_1_1base64__reader-members.html index 7403eb133..d1272ace6 100644 --- a/classstdex_1_1base64__reader-members.html +++ b/classstdex_1_1base64__reader-members.html @@ -162,7 +162,7 @@ $(function() { diff --git a/classstdex_1_1base64__reader.html b/classstdex_1_1base64__reader.html index 5d431ce3c..c7efefa0e 100644 --- a/classstdex_1_1base64__reader.html +++ b/classstdex_1_1base64__reader.html @@ -443,7 +443,7 @@ size_t m_num diff --git a/classstdex_1_1base64__writer-members.html b/classstdex_1_1base64__writer-members.html index 36c89a845..cd7ec1a3f 100644 --- a/classstdex_1_1base64__writer-members.html +++ b/classstdex_1_1base64__writer-members.html @@ -164,7 +164,7 @@ $(function() { diff --git a/classstdex_1_1base64__writer.html b/classstdex_1_1base64__writer.html index 23b82a85f..b352c1bc7 100644 --- a/classstdex_1_1base64__writer.html +++ b/classstdex_1_1base64__writer.html @@ -450,7 +450,7 @@ size_t m_num diff --git a/classstdex_1_1basic__hash-members.html b/classstdex_1_1basic__hash-members.html index 6e92a1ca6..01bc1b5a1 100644 --- a/classstdex_1_1basic__hash-members.html +++ b/classstdex_1_1basic__hash-members.html @@ -90,7 +90,7 @@ $(function() { diff --git a/classstdex_1_1basic__hash.html b/classstdex_1_1basic__hash.html index bb9d72343..b908cc15f 100644 --- a/classstdex_1_1basic__hash.html +++ b/classstdex_1_1basic__hash.html @@ -255,7 +255,7 @@ template<class T > diff --git a/classstdex_1_1block__hash-members.html b/classstdex_1_1block__hash-members.html index 748a6a10c..d49ea209e 100644 --- a/classstdex_1_1block__hash-members.html +++ b/classstdex_1_1block__hash-members.html @@ -94,7 +94,7 @@ $(function() { diff --git a/classstdex_1_1block__hash.html b/classstdex_1_1block__hash.html index 8acabbfa5..09ba138f9 100644 --- a/classstdex_1_1block__hash.html +++ b/classstdex_1_1block__hash.html @@ -245,7 +245,7 @@ template<class T > diff --git a/classstdex_1_1charset__encoder-members.html b/classstdex_1_1charset__encoder-members.html index 7baaf6b5d..bc3884e0c 100644 --- a/classstdex_1_1charset__encoder-members.html +++ b/classstdex_1_1charset__encoder-members.html @@ -102,7 +102,7 @@ $(function() { diff --git a/classstdex_1_1charset__encoder.html b/classstdex_1_1charset__encoder.html index 8b4be0ce9..f070ed8a1 100644 --- a/classstdex_1_1charset__encoder.html +++ b/classstdex_1_1charset__encoder.html @@ -607,7 +607,7 @@ template<class _Traits_to = std::char_traits<T_to>, class _Alloc_to = diff --git a/classstdex_1_1crc32__hash-members.html b/classstdex_1_1crc32__hash-members.html index bb83a7d04..19015bbb6 100644 --- a/classstdex_1_1crc32__hash-members.html +++ b/classstdex_1_1crc32__hash-members.html @@ -90,7 +90,7 @@ $(function() { diff --git a/classstdex_1_1crc32__hash.html b/classstdex_1_1crc32__hash.html index b8c91014c..52ae6d202 100644 --- a/classstdex_1_1crc32__hash.html +++ b/classstdex_1_1crc32__hash.html @@ -245,7 +245,7 @@ crc32_t m_value diff --git a/classstdex_1_1global__progress-members.html b/classstdex_1_1global__progress-members.html index e09929c51..cfd510167 100644 --- a/classstdex_1_1global__progress-members.html +++ b/classstdex_1_1global__progress-members.html @@ -97,7 +97,7 @@ $(function() { diff --git a/classstdex_1_1global__progress.html b/classstdex_1_1global__progress.html index d1dae4ab3..63b910d3f 100644 --- a/classstdex_1_1global__progress.html +++ b/classstdex_1_1global__progress.html @@ -547,7 +547,7 @@ template<class T > diff --git a/classstdex_1_1hex__dec-members.html b/classstdex_1_1hex__dec-members.html index 3ab097423..c47c06f54 100644 --- a/classstdex_1_1hex__dec-members.html +++ b/classstdex_1_1hex__dec-members.html @@ -89,7 +89,7 @@ $(function() { diff --git a/classstdex_1_1hex__dec.html b/classstdex_1_1hex__dec.html index ab5406051..b5678f51e 100644 --- a/classstdex_1_1hex__dec.html +++ b/classstdex_1_1hex__dec.html @@ -221,7 +221,7 @@ template<class _Ty , class _Ax , class _Tchr > diff --git a/classstdex_1_1hex__enc-members.html b/classstdex_1_1hex__enc-members.html index b0e077fe3..4c27366f3 100644 --- a/classstdex_1_1hex__enc-members.html +++ b/classstdex_1_1hex__enc-members.html @@ -86,7 +86,7 @@ $(function() { diff --git a/classstdex_1_1hex__enc.html b/classstdex_1_1hex__enc.html index 937343c78..f74bb17b3 100644 --- a/classstdex_1_1hex__enc.html +++ b/classstdex_1_1hex__enc.html @@ -198,7 +198,7 @@ template<class _Elem , class _Traits , class _Ax > diff --git a/classstdex_1_1html_1_1comment-members.html b/classstdex_1_1html_1_1comment-members.html index 46b05a048..76321fa97 100644 --- a/classstdex_1_1html_1_1comment-members.html +++ b/classstdex_1_1html_1_1comment-members.html @@ -90,7 +90,7 @@ $(function() { diff --git a/classstdex_1_1html_1_1comment.html b/classstdex_1_1html_1_1comment.html index e0a6ebeff..797d715d8 100644 --- a/classstdex_1_1html_1_1comment.html +++ b/classstdex_1_1html_1_1comment.html @@ -135,7 +135,7 @@ stdex::parser::html_sequence_t  diff --git a/classstdex_1_1html_1_1declaration-members.html b/classstdex_1_1html_1_1declaration-members.html index 05309c77b..89164051e 100644 --- a/classstdex_1_1html_1_1declaration-members.html +++ b/classstdex_1_1html_1_1declaration-members.html @@ -91,7 +91,7 @@ $(function() { diff --git a/classstdex_1_1html_1_1declaration.html b/classstdex_1_1html_1_1declaration.html index a27a67efd..f9b3d34ca 100644 --- a/classstdex_1_1html_1_1declaration.html +++ b/classstdex_1_1html_1_1declaration.html @@ -139,7 +139,7 @@ stdex::parser::html_sequence_t  diff --git a/classstdex_1_1html_1_1document-members.html b/classstdex_1_1html_1_1document-members.html index f9c70f9fc..42c519932 100644 --- a/classstdex_1_1html_1_1document-members.html +++ b/classstdex_1_1html_1_1document-members.html @@ -107,7 +107,7 @@ $(function() { diff --git a/classstdex_1_1html_1_1document.html b/classstdex_1_1html_1_1document.html index 8e308bc20..be3fef4f8 100644 --- a/classstdex_1_1html_1_1document.html +++ b/classstdex_1_1html_1_1document.html @@ -197,7 +197,7 @@ class stdex::html::document< _Elem, _Traits, _Alloc >

HTML documen

diff --git a/classstdex_1_1html_1_1element-members.html b/classstdex_1_1html_1_1element-members.html index 31807f222..13c5a5abd 100644 --- a/classstdex_1_1html_1_1element-members.html +++ b/classstdex_1_1html_1_1element-members.html @@ -93,7 +93,7 @@ $(function() { diff --git a/classstdex_1_1html_1_1element.html b/classstdex_1_1html_1_1element.html index 115690a2a..027b4e4de 100644 --- a/classstdex_1_1html_1_1element.html +++ b/classstdex_1_1html_1_1element.html @@ -152,7 +152,7 @@ stdex::parser::html_sequence_t  diff --git a/classstdex_1_1html_1_1element__end-members.html b/classstdex_1_1html_1_1element__end-members.html index 741e6fa5c..2ddb604d4 100644 --- a/classstdex_1_1html_1_1element__end-members.html +++ b/classstdex_1_1html_1_1element__end-members.html @@ -92,7 +92,7 @@ $(function() { diff --git a/classstdex_1_1html_1_1element__end.html b/classstdex_1_1html_1_1element__end.html index f36310282..97c49f281 100644 --- a/classstdex_1_1html_1_1element__end.html +++ b/classstdex_1_1html_1_1element__end.html @@ -143,7 +143,7 @@ stdex::parser::html_sequence_t  diff --git a/classstdex_1_1html_1_1element__start-members.html b/classstdex_1_1html_1_1element__start-members.html index b1f6a993f..fa61b6c9a 100644 --- a/classstdex_1_1html_1_1element__start-members.html +++ b/classstdex_1_1html_1_1element__start-members.html @@ -95,7 +95,7 @@ $(function() { diff --git a/classstdex_1_1html_1_1element__start.html b/classstdex_1_1html_1_1element__start.html index 4fd1c7374..e2f02f119 100644 --- a/classstdex_1_1html_1_1element__start.html +++ b/classstdex_1_1html_1_1element__start.html @@ -162,7 +162,7 @@ template<class T > diff --git a/classstdex_1_1html_1_1instruction-members.html b/classstdex_1_1html_1_1instruction-members.html index 4d64da6da..0d1281744 100644 --- a/classstdex_1_1html_1_1instruction-members.html +++ b/classstdex_1_1html_1_1instruction-members.html @@ -90,7 +90,7 @@ $(function() { diff --git a/classstdex_1_1html_1_1instruction.html b/classstdex_1_1html_1_1instruction.html index 9a397b49e..3fda01b49 100644 --- a/classstdex_1_1html_1_1instruction.html +++ b/classstdex_1_1html_1_1instruction.html @@ -135,7 +135,7 @@ stdex::parser::html_sequence_t  diff --git a/classstdex_1_1html_1_1parser-members.html b/classstdex_1_1html_1_1parser-members.html index 4c4d7ef9b..741ec666e 100644 --- a/classstdex_1_1html_1_1parser-members.html +++ b/classstdex_1_1html_1_1parser-members.html @@ -110,7 +110,7 @@ $(function() { diff --git a/classstdex_1_1html_1_1parser.html b/classstdex_1_1html_1_1parser.html index e9b745127..610419c32 100644 --- a/classstdex_1_1html_1_1parser.html +++ b/classstdex_1_1html_1_1parser.html @@ -618,7 +618,7 @@ template<class _Elem , class _Traits , class _Alloc > diff --git a/classstdex_1_1html_1_1sequence-members.html b/classstdex_1_1html_1_1sequence-members.html index ffd2e3e31..654894092 100644 --- a/classstdex_1_1html_1_1sequence-members.html +++ b/classstdex_1_1html_1_1sequence-members.html @@ -88,7 +88,7 @@ $(function() { diff --git a/classstdex_1_1html_1_1sequence.html b/classstdex_1_1html_1_1sequence.html index e69f45f67..a888a391b 100644 --- a/classstdex_1_1html_1_1sequence.html +++ b/classstdex_1_1html_1_1sequence.html @@ -130,7 +130,7 @@ stdex::parser::html_sequence_t  diff --git a/classstdex_1_1html_1_1starting__token-members.html b/classstdex_1_1html_1_1starting__token-members.html index 8b5e06222..f295ec8ba 100644 --- a/classstdex_1_1html_1_1starting__token-members.html +++ b/classstdex_1_1html_1_1starting__token-members.html @@ -99,7 +99,7 @@ $(function() { diff --git a/classstdex_1_1html_1_1starting__token.html b/classstdex_1_1html_1_1starting__token.html index d05a7cb64..3e29da502 100644 --- a/classstdex_1_1html_1_1starting__token.html +++ b/classstdex_1_1html_1_1starting__token.html @@ -181,7 +181,7 @@ class stdex::html::starting_token< _Elem, _Traits, _Alloc >

Token

diff --git a/classstdex_1_1html_1_1text__token-members.html b/classstdex_1_1html_1_1text__token-members.html index c148b4ddc..b4df63d1d 100644 --- a/classstdex_1_1html_1_1text__token-members.html +++ b/classstdex_1_1html_1_1text__token-members.html @@ -96,7 +96,7 @@ $(function() { diff --git a/classstdex_1_1html_1_1text__token.html b/classstdex_1_1html_1_1text__token.html index 7a0d5863e..7965846df 100644 --- a/classstdex_1_1html_1_1text__token.html +++ b/classstdex_1_1html_1_1text__token.html @@ -168,7 +168,7 @@ class stdex::html::text_token< _Elem, _Traits, _Alloc >

Token repr

diff --git a/classstdex_1_1html_1_1token-members.html b/classstdex_1_1html_1_1token-members.html index 555040a16..31979bdcf 100644 --- a/classstdex_1_1html_1_1token-members.html +++ b/classstdex_1_1html_1_1token-members.html @@ -92,7 +92,7 @@ $(function() { diff --git a/classstdex_1_1html_1_1token.html b/classstdex_1_1html_1_1token.html index cf9ba5b21..92321c716 100644 --- a/classstdex_1_1html_1_1token.html +++ b/classstdex_1_1html_1_1token.html @@ -231,7 +231,7 @@ template<class _Traits = std::char_traits<wchar_t>, class _Alloc = st diff --git a/classstdex_1_1html_1_1url__token-members.html b/classstdex_1_1html_1_1url__token-members.html index f96663c8a..75b74f5ff 100644 --- a/classstdex_1_1html_1_1url__token-members.html +++ b/classstdex_1_1html_1_1url__token-members.html @@ -95,7 +95,7 @@ $(function() { diff --git a/classstdex_1_1html_1_1url__token.html b/classstdex_1_1html_1_1url__token.html index 06ee4abdf..4c1451407 100644 --- a/classstdex_1_1html_1_1url__token.html +++ b/classstdex_1_1html_1_1url__token.html @@ -163,7 +163,7 @@ class stdex::html::url_token< _Elem, _Traits, _Alloc >

HTTP token

diff --git a/classstdex_1_1idrec_1_1record-members.html b/classstdex_1_1idrec_1_1record-members.html index bdb4b0050..8984df42a 100644 --- a/classstdex_1_1idrec_1_1record-members.html +++ b/classstdex_1_1idrec_1_1record-members.html @@ -100,7 +100,7 @@ $(function() { diff --git a/classstdex_1_1idrec_1_1record.html b/classstdex_1_1idrec_1_1record.html index 0b51a2769..da5e192a9 100644 --- a/classstdex_1_1idrec_1_1record.html +++ b/classstdex_1_1idrec_1_1record.html @@ -837,7 +837,7 @@ template<class T , class T_ID , const T_ID ID, class T_SIZE , T_SIZE ALIGN> diff --git a/classstdex_1_1lazy__progress-members.html b/classstdex_1_1lazy__progress-members.html index 83e1b74b8..ccbbc6265 100644 --- a/classstdex_1_1lazy__progress-members.html +++ b/classstdex_1_1lazy__progress-members.html @@ -95,7 +95,7 @@ $(function() { diff --git a/classstdex_1_1lazy__progress.html b/classstdex_1_1lazy__progress.html index ae2e315e9..f99c7d43e 100644 --- a/classstdex_1_1lazy__progress.html +++ b/classstdex_1_1lazy__progress.html @@ -279,7 +279,7 @@ template<class T > diff --git a/classstdex_1_1md5__hash-members.html b/classstdex_1_1md5__hash-members.html index c420b83d7..03c668d08 100644 --- a/classstdex_1_1md5__hash-members.html +++ b/classstdex_1_1md5__hash-members.html @@ -93,7 +93,7 @@ $(function() { diff --git a/classstdex_1_1md5__hash.html b/classstdex_1_1md5__hash.html index 186444907..4758b0547 100644 --- a/classstdex_1_1md5__hash.html +++ b/classstdex_1_1md5__hash.html @@ -259,7 +259,7 @@ uint32_t m_temp [16] diff --git a/classstdex_1_1parser_1_1basic__angle-members.html b/classstdex_1_1parser_1_1basic__angle-members.html index 7e6b05e5b..026465ede 100644 --- a/classstdex_1_1parser_1_1basic__angle-members.html +++ b/classstdex_1_1parser_1_1basic__angle-members.html @@ -99,7 +99,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__angle.html b/classstdex_1_1parser_1_1basic__angle.html index 14c1fe0ae..516772c44 100644 --- a/classstdex_1_1parser_1_1basic__angle.html +++ b/classstdex_1_1parser_1_1basic__angle.html @@ -244,7 +244,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__any__cu-members.html b/classstdex_1_1parser_1_1basic__any__cu-members.html index afe263e5b..03eadda89 100644 --- a/classstdex_1_1parser_1_1basic__any__cu-members.html +++ b/classstdex_1_1parser_1_1basic__any__cu-members.html @@ -92,7 +92,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__any__cu.html b/classstdex_1_1parser_1_1basic__any__cu.html index e24648b1b..e3d00a3ba 100644 --- a/classstdex_1_1parser_1_1basic__any__cu.html +++ b/classstdex_1_1parser_1_1basic__any__cu.html @@ -191,7 +191,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__bol-members.html b/classstdex_1_1parser_1_1basic__bol-members.html index 34840c484..be71fa5a5 100644 --- a/classstdex_1_1parser_1_1basic__bol-members.html +++ b/classstdex_1_1parser_1_1basic__bol-members.html @@ -93,7 +93,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__bol.html b/classstdex_1_1parser_1_1basic__bol.html index 1319c9c59..018bf9e24 100644 --- a/classstdex_1_1parser_1_1basic__bol.html +++ b/classstdex_1_1parser_1_1basic__bol.html @@ -198,7 +198,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__branch-members.html b/classstdex_1_1parser_1_1basic__branch-members.html index 358e3b23b..61ad980f0 100644 --- a/classstdex_1_1parser_1_1basic__branch-members.html +++ b/classstdex_1_1parser_1_1basic__branch-members.html @@ -99,7 +99,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__branch.html b/classstdex_1_1parser_1_1basic__branch.html index df05d4023..60494f618 100644 --- a/classstdex_1_1parser_1_1basic__branch.html +++ b/classstdex_1_1parser_1_1basic__branch.html @@ -253,7 +253,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__chemical__formula-members.html b/classstdex_1_1parser_1_1basic__chemical__formula-members.html index f3cc98910..86f7513ba 100644 --- a/classstdex_1_1parser_1_1basic__chemical__formula-members.html +++ b/classstdex_1_1parser_1_1basic__chemical__formula-members.html @@ -97,7 +97,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__chemical__formula.html b/classstdex_1_1parser_1_1basic__chemical__formula.html index 1e89a93ef..7e588a053 100644 --- a/classstdex_1_1parser_1_1basic__chemical__formula.html +++ b/classstdex_1_1parser_1_1basic__chemical__formula.html @@ -239,7 +239,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__creditor__reference-members.html b/classstdex_1_1parser_1_1basic__creditor__reference-members.html index b563e77b1..c96ca90f6 100644 --- a/classstdex_1_1parser_1_1basic__creditor__reference-members.html +++ b/classstdex_1_1parser_1_1basic__creditor__reference-members.html @@ -96,7 +96,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__creditor__reference.html b/classstdex_1_1parser_1_1basic__creditor__reference.html index fcf6758a8..32023fb91 100644 --- a/classstdex_1_1parser_1_1basic__creditor__reference.html +++ b/classstdex_1_1parser_1_1basic__creditor__reference.html @@ -240,7 +240,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__css__cdc-members.html b/classstdex_1_1parser_1_1basic__css__cdc-members.html index c7e84dd5c..9979a0908 100644 --- a/classstdex_1_1parser_1_1basic__css__cdc-members.html +++ b/classstdex_1_1parser_1_1basic__css__cdc-members.html @@ -92,7 +92,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__css__cdc.html b/classstdex_1_1parser_1_1basic__css__cdc.html index 3155193e4..d5a1586fa 100644 --- a/classstdex_1_1parser_1_1basic__css__cdc.html +++ b/classstdex_1_1parser_1_1basic__css__cdc.html @@ -139,7 +139,7 @@ class stdex::parser::basic_css_cdc< T >

Legacy CSS comment end

diff --git a/classstdex_1_1parser_1_1basic__css__cdo-members.html b/classstdex_1_1parser_1_1basic__css__cdo-members.html index 72b4d9505..61b99f36c 100644 --- a/classstdex_1_1parser_1_1basic__css__cdo-members.html +++ b/classstdex_1_1parser_1_1basic__css__cdo-members.html @@ -92,7 +92,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__css__cdo.html b/classstdex_1_1parser_1_1basic__css__cdo.html index 5d9c21914..fd7fc895b 100644 --- a/classstdex_1_1parser_1_1basic__css__cdo.html +++ b/classstdex_1_1parser_1_1basic__css__cdo.html @@ -139,7 +139,7 @@ class stdex::parser::basic_css_cdo< T >

Legacy CSS comment start <

diff --git a/classstdex_1_1parser_1_1basic__css__comment-members.html b/classstdex_1_1parser_1_1basic__css__comment-members.html index cffca0a7e..1fb310a5d 100644 --- a/classstdex_1_1parser_1_1basic__css__comment-members.html +++ b/classstdex_1_1parser_1_1basic__css__comment-members.html @@ -93,7 +93,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__css__comment.html b/classstdex_1_1parser_1_1basic__css__comment.html index ef1850937..0626ca478 100644 --- a/classstdex_1_1parser_1_1basic__css__comment.html +++ b/classstdex_1_1parser_1_1basic__css__comment.html @@ -176,7 +176,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__css__import-members.html b/classstdex_1_1parser_1_1basic__css__import-members.html index 0355b4a3d..153d4cbaf 100644 --- a/classstdex_1_1parser_1_1basic__css__import-members.html +++ b/classstdex_1_1parser_1_1basic__css__import-members.html @@ -93,7 +93,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__css__import.html b/classstdex_1_1parser_1_1basic__css__import.html index a791cb80c..7c0b1287e 100644 --- a/classstdex_1_1parser_1_1basic__css__import.html +++ b/classstdex_1_1parser_1_1basic__css__import.html @@ -176,7 +176,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__css__string-members.html b/classstdex_1_1parser_1_1basic__css__string-members.html index 1c76e4158..2cfa49f3c 100644 --- a/classstdex_1_1parser_1_1basic__css__string-members.html +++ b/classstdex_1_1parser_1_1basic__css__string-members.html @@ -93,7 +93,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__css__string.html b/classstdex_1_1parser_1_1basic__css__string.html index 1d90f531a..e3f6b3e56 100644 --- a/classstdex_1_1parser_1_1basic__css__string.html +++ b/classstdex_1_1parser_1_1basic__css__string.html @@ -176,7 +176,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__css__uri-members.html b/classstdex_1_1parser_1_1basic__css__uri-members.html index 55f0e3165..52c3f4a58 100644 --- a/classstdex_1_1parser_1_1basic__css__uri-members.html +++ b/classstdex_1_1parser_1_1basic__css__uri-members.html @@ -93,7 +93,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__css__uri.html b/classstdex_1_1parser_1_1basic__css__uri.html index a51f7376e..cc439c216 100644 --- a/classstdex_1_1parser_1_1basic__css__uri.html +++ b/classstdex_1_1parser_1_1basic__css__uri.html @@ -176,7 +176,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__cu-members.html b/classstdex_1_1parser_1_1basic__cu-members.html index 53190c6a5..4e7d8c3d1 100644 --- a/classstdex_1_1parser_1_1basic__cu-members.html +++ b/classstdex_1_1parser_1_1basic__cu-members.html @@ -94,7 +94,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__cu.html b/classstdex_1_1parser_1_1basic__cu.html index 652d1ceba..aeeaef2ad 100644 --- a/classstdex_1_1parser_1_1basic__cu.html +++ b/classstdex_1_1parser_1_1basic__cu.html @@ -201,7 +201,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__cu__set-members.html b/classstdex_1_1parser_1_1basic__cu__set-members.html index d3f1636f0..6e47ab2a0 100644 --- a/classstdex_1_1parser_1_1basic__cu__set-members.html +++ b/classstdex_1_1parser_1_1basic__cu__set-members.html @@ -96,7 +96,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__cu__set.html b/classstdex_1_1parser_1_1basic__cu__set.html index 07101a9e4..a506a0569 100644 --- a/classstdex_1_1parser_1_1basic__cu__set.html +++ b/classstdex_1_1parser_1_1basic__cu__set.html @@ -210,7 +210,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__date-members.html b/classstdex_1_1parser_1_1basic__date-members.html index 696e5721a..bb55ab14b 100644 --- a/classstdex_1_1parser_1_1basic__date-members.html +++ b/classstdex_1_1parser_1_1basic__date-members.html @@ -100,7 +100,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__date.html b/classstdex_1_1parser_1_1basic__date.html index c9277b0f5..dc7e324ac 100644 --- a/classstdex_1_1parser_1_1basic__date.html +++ b/classstdex_1_1parser_1_1basic__date.html @@ -252,7 +252,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__dns__domain__char-members.html b/classstdex_1_1parser_1_1basic__dns__domain__char-members.html index 9ce81a7e3..4637668d6 100644 --- a/classstdex_1_1parser_1_1basic__dns__domain__char-members.html +++ b/classstdex_1_1parser_1_1basic__dns__domain__char-members.html @@ -94,7 +94,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__dns__domain__char.html b/classstdex_1_1parser_1_1basic__dns__domain__char.html index a11a5f21b..f5c2a6b13 100644 --- a/classstdex_1_1parser_1_1basic__dns__domain__char.html +++ b/classstdex_1_1parser_1_1basic__dns__domain__char.html @@ -203,7 +203,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__dns__name-members.html b/classstdex_1_1parser_1_1basic__dns__name-members.html index eb530a280..6b0629860 100644 --- a/classstdex_1_1parser_1_1basic__dns__name-members.html +++ b/classstdex_1_1parser_1_1basic__dns__name-members.html @@ -95,7 +95,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__dns__name.html b/classstdex_1_1parser_1_1basic__dns__name.html index f6203604c..b33b05920 100644 --- a/classstdex_1_1parser_1_1basic__dns__name.html +++ b/classstdex_1_1parser_1_1basic__dns__name.html @@ -205,7 +205,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__email__address-members.html b/classstdex_1_1parser_1_1basic__email__address-members.html index 3ae47c739..2541fbc18 100644 --- a/classstdex_1_1parser_1_1basic__email__address-members.html +++ b/classstdex_1_1parser_1_1basic__email__address-members.html @@ -99,7 +99,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__email__address.html b/classstdex_1_1parser_1_1basic__email__address.html index 18061d506..12cf36bc9 100644 --- a/classstdex_1_1parser_1_1basic__email__address.html +++ b/classstdex_1_1parser_1_1basic__email__address.html @@ -245,7 +245,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__emoticon-members.html b/classstdex_1_1parser_1_1basic__emoticon-members.html index 677bed5ce..98f8220d9 100644 --- a/classstdex_1_1parser_1_1basic__emoticon-members.html +++ b/classstdex_1_1parser_1_1basic__emoticon-members.html @@ -97,7 +97,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__emoticon.html b/classstdex_1_1parser_1_1basic__emoticon.html index f2628d27f..bc5ca2f57 100644 --- a/classstdex_1_1parser_1_1basic__emoticon.html +++ b/classstdex_1_1parser_1_1basic__emoticon.html @@ -243,7 +243,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__eol-members.html b/classstdex_1_1parser_1_1basic__eol-members.html index c4852a848..d5f76d5aa 100644 --- a/classstdex_1_1parser_1_1basic__eol-members.html +++ b/classstdex_1_1parser_1_1basic__eol-members.html @@ -93,7 +93,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__eol.html b/classstdex_1_1parser_1_1basic__eol.html index 2c8f82c66..98ecdddac 100644 --- a/classstdex_1_1parser_1_1basic__eol.html +++ b/classstdex_1_1parser_1_1basic__eol.html @@ -198,7 +198,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__fraction-members.html b/classstdex_1_1parser_1_1basic__fraction-members.html index 49475463e..93c30896d 100644 --- a/classstdex_1_1parser_1_1basic__fraction-members.html +++ b/classstdex_1_1parser_1_1basic__fraction-members.html @@ -95,7 +95,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__fraction.html b/classstdex_1_1parser_1_1basic__fraction.html index a917a26e6..544a7e8b1 100644 --- a/classstdex_1_1parser_1_1basic__fraction.html +++ b/classstdex_1_1parser_1_1basic__fraction.html @@ -232,7 +232,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__html__declaration__condition__end-members.html b/classstdex_1_1parser_1_1basic__html__declaration__condition__end-members.html index 04df24787..12f9f2bd8 100644 --- a/classstdex_1_1parser_1_1basic__html__declaration__condition__end-members.html +++ b/classstdex_1_1parser_1_1basic__html__declaration__condition__end-members.html @@ -92,7 +92,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__html__declaration__condition__end.html b/classstdex_1_1parser_1_1basic__html__declaration__condition__end.html index 8d073647c..7116f0c6e 100644 --- a/classstdex_1_1parser_1_1basic__html__declaration__condition__end.html +++ b/classstdex_1_1parser_1_1basic__html__declaration__condition__end.html @@ -139,7 +139,7 @@ class stdex::parser::basic_html_declaration_condition_end< T >

End

diff --git a/classstdex_1_1parser_1_1basic__html__declaration__condition__start-members.html b/classstdex_1_1parser_1_1basic__html__declaration__condition__start-members.html index 1800a3762..ab671f958 100644 --- a/classstdex_1_1parser_1_1basic__html__declaration__condition__start-members.html +++ b/classstdex_1_1parser_1_1basic__html__declaration__condition__start-members.html @@ -93,7 +93,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__html__declaration__condition__start.html b/classstdex_1_1parser_1_1basic__html__declaration__condition__start.html index c5568bcac..4f77c6fbd 100644 --- a/classstdex_1_1parser_1_1basic__html__declaration__condition__start.html +++ b/classstdex_1_1parser_1_1basic__html__declaration__condition__start.html @@ -175,7 +175,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__html__ident-members.html b/classstdex_1_1parser_1_1basic__html__ident-members.html index 5b98b96c7..2a95cc694 100644 --- a/classstdex_1_1parser_1_1basic__html__ident-members.html +++ b/classstdex_1_1parser_1_1basic__html__ident-members.html @@ -92,7 +92,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__html__ident.html b/classstdex_1_1parser_1_1basic__html__ident.html index 8cf498f2c..0e68597e0 100644 --- a/classstdex_1_1parser_1_1basic__html__ident.html +++ b/classstdex_1_1parser_1_1basic__html__ident.html @@ -139,7 +139,7 @@ class stdex::parser::basic_html_ident< T >

Contiguous sequence of

diff --git a/classstdex_1_1parser_1_1basic__html__tag-members.html b/classstdex_1_1parser_1_1basic__html__tag-members.html index 31c72cd28..13d9ccaf3 100644 --- a/classstdex_1_1parser_1_1basic__html__tag-members.html +++ b/classstdex_1_1parser_1_1basic__html__tag-members.html @@ -98,7 +98,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__html__tag.html b/classstdex_1_1parser_1_1basic__html__tag.html index 506055eb5..5de40386d 100644 --- a/classstdex_1_1parser_1_1basic__html__tag.html +++ b/classstdex_1_1parser_1_1basic__html__tag.html @@ -194,7 +194,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__html__value-members.html b/classstdex_1_1parser_1_1basic__html__value-members.html index b51582b51..4bc7dc576 100644 --- a/classstdex_1_1parser_1_1basic__html__value-members.html +++ b/classstdex_1_1parser_1_1basic__html__value-members.html @@ -93,7 +93,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__html__value.html b/classstdex_1_1parser_1_1basic__html__value.html index 3ee0ac4a2..38e23fe30 100644 --- a/classstdex_1_1parser_1_1basic__html__value.html +++ b/classstdex_1_1parser_1_1basic__html__value.html @@ -176,7 +176,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__iban-members.html b/classstdex_1_1parser_1_1basic__iban-members.html index 21341539b..296e55550 100644 --- a/classstdex_1_1parser_1_1basic__iban-members.html +++ b/classstdex_1_1parser_1_1basic__iban-members.html @@ -97,7 +97,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__iban.html b/classstdex_1_1parser_1_1basic__iban.html index b766c2371..3657eaa4a 100644 --- a/classstdex_1_1parser_1_1basic__iban.html +++ b/classstdex_1_1parser_1_1basic__iban.html @@ -244,7 +244,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__integer-members.html b/classstdex_1_1parser_1_1basic__integer-members.html index 9fdd34323..3fac22956 100644 --- a/classstdex_1_1parser_1_1basic__integer-members.html +++ b/classstdex_1_1parser_1_1basic__integer-members.html @@ -93,7 +93,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__integer.html b/classstdex_1_1parser_1_1basic__integer.html index 804e6d4d5..050cab100 100644 --- a/classstdex_1_1parser_1_1basic__integer.html +++ b/classstdex_1_1parser_1_1basic__integer.html @@ -180,7 +180,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__integer10-members.html b/classstdex_1_1parser_1_1basic__integer10-members.html index 863d77507..ea731a865 100644 --- a/classstdex_1_1parser_1_1basic__integer10-members.html +++ b/classstdex_1_1parser_1_1basic__integer10-members.html @@ -104,7 +104,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__integer10.html b/classstdex_1_1parser_1_1basic__integer10.html index 89fc9db99..a3dec1119 100644 --- a/classstdex_1_1parser_1_1basic__integer10.html +++ b/classstdex_1_1parser_1_1basic__integer10.html @@ -234,7 +234,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__integer10ts-members.html b/classstdex_1_1parser_1_1basic__integer10ts-members.html index 8b58f9d58..aa2fbf987 100644 --- a/classstdex_1_1parser_1_1basic__integer10ts-members.html +++ b/classstdex_1_1parser_1_1basic__integer10ts-members.html @@ -98,7 +98,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__integer10ts.html b/classstdex_1_1parser_1_1basic__integer10ts.html index 5beef5d5a..8083f27c1 100644 --- a/classstdex_1_1parser_1_1basic__integer10ts.html +++ b/classstdex_1_1parser_1_1basic__integer10ts.html @@ -248,7 +248,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__integer16-members.html b/classstdex_1_1parser_1_1basic__integer16-members.html index 8958a3e6d..75ba5d39e 100644 --- a/classstdex_1_1parser_1_1basic__integer16-members.html +++ b/classstdex_1_1parser_1_1basic__integer16-members.html @@ -110,7 +110,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__integer16.html b/classstdex_1_1parser_1_1basic__integer16.html index 9bd233a31..d6b5ea24f 100644 --- a/classstdex_1_1parser_1_1basic__integer16.html +++ b/classstdex_1_1parser_1_1basic__integer16.html @@ -252,7 +252,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__ipv4__address-members.html b/classstdex_1_1parser_1_1basic__ipv4__address-members.html index 66a0ba9eb..aecd56bfc 100644 --- a/classstdex_1_1parser_1_1basic__ipv4__address-members.html +++ b/classstdex_1_1parser_1_1basic__ipv4__address-members.html @@ -105,7 +105,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__ipv4__address.html b/classstdex_1_1parser_1_1basic__ipv4__address.html index 5634b590c..ec83334a4 100644 --- a/classstdex_1_1parser_1_1basic__ipv4__address.html +++ b/classstdex_1_1parser_1_1basic__ipv4__address.html @@ -265,7 +265,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__ipv6__address-members.html b/classstdex_1_1parser_1_1basic__ipv6__address-members.html index fbfebc371..1a7bdc3bd 100644 --- a/classstdex_1_1parser_1_1basic__ipv6__address-members.html +++ b/classstdex_1_1parser_1_1basic__ipv6__address-members.html @@ -113,7 +113,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__ipv6__address.html b/classstdex_1_1parser_1_1basic__ipv6__address.html index 50ace439f..bc037b973 100644 --- a/classstdex_1_1parser_1_1basic__ipv6__address.html +++ b/classstdex_1_1parser_1_1basic__ipv6__address.html @@ -290,7 +290,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__ipv6__scope__id__char-members.html b/classstdex_1_1parser_1_1basic__ipv6__scope__id__char-members.html index 5253f6afc..c89486291 100644 --- a/classstdex_1_1parser_1_1basic__ipv6__scope__id__char-members.html +++ b/classstdex_1_1parser_1_1basic__ipv6__scope__id__char-members.html @@ -92,7 +92,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__ipv6__scope__id__char.html b/classstdex_1_1parser_1_1basic__ipv6__scope__id__char.html index 8088b8b60..48164f965 100644 --- a/classstdex_1_1parser_1_1basic__ipv6__scope__id__char.html +++ b/classstdex_1_1parser_1_1basic__ipv6__scope__id__char.html @@ -191,7 +191,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__iterations-members.html b/classstdex_1_1parser_1_1basic__iterations-members.html index 654ca6a19..d3e820cb1 100644 --- a/classstdex_1_1parser_1_1basic__iterations-members.html +++ b/classstdex_1_1parser_1_1basic__iterations-members.html @@ -96,7 +96,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__iterations.html b/classstdex_1_1parser_1_1basic__iterations.html index 27a5797bc..ba290fc8f 100644 --- a/classstdex_1_1parser_1_1basic__iterations.html +++ b/classstdex_1_1parser_1_1basic__iterations.html @@ -211,7 +211,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__json__string-members.html b/classstdex_1_1parser_1_1basic__json__string-members.html index eea0b3b8c..3588dda6b 100644 --- a/classstdex_1_1parser_1_1basic__json__string-members.html +++ b/classstdex_1_1parser_1_1basic__json__string-members.html @@ -104,7 +104,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__json__string.html b/classstdex_1_1parser_1_1basic__json__string.html index 9dc1618f2..e4664eac7 100644 --- a/classstdex_1_1parser_1_1basic__json__string.html +++ b/classstdex_1_1parser_1_1basic__json__string.html @@ -260,7 +260,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__mime__type-members.html b/classstdex_1_1parser_1_1basic__mime__type-members.html index e99a5c433..01b0bdd09 100644 --- a/classstdex_1_1parser_1_1basic__mime__type-members.html +++ b/classstdex_1_1parser_1_1basic__mime__type-members.html @@ -95,7 +95,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__mime__type.html b/classstdex_1_1parser_1_1basic__mime__type.html index 210d9cc56..80c3fd1b9 100644 --- a/classstdex_1_1parser_1_1basic__mime__type.html +++ b/classstdex_1_1parser_1_1basic__mime__type.html @@ -184,7 +184,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__mixed__numeral-members.html b/classstdex_1_1parser_1_1basic__mixed__numeral-members.html index 94b47082b..d5c92bb4b 100644 --- a/classstdex_1_1parser_1_1basic__mixed__numeral-members.html +++ b/classstdex_1_1parser_1_1basic__mixed__numeral-members.html @@ -98,7 +98,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__mixed__numeral.html b/classstdex_1_1parser_1_1basic__mixed__numeral.html index eb188be9f..71ec4b16b 100644 --- a/classstdex_1_1parser_1_1basic__mixed__numeral.html +++ b/classstdex_1_1parser_1_1basic__mixed__numeral.html @@ -247,7 +247,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__monetary__numeral-members.html b/classstdex_1_1parser_1_1basic__monetary__numeral-members.html index ddeb900ce..7e90a067f 100644 --- a/classstdex_1_1parser_1_1basic__monetary__numeral-members.html +++ b/classstdex_1_1parser_1_1basic__monetary__numeral-members.html @@ -99,7 +99,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__monetary__numeral.html b/classstdex_1_1parser_1_1basic__monetary__numeral.html index 2e1ef1f52..a2e4d460c 100644 --- a/classstdex_1_1parser_1_1basic__monetary__numeral.html +++ b/classstdex_1_1parser_1_1basic__monetary__numeral.html @@ -251,7 +251,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__noop-members.html b/classstdex_1_1parser_1_1basic__noop-members.html index 8dbca0f46..3f6770424 100644 --- a/classstdex_1_1parser_1_1basic__noop-members.html +++ b/classstdex_1_1parser_1_1basic__noop-members.html @@ -91,7 +91,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__noop.html b/classstdex_1_1parser_1_1basic__noop.html index 984026c28..77045d1b6 100644 --- a/classstdex_1_1parser_1_1basic__noop.html +++ b/classstdex_1_1parser_1_1basic__noop.html @@ -188,7 +188,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__parser-members.html b/classstdex_1_1parser_1_1basic__parser-members.html index 6e742e6c2..e5591f4b0 100644 --- a/classstdex_1_1parser_1_1basic__parser-members.html +++ b/classstdex_1_1parser_1_1basic__parser-members.html @@ -91,7 +91,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__parser.html b/classstdex_1_1parser_1_1basic__parser.html index 908d558ec..df537613b 100644 --- a/classstdex_1_1parser_1_1basic__parser.html +++ b/classstdex_1_1parser_1_1basic__parser.html @@ -212,7 +212,7 @@ class stdex::parser::basic_parser< T >

Base template for all parse

diff --git a/classstdex_1_1parser_1_1basic__permutation-members.html b/classstdex_1_1parser_1_1basic__permutation-members.html index 4004b3cb8..9ef1e7d9d 100644 --- a/classstdex_1_1parser_1_1basic__permutation-members.html +++ b/classstdex_1_1parser_1_1basic__permutation-members.html @@ -98,7 +98,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__permutation.html b/classstdex_1_1parser_1_1basic__permutation.html index 133a078f8..add26820e 100644 --- a/classstdex_1_1parser_1_1basic__permutation.html +++ b/classstdex_1_1parser_1_1basic__permutation.html @@ -216,7 +216,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__phone__number-members.html b/classstdex_1_1parser_1_1basic__phone__number-members.html index 120eb6091..0adbcbf53 100644 --- a/classstdex_1_1parser_1_1basic__phone__number-members.html +++ b/classstdex_1_1parser_1_1basic__phone__number-members.html @@ -99,7 +99,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__phone__number.html b/classstdex_1_1parser_1_1basic__phone__number.html index ec9507b71..24700e750 100644 --- a/classstdex_1_1parser_1_1basic__phone__number.html +++ b/classstdex_1_1parser_1_1basic__phone__number.html @@ -246,7 +246,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__punct__cu-members.html b/classstdex_1_1parser_1_1basic__punct__cu-members.html index 4a9d2ea7f..a2380d2ae 100644 --- a/classstdex_1_1parser_1_1basic__punct__cu-members.html +++ b/classstdex_1_1parser_1_1basic__punct__cu-members.html @@ -93,7 +93,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__punct__cu.html b/classstdex_1_1parser_1_1basic__punct__cu.html index 89f42fcea..5b0870ba1 100644 --- a/classstdex_1_1parser_1_1basic__punct__cu.html +++ b/classstdex_1_1parser_1_1basic__punct__cu.html @@ -198,7 +198,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__roman__numeral-members.html b/classstdex_1_1parser_1_1basic__roman__numeral-members.html index 2905a0e65..fc222ecc5 100644 --- a/classstdex_1_1parser_1_1basic__roman__numeral-members.html +++ b/classstdex_1_1parser_1_1basic__roman__numeral-members.html @@ -103,7 +103,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__roman__numeral.html b/classstdex_1_1parser_1_1basic__roman__numeral.html index 37db8fda5..906a48ba6 100644 --- a/classstdex_1_1parser_1_1basic__roman__numeral.html +++ b/classstdex_1_1parser_1_1basic__roman__numeral.html @@ -231,7 +231,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__scientific__numeral-members.html b/classstdex_1_1parser_1_1basic__scientific__numeral-members.html index 45541597c..387d7e4d9 100644 --- a/classstdex_1_1parser_1_1basic__scientific__numeral-members.html +++ b/classstdex_1_1parser_1_1basic__scientific__numeral-members.html @@ -103,7 +103,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__scientific__numeral.html b/classstdex_1_1parser_1_1basic__scientific__numeral.html index 2156ae013..08952e9a9 100644 --- a/classstdex_1_1parser_1_1basic__scientific__numeral.html +++ b/classstdex_1_1parser_1_1basic__scientific__numeral.html @@ -267,7 +267,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__score-members.html b/classstdex_1_1parser_1_1basic__score-members.html index a310c46ce..be7fc8b97 100644 --- a/classstdex_1_1parser_1_1basic__score-members.html +++ b/classstdex_1_1parser_1_1basic__score-members.html @@ -96,7 +96,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__score.html b/classstdex_1_1parser_1_1basic__score.html index ee6b5e889..0c5511376 100644 --- a/classstdex_1_1parser_1_1basic__score.html +++ b/classstdex_1_1parser_1_1basic__score.html @@ -236,7 +236,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__sequence-members.html b/classstdex_1_1parser_1_1basic__sequence-members.html index f1c27c88f..64c4efbd9 100644 --- a/classstdex_1_1parser_1_1basic__sequence-members.html +++ b/classstdex_1_1parser_1_1basic__sequence-members.html @@ -97,7 +97,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__sequence.html b/classstdex_1_1parser_1_1basic__sequence.html index 1fa71cc17..33b94a13c 100644 --- a/classstdex_1_1parser_1_1basic__sequence.html +++ b/classstdex_1_1parser_1_1basic__sequence.html @@ -209,7 +209,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__set-members.html b/classstdex_1_1parser_1_1basic__set-members.html index d560266db..d0644a7bb 100644 --- a/classstdex_1_1parser_1_1basic__set-members.html +++ b/classstdex_1_1parser_1_1basic__set-members.html @@ -94,7 +94,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__set.html b/classstdex_1_1parser_1_1basic__set.html index 8134b4988..a978b42e8 100644 --- a/classstdex_1_1parser_1_1basic__set.html +++ b/classstdex_1_1parser_1_1basic__set.html @@ -223,7 +223,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__si__reference-members.html b/classstdex_1_1parser_1_1basic__si__reference-members.html index 7c27ed142..ed48ac6c0 100644 --- a/classstdex_1_1parser_1_1basic__si__reference-members.html +++ b/classstdex_1_1parser_1_1basic__si__reference-members.html @@ -102,7 +102,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__si__reference.html b/classstdex_1_1parser_1_1basic__si__reference.html index d97b9fbf1..30de5322d 100644 --- a/classstdex_1_1parser_1_1basic__si__reference.html +++ b/classstdex_1_1parser_1_1basic__si__reference.html @@ -265,7 +265,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__si__reference__delimiter-members.html b/classstdex_1_1parser_1_1basic__si__reference__delimiter-members.html index 24f81e85d..113824f8b 100644 --- a/classstdex_1_1parser_1_1basic__si__reference__delimiter-members.html +++ b/classstdex_1_1parser_1_1basic__si__reference__delimiter-members.html @@ -92,7 +92,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__si__reference__delimiter.html b/classstdex_1_1parser_1_1basic__si__reference__delimiter.html index 528cbf63f..4ff5b9325 100644 --- a/classstdex_1_1parser_1_1basic__si__reference__delimiter.html +++ b/classstdex_1_1parser_1_1basic__si__reference__delimiter.html @@ -192,7 +192,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__si__reference__part-members.html b/classstdex_1_1parser_1_1basic__si__reference__part-members.html index ae5162c5d..b2f6ade17 100644 --- a/classstdex_1_1parser_1_1basic__si__reference__part-members.html +++ b/classstdex_1_1parser_1_1basic__si__reference__part-members.html @@ -92,7 +92,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__si__reference__part.html b/classstdex_1_1parser_1_1basic__si__reference__part.html index b3eb2b608..2732c24bd 100644 --- a/classstdex_1_1parser_1_1basic__si__reference__part.html +++ b/classstdex_1_1parser_1_1basic__si__reference__part.html @@ -192,7 +192,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__signed__numeral-members.html b/classstdex_1_1parser_1_1basic__signed__numeral-members.html index bd2ed06bd..06697c28c 100644 --- a/classstdex_1_1parser_1_1basic__signed__numeral-members.html +++ b/classstdex_1_1parser_1_1basic__signed__numeral-members.html @@ -96,7 +96,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__signed__numeral.html b/classstdex_1_1parser_1_1basic__signed__numeral.html index c75b9feb5..9c0a79d10 100644 --- a/classstdex_1_1parser_1_1basic__signed__numeral.html +++ b/classstdex_1_1parser_1_1basic__signed__numeral.html @@ -239,7 +239,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__space__cu-members.html b/classstdex_1_1parser_1_1basic__space__cu-members.html index edb3f6e73..8fccea865 100644 --- a/classstdex_1_1parser_1_1basic__space__cu-members.html +++ b/classstdex_1_1parser_1_1basic__space__cu-members.html @@ -93,7 +93,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__space__cu.html b/classstdex_1_1parser_1_1basic__space__cu.html index 9977d431c..4639cf4ea 100644 --- a/classstdex_1_1parser_1_1basic__space__cu.html +++ b/classstdex_1_1parser_1_1basic__space__cu.html @@ -198,7 +198,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__space__or__punct__cu-members.html b/classstdex_1_1parser_1_1basic__space__or__punct__cu-members.html index f26063b26..4c1e75b47 100644 --- a/classstdex_1_1parser_1_1basic__space__or__punct__cu-members.html +++ b/classstdex_1_1parser_1_1basic__space__or__punct__cu-members.html @@ -93,7 +93,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__space__or__punct__cu.html b/classstdex_1_1parser_1_1basic__space__or__punct__cu.html index 3d13ee932..f723ee4a4 100644 --- a/classstdex_1_1parser_1_1basic__space__or__punct__cu.html +++ b/classstdex_1_1parser_1_1basic__space__or__punct__cu.html @@ -198,7 +198,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__string-members.html b/classstdex_1_1parser_1_1basic__string-members.html index f17cf0e1a..0175e9f03 100644 --- a/classstdex_1_1parser_1_1basic__string-members.html +++ b/classstdex_1_1parser_1_1basic__string-members.html @@ -93,7 +93,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__string.html b/classstdex_1_1parser_1_1basic__string.html index 7e45a7c58..6ec7aea4d 100644 --- a/classstdex_1_1parser_1_1basic__string.html +++ b/classstdex_1_1parser_1_1basic__string.html @@ -198,7 +198,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__string__branch-members.html b/classstdex_1_1parser_1_1basic__string__branch-members.html index 258099360..ebc1e8dbe 100644 --- a/classstdex_1_1parser_1_1basic__string__branch-members.html +++ b/classstdex_1_1parser_1_1basic__string__branch-members.html @@ -104,7 +104,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__string__branch.html b/classstdex_1_1parser_1_1basic__string__branch.html index b7aed70f9..808e27d51 100644 --- a/classstdex_1_1parser_1_1basic__string__branch.html +++ b/classstdex_1_1parser_1_1basic__string__branch.html @@ -185,7 +185,7 @@ class stdex::parser::basic_string_branch< T, T_parser >

Test for a

diff --git a/classstdex_1_1parser_1_1basic__time-members.html b/classstdex_1_1parser_1_1basic__time-members.html index 1b5e801f4..7e0af7e9f 100644 --- a/classstdex_1_1parser_1_1basic__time-members.html +++ b/classstdex_1_1parser_1_1basic__time-members.html @@ -98,7 +98,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__time.html b/classstdex_1_1parser_1_1basic__time.html index 82163841c..3fd0239f7 100644 --- a/classstdex_1_1parser_1_1basic__time.html +++ b/classstdex_1_1parser_1_1basic__time.html @@ -242,7 +242,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__url-members.html b/classstdex_1_1parser_1_1basic__url-members.html index 382ec3866..f10593a9d 100644 --- a/classstdex_1_1parser_1_1basic__url-members.html +++ b/classstdex_1_1parser_1_1basic__url-members.html @@ -108,7 +108,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__url.html b/classstdex_1_1parser_1_1basic__url.html index 3836f3c66..3aa0087f3 100644 --- a/classstdex_1_1parser_1_1basic__url.html +++ b/classstdex_1_1parser_1_1basic__url.html @@ -272,7 +272,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__url__password__char-members.html b/classstdex_1_1parser_1_1basic__url__password__char-members.html index 46b02baf8..296499361 100644 --- a/classstdex_1_1parser_1_1basic__url__password__char-members.html +++ b/classstdex_1_1parser_1_1basic__url__password__char-members.html @@ -92,7 +92,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__url__password__char.html b/classstdex_1_1parser_1_1basic__url__password__char.html index 38501f143..e18325ed1 100644 --- a/classstdex_1_1parser_1_1basic__url__password__char.html +++ b/classstdex_1_1parser_1_1basic__url__password__char.html @@ -191,7 +191,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__url__path-members.html b/classstdex_1_1parser_1_1basic__url__path-members.html index 1c65a77b4..e2002d968 100644 --- a/classstdex_1_1parser_1_1basic__url__path-members.html +++ b/classstdex_1_1parser_1_1basic__url__path-members.html @@ -98,7 +98,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__url__path.html b/classstdex_1_1parser_1_1basic__url__path.html index 2e7125ec9..d4fbee520 100644 --- a/classstdex_1_1parser_1_1basic__url__path.html +++ b/classstdex_1_1parser_1_1basic__url__path.html @@ -242,7 +242,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__url__path__char-members.html b/classstdex_1_1parser_1_1basic__url__path__char-members.html index c21ddc1c6..221d394b4 100644 --- a/classstdex_1_1parser_1_1basic__url__path__char-members.html +++ b/classstdex_1_1parser_1_1basic__url__path__char-members.html @@ -92,7 +92,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__url__path__char.html b/classstdex_1_1parser_1_1basic__url__path__char.html index 63cfd98c3..ec199ebfb 100644 --- a/classstdex_1_1parser_1_1basic__url__path__char.html +++ b/classstdex_1_1parser_1_1basic__url__path__char.html @@ -191,7 +191,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__url__username__char-members.html b/classstdex_1_1parser_1_1basic__url__username__char-members.html index 744d463eb..75fdab118 100644 --- a/classstdex_1_1parser_1_1basic__url__username__char-members.html +++ b/classstdex_1_1parser_1_1basic__url__username__char-members.html @@ -92,7 +92,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1basic__url__username__char.html b/classstdex_1_1parser_1_1basic__url__username__char.html index 10113a4da..bda5f9717 100644 --- a/classstdex_1_1parser_1_1basic__url__username__char.html +++ b/classstdex_1_1parser_1_1basic__url__username__char.html @@ -191,7 +191,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1http__agent-members.html b/classstdex_1_1parser_1_1http__agent-members.html index 5e96e9140..6ee147cf2 100644 --- a/classstdex_1_1parser_1_1http__agent-members.html +++ b/classstdex_1_1parser_1_1http__agent-members.html @@ -88,7 +88,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1http__agent.html b/classstdex_1_1parser_1_1http__agent.html index 641912428..26c09639c 100644 --- a/classstdex_1_1parser_1_1http__agent.html +++ b/classstdex_1_1parser_1_1http__agent.html @@ -220,7 +220,7 @@ std::locale m_locale diff --git a/classstdex_1_1parser_1_1http__any__type-members.html b/classstdex_1_1parser_1_1http__any__type-members.html index 16d710e0e..f52db62ca 100644 --- a/classstdex_1_1parser_1_1http__any__type-members.html +++ b/classstdex_1_1parser_1_1http__any__type-members.html @@ -85,7 +85,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1http__any__type.html b/classstdex_1_1parser_1_1http__any__type.html index 6c282a009..f86172f6f 100644 --- a/classstdex_1_1parser_1_1http__any__type.html +++ b/classstdex_1_1parser_1_1http__any__type.html @@ -184,7 +184,7 @@ std::locale m_locale diff --git a/classstdex_1_1parser_1_1http__asterisk-members.html b/classstdex_1_1parser_1_1http__asterisk-members.html index af710eed9..306f97bab 100644 --- a/classstdex_1_1parser_1_1http__asterisk-members.html +++ b/classstdex_1_1parser_1_1http__asterisk-members.html @@ -85,7 +85,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1http__asterisk.html b/classstdex_1_1parser_1_1http__asterisk.html index 08d978b24..63fc895aa 100644 --- a/classstdex_1_1parser_1_1http__asterisk.html +++ b/classstdex_1_1parser_1_1http__asterisk.html @@ -184,7 +184,7 @@ std::locale m_locale diff --git a/classstdex_1_1parser_1_1http__cookie-members.html b/classstdex_1_1parser_1_1http__cookie-members.html index 82ac2dd97..e2df4af47 100644 --- a/classstdex_1_1parser_1_1http__cookie-members.html +++ b/classstdex_1_1parser_1_1http__cookie-members.html @@ -90,7 +90,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1http__cookie.html b/classstdex_1_1parser_1_1http__cookie.html index 57ff3d31e..5a3f7c159 100644 --- a/classstdex_1_1parser_1_1http__cookie.html +++ b/classstdex_1_1parser_1_1http__cookie.html @@ -230,7 +230,7 @@ std::locale m_locale diff --git a/classstdex_1_1parser_1_1http__cookie__parameter-members.html b/classstdex_1_1parser_1_1http__cookie__parameter-members.html index ada3f5a47..fccdc166b 100644 --- a/classstdex_1_1parser_1_1http__cookie__parameter-members.html +++ b/classstdex_1_1parser_1_1http__cookie__parameter-members.html @@ -89,7 +89,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1http__cookie__parameter.html b/classstdex_1_1parser_1_1http__cookie__parameter.html index 3313ab6cc..fb8e8620c 100644 --- a/classstdex_1_1parser_1_1http__cookie__parameter.html +++ b/classstdex_1_1parser_1_1http__cookie__parameter.html @@ -224,7 +224,7 @@ std::locale m_locale diff --git a/classstdex_1_1parser_1_1http__header-members.html b/classstdex_1_1parser_1_1http__header-members.html index a7c425129..67f111651 100644 --- a/classstdex_1_1parser_1_1http__header-members.html +++ b/classstdex_1_1parser_1_1http__header-members.html @@ -89,7 +89,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1http__header.html b/classstdex_1_1parser_1_1http__header.html index 6ab783abd..013e65658 100644 --- a/classstdex_1_1parser_1_1http__header.html +++ b/classstdex_1_1parser_1_1http__header.html @@ -224,7 +224,7 @@ std::locale m_locale diff --git a/classstdex_1_1parser_1_1http__language-members.html b/classstdex_1_1parser_1_1http__language-members.html index 80348db2c..d5f107ee2 100644 --- a/classstdex_1_1parser_1_1http__language-members.html +++ b/classstdex_1_1parser_1_1http__language-members.html @@ -87,7 +87,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1http__language.html b/classstdex_1_1parser_1_1http__language.html index f635bf08f..38c12c664 100644 --- a/classstdex_1_1parser_1_1http__language.html +++ b/classstdex_1_1parser_1_1http__language.html @@ -217,7 +217,7 @@ std::locale m_locale diff --git a/classstdex_1_1parser_1_1http__line__break-members.html b/classstdex_1_1parser_1_1http__line__break-members.html index 8d15ec18b..634df3b15 100644 --- a/classstdex_1_1parser_1_1http__line__break-members.html +++ b/classstdex_1_1parser_1_1http__line__break-members.html @@ -85,7 +85,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1http__line__break.html b/classstdex_1_1parser_1_1http__line__break.html index 159f5c2f5..a8ccc9d49 100644 --- a/classstdex_1_1parser_1_1http__line__break.html +++ b/classstdex_1_1parser_1_1http__line__break.html @@ -184,7 +184,7 @@ std::locale m_locale diff --git a/classstdex_1_1parser_1_1http__media__range-members.html b/classstdex_1_1parser_1_1http__media__range-members.html index f5832a33e..64515658e 100644 --- a/classstdex_1_1parser_1_1http__media__range-members.html +++ b/classstdex_1_1parser_1_1http__media__range-members.html @@ -89,7 +89,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1http__media__range.html b/classstdex_1_1parser_1_1http__media__range.html index ad8a61ede..6096ebec5 100644 --- a/classstdex_1_1parser_1_1http__media__range.html +++ b/classstdex_1_1parser_1_1http__media__range.html @@ -225,7 +225,7 @@ std::locale m_locale diff --git a/classstdex_1_1parser_1_1http__media__type-members.html b/classstdex_1_1parser_1_1http__media__type-members.html index d9c282961..045d0ebad 100644 --- a/classstdex_1_1parser_1_1http__media__type-members.html +++ b/classstdex_1_1parser_1_1http__media__type-members.html @@ -90,7 +90,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1http__media__type.html b/classstdex_1_1parser_1_1http__media__type.html index 8b4baf72a..1338e999d 100644 --- a/classstdex_1_1parser_1_1http__media__type.html +++ b/classstdex_1_1parser_1_1http__media__type.html @@ -229,7 +229,7 @@ std::locale m_locale diff --git a/classstdex_1_1parser_1_1http__parameter-members.html b/classstdex_1_1parser_1_1http__parameter-members.html index 8010406d2..00d783c40 100644 --- a/classstdex_1_1parser_1_1http__parameter-members.html +++ b/classstdex_1_1parser_1_1http__parameter-members.html @@ -89,7 +89,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1http__parameter.html b/classstdex_1_1parser_1_1http__parameter.html index 8aa3e2120..077f7e3ac 100644 --- a/classstdex_1_1parser_1_1http__parameter.html +++ b/classstdex_1_1parser_1_1http__parameter.html @@ -226,7 +226,7 @@ std::locale m_locale diff --git a/classstdex_1_1parser_1_1http__protocol-members.html b/classstdex_1_1parser_1_1http__protocol-members.html index db2a60945..21e931d83 100644 --- a/classstdex_1_1parser_1_1http__protocol-members.html +++ b/classstdex_1_1parser_1_1http__protocol-members.html @@ -91,7 +91,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1http__protocol.html b/classstdex_1_1parser_1_1http__protocol.html index abe0b4686..168cd7826 100644 --- a/classstdex_1_1parser_1_1http__protocol.html +++ b/classstdex_1_1parser_1_1http__protocol.html @@ -230,7 +230,7 @@ std::locale m_locale diff --git a/classstdex_1_1parser_1_1http__quoted__string-members.html b/classstdex_1_1parser_1_1http__quoted__string-members.html index c6e491edb..7ab624d09 100644 --- a/classstdex_1_1parser_1_1http__quoted__string-members.html +++ b/classstdex_1_1parser_1_1http__quoted__string-members.html @@ -88,7 +88,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1http__quoted__string.html b/classstdex_1_1parser_1_1http__quoted__string.html index de7ddec90..f5da8e223 100644 --- a/classstdex_1_1parser_1_1http__quoted__string.html +++ b/classstdex_1_1parser_1_1http__quoted__string.html @@ -222,7 +222,7 @@ std::locale m_locale diff --git a/classstdex_1_1parser_1_1http__request-members.html b/classstdex_1_1parser_1_1http__request-members.html index a03433514..74908b9a2 100644 --- a/classstdex_1_1parser_1_1http__request-members.html +++ b/classstdex_1_1parser_1_1http__request-members.html @@ -91,7 +91,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1http__request.html b/classstdex_1_1parser_1_1http__request.html index fca25de90..c1e1503ee 100644 --- a/classstdex_1_1parser_1_1http__request.html +++ b/classstdex_1_1parser_1_1http__request.html @@ -230,7 +230,7 @@ std::locale m_locale diff --git a/classstdex_1_1parser_1_1http__space-members.html b/classstdex_1_1parser_1_1http__space-members.html index cf298fdaf..d2aefe35a 100644 --- a/classstdex_1_1parser_1_1http__space-members.html +++ b/classstdex_1_1parser_1_1http__space-members.html @@ -86,7 +86,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1http__space.html b/classstdex_1_1parser_1_1http__space.html index 87c9db651..24f21e502 100644 --- a/classstdex_1_1parser_1_1http__space.html +++ b/classstdex_1_1parser_1_1http__space.html @@ -191,7 +191,7 @@ Additional Inherited Members diff --git a/classstdex_1_1parser_1_1http__text__char-members.html b/classstdex_1_1parser_1_1http__text__char-members.html index 8135ec0ae..8840a3f30 100644 --- a/classstdex_1_1parser_1_1http__text__char-members.html +++ b/classstdex_1_1parser_1_1http__text__char-members.html @@ -86,7 +86,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1http__text__char.html b/classstdex_1_1parser_1_1http__text__char.html index ab539faf6..e145c346a 100644 --- a/classstdex_1_1parser_1_1http__text__char.html +++ b/classstdex_1_1parser_1_1http__text__char.html @@ -191,7 +191,7 @@ Additional Inherited Members diff --git a/classstdex_1_1parser_1_1http__token-members.html b/classstdex_1_1parser_1_1http__token-members.html index 4f19facdc..471434de6 100644 --- a/classstdex_1_1parser_1_1http__token-members.html +++ b/classstdex_1_1parser_1_1http__token-members.html @@ -85,7 +85,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1http__token.html b/classstdex_1_1parser_1_1http__token.html index 3d38b857a..38a4d2546 100644 --- a/classstdex_1_1parser_1_1http__token.html +++ b/classstdex_1_1parser_1_1http__token.html @@ -184,7 +184,7 @@ std::locale m_locale diff --git a/classstdex_1_1parser_1_1http__url-members.html b/classstdex_1_1parser_1_1http__url-members.html index 1682b93f8..c84d77c85 100644 --- a/classstdex_1_1parser_1_1http__url-members.html +++ b/classstdex_1_1parser_1_1http__url-members.html @@ -91,7 +91,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1http__url.html b/classstdex_1_1parser_1_1http__url.html index 62b79a48f..3073b8523 100644 --- a/classstdex_1_1parser_1_1http__url.html +++ b/classstdex_1_1parser_1_1http__url.html @@ -229,7 +229,7 @@ std::locale m_locale diff --git a/classstdex_1_1parser_1_1http__url__parameter-members.html b/classstdex_1_1parser_1_1http__url__parameter-members.html index 2d58b9ad5..4a95ea27d 100644 --- a/classstdex_1_1parser_1_1http__url__parameter-members.html +++ b/classstdex_1_1parser_1_1http__url__parameter-members.html @@ -88,7 +88,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1http__url__parameter.html b/classstdex_1_1parser_1_1http__url__parameter.html index 3bb79b96c..397c26862 100644 --- a/classstdex_1_1parser_1_1http__url__parameter.html +++ b/classstdex_1_1parser_1_1http__url__parameter.html @@ -220,7 +220,7 @@ std::locale m_locale diff --git a/classstdex_1_1parser_1_1http__url__path-members.html b/classstdex_1_1parser_1_1http__url__path-members.html index 3e200ad5f..df39b9722 100644 --- a/classstdex_1_1parser_1_1http__url__path-members.html +++ b/classstdex_1_1parser_1_1http__url__path-members.html @@ -87,7 +87,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1http__url__path.html b/classstdex_1_1parser_1_1http__url__path.html index c7cbfbf28..88cf893d3 100644 --- a/classstdex_1_1parser_1_1http__url__path.html +++ b/classstdex_1_1parser_1_1http__url__path.html @@ -218,7 +218,7 @@ std::locale m_locale diff --git a/classstdex_1_1parser_1_1http__url__path__segment-members.html b/classstdex_1_1parser_1_1http__url__path__segment-members.html index 51d8192c0..8f76dc742 100644 --- a/classstdex_1_1parser_1_1http__url__path__segment-members.html +++ b/classstdex_1_1parser_1_1http__url__path__segment-members.html @@ -85,7 +85,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1http__url__path__segment.html b/classstdex_1_1parser_1_1http__url__path__segment.html index 8730061df..42dcaf40f 100644 --- a/classstdex_1_1parser_1_1http__url__path__segment.html +++ b/classstdex_1_1parser_1_1http__url__path__segment.html @@ -184,7 +184,7 @@ std::locale m_locale diff --git a/classstdex_1_1parser_1_1http__url__port-members.html b/classstdex_1_1parser_1_1http__url__port-members.html index 4b0b417d2..18dcac444 100644 --- a/classstdex_1_1parser_1_1http__url__port-members.html +++ b/classstdex_1_1parser_1_1http__url__port-members.html @@ -88,7 +88,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1http__url__port.html b/classstdex_1_1parser_1_1http__url__port.html index 67aa0cdd1..b142ac253 100644 --- a/classstdex_1_1parser_1_1http__url__port.html +++ b/classstdex_1_1parser_1_1http__url__port.html @@ -220,7 +220,7 @@ std::locale m_locale diff --git a/classstdex_1_1parser_1_1http__url__server-members.html b/classstdex_1_1parser_1_1http__url__server-members.html index 03a51ff19..d129a8b65 100644 --- a/classstdex_1_1parser_1_1http__url__server-members.html +++ b/classstdex_1_1parser_1_1http__url__server-members.html @@ -85,7 +85,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1http__url__server.html b/classstdex_1_1parser_1_1http__url__server.html index 513063ac8..3c0260f67 100644 --- a/classstdex_1_1parser_1_1http__url__server.html +++ b/classstdex_1_1parser_1_1http__url__server.html @@ -184,7 +184,7 @@ std::locale m_locale diff --git a/classstdex_1_1parser_1_1http__value-members.html b/classstdex_1_1parser_1_1http__value-members.html index 69e4cfbe9..cc49945e5 100644 --- a/classstdex_1_1parser_1_1http__value-members.html +++ b/classstdex_1_1parser_1_1http__value-members.html @@ -88,7 +88,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1http__value.html b/classstdex_1_1parser_1_1http__value.html index bc9eba8f8..bade57d39 100644 --- a/classstdex_1_1parser_1_1http__value.html +++ b/classstdex_1_1parser_1_1http__value.html @@ -222,7 +222,7 @@ std::locale m_locale diff --git a/classstdex_1_1parser_1_1http__value__collection-members.html b/classstdex_1_1parser_1_1http__value__collection-members.html index 5e15f9ad5..ea5fc072f 100644 --- a/classstdex_1_1parser_1_1http__value__collection-members.html +++ b/classstdex_1_1parser_1_1http__value__collection-members.html @@ -84,7 +84,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1http__value__collection.html b/classstdex_1_1parser_1_1http__value__collection.html index 2c421aacd..a3bf3885a 100644 --- a/classstdex_1_1parser_1_1http__value__collection.html +++ b/classstdex_1_1parser_1_1http__value__collection.html @@ -107,7 +107,7 @@ class stdex::parser::http_value_collection< _Key, T >

Collection o

diff --git a/classstdex_1_1parser_1_1http__weight-members.html b/classstdex_1_1parser_1_1http__weight-members.html index 4cfa07b3a..819c0f6fb 100644 --- a/classstdex_1_1parser_1_1http__weight-members.html +++ b/classstdex_1_1parser_1_1http__weight-members.html @@ -88,7 +88,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1http__weight.html b/classstdex_1_1parser_1_1http__weight.html index d23b7ac26..d43c4f512 100644 --- a/classstdex_1_1parser_1_1http__weight.html +++ b/classstdex_1_1parser_1_1http__weight.html @@ -221,7 +221,7 @@ std::locale m_locale diff --git a/classstdex_1_1parser_1_1http__weighted__value-members.html b/classstdex_1_1parser_1_1http__weighted__value-members.html index 7409af058..85e695e34 100644 --- a/classstdex_1_1parser_1_1http__weighted__value-members.html +++ b/classstdex_1_1parser_1_1http__weighted__value-members.html @@ -90,7 +90,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1http__weighted__value.html b/classstdex_1_1parser_1_1http__weighted__value.html index 2ee30c60a..a3830d6db 100644 --- a/classstdex_1_1parser_1_1http__weighted__value.html +++ b/classstdex_1_1parser_1_1http__weighted__value.html @@ -231,7 +231,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1parser__collection-members.html b/classstdex_1_1parser_1_1parser__collection-members.html index 130ef8eca..8709702b5 100644 --- a/classstdex_1_1parser_1_1parser__collection-members.html +++ b/classstdex_1_1parser_1_1parser__collection-members.html @@ -95,7 +95,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1parser__collection.html b/classstdex_1_1parser_1_1parser__collection.html index bb9fd0568..c706f8e8e 100644 --- a/classstdex_1_1parser_1_1parser__collection.html +++ b/classstdex_1_1parser_1_1parser__collection.html @@ -189,7 +189,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1sgml__any__cp-members.html b/classstdex_1_1parser_1_1sgml__any__cp-members.html index 1e35476b6..46121e19a 100644 --- a/classstdex_1_1parser_1_1sgml__any__cp-members.html +++ b/classstdex_1_1parser_1_1sgml__any__cp-members.html @@ -93,7 +93,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1sgml__any__cp.html b/classstdex_1_1parser_1_1sgml__any__cp.html index 96fc25fff..99509e53d 100644 --- a/classstdex_1_1parser_1_1sgml__any__cp.html +++ b/classstdex_1_1parser_1_1sgml__any__cp.html @@ -196,7 +196,7 @@ std::locale m_locale diff --git a/classstdex_1_1parser_1_1sgml__cp-members.html b/classstdex_1_1parser_1_1sgml__cp-members.html index 6f828d134..2b408e151 100644 --- a/classstdex_1_1parser_1_1sgml__cp-members.html +++ b/classstdex_1_1parser_1_1sgml__cp-members.html @@ -88,7 +88,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1sgml__cp.html b/classstdex_1_1parser_1_1sgml__cp.html index 57782c9a8..2175c799f 100644 --- a/classstdex_1_1parser_1_1sgml__cp.html +++ b/classstdex_1_1parser_1_1sgml__cp.html @@ -197,7 +197,7 @@ Additional Inherited Members diff --git a/classstdex_1_1parser_1_1sgml__cp__set-members.html b/classstdex_1_1parser_1_1sgml__cp__set-members.html index d6df8c99d..6bab0398d 100644 --- a/classstdex_1_1parser_1_1sgml__cp__set-members.html +++ b/classstdex_1_1parser_1_1sgml__cp__set-members.html @@ -93,7 +93,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1sgml__cp__set.html b/classstdex_1_1parser_1_1sgml__cp__set.html index 9cdb783e2..2a33ab6ce 100644 --- a/classstdex_1_1parser_1_1sgml__cp__set.html +++ b/classstdex_1_1parser_1_1sgml__cp__set.html @@ -210,7 +210,7 @@ Additional Inherited Members diff --git a/classstdex_1_1parser_1_1sgml__dns__domain__char-members.html b/classstdex_1_1parser_1_1sgml__dns__domain__char-members.html index 0b95b2447..96ba509d7 100644 --- a/classstdex_1_1parser_1_1sgml__dns__domain__char-members.html +++ b/classstdex_1_1parser_1_1sgml__dns__domain__char-members.html @@ -94,7 +94,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1sgml__dns__domain__char.html b/classstdex_1_1parser_1_1sgml__dns__domain__char.html index d1318ab2f..5c5d00fcd 100644 --- a/classstdex_1_1parser_1_1sgml__dns__domain__char.html +++ b/classstdex_1_1parser_1_1sgml__dns__domain__char.html @@ -205,7 +205,7 @@ std::locale m_locale diff --git a/classstdex_1_1parser_1_1sgml__ipv6__scope__id__char-members.html b/classstdex_1_1parser_1_1sgml__ipv6__scope__id__char-members.html index 2811970b9..a4d2143ee 100644 --- a/classstdex_1_1parser_1_1sgml__ipv6__scope__id__char-members.html +++ b/classstdex_1_1parser_1_1sgml__ipv6__scope__id__char-members.html @@ -86,7 +86,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1sgml__ipv6__scope__id__char.html b/classstdex_1_1parser_1_1sgml__ipv6__scope__id__char.html index 5c87bb72d..5cd0e56ce 100644 --- a/classstdex_1_1parser_1_1sgml__ipv6__scope__id__char.html +++ b/classstdex_1_1parser_1_1sgml__ipv6__scope__id__char.html @@ -187,7 +187,7 @@ std::locale m_locale diff --git a/classstdex_1_1parser_1_1sgml__punct__cp-members.html b/classstdex_1_1parser_1_1sgml__punct__cp-members.html index 32c19e559..f0122bbb7 100644 --- a/classstdex_1_1parser_1_1sgml__punct__cp-members.html +++ b/classstdex_1_1parser_1_1sgml__punct__cp-members.html @@ -93,7 +93,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1sgml__punct__cp.html b/classstdex_1_1parser_1_1sgml__punct__cp.html index 031740488..927ee17c6 100644 --- a/classstdex_1_1parser_1_1sgml__punct__cp.html +++ b/classstdex_1_1parser_1_1sgml__punct__cp.html @@ -200,7 +200,7 @@ std::locale m_locale diff --git a/classstdex_1_1parser_1_1sgml__space__cp-members.html b/classstdex_1_1parser_1_1sgml__space__cp-members.html index b31241610..a9cca4e8a 100644 --- a/classstdex_1_1parser_1_1sgml__space__cp-members.html +++ b/classstdex_1_1parser_1_1sgml__space__cp-members.html @@ -93,7 +93,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1sgml__space__cp.html b/classstdex_1_1parser_1_1sgml__space__cp.html index 3b695022f..00fffefdc 100644 --- a/classstdex_1_1parser_1_1sgml__space__cp.html +++ b/classstdex_1_1parser_1_1sgml__space__cp.html @@ -200,7 +200,7 @@ std::locale m_locale diff --git a/classstdex_1_1parser_1_1sgml__space__or__punct__cp-members.html b/classstdex_1_1parser_1_1sgml__space__or__punct__cp-members.html index 820618f36..bd28932b6 100644 --- a/classstdex_1_1parser_1_1sgml__space__or__punct__cp-members.html +++ b/classstdex_1_1parser_1_1sgml__space__or__punct__cp-members.html @@ -93,7 +93,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1sgml__space__or__punct__cp.html b/classstdex_1_1parser_1_1sgml__space__or__punct__cp.html index dcde131ae..5d0f66fb3 100644 --- a/classstdex_1_1parser_1_1sgml__space__or__punct__cp.html +++ b/classstdex_1_1parser_1_1sgml__space__or__punct__cp.html @@ -200,7 +200,7 @@ std::locale m_locale diff --git a/classstdex_1_1parser_1_1sgml__string-members.html b/classstdex_1_1parser_1_1sgml__string-members.html index 3211f4ef6..58f12d56c 100644 --- a/classstdex_1_1parser_1_1sgml__string-members.html +++ b/classstdex_1_1parser_1_1sgml__string-members.html @@ -87,7 +87,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1sgml__string.html b/classstdex_1_1parser_1_1sgml__string.html index 76d4784b6..e2c3d0e9d 100644 --- a/classstdex_1_1parser_1_1sgml__string.html +++ b/classstdex_1_1parser_1_1sgml__string.html @@ -194,7 +194,7 @@ Additional Inherited Members diff --git a/classstdex_1_1parser_1_1sgml__url__password__char-members.html b/classstdex_1_1parser_1_1sgml__url__password__char-members.html index 0158e445a..a5557268a 100644 --- a/classstdex_1_1parser_1_1sgml__url__password__char-members.html +++ b/classstdex_1_1parser_1_1sgml__url__password__char-members.html @@ -93,7 +93,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1sgml__url__password__char.html b/classstdex_1_1parser_1_1sgml__url__password__char.html index ea0fd02c7..4a06218c8 100644 --- a/classstdex_1_1parser_1_1sgml__url__password__char.html +++ b/classstdex_1_1parser_1_1sgml__url__password__char.html @@ -196,7 +196,7 @@ std::locale m_locale diff --git a/classstdex_1_1parser_1_1sgml__url__path__char-members.html b/classstdex_1_1parser_1_1sgml__url__path__char-members.html index 901b78d22..db15262af 100644 --- a/classstdex_1_1parser_1_1sgml__url__path__char-members.html +++ b/classstdex_1_1parser_1_1sgml__url__path__char-members.html @@ -93,7 +93,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1sgml__url__path__char.html b/classstdex_1_1parser_1_1sgml__url__path__char.html index f79f89a44..3fd8fa64f 100644 --- a/classstdex_1_1parser_1_1sgml__url__path__char.html +++ b/classstdex_1_1parser_1_1sgml__url__path__char.html @@ -196,7 +196,7 @@ std::locale m_locale diff --git a/classstdex_1_1parser_1_1sgml__url__username__char-members.html b/classstdex_1_1parser_1_1sgml__url__username__char-members.html index a26ea9796..21f64e129 100644 --- a/classstdex_1_1parser_1_1sgml__url__username__char-members.html +++ b/classstdex_1_1parser_1_1sgml__url__username__char-members.html @@ -93,7 +93,7 @@ $(function() { diff --git a/classstdex_1_1parser_1_1sgml__url__username__char.html b/classstdex_1_1parser_1_1sgml__url__username__char.html index 6798117e7..5a83bac03 100644 --- a/classstdex_1_1parser_1_1sgml__url__username__char.html +++ b/classstdex_1_1parser_1_1sgml__url__username__char.html @@ -196,7 +196,7 @@ std::locale m_locale diff --git a/classstdex_1_1pool-members.html b/classstdex_1_1pool-members.html index d1f149c64..0a602fd88 100644 --- a/classstdex_1_1pool-members.html +++ b/classstdex_1_1pool-members.html @@ -86,7 +86,7 @@ $(function() { diff --git a/classstdex_1_1pool.html b/classstdex_1_1pool.html index 60deb2547..665a4c570 100644 --- a/classstdex_1_1pool.html +++ b/classstdex_1_1pool.html @@ -197,7 +197,7 @@ template<class T > diff --git a/classstdex_1_1progress-members.html b/classstdex_1_1progress-members.html index 208bbabe5..f2c1f22d2 100644 --- a/classstdex_1_1progress-members.html +++ b/classstdex_1_1progress-members.html @@ -88,7 +88,7 @@ $(function() { diff --git a/classstdex_1_1progress.html b/classstdex_1_1progress.html index c50ba43e2..63f955ce9 100644 --- a/classstdex_1_1progress.html +++ b/classstdex_1_1progress.html @@ -319,7 +319,7 @@ template<class T > diff --git a/classstdex_1_1progress__switcher-members.html b/classstdex_1_1progress__switcher-members.html index f9136cd6e..791d1405d 100644 --- a/classstdex_1_1progress__switcher-members.html +++ b/classstdex_1_1progress__switcher-members.html @@ -100,7 +100,7 @@ $(function() { diff --git a/classstdex_1_1progress__switcher.html b/classstdex_1_1progress__switcher.html index 7366c7cf4..48acc7d7d 100644 --- a/classstdex_1_1progress__switcher.html +++ b/classstdex_1_1progress__switcher.html @@ -163,7 +163,7 @@ class stdex::progress_switcher< T >

Progress indicator switcher. <

diff --git a/classstdex_1_1ring-members.html b/classstdex_1_1ring-members.html index eed86aeb8..07214f0b5 100644 --- a/classstdex_1_1ring-members.html +++ b/classstdex_1_1ring-members.html @@ -100,7 +100,7 @@ $(function() { diff --git a/classstdex_1_1ring.html b/classstdex_1_1ring.html index ec9efe0e2..e59a779a4 100644 --- a/classstdex_1_1ring.html +++ b/classstdex_1_1ring.html @@ -296,7 +296,7 @@ template<class T , size_t CAPACITY> diff --git a/classstdex_1_1sha1__hash-members.html b/classstdex_1_1sha1__hash-members.html index e5335fe1a..dd12c5eff 100644 --- a/classstdex_1_1sha1__hash-members.html +++ b/classstdex_1_1sha1__hash-members.html @@ -93,7 +93,7 @@ $(function() { diff --git a/classstdex_1_1sha1__hash.html b/classstdex_1_1sha1__hash.html index e89dd8234..70236b25a 100644 --- a/classstdex_1_1sha1__hash.html +++ b/classstdex_1_1sha1__hash.html @@ -259,7 +259,7 @@ uint32_t m_temp [16] diff --git a/classstdex_1_1spinlock-members.html b/classstdex_1_1spinlock-members.html index 60392d116..11c765d87 100644 --- a/classstdex_1_1spinlock-members.html +++ b/classstdex_1_1spinlock-members.html @@ -86,7 +86,7 @@ $(function() { diff --git a/classstdex_1_1spinlock.html b/classstdex_1_1spinlock.html index 1303cacf5..2a27ee9d6 100644 --- a/classstdex_1_1spinlock.html +++ b/classstdex_1_1spinlock.html @@ -138,7 +138,7 @@ void unlock () noexcep diff --git a/classstdex_1_1stream_1_1async__reader-members.html b/classstdex_1_1stream_1_1async__reader-members.html index 61ff3ba4f..2951f7f47 100644 --- a/classstdex_1_1stream_1_1async__reader-members.html +++ b/classstdex_1_1stream_1_1async__reader-members.html @@ -155,7 +155,7 @@ $(function() { diff --git a/classstdex_1_1stream_1_1async__reader.html b/classstdex_1_1stream_1_1async__reader.html index 6497f935c..f19980ad5 100644 --- a/classstdex_1_1stream_1_1async__reader.html +++ b/classstdex_1_1stream_1_1async__reader.html @@ -414,7 +414,7 @@ template<size_t CAPACITY = default_async_limit> diff --git a/classstdex_1_1stream_1_1async__writer-members.html b/classstdex_1_1stream_1_1async__writer-members.html index 43e7f0a7d..bcfd2251b 100644 --- a/classstdex_1_1stream_1_1async__writer-members.html +++ b/classstdex_1_1stream_1_1async__writer-members.html @@ -155,7 +155,7 @@ $(function() { diff --git a/classstdex_1_1stream_1_1async__writer.html b/classstdex_1_1stream_1_1async__writer.html index 9f1b0a514..f8ed48049 100644 --- a/classstdex_1_1stream_1_1async__writer.html +++ b/classstdex_1_1stream_1_1async__writer.html @@ -445,7 +445,7 @@ template<size_t CAPACITY = default_async_limit> diff --git a/classstdex_1_1stream_1_1basic-members.html b/classstdex_1_1stream_1_1basic-members.html index 10e5ef0f7..68f50717c 100644 --- a/classstdex_1_1stream_1_1basic-members.html +++ b/classstdex_1_1stream_1_1basic-members.html @@ -148,7 +148,7 @@ $(function() { diff --git a/classstdex_1_1stream_1_1basic.html b/classstdex_1_1stream_1_1basic.html index ab7557333..3b940e065 100644 --- a/classstdex_1_1stream_1_1basic.html +++ b/classstdex_1_1stream_1_1basic.html @@ -1400,7 +1400,7 @@ template<class T > diff --git a/classstdex_1_1stream_1_1basic__file-members.html b/classstdex_1_1stream_1_1basic__file-members.html index dd4c42f6f..b7560212a 100644 --- a/classstdex_1_1stream_1_1basic__file-members.html +++ b/classstdex_1_1stream_1_1basic__file-members.html @@ -164,7 +164,7 @@ $(function() { diff --git a/classstdex_1_1stream_1_1basic__file.html b/classstdex_1_1stream_1_1basic__file.html index a6a23ce61..4d44add63 100644 --- a/classstdex_1_1stream_1_1basic__file.html +++ b/classstdex_1_1stream_1_1basic__file.html @@ -961,7 +961,7 @@ state_t m_state diff --git a/classstdex_1_1stream_1_1basic__sys-members.html b/classstdex_1_1stream_1_1basic__sys-members.html index 2551f54ee..2a48927e5 100644 --- a/classstdex_1_1stream_1_1basic__sys-members.html +++ b/classstdex_1_1stream_1_1basic__sys-members.html @@ -160,7 +160,7 @@ $(function() { diff --git a/classstdex_1_1stream_1_1basic__sys.html b/classstdex_1_1stream_1_1basic__sys.html index a4ba092ad..30eb25d02 100644 --- a/classstdex_1_1stream_1_1basic__sys.html +++ b/classstdex_1_1stream_1_1basic__sys.html @@ -527,7 +527,7 @@ sys_handle m_h diff --git a/classstdex_1_1stream_1_1buffer-members.html b/classstdex_1_1stream_1_1buffer-members.html index 658fbd0ef..7c69ad34b 100644 --- a/classstdex_1_1stream_1_1buffer-members.html +++ b/classstdex_1_1stream_1_1buffer-members.html @@ -155,7 +155,7 @@ $(function() { diff --git a/classstdex_1_1stream_1_1buffer.html b/classstdex_1_1stream_1_1buffer.html index 860089513..6a2965f46 100644 --- a/classstdex_1_1stream_1_1buffer.html +++ b/classstdex_1_1stream_1_1buffer.html @@ -489,7 +489,7 @@ state_t m_state diff --git a/classstdex_1_1stream_1_1buffered__sys-members.html b/classstdex_1_1stream_1_1buffered__sys-members.html index 90a20bf03..ed18d334a 100644 --- a/classstdex_1_1stream_1_1buffered__sys-members.html +++ b/classstdex_1_1stream_1_1buffered__sys-members.html @@ -157,7 +157,7 @@ $(function() { diff --git a/classstdex_1_1stream_1_1buffered__sys.html b/classstdex_1_1stream_1_1buffered__sys.html index 0b779a4e9..92c3c6e40 100644 --- a/classstdex_1_1stream_1_1buffered__sys.html +++ b/classstdex_1_1stream_1_1buffered__sys.html @@ -365,7 +365,7 @@ void flush_write () diff --git a/classstdex_1_1stream_1_1cache-members.html b/classstdex_1_1stream_1_1cache-members.html index 5289f3516..939e126d1 100644 --- a/classstdex_1_1stream_1_1cache-members.html +++ b/classstdex_1_1stream_1_1cache-members.html @@ -166,7 +166,7 @@ $(function() { diff --git a/classstdex_1_1stream_1_1cache.html b/classstdex_1_1stream_1_1cache.html index 209e2679e..b02734492 100644 --- a/classstdex_1_1stream_1_1cache.html +++ b/classstdex_1_1stream_1_1cache.html @@ -925,7 +925,7 @@ state_t m_state diff --git a/classstdex_1_1stream_1_1cached__file-members.html b/classstdex_1_1stream_1_1cached__file-members.html index d731547d5..a1ab65020 100644 --- a/classstdex_1_1stream_1_1cached__file-members.html +++ b/classstdex_1_1stream_1_1cached__file-members.html @@ -173,7 +173,7 @@ $(function() { diff --git a/classstdex_1_1stream_1_1cached__file.html b/classstdex_1_1stream_1_1cached__file.html index a1811bba9..e8a4fca05 100644 --- a/classstdex_1_1stream_1_1cached__file.html +++ b/classstdex_1_1stream_1_1cached__file.html @@ -600,7 +600,7 @@ state_t m_state diff --git a/classstdex_1_1stream_1_1converter-members.html b/classstdex_1_1stream_1_1converter-members.html index a9a521baf..a26a95a12 100644 --- a/classstdex_1_1stream_1_1converter-members.html +++ b/classstdex_1_1stream_1_1converter-members.html @@ -150,7 +150,7 @@ $(function() { diff --git a/classstdex_1_1stream_1_1converter.html b/classstdex_1_1stream_1_1converter.html index 1184d43f9..8ec846f95 100644 --- a/classstdex_1_1stream_1_1converter.html +++ b/classstdex_1_1stream_1_1converter.html @@ -507,7 +507,7 @@ state_t m_state diff --git a/classstdex_1_1stream_1_1diag__file-members.html b/classstdex_1_1stream_1_1diag__file-members.html index 419808876..f799e66d9 100644 --- a/classstdex_1_1stream_1_1diag__file-members.html +++ b/classstdex_1_1stream_1_1diag__file-members.html @@ -167,7 +167,7 @@ $(function() { diff --git a/classstdex_1_1stream_1_1diag__file.html b/classstdex_1_1stream_1_1diag__file.html index c558c71d0..c47b354ce 100644 --- a/classstdex_1_1stream_1_1diag__file.html +++ b/classstdex_1_1stream_1_1diag__file.html @@ -754,7 +754,7 @@ state_t m_state diff --git a/classstdex_1_1stream_1_1fifo-members.html b/classstdex_1_1stream_1_1fifo-members.html index dc7bf1118..e896125be 100644 --- a/classstdex_1_1stream_1_1fifo-members.html +++ b/classstdex_1_1stream_1_1fifo-members.html @@ -155,7 +155,7 @@ $(function() { diff --git a/classstdex_1_1stream_1_1fifo.html b/classstdex_1_1stream_1_1fifo.html index 0fa27938c..e96a51e4d 100644 --- a/classstdex_1_1stream_1_1fifo.html +++ b/classstdex_1_1stream_1_1fifo.html @@ -479,7 +479,7 @@ state_t m_state diff --git a/classstdex_1_1stream_1_1file-members.html b/classstdex_1_1stream_1_1file-members.html index 6b878588c..8ded45f27 100644 --- a/classstdex_1_1stream_1_1file-members.html +++ b/classstdex_1_1stream_1_1file-members.html @@ -189,7 +189,7 @@ $(function() { diff --git a/classstdex_1_1stream_1_1file.html b/classstdex_1_1stream_1_1file.html index fe8bc29a2..23815b979 100644 --- a/classstdex_1_1stream_1_1file.html +++ b/classstdex_1_1stream_1_1file.html @@ -1161,7 +1161,7 @@ sys_handle m_h diff --git a/classstdex_1_1stream_1_1file__window-members.html b/classstdex_1_1stream_1_1file__window-members.html index 3b388931a..0d0c49951 100644 --- a/classstdex_1_1stream_1_1file__window-members.html +++ b/classstdex_1_1stream_1_1file__window-members.html @@ -168,7 +168,7 @@ $(function() { diff --git a/classstdex_1_1stream_1_1file__window.html b/classstdex_1_1stream_1_1file__window.html index aec8ce402..fbb743c93 100644 --- a/classstdex_1_1stream_1_1file__window.html +++ b/classstdex_1_1stream_1_1file__window.html @@ -787,7 +787,7 @@ state_t m_state diff --git a/classstdex_1_1stream_1_1limiter-members.html b/classstdex_1_1stream_1_1limiter-members.html index 725db8a65..3c1f8e0fa 100644 --- a/classstdex_1_1stream_1_1limiter-members.html +++ b/classstdex_1_1stream_1_1limiter-members.html @@ -153,7 +153,7 @@ $(function() { diff --git a/classstdex_1_1stream_1_1limiter.html b/classstdex_1_1stream_1_1limiter.html index ce6929344..04d7cdd76 100644 --- a/classstdex_1_1stream_1_1limiter.html +++ b/classstdex_1_1stream_1_1limiter.html @@ -456,7 +456,7 @@ state_t m_state diff --git a/classstdex_1_1stream_1_1memory__file-members.html b/classstdex_1_1stream_1_1memory__file-members.html index 6ffb46de9..ca5a9533d 100644 --- a/classstdex_1_1stream_1_1memory__file-members.html +++ b/classstdex_1_1stream_1_1memory__file-members.html @@ -208,7 +208,7 @@ $(function() { diff --git a/classstdex_1_1stream_1_1memory__file.html b/classstdex_1_1stream_1_1memory__file.html index 6dfc14bb5..d8edc9487 100644 --- a/classstdex_1_1stream_1_1memory__file.html +++ b/classstdex_1_1stream_1_1memory__file.html @@ -1690,7 +1690,7 @@ template<class T > diff --git a/classstdex_1_1stream_1_1replicator-members.html b/classstdex_1_1stream_1_1replicator-members.html index ef609e1fb..2f21baaa8 100644 --- a/classstdex_1_1stream_1_1replicator-members.html +++ b/classstdex_1_1stream_1_1replicator-members.html @@ -153,7 +153,7 @@ $(function() { diff --git a/classstdex_1_1stream_1_1replicator.html b/classstdex_1_1stream_1_1replicator.html index f08df6171..e60cf1db9 100644 --- a/classstdex_1_1stream_1_1replicator.html +++ b/classstdex_1_1stream_1_1replicator.html @@ -462,7 +462,7 @@ state_t m_state diff --git a/classstdex_1_1stream_1_1replicator_1_1worker-members.html b/classstdex_1_1stream_1_1replicator_1_1worker-members.html index daa7f7d60..9a2fe5d75 100644 --- a/classstdex_1_1stream_1_1replicator_1_1worker-members.html +++ b/classstdex_1_1stream_1_1replicator_1_1worker-members.html @@ -93,7 +93,7 @@ $(function() { diff --git a/classstdex_1_1stream_1_1replicator_1_1worker.html b/classstdex_1_1stream_1_1replicator_1_1worker.html index e1fda95a8..22bb51a5b 100644 --- a/classstdex_1_1stream_1_1replicator_1_1worker.html +++ b/classstdex_1_1stream_1_1replicator_1_1worker.html @@ -149,7 +149,7 @@ void process_op () diff --git a/classstdex_1_1stream_1_1socket-members.html b/classstdex_1_1stream_1_1socket-members.html index e7dc6ed4a..3268a4dbc 100644 --- a/classstdex_1_1stream_1_1socket-members.html +++ b/classstdex_1_1stream_1_1socket-members.html @@ -156,7 +156,7 @@ $(function() { diff --git a/classstdex_1_1stream_1_1socket.html b/classstdex_1_1stream_1_1socket.html index c8e4db319..c4685afb5 100644 --- a/classstdex_1_1stream_1_1socket.html +++ b/classstdex_1_1stream_1_1socket.html @@ -533,7 +533,7 @@ state_t m_state diff --git a/classstdex_1_1stream_1_1window-members.html b/classstdex_1_1stream_1_1window-members.html index 5ac926457..052e35df5 100644 --- a/classstdex_1_1stream_1_1window-members.html +++ b/classstdex_1_1stream_1_1window-members.html @@ -156,7 +156,7 @@ $(function() { diff --git a/classstdex_1_1stream_1_1window.html b/classstdex_1_1stream_1_1window.html index f5900b647..d2fa35a5f 100644 --- a/classstdex_1_1stream_1_1window.html +++ b/classstdex_1_1stream_1_1window.html @@ -465,7 +465,7 @@ state_t m_state diff --git a/classstdex_1_1stream__hasher-members.html b/classstdex_1_1stream__hasher-members.html index 3ae66516a..d15be25a1 100644 --- a/classstdex_1_1stream__hasher-members.html +++ b/classstdex_1_1stream__hasher-members.html @@ -152,7 +152,7 @@ $(function() { diff --git a/classstdex_1_1stream__hasher.html b/classstdex_1_1stream__hasher.html index 51cab040e..7d930a76f 100644 --- a/classstdex_1_1stream__hasher.html +++ b/classstdex_1_1stream__hasher.html @@ -448,7 +448,7 @@ template<class T > diff --git a/classstdex_1_1sys__object-members.html b/classstdex_1_1sys__object-members.html index 6ba28758e..833450225 100644 --- a/classstdex_1_1sys__object-members.html +++ b/classstdex_1_1sys__object-members.html @@ -95,7 +95,7 @@ $(function() { diff --git a/classstdex_1_1sys__object.html b/classstdex_1_1sys__object.html index bd2a01901..a11a72fdb 100644 --- a/classstdex_1_1sys__object.html +++ b/classstdex_1_1sys__object.html @@ -182,7 +182,7 @@ sys_handle m_h diff --git a/classstdex_1_1user__cancelled-members.html b/classstdex_1_1user__cancelled-members.html index fcbc46587..bfbeb1038 100644 --- a/classstdex_1_1user__cancelled-members.html +++ b/classstdex_1_1user__cancelled-members.html @@ -84,7 +84,7 @@ $(function() { diff --git a/classstdex_1_1user__cancelled.html b/classstdex_1_1user__cancelled.html index 2d6b72abb..148af8b11 100644 --- a/classstdex_1_1user__cancelled.html +++ b/classstdex_1_1user__cancelled.html @@ -141,7 +141,7 @@ Public Member Functions diff --git a/classstdex_1_1vector__queue-members.html b/classstdex_1_1vector__queue-members.html index bd8f3ff5c..6222fef54 100644 --- a/classstdex_1_1vector__queue-members.html +++ b/classstdex_1_1vector__queue-members.html @@ -122,7 +122,7 @@ $(function() { diff --git a/classstdex_1_1vector__queue.html b/classstdex_1_1vector__queue.html index 005a90ccc..46631bac6 100644 --- a/classstdex_1_1vector__queue.html +++ b/classstdex_1_1vector__queue.html @@ -795,7 +795,7 @@ template<class T > diff --git a/classstdex_1_1watchdog-members.html b/classstdex_1_1watchdog-members.html index 192cf80c7..8bce42f8b 100644 --- a/classstdex_1_1watchdog-members.html +++ b/classstdex_1_1watchdog-members.html @@ -94,7 +94,7 @@ $(function() { diff --git a/classstdex_1_1watchdog.html b/classstdex_1_1watchdog.html index 294a5c0d2..d5d49ac42 100644 --- a/classstdex_1_1watchdog.html +++ b/classstdex_1_1watchdog.html @@ -223,7 +223,7 @@ template<class _Clock , class _Duration = typename _Clock::duration> diff --git a/dir_4be4f7b278e009bf0f1906cf31fb73bd.html b/dir_4be4f7b278e009bf0f1906cf31fb73bd.html index b9747a853..7c4213d49 100644 --- a/dir_4be4f7b278e009bf0f1906cf31fb73bd.html +++ b/dir_4be4f7b278e009bf0f1906cf31fb73bd.html @@ -104,7 +104,7 @@ Files diff --git a/dir_d44c64559bbebec7f509842c48db8b23.html b/dir_d44c64559bbebec7f509842c48db8b23.html index 61c247d1b..37c4dd860 100644 --- a/dir_d44c64559bbebec7f509842c48db8b23.html +++ b/dir_d44c64559bbebec7f509842c48db8b23.html @@ -86,7 +86,7 @@ Directories diff --git a/dir_fca3c47b2ea228727bd6729832f89576.html b/dir_fca3c47b2ea228727bd6729832f89576.html index fa7d566a7..d27b58617 100644 --- a/dir_fca3c47b2ea228727bd6729832f89576.html +++ b/dir_fca3c47b2ea228727bd6729832f89576.html @@ -146,7 +146,7 @@ Files diff --git a/endian_8hpp_source.html b/endian_8hpp_source.html index b7ecc858d..d16655c3a 100644 --- a/endian_8hpp_source.html +++ b/endian_8hpp_source.html @@ -225,7 +225,7 @@ $(document).ready(function() { init_codefold(0); }); diff --git a/exception_8hpp_source.html b/exception_8hpp_source.html index 0682f46e7..6ff544c16 100644 --- a/exception_8hpp_source.html +++ b/exception_8hpp_source.html @@ -107,7 +107,7 @@ $(document).ready(function() { init_codefold(0); }); diff --git a/files.html b/files.html index 57cad5a7e..5b7355c14 100644 --- a/files.html +++ b/files.html @@ -124,7 +124,7 @@ $(function() { diff --git a/functions.html b/functions.html index ef009e375..8e4c47eec 100644 --- a/functions.html +++ b/functions.html @@ -94,7 +94,7 @@ $(function() { diff --git a/functions_b.html b/functions_b.html index 5595f52d7..5db2e3362 100644 --- a/functions_b.html +++ b/functions_b.html @@ -83,7 +83,7 @@ $(function() { diff --git a/functions_c.html b/functions_c.html index 56ab509f9..fc5bbd081 100644 --- a/functions_c.html +++ b/functions_c.html @@ -94,7 +94,7 @@ $(function() { diff --git a/functions_d.html b/functions_d.html index 9fee46c00..cb35527c4 100644 --- a/functions_d.html +++ b/functions_d.html @@ -87,7 +87,7 @@ $(function() { diff --git a/functions_e.html b/functions_e.html index ede649899..fe04aaf56 100644 --- a/functions_e.html +++ b/functions_e.html @@ -90,7 +90,7 @@ $(function() { diff --git a/functions_f.html b/functions_f.html index 50aceb3dd..5d26276d2 100644 --- a/functions_f.html +++ b/functions_f.html @@ -87,7 +87,7 @@ $(function() { diff --git a/functions_func.html b/functions_func.html index 1f65891a8..f12b093e0 100644 --- a/functions_func.html +++ b/functions_func.html @@ -88,7 +88,7 @@ $(function() { diff --git a/functions_func_b.html b/functions_func_b.html index f60885a05..5fd42f822 100644 --- a/functions_func_b.html +++ b/functions_func_b.html @@ -80,7 +80,7 @@ $(function() { diff --git a/functions_func_c.html b/functions_func_c.html index 0faa0efdd..8a30bac97 100644 --- a/functions_func_c.html +++ b/functions_func_c.html @@ -85,7 +85,7 @@ $(function() { diff --git a/functions_func_d.html b/functions_func_d.html index c763d3ae0..33af6352d 100644 --- a/functions_func_d.html +++ b/functions_func_d.html @@ -84,7 +84,7 @@ $(function() { diff --git a/functions_func_e.html b/functions_func_e.html index f05dd1a73..417ca4932 100644 --- a/functions_func_e.html +++ b/functions_func_e.html @@ -82,7 +82,7 @@ $(function() { diff --git a/functions_func_f.html b/functions_func_f.html index db985c95a..09e98e6d0 100644 --- a/functions_func_f.html +++ b/functions_func_f.html @@ -86,7 +86,7 @@ $(function() { diff --git a/functions_func_g.html b/functions_func_g.html index d47e56089..ad6b026d8 100644 --- a/functions_func_g.html +++ b/functions_func_g.html @@ -79,7 +79,7 @@ $(function() { diff --git a/functions_func_h.html b/functions_func_h.html index 073d0ac50..6c867edff 100644 --- a/functions_func_h.html +++ b/functions_func_h.html @@ -81,7 +81,7 @@ $(function() { diff --git a/functions_func_i.html b/functions_func_i.html index b7ab72fdd..5c621ff7e 100644 --- a/functions_func_i.html +++ b/functions_func_i.html @@ -97,7 +97,7 @@ $(function() { diff --git a/functions_func_l.html b/functions_func_l.html index 596e08ce2..5ef5ff82b 100644 --- a/functions_func_l.html +++ b/functions_func_l.html @@ -81,7 +81,7 @@ $(function() { diff --git a/functions_func_m.html b/functions_func_m.html index 6592db6a2..aa7307d28 100644 --- a/functions_func_m.html +++ b/functions_func_m.html @@ -83,7 +83,7 @@ $(function() { diff --git a/functions_func_n.html b/functions_func_n.html index 57a3324c8..a5154e521 100644 --- a/functions_func_n.html +++ b/functions_func_n.html @@ -78,7 +78,7 @@ $(function() { diff --git a/functions_func_o.html b/functions_func_o.html index 0512c6404..c4cb7a7bf 100644 --- a/functions_func_o.html +++ b/functions_func_o.html @@ -90,7 +90,7 @@ $(function() { diff --git a/functions_func_p.html b/functions_func_p.html index 64654b028..b64328c6e 100644 --- a/functions_func_p.html +++ b/functions_func_p.html @@ -85,7 +85,7 @@ $(function() { diff --git a/functions_func_q.html b/functions_func_q.html index a569923f7..e9e838862 100644 --- a/functions_func_q.html +++ b/functions_func_q.html @@ -78,7 +78,7 @@ $(function() { diff --git a/functions_func_r.html b/functions_func_r.html index ab7636d4b..1dc7e8cf9 100644 --- a/functions_func_r.html +++ b/functions_func_r.html @@ -92,7 +92,7 @@ $(function() { diff --git a/functions_func_s.html b/functions_func_s.html index 1bc4e5e8a..dab67c519 100644 --- a/functions_func_s.html +++ b/functions_func_s.html @@ -101,7 +101,7 @@ $(function() { diff --git a/functions_func_t.html b/functions_func_t.html index 0244f60d4..2131523e1 100644 --- a/functions_func_t.html +++ b/functions_func_t.html @@ -85,7 +85,7 @@ $(function() { diff --git a/functions_func_u.html b/functions_func_u.html index 73769c7b0..652d3612e 100644 --- a/functions_func_u.html +++ b/functions_func_u.html @@ -79,7 +79,7 @@ $(function() { diff --git a/functions_func_v.html b/functions_func_v.html index f1e6d9a38..0e7d7ae0c 100644 --- a/functions_func_v.html +++ b/functions_func_v.html @@ -78,7 +78,7 @@ $(function() { diff --git a/functions_func_w.html b/functions_func_w.html index 644d4d477..5aa166905 100644 --- a/functions_func_w.html +++ b/functions_func_w.html @@ -87,7 +87,7 @@ $(function() { diff --git a/functions_func_~.html b/functions_func_~.html index 179733847..53800df8d 100644 --- a/functions_func_~.html +++ b/functions_func_~.html @@ -79,7 +79,7 @@ $(function() { diff --git a/functions_g.html b/functions_g.html index 449da6343..6b53a7829 100644 --- a/functions_g.html +++ b/functions_g.html @@ -79,7 +79,7 @@ $(function() { diff --git a/functions_h.html b/functions_h.html index d47b924ed..6b8374b98 100644 --- a/functions_h.html +++ b/functions_h.html @@ -82,7 +82,7 @@ $(function() { diff --git a/functions_i.html b/functions_i.html index f9f577255..e9725f6d5 100644 --- a/functions_i.html +++ b/functions_i.html @@ -100,7 +100,7 @@ $(function() { diff --git a/functions_l.html b/functions_l.html index 72353eb30..e8e23fd3c 100644 --- a/functions_l.html +++ b/functions_l.html @@ -82,7 +82,7 @@ $(function() { diff --git a/functions_m.html b/functions_m.html index 3ec5cd3fb..790b1686d 100644 --- a/functions_m.html +++ b/functions_m.html @@ -124,7 +124,7 @@ $(function() { diff --git a/functions_n.html b/functions_n.html index 3bf21b18a..29d13f562 100644 --- a/functions_n.html +++ b/functions_n.html @@ -85,7 +85,7 @@ $(function() { diff --git a/functions_o.html b/functions_o.html index 803101247..185c3009f 100644 --- a/functions_o.html +++ b/functions_o.html @@ -94,7 +94,7 @@ $(function() { diff --git a/functions_p.html b/functions_p.html index 59d67159b..c341b997c 100644 --- a/functions_p.html +++ b/functions_p.html @@ -93,7 +93,7 @@ $(function() { diff --git a/functions_q.html b/functions_q.html index 9fdcf85f9..c0e560fb9 100644 --- a/functions_q.html +++ b/functions_q.html @@ -78,7 +78,7 @@ $(function() { diff --git a/functions_r.html b/functions_r.html index ea72317ff..027a8da06 100644 --- a/functions_r.html +++ b/functions_r.html @@ -95,7 +95,7 @@ $(function() { diff --git a/functions_rela.html b/functions_rela.html index 67d9fb9e1..74c9ff85c 100644 --- a/functions_rela.html +++ b/functions_rela.html @@ -77,7 +77,7 @@ $(function() { diff --git a/functions_s.html b/functions_s.html index 4e7c47073..a4080a22e 100644 --- a/functions_s.html +++ b/functions_s.html @@ -109,7 +109,7 @@ $(function() { diff --git a/functions_t.html b/functions_t.html index 678f1a5c5..7f7b314d0 100644 --- a/functions_t.html +++ b/functions_t.html @@ -89,7 +89,7 @@ $(function() { diff --git a/functions_type.html b/functions_type.html index d5f173d62..828ade46d 100644 --- a/functions_type.html +++ b/functions_type.html @@ -81,7 +81,7 @@ $(function() { diff --git a/functions_u.html b/functions_u.html index 83f54740f..930920c0d 100644 --- a/functions_u.html +++ b/functions_u.html @@ -80,7 +80,7 @@ $(function() { diff --git a/functions_v.html b/functions_v.html index ee634c6f8..727995799 100644 --- a/functions_v.html +++ b/functions_v.html @@ -81,7 +81,7 @@ $(function() { diff --git a/functions_vars.html b/functions_vars.html index 91f0f79c4..a16c94401 100644 --- a/functions_vars.html +++ b/functions_vars.html @@ -262,7 +262,7 @@ $(function() { diff --git a/functions_w.html b/functions_w.html index 41b7cc54f..10d72bdca 100644 --- a/functions_w.html +++ b/functions_w.html @@ -90,7 +90,7 @@ $(function() { diff --git a/functions_~.html b/functions_~.html index 12a8d327a..dd720c65c 100644 --- a/functions_~.html +++ b/functions_~.html @@ -79,7 +79,7 @@ $(function() { diff --git a/hash_8cpp_source.html b/hash_8cpp_source.html index d0e9af8fb..81f59c784 100644 --- a/hash_8cpp_source.html +++ b/hash_8cpp_source.html @@ -164,7 +164,7 @@ $(document).ready(function() { init_codefold(0); }); diff --git a/hash_8hpp_source.html b/hash_8hpp_source.html index 66877c4df..49cb50063 100644 --- a/hash_8hpp_source.html +++ b/hash_8hpp_source.html @@ -743,7 +743,7 @@ $(document).ready(function() { init_codefold(0); }); diff --git a/hex_8hpp_source.html b/hex_8hpp_source.html index 4b389f0f7..45bb46b0b 100644 --- a/hex_8hpp_source.html +++ b/hex_8hpp_source.html @@ -231,7 +231,7 @@ $(document).ready(function() { init_codefold(0); }); diff --git a/hierarchy.html b/hierarchy.html index c57fba8c9..5670ea97c 100644 --- a/hierarchy.html +++ b/hierarchy.html @@ -303,7 +303,7 @@ $(function() { diff --git a/html_8hpp_source.html b/html_8hpp_source.html index 1b83280aa..ab89019b5 100644 --- a/html_8hpp_source.html +++ b/html_8hpp_source.html @@ -992,45 +992,45 @@ $(document).ready(function() { init_codefold(0); });
1051 {
1052 _Assume_(attr_name || !num_chars);
1053 switch (code) {
-
1054 case element_t::a: return !stdex::strnicmp(attr_name, num_chars, "href", SIZE_MAX, stdex::std_locale_C);
-
1055 case element_t::applet: return !stdex::strnicmp(attr_name, num_chars, "code", SIZE_MAX, stdex::std_locale_C) ||
-
1056 !stdex::strnicmp(attr_name, num_chars, "codebase", SIZE_MAX, stdex::std_locale_C) ||
-
1057 !stdex::strnicmp(attr_name, num_chars, "src", SIZE_MAX, stdex::std_locale_C);
-
1058 case element_t::area: return !stdex::strnicmp(attr_name, num_chars, "href", SIZE_MAX, stdex::std_locale_C);
-
1059 case element_t::base: return !stdex::strnicmp(attr_name, num_chars, "href", SIZE_MAX, stdex::std_locale_C);
-
1060 case element_t::bgsound: return !stdex::strnicmp(attr_name, num_chars, "src", SIZE_MAX, stdex::std_locale_C);
-
1061 case element_t::blockquote: return !stdex::strnicmp(attr_name, num_chars, "cite", SIZE_MAX, stdex::std_locale_C);
-
1062 case element_t::body: return !stdex::strnicmp(attr_name, num_chars, "background", SIZE_MAX, stdex::std_locale_C);
-
1063 case element_t::comment: return !stdex::strnicmp(attr_name, num_chars, "data", SIZE_MAX, stdex::std_locale_C);
-
1064 case element_t::del: return !stdex::strnicmp(attr_name, num_chars, "cite", SIZE_MAX, stdex::std_locale_C);
-
1065 case element_t::embed: return !stdex::strnicmp(attr_name, num_chars, "pluginspage", SIZE_MAX, stdex::std_locale_C) ||
-
1066 !stdex::strnicmp(attr_name, num_chars, "src", SIZE_MAX, stdex::std_locale_C);
-
1067 case element_t::form: return !stdex::strnicmp(attr_name, num_chars, "action", SIZE_MAX, stdex::std_locale_C);
-
1068 case element_t::frame: return !stdex::strnicmp(attr_name, num_chars, "longdesc", SIZE_MAX, stdex::std_locale_C) ||
-
1069 !stdex::strnicmp(attr_name, num_chars, "src", SIZE_MAX, stdex::std_locale_C);
-
1070 case element_t::head: return !stdex::strnicmp(attr_name, num_chars, "profile", SIZE_MAX, stdex::std_locale_C);
-
1071 case element_t::iframe: return !stdex::strnicmp(attr_name, num_chars, "longdesc", SIZE_MAX, stdex::std_locale_C) ||
-
1072 !stdex::strnicmp(attr_name, num_chars, "src", SIZE_MAX, stdex::std_locale_C);
-
1073 case element_t::img: return !stdex::strnicmp(attr_name, num_chars, "longdesc", SIZE_MAX, stdex::std_locale_C) ||
-
1074 !stdex::strnicmp(attr_name, num_chars, "lowsrc", SIZE_MAX, stdex::std_locale_C) ||
-
1075 !stdex::strnicmp(attr_name, num_chars, "src", SIZE_MAX, stdex::std_locale_C) ||
-
1076 !stdex::strnicmp(attr_name, num_chars, "usemap", SIZE_MAX, stdex::std_locale_C);
-
1077 case element_t::input: return !stdex::strnicmp(attr_name, num_chars, "lowsrc", SIZE_MAX, stdex::std_locale_C) ||
-
1078 !stdex::strnicmp(attr_name, num_chars, "src", SIZE_MAX, stdex::std_locale_C) ||
-
1079 !stdex::strnicmp(attr_name, num_chars, "usemap", SIZE_MAX, stdex::std_locale_C);
-
1080 case element_t::ins: return !stdex::strnicmp(attr_name, num_chars, "cite", SIZE_MAX, stdex::std_locale_C);
-
1081 case element_t::link: return !stdex::strnicmp(attr_name, num_chars, "href", SIZE_MAX, stdex::std_locale_C);
-
1082 case element_t::object: return !stdex::strnicmp(attr_name, num_chars, "basehref", SIZE_MAX, stdex::std_locale_C) ||
-
1083 !stdex::strnicmp(attr_name, num_chars, "classid", SIZE_MAX, stdex::std_locale_C) ||
-
1084 !stdex::strnicmp(attr_name, num_chars, "code", SIZE_MAX, stdex::std_locale_C) ||
-
1085 !stdex::strnicmp(attr_name, num_chars, "codebase", SIZE_MAX, stdex::std_locale_C) ||
-
1086 !stdex::strnicmp(attr_name, num_chars, "data", SIZE_MAX, stdex::std_locale_C) ||
-
1087 !stdex::strnicmp(attr_name, num_chars, "usemap", SIZE_MAX, stdex::std_locale_C);
-
1088 case element_t::q: return !stdex::strnicmp(attr_name, num_chars, "cite", SIZE_MAX, stdex::std_locale_C);
-
1089 case element_t::script: return !stdex::strnicmp(attr_name, num_chars, "src", SIZE_MAX, stdex::std_locale_C);
-
1090 case element_t::table: return !stdex::strnicmp(attr_name, num_chars, "background", SIZE_MAX, stdex::std_locale_C);
-
1091 case element_t::td: return !stdex::strnicmp(attr_name, num_chars, "background", SIZE_MAX, stdex::std_locale_C);
-
1092 case element_t::th: return !stdex::strnicmp(attr_name, num_chars, "background", SIZE_MAX, stdex::std_locale_C);
+
1054 case element_t::a: return !stdex::strnicmp(attr_name, num_chars, "href", SIZE_MAX);
+
1055 case element_t::applet: return !stdex::strnicmp(attr_name, num_chars, "code", SIZE_MAX) ||
+
1056 !stdex::strnicmp(attr_name, num_chars, "codebase", SIZE_MAX) ||
+
1057 !stdex::strnicmp(attr_name, num_chars, "src", SIZE_MAX);
+
1058 case element_t::area: return !stdex::strnicmp(attr_name, num_chars, "href", SIZE_MAX);
+
1059 case element_t::base: return !stdex::strnicmp(attr_name, num_chars, "href", SIZE_MAX);
+
1060 case element_t::bgsound: return !stdex::strnicmp(attr_name, num_chars, "src", SIZE_MAX);
+
1061 case element_t::blockquote: return !stdex::strnicmp(attr_name, num_chars, "cite", SIZE_MAX);
+
1062 case element_t::body: return !stdex::strnicmp(attr_name, num_chars, "background", SIZE_MAX);
+
1063 case element_t::comment: return !stdex::strnicmp(attr_name, num_chars, "data", SIZE_MAX);
+
1064 case element_t::del: return !stdex::strnicmp(attr_name, num_chars, "cite", SIZE_MAX);
+
1065 case element_t::embed: return !stdex::strnicmp(attr_name, num_chars, "pluginspage", SIZE_MAX) ||
+
1066 !stdex::strnicmp(attr_name, num_chars, "src", SIZE_MAX);
+
1067 case element_t::form: return !stdex::strnicmp(attr_name, num_chars, "action", SIZE_MAX);
+
1068 case element_t::frame: return !stdex::strnicmp(attr_name, num_chars, "longdesc", SIZE_MAX) ||
+
1069 !stdex::strnicmp(attr_name, num_chars, "src", SIZE_MAX);
+
1070 case element_t::head: return !stdex::strnicmp(attr_name, num_chars, "profile", SIZE_MAX);
+
1071 case element_t::iframe: return !stdex::strnicmp(attr_name, num_chars, "longdesc", SIZE_MAX) ||
+
1072 !stdex::strnicmp(attr_name, num_chars, "src", SIZE_MAX);
+
1073 case element_t::img: return !stdex::strnicmp(attr_name, num_chars, "longdesc", SIZE_MAX) ||
+
1074 !stdex::strnicmp(attr_name, num_chars, "lowsrc", SIZE_MAX) ||
+
1075 !stdex::strnicmp(attr_name, num_chars, "src", SIZE_MAX) ||
+
1076 !stdex::strnicmp(attr_name, num_chars, "usemap", SIZE_MAX);
+
1077 case element_t::input: return !stdex::strnicmp(attr_name, num_chars, "lowsrc", SIZE_MAX) ||
+
1078 !stdex::strnicmp(attr_name, num_chars, "src", SIZE_MAX) ||
+
1079 !stdex::strnicmp(attr_name, num_chars, "usemap", SIZE_MAX);
+
1080 case element_t::ins: return !stdex::strnicmp(attr_name, num_chars, "cite", SIZE_MAX);
+
1081 case element_t::link: return !stdex::strnicmp(attr_name, num_chars, "href", SIZE_MAX);
+
1082 case element_t::object: return !stdex::strnicmp(attr_name, num_chars, "basehref", SIZE_MAX) ||
+
1083 !stdex::strnicmp(attr_name, num_chars, "classid", SIZE_MAX) ||
+
1084 !stdex::strnicmp(attr_name, num_chars, "code", SIZE_MAX) ||
+
1085 !stdex::strnicmp(attr_name, num_chars, "codebase", SIZE_MAX) ||
+
1086 !stdex::strnicmp(attr_name, num_chars, "data", SIZE_MAX) ||
+
1087 !stdex::strnicmp(attr_name, num_chars, "usemap", SIZE_MAX);
+
1088 case element_t::q: return !stdex::strnicmp(attr_name, num_chars, "cite", SIZE_MAX);
+
1089 case element_t::script: return !stdex::strnicmp(attr_name, num_chars, "src", SIZE_MAX);
+
1090 case element_t::table: return !stdex::strnicmp(attr_name, num_chars, "background", SIZE_MAX);
+
1091 case element_t::td: return !stdex::strnicmp(attr_name, num_chars, "background", SIZE_MAX);
+
1092 case element_t::th: return !stdex::strnicmp(attr_name, num_chars, "background", SIZE_MAX);
1093 }
1094 return false;
1095 }
@@ -1041,17 +1041,17 @@ $(document).ready(function() { init_codefold(0); });
1105 static inline bool is_localizable(element_t code, const T* attr_name, size_t num_chars)
1106 {
1107 _Assume_(attr_name || !num_chars);
-
1108 if (!stdex::strnicmp(attr_name, num_chars, "title", SIZE_MAX, stdex::std_locale_C))
+
1108 if (!stdex::strnicmp(attr_name, num_chars, "title", SIZE_MAX))
1109 return true;
1110 switch (code) {
-
1111 case element_t::applet: return !stdex::strnicmp(attr_name, num_chars, "alt", SIZE_MAX, stdex::std_locale_C);
-
1112 case element_t::area: return !stdex::strnicmp(attr_name, num_chars, "alt", SIZE_MAX, stdex::std_locale_C);
-
1113 case element_t::img: return !stdex::strnicmp(attr_name, num_chars, "alt", SIZE_MAX, stdex::std_locale_C);
-
1114 case element_t::input: return !stdex::strnicmp(attr_name, num_chars, "alt", SIZE_MAX, stdex::std_locale_C);
-
1115 case element_t::object: return !stdex::strnicmp(attr_name, num_chars, "alt", SIZE_MAX, stdex::std_locale_C);
-
1116 case element_t::table: return !stdex::strnicmp(attr_name, num_chars, "summary", SIZE_MAX, stdex::std_locale_C);
-
1117 case element_t::td: return !stdex::strnicmp(attr_name, num_chars, "abbr", SIZE_MAX, stdex::std_locale_C);
-
1118 case element_t::th: return !stdex::strnicmp(attr_name, num_chars, "abbr", SIZE_MAX, stdex::std_locale_C);
+
1111 case element_t::applet: return !stdex::strnicmp(attr_name, num_chars, "alt", SIZE_MAX);
+
1112 case element_t::area: return !stdex::strnicmp(attr_name, num_chars, "alt", SIZE_MAX);
+
1113 case element_t::img: return !stdex::strnicmp(attr_name, num_chars, "alt", SIZE_MAX);
+
1114 case element_t::input: return !stdex::strnicmp(attr_name, num_chars, "alt", SIZE_MAX);
+
1115 case element_t::object: return !stdex::strnicmp(attr_name, num_chars, "alt", SIZE_MAX);
+
1116 case element_t::table: return !stdex::strnicmp(attr_name, num_chars, "summary", SIZE_MAX);
+
1117 case element_t::td: return !stdex::strnicmp(attr_name, num_chars, "abbr", SIZE_MAX);
+
1118 case element_t::th: return !stdex::strnicmp(attr_name, num_chars, "abbr", SIZE_MAX);
1119 }
1120 return false;
1121 }
@@ -1209,1205 +1209,1203 @@ $(document).ready(function() { init_codefold(0); });
1274 // The mapping table MUST be sorted and all names in lowercase.
1275 for (size_t i = 1; i < _countof(mapping); i++)
1276 _Assume_(stdex::strcmp(mapping[i - 1].name, mapping[i].name) <= 0);
-
1277 const auto& ctype = std::use_facet<std::ctype<char>>(stdex::std_locale_C);
-
1278 for (size_t i = 0; i < _countof(mapping); i++) {
-
1279 for (size_t j = 0; mapping[i].name[j]; j++)
-
1280 _Assume_(ctype.is(ctype.lower | ctype.digit, mapping[i].name[j]));
-
1281 }
-
1282#endif
-
1283 const auto& ctypeT = std::use_facet<std::ctype<T>>(stdex::std_locale_C);
-
1284 for (size_t i = 0, j = _countof(mapping); i < j; ) {
-
1285 size_t m = (i + j) / 2;
-
1286 int r = 0;
-
1287 for (size_t i1 = 0, i2 = 0;;) {
-
1288 if (!mapping[m].name[i1]) {
-
1289 r = i2 >= num_chars || !name[i2] ? 0 : -1;
-
1290 break;
-
1291 }
-
1292 if (i2 >= num_chars || !name[i2]) {
-
1293 r = 1;
-
1294 break;
-
1295 }
-
1296
-
1297 auto chr = static_cast<char>(ctypeT.tolower(name[i2++]));
-
1298 if (mapping[m].name[i1] > chr) {
-
1299 r = 1;
-
1300 break;
-
1301 }
-
1302 if (mapping[m].name[i1] < chr) {
-
1303 r = -1;
-
1304 break;
-
1305 }
-
1306 i1++;
-
1307 }
-
1308
-
1309 if (r < 0)
-
1310 i = m + 1;
-
1311 else if (r > 0)
-
1312 j = m;
-
1313 else
-
1314 return mapping[m].code;
-
1315 }
-
1316 return element_t::unknown;
-
1317 }
-
1318
-
1319 public:
-
1320 element_t code;
-
1321 stdex::interval<size_t> name;
-
1322 std::vector<stdex::parser::html_attribute> attributes;
-
1323 };
+
1277 for (size_t i = 0; i < _countof(mapping); i++) {
+
1278 for (size_t j = 0; mapping[i].name[j]; j++)
+
1279 _Assume_(stdex::islower(mapping[i].name[j]) | stdex::isdigit(mapping[i].name[j]));
+
1280 }
+
1281#endif
+
1282 for (size_t i = 0, j = _countof(mapping); i < j; ) {
+
1283 size_t m = (i + j) / 2;
+
1284 int r = 0;
+
1285 for (size_t i1 = 0, i2 = 0;;) {
+
1286 if (!mapping[m].name[i1]) {
+
1287 r = i2 >= num_chars || !name[i2] ? 0 : -1;
+
1288 break;
+
1289 }
+
1290 if (i2 >= num_chars || !name[i2]) {
+
1291 r = 1;
+
1292 break;
+
1293 }
+
1294
+
1295 auto chr = static_cast<char>(stdex::tolower(name[i2++]));
+
1296 if (mapping[m].name[i1] > chr) {
+
1297 r = 1;
+
1298 break;
+
1299 }
+
1300 if (mapping[m].name[i1] < chr) {
+
1301 r = -1;
+
1302 break;
+
1303 }
+
1304 i1++;
+
1305 }
+
1306
+
1307 if (r < 0)
+
1308 i = m + 1;
+
1309 else if (r > 0)
+
1310 j = m;
+
1311 else
+
1312 return mapping[m].code;
+
1313 }
+
1314 return element_t::unknown;
+
1315 }
+
1316
+
1317 public:
+
1318 element_t code;
+
1319 stdex::interval<size_t> name;
+
1320 std::vector<stdex::parser::html_attribute> attributes;
+
1321 };
+
1322
+
1323 class element_end;
1324
-
1325 class element_end;
-
1326
-
-
1330 class element_start : public element
-
1331 {
-
1332 public:
-
1333 template <class T>
-
1334 inline element_start(_Inout_ stdex::parser::basic_html_tag<T>&& tag, _In_z_ const T* src, _In_opt_ sequence* parent = nullptr, _In_opt_ sequence* _end = nullptr) :
-
1335 element(std::move(tag), src, parent),
-
1336 end(_end)
-
1337 {}
-
1338
-
1339 public:
-
1340 sequence* end;
-
1341 };
+
+
1328 class element_start : public element
+
1329 {
+
1330 public:
+
1331 template <class T>
+
1332 inline element_start(_Inout_ stdex::parser::basic_html_tag<T>&& tag, _In_z_ const T* src, _In_opt_ sequence* parent = nullptr, _In_opt_ sequence* _end = nullptr) :
+
1333 element(std::move(tag), src, parent),
+
1334 end(_end)
+
1335 {}
+
1336
+
1337 public:
+ +
1339 };
-
1342
-
-
1346 class element_end : public sequence
-
1347 {
-
1348 public:
-
1349 template <class T>
-
1350 inline element_end(_Inout_ stdex::parser::basic_html_tag<T>&& tag, _In_z_ const T* src, _In_opt_ sequence* parent = nullptr, _In_opt_ element_start* _start = nullptr) :
-
1351 sequence(tag.type, tag.interval.start, tag.interval.end, parent),
-
1352 code(element::element_code(src + tag.name.start, tag.name.size())),
-
1353 name(std::move(tag.name)),
-
1354 start(_start)
-
1355 {}
-
1356
-
1357 public:
-
1358 element_t code;
- - -
1361 };
+
1340
+
+
1344 class element_end : public sequence
+
1345 {
+
1346 public:
+
1347 template <class T>
+
1348 inline element_end(_Inout_ stdex::parser::basic_html_tag<T>&& tag, _In_z_ const T* src, _In_opt_ sequence* parent = nullptr, _In_opt_ element_start* _start = nullptr) :
+
1349 sequence(tag.type, tag.interval.start, tag.interval.end, parent),
+
1350 code(element::element_code(src + tag.name.start, tag.name.size())),
+
1351 name(std::move(tag.name)),
+
1352 start(_start)
+
1353 {}
+
1354
+
1355 public:
+
1356 element_t code;
+ + +
1359 };
-
1362
-
-
1366 class declaration : public sequence
-
1367 {
-
1368 public:
-
1369 template <class T>
-
1370 inline declaration(_Inout_ stdex::parser::basic_html_tag<T>&& tag, _In_opt_ sequence* parent = nullptr) :
-
1371 sequence(tag.type, tag.interval.start, tag.interval.end, parent),
-
1372 name(std::move(tag.name)),
-
1373 attributes(std::move(tag.attributes))
-
1374 {}
-
1375
-
1376 public:
- -
1378 std::vector<stdex::parser::html_attribute> attributes;
-
1379 };
+
1360
+
+
1364 class declaration : public sequence
+
1365 {
+
1366 public:
+
1367 template <class T>
+
1368 inline declaration(_Inout_ stdex::parser::basic_html_tag<T>&& tag, _In_opt_ sequence* parent = nullptr) :
+
1369 sequence(tag.type, tag.interval.start, tag.interval.end, parent),
+
1370 name(std::move(tag.name)),
+
1371 attributes(std::move(tag.attributes))
+
1372 {}
+
1373
+
1374 public:
+ +
1376 std::vector<stdex::parser::html_attribute> attributes;
+
1377 };
-
1380
-
-
1384 class comment : public sequence
-
1385 {
-
1386 public:
-
1387 template <class T>
-
1388 inline comment(_Inout_ stdex::parser::basic_html_tag<T>&& tag, _In_opt_ sequence* parent = nullptr) :
-
1389 sequence(tag.type, tag.interval.start, tag.interval.end, parent),
-
1390 content(std::move(tag.name))
-
1391 {}
-
1392
-
1393 public:
- -
1395 };
+
1378
+
+
1382 class comment : public sequence
+
1383 {
+
1384 public:
+
1385 template <class T>
+
1386 inline comment(_Inout_ stdex::parser::basic_html_tag<T>&& tag, _In_opt_ sequence* parent = nullptr) :
+
1387 sequence(tag.type, tag.interval.start, tag.interval.end, parent),
+
1388 content(std::move(tag.name))
+
1389 {}
+
1390
+
1391 public:
+ +
1393 };
-
1396
-
-
1400 class instruction : public sequence
-
1401 {
-
1402 public:
-
1403 template <class T>
-
1404 inline instruction(_Inout_ stdex::parser::basic_html_tag<T>&& tag, _In_opt_ sequence* parent = nullptr) :
-
1405 sequence(tag.type, tag.interval.start, tag.interval.end, parent),
-
1406 content(std::move(tag.name))
-
1407 {}
-
1408
-
1409 public:
- -
1411 };
+
1394
+
+
1398 class instruction : public sequence
+
1399 {
+
1400 public:
+
1401 template <class T>
+
1402 inline instruction(_Inout_ stdex::parser::basic_html_tag<T>&& tag, _In_opt_ sequence* parent = nullptr) :
+
1403 sequence(tag.type, tag.interval.start, tag.interval.end, parent),
+
1404 content(std::move(tag.name))
+
1405 {}
+
1406
+
1407 public:
+ +
1409 };
-
1412
-
1416 template<class _Elem, class _Traits = std::char_traits<_Elem>, class _Alloc = std::allocator<_Elem>>
-
-
1417 struct entity
-
1418 {
- -
1420 std::basic_string<_Elem, _Traits, _Alloc> value;
-
1421 };
+
1410
+
1414 template<class _Elem, class _Traits = std::char_traits<_Elem>, class _Alloc = std::allocator<_Elem>>
+
+
1415 struct entity
+
1416 {
+ +
1418 std::basic_string<_Elem, _Traits, _Alloc> value;
+
1419 };
-
1422
-
1426 template<class _Elem, class _Traits = std::char_traits<_Elem>, class _Alloc = std::allocator<_Elem>>
-
1427 class parser;
-
1428
-
1432 template<class _Elem, class _Traits = std::char_traits<_Elem>, class _Alloc = std::allocator<_Elem>>
-
- -
1434 {
-
1435 public:
-
1436 document() :
-
1437 m_num_parsed(0),
-
1438 m_charset(stdex::charset_id::system),
-
1439
-
1440 // Declaration parsing data
- - -
1443 m_is_cdata(false),
-
1444 m_is_rcdata(false),
-
1445
-
1446 // Element parsing data
- -
1448 {}
-
1449
-
-
1453 void clear()
-
1454 {
-
1455 m_source.clear();
-
1456 m_num_parsed = 0;
-
1457 m_charset = stdex::charset_id::system;
-
1458
-
1459 // Declaration parsing data
- -
1461 m_is_cdata = m_is_rcdata = false;
-
1462 m_entities.clear();
-
1463
-
1464 // Element parsing data
-
1465 m_sequences.clear();
-
1466
-
1467 m_element_stack.clear();
-
1468 m_is_special_element = false;
-
1469 }
+
1420
+
1424 template<class _Elem, class _Traits = std::char_traits<_Elem>, class _Alloc = std::allocator<_Elem>>
+
1425 class parser;
+
1426
+
1430 template<class _Elem, class _Traits = std::char_traits<_Elem>, class _Alloc = std::allocator<_Elem>>
+
+ +
1432 {
+
1433 public:
+
1434 document() :
+
1435 m_num_parsed(0),
+
1436 m_charset(stdex::charset_id::system),
+
1437
+
1438 // Declaration parsing data
+ + +
1441 m_is_cdata(false),
+
1442 m_is_rcdata(false),
+
1443
+
1444 // Element parsing data
+ +
1446 {}
+
1447
+
+
1451 void clear()
+
1452 {
+
1453 m_source.clear();
+
1454 m_num_parsed = 0;
+
1455 m_charset = stdex::charset_id::system;
+
1456
+
1457 // Declaration parsing data
+ +
1459 m_is_cdata = m_is_rcdata = false;
+
1460 m_entities.clear();
+
1461
+
1462 // Element parsing data
+
1463 m_sequences.clear();
+
1464
+
1465 m_element_stack.clear();
+
1466 m_is_special_element = false;
+
1467 }
-
1470
-
-
1474 void append(_In_reads_or_z_opt_(num_chars) const _Elem* source, _In_ size_t num_chars = SIZE_MAX)
-
1475 {
-
1476 _Assume_(source || !num_chars);
-
1477 m_source.append(source, stdex::strnlen(source, num_chars));
-
1478 source = m_source.data();
-
1479 num_chars = m_source.size();
-
1480
-
1481 for (size_t i = m_num_parsed; i < num_chars;) {
-
1482 if (m_is_cdata || m_is_rcdata) {
-
1483 if (m_condition_end.match(source, i, num_chars)) {
-
1484 m_sequences.push_back(std::move(std::unique_ptr<sequence>(new sequence(
-
1485 m_is_cdata ? stdex::parser::html_sequence_t::CDATA : stdex::parser::html_sequence_t::PCDATA,
-
1486 m_num_parsed, i,
-
1487 active_element()))));
-
1488 m_is_cdata = m_is_rcdata = false;
-
1489 i = m_num_parsed = m_condition_end.interval.end;
-
1490 continue;
-
1491 }
-
1492 goto next_char;
-
1493 }
-
1494
- -
1496 if (m_condition_end.match(source, i, num_chars)) {
- -
1498 i = m_num_parsed = m_condition_end.interval.end;
-
1499 continue;
-
1500 }
-
1501 goto next_char;
-
1502 }
-
1503
-
1504 if (m_num_valid_conditions && m_condition_end.match(source, i, num_chars)) {
-
1505 if (m_num_parsed < i)
-
1506 m_sequences.push_back(std::move(std::unique_ptr<sequence>(new sequence(stdex::parser::html_sequence_t::text, m_num_parsed, i, active_element()))));
-
1507
- -
1509 i = m_num_parsed = m_condition_end.interval.end;
-
1510 continue;
-
1511 }
-
1512
-
1513 if (m_condition_start.match(source, i, num_chars)) {
-
1514 auto condition_src(replace_entities(source + m_condition_start.condition.start, m_condition_start.condition.size()));
-
1515 if (!stdex::strcmp(condition_src.c_str(), "CDATA"))
-
1516 m_is_cdata = true;
-
1517 else if (!stdex::strcmp(condition_src.c_str(), "RCDATA"))
-
1518 m_is_rcdata = true;
- +
1468
+
+
1472 void append(_In_reads_or_z_opt_(num_chars) const _Elem* source, _In_ size_t num_chars = SIZE_MAX)
+
1473 {
+
1474 _Assume_(source || !num_chars);
+
1475 m_source.append(source, stdex::strnlen(source, num_chars));
+
1476 source = m_source.data();
+
1477 num_chars = m_source.size();
+
1478
+
1479 for (size_t i = m_num_parsed; i < num_chars;) {
+
1480 if (m_is_cdata || m_is_rcdata) {
+
1481 if (m_condition_end.match(source, i, num_chars)) {
+
1482 m_sequences.push_back(std::move(std::unique_ptr<sequence>(new sequence(
+
1483 m_is_cdata ? stdex::parser::html_sequence_t::CDATA : stdex::parser::html_sequence_t::PCDATA,
+
1484 m_num_parsed, i,
+
1485 active_element()))));
+
1486 m_is_cdata = m_is_rcdata = false;
+
1487 i = m_num_parsed = m_condition_end.interval.end;
+
1488 continue;
+
1489 }
+
1490 goto next_char;
+
1491 }
+
1492
+ +
1494 if (m_condition_end.match(source, i, num_chars)) {
+ +
1496 i = m_num_parsed = m_condition_end.interval.end;
+
1497 continue;
+
1498 }
+
1499 goto next_char;
+
1500 }
+
1501
+
1502 if (m_num_valid_conditions && m_condition_end.match(source, i, num_chars)) {
+
1503 if (m_num_parsed < i)
+
1504 m_sequences.push_back(std::move(std::unique_ptr<sequence>(new sequence(stdex::parser::html_sequence_t::text, m_num_parsed, i, active_element()))));
+
1505
+ +
1507 i = m_num_parsed = m_condition_end.interval.end;
+
1508 continue;
+
1509 }
+
1510
+
1511 if (m_condition_start.match(source, i, num_chars)) {
+
1512 auto condition_src(replace_entities(source + m_condition_start.condition.start, m_condition_start.condition.size()));
+
1513 if (!stdex::strcmp(condition_src.c_str(), "CDATA"))
+
1514 m_is_cdata = true;
+
1515 else if (!stdex::strcmp(condition_src.c_str(), "RCDATA"))
+
1516 m_is_rcdata = true;
+ + +
1519 else if (!stdex::strcmp(condition_src.c_str(), "IGNORE"))
-
1521 else if (!stdex::strcmp(condition_src.c_str(), "IGNORE"))
- -
1523 else
- -
1525
-
1526 i = m_num_parsed = m_condition_start.interval.end;
-
1527 continue;
-
1528 }
-
1529
- -
1531 auto parent = active_element();
-
1532 _Assume_(parent);
-
1533 if (m_tag.match(source, i, num_chars) &&
-
1534 m_tag.type == stdex::parser::html_sequence_t::element_end &&
-
1535 element::element_code(source + m_tag.name.start, m_tag.name.size()) == parent->code)
-
1536 {
-
1537 if (m_num_parsed < i)
-
1538 m_sequences.push_back(std::move(std::unique_ptr<sequence>(new sequence(stdex::parser::html_sequence_t::text, m_num_parsed, i, parent))));
-
1539 i = m_num_parsed = m_tag.interval.end;
-
1540 std::unique_ptr<element_end> e(new element_end(std::move(m_tag), source, parent->parent, parent));
-
1541 parent->end = e.get();
-
1542 m_sequences.push_back(std::move(e));
-
1543 m_element_stack.pop_back();
-
1544 m_is_special_element = false;
-
1545 continue;
-
1546 }
-
1547 goto next_char;
-
1548 }
-
1549
-
1550 if (m_tag.match(source, i, num_chars)) {
-
1551 if (m_num_parsed < i)
-
1552 m_sequences.push_back(std::move(std::unique_ptr<sequence>(new sequence(stdex::parser::html_sequence_t::text, m_num_parsed, i, active_element()))));
-
1553 i = m_num_parsed = m_tag.interval.end;
-
1554
-
1555 switch (m_tag.type) {
-
1556 case stdex::parser::html_sequence_t::element:
-
1557 case stdex::parser::html_sequence_t::element_start: {
-
1558 std::unique_ptr<element> e(
-
1559 m_tag.type == stdex::parser::html_sequence_t::element ? new element(std::move(m_tag), source) :
-
1560 m_tag.type == stdex::parser::html_sequence_t::element_start ? new element_start(std::move(m_tag), source) :
-
1561 nullptr);
-
1562
-
1563 // Does this tag end any of the started elements?
-
1564 for (size_t j = m_element_stack.size(); j--; ) {
-
1565 auto starting_tag = m_element_stack[j];
-
1566 _Assume_(starting_tag && starting_tag->type == stdex::parser::html_sequence_t::element_start);
-
1567 if (element_traits::may_contain(starting_tag->code, e->code)) {
-
1568 e->parent = starting_tag;
-
1569 break;
-
1570 }
-
1571 e->parent = starting_tag->parent;
-
1572 starting_tag->end = e.get();
-
1573 m_element_stack.resize(j);
-
1574 }
-
1575
-
1576 if (e->type == stdex::parser::html_sequence_t::element_start) {
-
1577 auto e_start = static_cast<element_start*>(e.get());
-
1578 if (element_traits::span(e->code) == element_span_t::immediate)
-
1579 e_start->end = e.get();
-
1580 else {
-
1581 m_element_stack.push_back(e_start);
-
1582 switch (e->code) {
-
1583 case element_t::code:
-
1584 case element_t::comment:
-
1585 case element_t::script:
-
1586 case element_t::style:
-
1587 m_is_special_element = true;
-
1588 break;
-
1589 }
-
1590 }
-
1591 }
-
1592
-
1593 if (e->code == element_t::meta && m_charset == stdex::charset_id::system) {
-
1594 bool is_content_type = false;
-
1595 stdex::parser::html_attribute* content_attr = nullptr;
-
1596 for (auto& attr : e->attributes) {
-
1597 if (!stdex::strnicmp(source + attr.name.start, attr.name.size(), "http-equiv", SIZE_MAX, stdex::std_locale_C) &&
-
1598 !stdex::strnicmp(source + attr.value.start, attr.value.size(), "content-type", SIZE_MAX, stdex::std_locale_C))
-
1599 is_content_type = true;
-
1600 else if (!stdex::strnicmp(source + attr.name.start, attr.name.size(), "content", SIZE_MAX, stdex::std_locale_C))
-
1601 content_attr = &attr;
-
1602 }
-
1603 if (is_content_type && content_attr) {
-
1604 // <meta http-equiv="Content-Type" content="..."> found.
- -
1606 if (content.match(source, content_attr->value.start, content_attr->value.end) &&
-
1607 content.charset)
-
1608 {
-
1609 std::string str;
-
1610 str.reserve(content.charset.size());
-
1611 for (size_t j = content.charset.start; j < content.charset.end; ++j)
-
1612 str.push_back(static_cast<char>(source[j]));
-
1613 m_charset = stdex::charset_from_name(str.c_str());
-
1614 }
-
1615 }
-
1616 }
-
1617
-
1618 m_sequences.push_back(std::move(e));
-
1619 break;
-
1620 }
-
1621 case stdex::parser::html_sequence_t::element_end: {
-
1622 std::unique_ptr<element_end> e(new element_end(std::move(m_tag), source, active_element()));
-
1623
-
1624 for (size_t j = m_element_stack.size(); j--; ) {
-
1625 auto starting_tag = m_element_stack[j];
-
1626 _Assume_(starting_tag && starting_tag->type == stdex::parser::html_sequence_t::element_start);
-
1627 if (starting_tag->code == e->code ||
-
1628 starting_tag->code == element_t::unknown && e->code == element_t::unknown && !stdex::strnicmp(source + starting_tag->name.start, starting_tag->name.size(), source + e->name.start, e->name.size(), stdex::std_locale_C))
-
1629 {
-
1630 e->start = starting_tag;
-
1631 e->parent = starting_tag->parent;
-
1632 starting_tag->end = e.get();
-
1633 m_element_stack.resize(j);
-
1634 break;
-
1635 }
-
1636 }
-
1637
-
1638 m_sequences.push_back(std::move(e));
-
1639 break;
-
1640 }
-
1641 case stdex::parser::html_sequence_t::declaration:
-
1642 if (m_tag.attributes.size() > 3 &&
-
1643 !stdex::strnicmp(source + m_tag.attributes[0].name.start, m_tag.attributes[0].name.size(), "entity", SIZE_MAX, stdex::std_locale_C))
-
1644 {
-
1645 if (!stdex::strncmp(source + m_tag.attributes[1].name.start, m_tag.attributes[1].name.size(), "%", SIZE_MAX) &&
-
1646 stdex::strncmp(source + m_tag.attributes[3].name.start, m_tag.attributes[3].name.size(), "SYSTEM", SIZE_MAX) &&
-
1647 stdex::strncmp(source + m_tag.attributes[3].name.start, m_tag.attributes[3].name.size(), "PUBLIC", SIZE_MAX))
-
1648 {
-
1649 std::unique_ptr<entity<_Elem, _Traits, _Alloc>> e(new entity<_Elem, _Traits, _Alloc>());
-
1650 e->name = m_tag.attributes[2].name;
-
1651 e->value = std::move(replace_entities(source + m_tag.attributes[3].name.start, m_tag.attributes[3].name.size()));
-
1652 m_entities.push_back(std::move(e));
-
1653 }
-
1654
-
1655 // TODO: Parse & entities and entities in SYSTEM and PUBLIC external files.
-
1656 }
-
1657 m_sequences.push_back(std::move(std::unique_ptr<sequence>(new declaration(std::move(m_tag), active_element()))));
-
1658 break;
-
1659 case stdex::parser::html_sequence_t::comment:
-
1660 m_sequences.push_back(std::move(std::unique_ptr<sequence>(new comment(std::move(m_tag), active_element()))));
-
1661 break;
-
1662 case stdex::parser::html_sequence_t::instruction:
-
1663 m_sequences.push_back(std::move(std::unique_ptr<sequence>(new instruction(std::move(m_tag), active_element()))));
-
1664 break;
-
1665 default:
-
1666 throw std::invalid_argument("unknown tag type");
-
1667 }
-
1668
-
1669 continue;
-
1670 }
-
1671
-
1672 next_char:
-
1673 if (m_any_char.match(source, i, num_chars)) {
-
1674 // Skip any character, but don't declare it as parsed yet. It might be a part of unfinished tag.
-
1675 i = m_any_char.interval.end;
-
1676 }
-
1677 else
-
1678 break;
-
1679 }
-
1680 }
+
1521 else
+ +
1523
+
1524 i = m_num_parsed = m_condition_start.interval.end;
+
1525 continue;
+
1526 }
+
1527
+ +
1529 auto parent = active_element();
+
1530 _Assume_(parent);
+
1531 if (m_tag.match(source, i, num_chars) &&
+
1532 m_tag.type == stdex::parser::html_sequence_t::element_end &&
+
1533 element::element_code(source + m_tag.name.start, m_tag.name.size()) == parent->code)
+
1534 {
+
1535 if (m_num_parsed < i)
+
1536 m_sequences.push_back(std::move(std::unique_ptr<sequence>(new sequence(stdex::parser::html_sequence_t::text, m_num_parsed, i, parent))));
+
1537 i = m_num_parsed = m_tag.interval.end;
+
1538 std::unique_ptr<element_end> e(new element_end(std::move(m_tag), source, parent->parent, parent));
+
1539 parent->end = e.get();
+
1540 m_sequences.push_back(std::move(e));
+
1541 m_element_stack.pop_back();
+
1542 m_is_special_element = false;
+
1543 continue;
+
1544 }
+
1545 goto next_char;
+
1546 }
+
1547
+
1548 if (m_tag.match(source, i, num_chars)) {
+
1549 if (m_num_parsed < i)
+
1550 m_sequences.push_back(std::move(std::unique_ptr<sequence>(new sequence(stdex::parser::html_sequence_t::text, m_num_parsed, i, active_element()))));
+
1551 i = m_num_parsed = m_tag.interval.end;
+
1552
+
1553 switch (m_tag.type) {
+
1554 case stdex::parser::html_sequence_t::element:
+
1555 case stdex::parser::html_sequence_t::element_start: {
+
1556 std::unique_ptr<element> e(
+
1557 m_tag.type == stdex::parser::html_sequence_t::element ? new element(std::move(m_tag), source) :
+
1558 m_tag.type == stdex::parser::html_sequence_t::element_start ? new element_start(std::move(m_tag), source) :
+
1559 nullptr);
+
1560
+
1561 // Does this tag end any of the started elements?
+
1562 for (size_t j = m_element_stack.size(); j--; ) {
+
1563 auto starting_tag = m_element_stack[j];
+
1564 _Assume_(starting_tag && starting_tag->type == stdex::parser::html_sequence_t::element_start);
+
1565 if (element_traits::may_contain(starting_tag->code, e->code)) {
+
1566 e->parent = starting_tag;
+
1567 break;
+
1568 }
+
1569 e->parent = starting_tag->parent;
+
1570 starting_tag->end = e.get();
+
1571 m_element_stack.resize(j);
+
1572 }
+
1573
+
1574 if (e->type == stdex::parser::html_sequence_t::element_start) {
+
1575 auto e_start = static_cast<element_start*>(e.get());
+
1576 if (element_traits::span(e->code) == element_span_t::immediate)
+
1577 e_start->end = e.get();
+
1578 else {
+
1579 m_element_stack.push_back(e_start);
+
1580 switch (e->code) {
+
1581 case element_t::code:
+
1582 case element_t::comment:
+
1583 case element_t::script:
+
1584 case element_t::style:
+
1585 m_is_special_element = true;
+
1586 break;
+
1587 }
+
1588 }
+
1589 }
+
1590
+
1591 if (e->code == element_t::meta && m_charset == stdex::charset_id::system) {
+
1592 bool is_content_type = false;
+
1593 stdex::parser::html_attribute* content_attr = nullptr;
+
1594 for (auto& attr : e->attributes) {
+
1595 if (!stdex::strnicmp(source + attr.name.start, attr.name.size(), "http-equiv", SIZE_MAX) &&
+
1596 !stdex::strnicmp(source + attr.value.start, attr.value.size(), "content-type", SIZE_MAX))
+
1597 is_content_type = true;
+
1598 else if (!stdex::strnicmp(source + attr.name.start, attr.name.size(), "content", SIZE_MAX))
+
1599 content_attr = &attr;
+
1600 }
+
1601 if (is_content_type && content_attr) {
+
1602 // <meta http-equiv="Content-Type" content="..."> found.
+ +
1604 if (content.match(source, content_attr->value.start, content_attr->value.end) &&
+
1605 content.charset)
+
1606 {
+
1607 std::string str;
+
1608 str.reserve(content.charset.size());
+
1609 for (size_t j = content.charset.start; j < content.charset.end; ++j)
+
1610 str.push_back(static_cast<char>(source[j]));
+
1611 m_charset = stdex::charset_from_name(str.c_str());
+
1612 }
+
1613 }
+
1614 }
+
1615
+
1616 m_sequences.push_back(std::move(e));
+
1617 break;
+
1618 }
+
1619 case stdex::parser::html_sequence_t::element_end: {
+
1620 std::unique_ptr<element_end> e(new element_end(std::move(m_tag), source, active_element()));
+
1621
+
1622 for (size_t j = m_element_stack.size(); j--; ) {
+
1623 auto starting_tag = m_element_stack[j];
+
1624 _Assume_(starting_tag && starting_tag->type == stdex::parser::html_sequence_t::element_start);
+
1625 if (starting_tag->code == e->code ||
+
1626 starting_tag->code == element_t::unknown && e->code == element_t::unknown && !stdex::strnicmp(source + starting_tag->name.start, starting_tag->name.size(), source + e->name.start, e->name.size()))
+
1627 {
+
1628 e->start = starting_tag;
+
1629 e->parent = starting_tag->parent;
+
1630 starting_tag->end = e.get();
+
1631 m_element_stack.resize(j);
+
1632 break;
+
1633 }
+
1634 }
+
1635
+
1636 m_sequences.push_back(std::move(e));
+
1637 break;
+
1638 }
+
1639 case stdex::parser::html_sequence_t::declaration:
+
1640 if (m_tag.attributes.size() > 3 &&
+
1641 !stdex::strnicmp(source + m_tag.attributes[0].name.start, m_tag.attributes[0].name.size(), "entity", SIZE_MAX))
+
1642 {
+
1643 if (!stdex::strncmp(source + m_tag.attributes[1].name.start, m_tag.attributes[1].name.size(), "%", SIZE_MAX) &&
+
1644 stdex::strncmp(source + m_tag.attributes[3].name.start, m_tag.attributes[3].name.size(), "SYSTEM", SIZE_MAX) &&
+
1645 stdex::strncmp(source + m_tag.attributes[3].name.start, m_tag.attributes[3].name.size(), "PUBLIC", SIZE_MAX))
+
1646 {
+
1647 std::unique_ptr<entity<_Elem, _Traits, _Alloc>> e(new entity<_Elem, _Traits, _Alloc>());
+
1648 e->name = m_tag.attributes[2].name;
+
1649 e->value = std::move(replace_entities(source + m_tag.attributes[3].name.start, m_tag.attributes[3].name.size()));
+
1650 m_entities.push_back(std::move(e));
+
1651 }
+
1652
+
1653 // TODO: Parse & entities and entities in SYSTEM and PUBLIC external files.
+
1654 }
+
1655 m_sequences.push_back(std::move(std::unique_ptr<sequence>(new declaration(std::move(m_tag), active_element()))));
+
1656 break;
+
1657 case stdex::parser::html_sequence_t::comment:
+
1658 m_sequences.push_back(std::move(std::unique_ptr<sequence>(new comment(std::move(m_tag), active_element()))));
+
1659 break;
+
1660 case stdex::parser::html_sequence_t::instruction:
+
1661 m_sequences.push_back(std::move(std::unique_ptr<sequence>(new instruction(std::move(m_tag), active_element()))));
+
1662 break;
+
1663 default:
+
1664 throw std::invalid_argument("unknown tag type");
+
1665 }
+
1666
+
1667 continue;
+
1668 }
+
1669
+
1670 next_char:
+
1671 if (m_any_char.match(source, i, num_chars)) {
+
1672 // Skip any character, but don't declare it as parsed yet. It might be a part of unfinished tag.
+
1673 i = m_any_char.interval.end;
+
1674 }
+
1675 else
+
1676 break;
+
1677 }
+
1678 }
-
1681
-
- -
1686 {
-
1687 size_t i = m_source.size();
-
1688 if (m_num_parsed < i)
-
1689 m_sequences.push_back(std::move(std::unique_ptr<sequence>(new sequence(stdex::parser::html_sequence_t::text, m_num_parsed, i, active_element()))));
-
1690 m_num_parsed = i;
-
1691 m_element_stack.clear();
-
1692 }
+
1679
+
+ +
1684 {
+
1685 size_t i = m_source.size();
+
1686 if (m_num_parsed < i)
+
1687 m_sequences.push_back(std::move(std::unique_ptr<sequence>(new sequence(stdex::parser::html_sequence_t::text, m_num_parsed, i, active_element()))));
+
1688 m_num_parsed = i;
+
1689 m_element_stack.clear();
+
1690 }
-
1693
-
-
1697 inline void assign(_In_reads_or_z_opt_(num_chars) const _Elem* source, _In_ size_t num_chars = SIZE_MAX)
-
1698 {
-
1699 clear();
-
1700 append(source, num_chars);
-
1701 finalize();
-
1702 }
+
1691
+
+
1695 inline void assign(_In_reads_or_z_opt_(num_chars) const _Elem* source, _In_ size_t num_chars = SIZE_MAX)
+
1696 {
+
1697 clear();
+
1698 append(source, num_chars);
+
1699 finalize();
+
1700 }
-
1703
-
1707 inline const std::basic_string<_Elem, _Traits, _Alloc>& source() const { return m_source; }
+
1701
+
1705 inline const std::basic_string<_Elem, _Traits, _Alloc>& source() const { return m_source; }
+
1706
+
1707 friend class parser<_Elem, _Traits, _Alloc>;
1708
-
1709 friend class parser<_Elem, _Traits, _Alloc>;
-
1710
-
1711 protected:
-
- -
1716 {
-
1717 return m_element_stack.empty() ? nullptr : m_element_stack.back();
-
1718 }
+
1709 protected:
+
+ +
1714 {
+
1715 return m_element_stack.empty() ? nullptr : m_element_stack.back();
+
1716 }
-
1719
-
-
1723 std::basic_string<_Elem, _Traits, _Alloc> replace_entities(_In_reads_or_z_opt_(num_chars) const _Elem* input, _In_ size_t num_chars) const
-
1724 {
-
1725 _Assume_(input || !num_chars);
-
1726 const size_t num_entities = m_entities.size();
-
1727 const _Elem* source = m_source.data();
-
1728 std::basic_string<_Elem, _Traits, _Alloc> output;
-
1729 for (size_t i = 0; i < num_chars && input[i];) {
-
1730 if (input[i] == '%') {
-
1731 for (size_t j = 0; j < num_entities; j++) {
-
1732 auto& e = m_entities[j];
-
1733 size_t entity_size = e->name.size();
-
1734 if (i + entity_size + 1 < num_chars &&
-
1735 !stdex::strncmp(input + i + 1, source + e->name.start, entity_size) &&
-
1736 input[i + entity_size + 1] == ';')
-
1737 {
-
1738 output += e->value;
-
1739 i += entity_size + 2;
-
1740 goto next_char;
-
1741 }
-
1742 }
-
1743 throw std::runtime_error("undefined entity");
-
1744 }
-
1745 output += input[i++];
-
1746 next_char:;
-
1747 }
-
1748 return output;
-
1749 }
+
1717
+
+
1721 std::basic_string<_Elem, _Traits, _Alloc> replace_entities(_In_reads_or_z_opt_(num_chars) const _Elem* input, _In_ size_t num_chars) const
+
1722 {
+
1723 _Assume_(input || !num_chars);
+
1724 const size_t num_entities = m_entities.size();
+
1725 const _Elem* source = m_source.data();
+
1726 std::basic_string<_Elem, _Traits, _Alloc> output;
+
1727 for (size_t i = 0; i < num_chars && input[i];) {
+
1728 if (input[i] == '%') {
+
1729 for (size_t j = 0; j < num_entities; j++) {
+
1730 auto& e = m_entities[j];
+
1731 size_t entity_size = e->name.size();
+
1732 if (i + entity_size + 1 < num_chars &&
+
1733 !stdex::strncmp(input + i + 1, source + e->name.start, entity_size) &&
+
1734 input[i + entity_size + 1] == ';')
+
1735 {
+
1736 output += e->value;
+
1737 i += entity_size + 2;
+
1738 goto next_char;
+
1739 }
+
1740 }
+
1741 throw std::runtime_error("undefined entity");
+
1742 }
+
1743 output += input[i++];
+
1744 next_char:;
+
1745 }
+
1746 return output;
+
1747 }
-
1750
-
1751 protected:
-
1752 std::basic_string<_Elem, _Traits, _Alloc> m_source;
- -
1754 stdex::charset_id m_charset;
-
1755
-
1756 // Declaration parsing data
- - - - - - - -
1764 std::vector<std::unique_ptr<entity<_Elem, _Traits, _Alloc>>> m_entities;
-
1765
-
1766 // Element parsing data
- -
1768 sequence_store m_sequences;
-
1769 std::vector<element_start*> m_element_stack;
- -
1771 };
+
1748
+
1749 protected:
+
1750 std::basic_string<_Elem, _Traits, _Alloc> m_source;
+ +
1752 stdex::charset_id m_charset;
+
1753
+
1754 // Declaration parsing data
+ + + + + + + +
1762 std::vector<std::unique_ptr<entity<_Elem, _Traits, _Alloc>>> m_entities;
+
1763
+
1764 // Element parsing data
+ +
1766 sequence_store m_sequences;
+
1767 std::vector<element_start*> m_element_stack;
+ +
1769 };
-
1772
-
1776 enum class token_t {
-
1777 root = 0,
-
1778 complete,
-
1779 starting,
-
1780 ending,
-
1781 url,
-
1782 };
-
1783
-
1787 constexpr size_t token_tag_max =
-
1788 sizeof(void*) * 2 // Memory address in hexadecimal
-
1789 + 2 // Leading and trailing parenthesis
-
1790 + 1; // Zero terminator
-
1791
-
1796 constexpr char token_tag_start = '\x12';
-
1797
-
1802 constexpr char token_tag_end = '\x13';
-
1803
-
-
1807 class token
-
1808 {
-
1809 protected:
-
1810 inline token(_In_ token_t _type = token_t::root, _In_opt_ sequence* _sequence = nullptr, _In_ uintptr_t _data = 0) :
-
1811 type(_type),
-
1812 sequence(_sequence),
-
1813 data(_data)
-
1814 {}
-
1815
-
1816 template<class _Elem, class _Traits, class _Alloc>
-
1817 friend class parser;
-
1818
-
1819 public:
-
1820 virtual ~token() {} // make polymorphic
-
1821
-
1829 template<class _Traits = std::char_traits<char>, class _Alloc = std::allocator<char>>
-
-
1830 inline size_t append_tag(_Inout_ std::basic_string<char, _Traits, _Alloc>& str) const
-
1831 {
-
1832 size_t n = str.size();
-
1833 // Use %X instead of %p to ommit leading zeros and save space.
-
1834 stdex::appendf(str, "%c%zX%c", stdex::locale_C.get(), token_tag_start, reinterpret_cast<uintptr_t>(this), token_tag_end);
-
1835 return str.size() - n;
-
1836 }
+
1770
+
1774 enum class token_t {
+
1775 root = 0,
+
1776 complete,
+
1777 starting,
+
1778 ending,
+
1779 url,
+
1780 };
+
1781
+
1785 constexpr size_t token_tag_max =
+
1786 sizeof(void*) * 2 // Memory address in hexadecimal
+
1787 + 2 // Leading and trailing parenthesis
+
1788 + 1; // Zero terminator
+
1789
+
1794 constexpr char token_tag_start = '\x12';
+
1795
+
1800 constexpr char token_tag_end = '\x13';
+
1801
+
+
1805 class token
+
1806 {
+
1807 protected:
+
1808 inline token(_In_ token_t _type = token_t::root, _In_opt_ sequence* _sequence = nullptr, _In_ uintptr_t _data = 0) :
+
1809 type(_type),
+
1810 sequence(_sequence),
+
1811 data(_data)
+
1812 {}
+
1813
+
1814 template<class _Elem, class _Traits, class _Alloc>
+
1815 friend class parser;
+
1816
+
1817 public:
+
1818 virtual ~token() {} // make polymorphic
+
1819
+
1827 template<class _Traits = std::char_traits<char>, class _Alloc = std::allocator<char>>
+
+
1828 inline size_t append_tag(_Inout_ std::basic_string<char, _Traits, _Alloc>& str) const
+
1829 {
+
1830 size_t n = str.size();
+
1831 // Use %X instead of %p to ommit leading zeros and save space.
+
1832 stdex::appendf(str, "%c%zX%c", stdex::locale_C.get(), token_tag_start, reinterpret_cast<uintptr_t>(this), token_tag_end);
+
1833 return str.size() - n;
+
1834 }
-
1837
-
1845 template<class _Traits = std::char_traits<wchar_t>, class _Alloc = std::allocator<wchar_t>>
-
-
1846 inline size_t append_tag(_Inout_ std::basic_string<wchar_t, _Traits, _Alloc>& str) const
-
1847 {
-
1848 // Use %X instead of %p to ommit leading zeros and save space.
-
1849 return stdex::appendf(str, L"%c%zX%c", stdex::locale_C.get(), static_cast<wchar_t>(token_tag_start), reinterpret_cast<uintptr_t>(this), static_cast<wchar_t>(token_tag_end));
-
1850 }
+
1835
+
1843 template<class _Traits = std::char_traits<wchar_t>, class _Alloc = std::allocator<wchar_t>>
+
+
1844 inline size_t append_tag(_Inout_ std::basic_string<wchar_t, _Traits, _Alloc>& str) const
+
1845 {
+
1846 // Use %X instead of %p to ommit leading zeros and save space.
+
1847 return stdex::appendf(str, L"%c%zX%c", stdex::locale_C.get(), static_cast<wchar_t>(token_tag_start), reinterpret_cast<uintptr_t>(this), static_cast<wchar_t>(token_tag_end));
+
1848 }
-
1851
-
1852 template<class T>
-
1853 static inline token* parse_tag(const T* str, size_t& offset)
-
1854 {
-
1855 if (str[offset] != static_cast<T>(token_tag_start))
-
1856 return nullptr;
-
1857
-
1858 // Locate tag end.
-
1859 size_t end;
-
1860 for (end = offset + 1; ; end++) {
-
1861 if (!str[end])
-
1862 return nullptr;
-
1863 if (str[end] == token_tag_end)
-
1864 break;
-
1865 }
-
1866
-
1867 // Parse hexadecimal token memory address.
-
1868 token* t = reinterpret_cast<token*>(stdex::strtouint<T, uintptr_t>(str + offset + 1, end - offset - 1, nullptr, 16));
-
1869 if (!t)
-
1870 throw std::invalid_argument("null token");
-
1871 offset = end + 1;
-
1872 return t;
-
1873 }
-
1874
-
1875 public:
-
1876 token_t type;
- -
1878 uintptr_t data;
-
1879 };
+
1849
+
1850 template<class T>
+
1851 static inline token* parse_tag(const T* str, size_t& offset)
+
1852 {
+
1853 if (str[offset] != static_cast<T>(token_tag_start))
+
1854 return nullptr;
+
1855
+
1856 // Locate tag end.
+
1857 size_t end;
+
1858 for (end = offset + 1; ; end++) {
+
1859 if (!str[end])
+
1860 return nullptr;
+
1861 if (str[end] == token_tag_end)
+
1862 break;
+
1863 }
+
1864
+
1865 // Parse hexadecimal token memory address.
+
1866 token* t = reinterpret_cast<token*>(stdex::strtouint<T, uintptr_t>(str + offset + 1, end - offset - 1, nullptr, 16));
+
1867 if (!t)
+
1868 throw std::invalid_argument("null token");
+
1869 offset = end + 1;
+
1870 return t;
+
1871 }
+
1872
+
1873 public:
+
1874 token_t type;
+ +
1876 uintptr_t data;
+
1877 };
-
1880
-
1881 using token_vector = std::vector<std::unique_ptr<token>>;
-
1882 using token_list = std::list<token*>;
-
1883
-
1887 enum text_type_flag_t : uint32_t {
-
1888 has_tokens = 1 << 0,
-
1889 has_text = 1 << 1,
-
1890 is_title = 1 << 2,
-
1891 is_bullet = 1 << 3,
-
1892 };
-
1893
-
1897 template<class _Elem, class _Traits = std::char_traits<_Elem>, class _Alloc = std::allocator<_Elem>>
-
-
1898 class text_token : public token
-
1899 {
-
1900 protected:
-
1901 inline text_token(
-
1902 _In_ token_t type = token_t::complete,
-
1903 _In_reads_or_z_opt_(num_chars) const _Elem* _text = nullptr, _In_ size_t num_chars = 0,
-
1904 _In_ uint32_t _text_type = 0,
-
1905 _In_opt_ stdex::html::sequence* sequence = nullptr, _In_ uintptr_t data = 0) :
- -
1907 text(_text, num_chars),
-
1908 text_type(_text_type)
-
1909 {}
+
1878
+
1879 using token_vector = std::vector<std::unique_ptr<token>>;
+
1880 using token_list = std::list<token*>;
+
1881
+
1885 enum text_type_flag_t : uint32_t {
+
1886 has_tokens = 1 << 0,
+
1887 has_text = 1 << 1,
+
1888 is_title = 1 << 2,
+
1889 is_bullet = 1 << 3,
+
1890 };
+
1891
+
1895 template<class _Elem, class _Traits = std::char_traits<_Elem>, class _Alloc = std::allocator<_Elem>>
+
+
1896 class text_token : public token
+
1897 {
+
1898 protected:
+
1899 inline text_token(
+
1900 _In_ token_t type = token_t::complete,
+
1901 _In_reads_or_z_opt_(num_chars) const _Elem* _text = nullptr, _In_ size_t num_chars = 0,
+
1902 _In_ uint32_t _text_type = 0,
+
1903 _In_opt_ stdex::html::sequence* sequence = nullptr, _In_ uintptr_t data = 0) :
+ +
1905 text(_text, num_chars),
+
1906 text_type(_text_type)
+
1907 {}
+
1908
+
1909 friend class parser<_Elem, _Traits, _Alloc>;
1910
-
1911 friend class parser<_Elem, _Traits, _Alloc>;
-
1912
-
1913 public:
-
1914 std::basic_string<_Elem, _Traits, _Alloc> text;
-
1915 uint32_t text_type;
-
1916 stdex::mapping_vector<size_t> mapping;
-
1917 };
+
1911 public:
+
1912 std::basic_string<_Elem, _Traits, _Alloc> text;
+
1913 uint32_t text_type;
+
1914 stdex::mapping_vector<size_t> mapping;
+
1915 };
-
1918
-
1922 template<class _Elem, class _Traits = std::char_traits<_Elem>, class _Alloc = std::allocator<_Elem>>
-
-
1923 class starting_token : public text_token<_Elem, _Traits, _Alloc>
-
1924 {
-
1925 protected:
-
1926 inline starting_token(
-
1927 _In_reads_or_z_opt_(num_chars_text) const _Elem* _text = nullptr, _In_ size_t num_chars_text = 0,
-
1928 _In_reads_or_z_opt_(num_chars_name) const _Elem* _name = nullptr, _In_ size_t num_chars_name = 0,
-
1929 _In_ uint32_t text_type = 0,
-
1930 _In_opt_ stdex::html::sequence* sequence = nullptr,
-
1931 _In_opt_ stdex::html::sequence* _end_sequence = nullptr,
-
1932 _In_ uintptr_t data = 0) :
-
1933 text_token(token_t::starting, _text, num_chars_text, text_type, sequence, data),
-
1934 name(_name, num_chars_name),
-
1935 end_sequence(_end_sequence)
-
1936 {}
+
1916
+
1920 template<class _Elem, class _Traits = std::char_traits<_Elem>, class _Alloc = std::allocator<_Elem>>
+
+
1921 class starting_token : public text_token<_Elem, _Traits, _Alloc>
+
1922 {
+
1923 protected:
+
1924 inline starting_token(
+
1925 _In_reads_or_z_opt_(num_chars_text) const _Elem* _text = nullptr, _In_ size_t num_chars_text = 0,
+
1926 _In_reads_or_z_opt_(num_chars_name) const _Elem* _name = nullptr, _In_ size_t num_chars_name = 0,
+
1927 _In_ uint32_t text_type = 0,
+
1928 _In_opt_ stdex::html::sequence* sequence = nullptr,
+
1929 _In_opt_ stdex::html::sequence* _end_sequence = nullptr,
+
1930 _In_ uintptr_t data = 0) :
+
1931 text_token(token_t::starting, _text, num_chars_text, text_type, sequence, data),
+
1932 name(_name, num_chars_name),
+
1933 end_sequence(_end_sequence)
+
1934 {}
+
1935
+
1936 friend class parser<_Elem, _Traits, _Alloc>;
1937
-
1938 friend class parser<_Elem, _Traits, _Alloc>;
-
1939
-
1940 public:
-
1941 std::basic_string<_Elem, _Traits, _Alloc> name;
- -
1943 };
+
1938 public:
+
1939 std::basic_string<_Elem, _Traits, _Alloc> name;
+ +
1941 };
-
1944
-
1948 enum class token_url_t {
-
1949 plain = 0, // URL is not using any particular encoding scheme (as-is)
-
1950 sgml, // URL is encoded using SGML entities
-
1951 css, // URL is encoded using CSS escaping scheme
-
1952 };
-
1953
-
1957 template<class _Elem, class _Traits = std::char_traits<_Elem>, class _Alloc = std::allocator<_Elem>>
-
-
1958 class url_token : public token
-
1959 {
-
1960 protected:
-
1961 inline url_token(
-
1962 _In_reads_or_z_opt_(num_chars) const _Elem* _url = nullptr, _In_ size_t num_chars = 0,
-
1963 token_url_t _encoding = token_url_t::plain,
-
1964 _In_opt_ stdex::html::sequence* sequence = nullptr, _In_ uintptr_t data = 0) :
-
1965 token(token_t::url, sequence, data),
-
1966 url(_url, num_chars),
-
1967 encoding(_encoding)
-
1968 {}
+
1942
+
1946 enum class token_url_t {
+
1947 plain = 0, // URL is not using any particular encoding scheme (as-is)
+
1948 sgml, // URL is encoded using SGML entities
+
1949 css, // URL is encoded using CSS escaping scheme
+
1950 };
+
1951
+
1955 template<class _Elem, class _Traits = std::char_traits<_Elem>, class _Alloc = std::allocator<_Elem>>
+
+
1956 class url_token : public token
+
1957 {
+
1958 protected:
+
1959 inline url_token(
+
1960 _In_reads_or_z_opt_(num_chars) const _Elem* _url = nullptr, _In_ size_t num_chars = 0,
+
1961 token_url_t _encoding = token_url_t::plain,
+
1962 _In_opt_ stdex::html::sequence* sequence = nullptr, _In_ uintptr_t data = 0) :
+
1963 token(token_t::url, sequence, data),
+
1964 url(_url, num_chars),
+
1965 encoding(_encoding)
+
1966 {}
+
1967
+
1968 friend class parser<_Elem, _Traits, _Alloc>;
1969
-
1970 friend class parser<_Elem, _Traits, _Alloc>;
-
1971
-
1972 public:
-
1973 std::basic_string<_Elem, _Traits, _Alloc> url;
-
1974 token_url_t encoding;
-
1975 };
+
1970 public:
+
1971 std::basic_string<_Elem, _Traits, _Alloc> url;
+
1972 token_url_t encoding;
+
1973 };
-
1976
-
- - -
1982 std::list<stdex::html::token*> active_tokens;
-
1983 size_t word_index;
- -
1985 };
+
1974
+
+ + +
1980 std::list<stdex::html::token*> active_tokens;
+
1981 size_t word_index;
+ +
1983 };
+
1984
+
1985 using inserted_token_list = std::list<inserted_token>;
1986
-
1987 using inserted_token_list = std::list<inserted_token>;
-
1988
-
1989 template<class _Elem, class _Traits, class _Alloc>
-
- -
1991 {
-
1992 public:
-
1993 inline parser(
- -
1995 _In_reads_or_z_opt_(num_chars) const stdex::schar_t* url = nullptr, _In_ size_t num_chars = 0,
-
1996 _In_ bool parse_frames = false, _In_ stdex::progress<size_t>* progress = nullptr) :
- -
1998 m_url(url, stdex::strnlen(url, num_chars)),
-
1999 m_parse_frames(parse_frames),
- -
2001 m_source(nullptr)
-
2002 {}
-
2003
-
- -
2008 {
-
2009 _Assume_(m_tokens.empty());
-
2010
-
2011 if (m_progress) {
-
2012 m_progress->set_range(0, m_document.source().size());
-
2013 m_progress->set(0);
-
2014 }
-
2015
-
2016 m_source = m_document.source().data();
- -
2018 return parse(m_document.m_sequences.end());
-
2019 }
+
1987 template<class _Elem, class _Traits, class _Alloc>
+
+ +
1989 {
+
1990 public:
+
1991 inline parser(
+ +
1993 _In_reads_or_z_opt_(num_chars) const stdex::schar_t* url = nullptr, _In_ size_t num_chars = 0,
+
1994 _In_ bool parse_frames = false, _In_ stdex::progress<size_t>* progress = nullptr) :
+ +
1996 m_url(url, stdex::strnlen(url, num_chars)),
+
1997 m_parse_frames(parse_frames),
+ +
1999 m_source(nullptr)
+
2000 {}
+
2001
+
+ +
2006 {
+
2007 _Assume_(m_tokens.empty());
+
2008
+
2009 if (m_progress) {
+
2010 m_progress->set_range(0, m_document.source().size());
+
2011 m_progress->set(0);
+
2012 }
+
2013
+
2014 m_source = m_document.source().data();
+ +
2016 return parse(m_document.m_sequences.end());
+
2017 }
-
2020
-
-
2027 static void link(_Inout_ std::basic_string<_Elem, _Traits, _Alloc>& source, _In_ const text_token<_Elem, _Traits, _Alloc>* t)
-
2028 {
-
2029 _Assume_(t);
-
2030 _Assume_(
-
2031 t->type == token_t::complete ||
-
2032 t->type == token_t::starting ||
-
2033 t->type == token_t::ending ||
-
2034 t->type == token_t::root);
-
2035
-
2036 if (t->text_type & has_tokens) {
-
2037 const _Elem* root = t->text.data();
-
2038 for (size_t i = 0, num_chars = t->text.size(); i < num_chars && root[i];) {
-
2039 _Assume_(root[i] != token_tag_end);
-
2040 const token* t2 = token::parse_tag(root, i);
-
2041 if (t2) {
-
2042 switch (t2->type) {
-
2043 case token_t::complete:
-
2044 case token_t::starting:
-
2045 case token_t::ending:
-
2046 case token_t::root:
-
2047 link(source, dynamic_cast<const text_token<_Elem, _Traits, _Alloc>*>(t2));
-
2048 break;
-
2049 case token_t::url: {
-
2050 auto t2_url = dynamic_cast<const url_token<_Elem, _Traits, _Alloc>*>(t2);
-
2051 switch (t2_url->encoding) {
-
2052 case token_url_t::plain:
-
2053 source += t2_url->url;
-
2054 break;
-
2055 case token_url_t::sgml:
-
2056 escape(source, t2_url->url.data(), t2_url->url.size());
-
2057 break;
-
2058 case token_url_t::css:
-
2059 css_escape(source, t2_url->url.data(), t2_url->url.size());
-
2060 break;
-
2061 default:
-
2062 throw std::invalid_argument("unsupported URL encoding");
-
2063 }
-
2064 break;
-
2065 }
-
2066 default:
-
2067 throw std::invalid_argument("unsupported token type");
-
2068 }
-
2069 }
-
2070 else if (t->text_type & has_text) {
-
2071 escape_min(source, root[i]);
-
2072 i++;
-
2073 }
-
2074 else
-
2075 source += root[i++];
-
2076 }
-
2077 }
-
2078 else if (t->text_type & has_text) {
-
2079 // Token contains no references to other tokens. But, it does contain text that requires escaping.
-
2080 escape_min(source, t->text.data(), t->text.size());
-
2081 }
-
2082 else
-
2083 source += t->text;
-
2084 }
+
2018
+
+
2025 static void link(_Inout_ std::basic_string<_Elem, _Traits, _Alloc>& source, _In_ const text_token<_Elem, _Traits, _Alloc>* t)
+
2026 {
+
2027 _Assume_(t);
+
2028 _Assume_(
+
2029 t->type == token_t::complete ||
+
2030 t->type == token_t::starting ||
+
2031 t->type == token_t::ending ||
+
2032 t->type == token_t::root);
+
2033
+
2034 if (t->text_type & has_tokens) {
+
2035 const _Elem* root = t->text.data();
+
2036 for (size_t i = 0, num_chars = t->text.size(); i < num_chars && root[i];) {
+
2037 _Assume_(root[i] != token_tag_end);
+
2038 const token* t2 = token::parse_tag(root, i);
+
2039 if (t2) {
+
2040 switch (t2->type) {
+
2041 case token_t::complete:
+
2042 case token_t::starting:
+
2043 case token_t::ending:
+
2044 case token_t::root:
+
2045 link(source, dynamic_cast<const text_token<_Elem, _Traits, _Alloc>*>(t2));
+
2046 break;
+
2047 case token_t::url: {
+
2048 auto t2_url = dynamic_cast<const url_token<_Elem, _Traits, _Alloc>*>(t2);
+
2049 switch (t2_url->encoding) {
+
2050 case token_url_t::plain:
+
2051 source += t2_url->url;
+
2052 break;
+
2053 case token_url_t::sgml:
+
2054 escape(source, t2_url->url.data(), t2_url->url.size());
+
2055 break;
+
2056 case token_url_t::css:
+
2057 css_escape(source, t2_url->url.data(), t2_url->url.size());
+
2058 break;
+
2059 default:
+
2060 throw std::invalid_argument("unsupported URL encoding");
+
2061 }
+
2062 break;
+
2063 }
+
2064 default:
+
2065 throw std::invalid_argument("unsupported token type");
+
2066 }
+
2067 }
+
2068 else if (t->text_type & has_text) {
+
2069 escape_min(source, root[i]);
+
2070 i++;
+
2071 }
+
2072 else
+
2073 source += root[i++];
+
2074 }
+
2075 }
+
2076 else if (t->text_type & has_text) {
+
2077 // Token contains no references to other tokens. But, it does contain text that requires escaping.
+
2078 escape_min(source, t->text.data(), t->text.size());
+
2079 }
+
2080 else
+
2081 source += t->text;
+
2082 }
-
2085
-
-
2094 static void start_tokens(_Inout_ std::basic_string<_Elem, _Traits, _Alloc>& source, _Inout_ token_list& active_tokens, _In_ const token_list& new_tokens, _In_ token_list::const_iterator from)
-
2095 {
-
2096 for (; from != new_tokens.cend(); ++from) {
-
2097 auto t = *from;
-
2098 t->append_tag(source);
-
2099 active_tokens.push_back(t);
-
2100 }
-
2101 }
+
2083
+
+
2092 static void start_tokens(_Inout_ std::basic_string<_Elem, _Traits, _Alloc>& source, _Inout_ token_list& active_tokens, _In_ const token_list& new_tokens, _In_ token_list::const_iterator from)
+
2093 {
+
2094 for (; from != new_tokens.cend(); ++from) {
+
2095 auto t = *from;
+
2096 t->append_tag(source);
+
2097 active_tokens.push_back(t);
+
2098 }
+
2099 }
-
2102
-
-
2112 token_list::const_iterator end_tokens(_Inout_ std::basic_string<_Elem, _Traits, _Alloc>& source, _Inout_ token_list& active_tokens, _In_ const token_list& new_tokens)
-
2113 {
-
2114 // Skip matching tokens in active_tokens and new_tokens.
-
2115 token_list::const_iterator i1, i2;
-
2116 for (i1 = active_tokens.cbegin(), i2 = new_tokens.cbegin(); i1 != active_tokens.cend(); ++i1, ++i2) {
-
2117 if (i2 == new_tokens.cend() || *i1 != *i2) {
-
2118 // Got two tokens, where lists don't match anymore, or new_tokens list is out.
-
2119 // End tokens not relevant anymore in reverse order of starting.
-
2120 for (auto i = active_tokens.cend(); i != active_tokens.cbegin(); ) {
-
2121 auto t1 = dynamic_cast<starting_token<_Elem, _Traits, _Alloc>*>(*(--i));
-
2122 _Assume_(t1 && t1->type == token_t::starting);
-
2123
-
2124 std::unique_ptr<text_token<_Elem, _Traits, _Alloc>> t2(new text_token<_Elem, _Traits, _Alloc>(token_t::ending));
-
2125 t2->text.reserve(t1->name.size() + 3);
-
2126 t2->text += '<';
-
2127 t2->text += '/';
-
2128 t2->text += t1->name;
-
2129 t2->text += '>';
-
2130 append_token(std::move(t2), source);
-
2131
-
2132 // Pop the active token.
-
2133 if (i1 == i) {
-
2134 active_tokens.erase(i);
-
2135 break;
-
2136 }
-
2137 active_tokens.erase(i);
-
2138 i = active_tokens.cend();
-
2139 }
-
2140 break;
-
2141 }
-
2142 }
-
2143 return i2;
-
2144 }
+
2100
+
+
2110 token_list::const_iterator end_tokens(_Inout_ std::basic_string<_Elem, _Traits, _Alloc>& source, _Inout_ token_list& active_tokens, _In_ const token_list& new_tokens)
+
2111 {
+
2112 // Skip matching tokens in active_tokens and new_tokens.
+
2113 token_list::const_iterator i1, i2;
+
2114 for (i1 = active_tokens.cbegin(), i2 = new_tokens.cbegin(); i1 != active_tokens.cend(); ++i1, ++i2) {
+
2115 if (i2 == new_tokens.cend() || *i1 != *i2) {
+
2116 // Got two tokens, where lists don't match anymore, or new_tokens list is out.
+
2117 // End tokens not relevant anymore in reverse order of starting.
+
2118 for (auto i = active_tokens.cend(); i != active_tokens.cbegin(); ) {
+
2119 auto t1 = dynamic_cast<starting_token<_Elem, _Traits, _Alloc>*>(*(--i));
+
2120 _Assume_(t1 && t1->type == token_t::starting);
+
2121
+
2122 std::unique_ptr<text_token<_Elem, _Traits, _Alloc>> t2(new text_token<_Elem, _Traits, _Alloc>(token_t::ending));
+
2123 t2->text.reserve(t1->name.size() + 3);
+
2124 t2->text += '<';
+
2125 t2->text += '/';
+
2126 t2->text += t1->name;
+
2127 t2->text += '>';
+
2128 append_token(std::move(t2), source);
+
2129
+
2130 // Pop the active token.
+
2131 if (i1 == i) {
+
2132 active_tokens.erase(i);
+
2133 break;
+
2134 }
+
2135 active_tokens.erase(i);
+
2136 i = active_tokens.cend();
+
2137 }
+
2138 break;
+
2139 }
+
2140 }
+
2141 return i2;
+
2142 }
-
2145
-
-
2155 void append_inserted_tokens(_Inout_ std::basic_string<_Elem, _Traits, _Alloc>& source, _Inout_ inserted_token_list& inserted_tokens,
-
2156 _In_ size_t word_index, _In_ bool after_word,
-
2157 _Inout_ token_list& active_tokens)
-
2158 {
-
2159 for (auto i = inserted_tokens.begin(); i != inserted_tokens.end(); ) {
-
2160 auto& t = *i;
-
2161 _Assume_(t.token);
-
2162 if (t.word_index == word_index && t.after_word == after_word) {
-
2163 if (t.token->type != token_t::ending)
-
2164 start_tokens(source, active_tokens, t.active_tokens, end_tokens(source, active_tokens, t.active_tokens));
-
2165 t.token->append_tag(source);
-
2166 inserted_tokens.erase(i++);
-
2167 }
-
2168 else
-
2169 ++i;
-
2170 }
-
2171 }
+
2143
+
+
2153 void append_inserted_tokens(_Inout_ std::basic_string<_Elem, _Traits, _Alloc>& source, _Inout_ inserted_token_list& inserted_tokens,
+
2154 _In_ size_t word_index, _In_ bool after_word,
+
2155 _Inout_ token_list& active_tokens)
+
2156 {
+
2157 for (auto i = inserted_tokens.begin(); i != inserted_tokens.end(); ) {
+
2158 auto& t = *i;
+
2159 _Assume_(t.token);
+
2160 if (t.word_index == word_index && t.after_word == after_word) {
+
2161 if (t.token->type != token_t::ending)
+
2162 start_tokens(source, active_tokens, t.active_tokens, end_tokens(source, active_tokens, t.active_tokens));
+
2163 t.token->append_tag(source);
+
2164 inserted_tokens.erase(i++);
+
2165 }
+
2166 else
+
2167 ++i;
+
2168 }
+
2169 }
-
2172
-
-
2179 static void merge(_Inout_ token_list& a, _In_ const token_list& b)
-
2180 {
-
2181 for (auto i2 = b.begin(); i2 != b.end(); ++i2) {
-
2182 auto t2 = *i2;
-
2183 for (auto i1 = a.begin(); i1 != a.end(); ++i1) {
-
2184 if (i1 == a.end()) {
-
2185 a.push_back(t2);
-
2186 break;
-
2187 }
-
2188 auto t1 = *i1;
-
2189 if (t1 == t2)
-
2190 break;
-
2191 }
-
2192 }
-
2193 }
+
2170
+
+
2177 static void merge(_Inout_ token_list& a, _In_ const token_list& b)
+
2178 {
+
2179 for (auto i2 = b.begin(); i2 != b.end(); ++i2) {
+
2180 auto t2 = *i2;
+
2181 for (auto i1 = a.begin(); i1 != a.end(); ++i1) {
+
2182 if (i1 == a.end()) {
+
2183 a.push_back(t2);
+
2184 break;
+
2185 }
+
2186 auto t1 = *i1;
+
2187 if (t1 == t2)
+
2188 break;
+
2189 }
+
2190 }
+
2191 }
-
2194
-
-
2198 void make_absolute_url(std::basic_string<_Elem, _Traits, _Alloc>& rel)
-
2199 {
-
2200 _Unreferenced_(rel);
-
2201
-
2202 if (m_url.empty())
-
2203 return;
-
2204
-
2205 // TODO: Implement!
-
2206 }
+
2192
+
+
2196 void make_absolute_url(std::basic_string<_Elem, _Traits, _Alloc>& rel)
+
2197 {
+
2198 _Unreferenced_(rel);
+
2199
+
2200 if (m_url.empty())
+
2201 return;
+
2202
+
2203 // TODO: Implement!
+
2204 }
-
2207
-
2211 inline const token_vector& tokens() const { return m_tokens; }
-
2212
-
2213 protected:
-
2221 template <class T>
-
-
2222 inline T* append_token(_Inout_ std::unique_ptr<T>&& token)
-
2223 {
-
2224 if (!token)
-
2225 return nullptr;
-
2226 auto t = token.get();
-
2227 m_tokens.push_back(std::move(token));
-
2228 return t;
-
2229 }
+
2205
+
2209 inline const token_vector& tokens() const { return m_tokens; }
+
2210
+
2211 protected:
+
2219 template <class T>
+
+
2220 inline T* append_token(_Inout_ std::unique_ptr<T>&& token)
+
2221 {
+
2222 if (!token)
+
2223 return nullptr;
+
2224 auto t = token.get();
+
2225 m_tokens.push_back(std::move(token));
+
2226 return t;
+
2227 }
-
2230
-
2239 template <class T>
-
-
2240 inline size_t append_token(_Inout_ std::unique_ptr<T>&& token, _Inout_ std::basic_string<_Elem, _Traits, _Alloc>& source)
-
2241 {
-
2242 if (!token)
-
2243 return 0;
-
2244 size_t n = token->append_tag(source);
-
2245 m_tokens.push_back(std::move(token));
-
2246 return n;
-
2247 }
+
2228
+
2237 template <class T>
+
+
2238 inline size_t append_token(_Inout_ std::unique_ptr<T>&& token, _Inout_ std::basic_string<_Elem, _Traits, _Alloc>& source)
+
2239 {
+
2240 if (!token)
+
2241 return 0;
+
2242 size_t n = token->append_tag(source);
+
2243 m_tokens.push_back(std::move(token));
+
2244 return n;
+
2245 }
-
2248
-
-
2257 text_token<_Elem, _Traits, _Alloc>* parse(_In_ const sequence_store::const_iterator& end, _In_ uint32_t text_type = 0)
-
2258 {
- -
2260 std::unique_ptr<text_token<_Elem, _Traits, _Alloc>> token(new text_token<_Elem, _Traits, _Alloc>(
-
2261 token_t::complete,
-
2262 nullptr, 0,
-
2263 text_type,
-
2264 m_offset->get()));
-
2265
-
2266 while (m_offset != end) {
-
2267 auto& s = *m_offset;
-
2268
-
2269 if (m_progress) {
-
2270 if (m_progress->cancel())
-
2271 throw stdex::user_cancelled();
-
2272 m_progress->set(s->interval.start);
-
2273 }
-
2274
-
2275 // No token_tag_start and token_tag_end chars, please.
-
2276 _Assume_(
-
2277 stdex::strnchr(m_source + s->interval.start, s->interval.size(), static_cast<_Elem>(token_tag_start)) == stdex::npos &&
-
2278 stdex::strnchr(m_source + s->interval.start, s->interval.size(), static_cast<_Elem>(token_tag_end)) == stdex::npos);
-
2279
-
2280 if (s->type == stdex::parser::html_sequence_t::text) {
-
2281 rel.from = s->interval.start;
-
2282 token->mapping.push_back(rel);
-
2283 stdex::sgml2strcat(token->text, m_source + s->interval.start, s->interval.size(), 0, rel, &token->mapping);
-
2284 rel.to = token->text.size();
-
2285 if (!(token->text_type & has_text) &&
-
2286 !stdex::isblank(m_source + s->interval.start, s->interval.size(), stdex::std_locale_C))
-
2287 token->text_type |= has_text;
-
2288 ++m_offset;
-
2289 }
-
2290 else if (s->type == stdex::parser::html_sequence_t::element || s->type == stdex::parser::html_sequence_t::element_start) {
-
2291 const element* s_el = static_cast<const element*>(s.get());
-
2292 _Assume_(s_el);
-
2293 const element_start* s_el_start = s->type == stdex::parser::html_sequence_t::element_start ? static_cast<const element_start*>(s.get()) : nullptr;
-
2294 if (s_el->code == element_t::frameset && !m_parse_frames)
-
2295 throw std::invalid_argument("<frameset> detected");
-
2296
-
2297 {
-
2298 size_t offset = s->interval.start;
-
2299 std::unique_ptr<text_token<_Elem, _Traits, _Alloc>> t(s->type == stdex::parser::html_sequence_t::element || element_traits::span(s_el_start->code) == element_span_t::immediate ?
-
2300 new text_token<_Elem, _Traits, _Alloc>(token_t::complete, nullptr, 0, 0, s.get()) :
-
2301 new starting_token<_Elem, _Traits, _Alloc>(nullptr, 0, m_source + s_el_start->name.start, s_el_start->name.size(), 0, s.get(), s_el_start->end));
-
2302
-
2303 // Copy the tag contents, but mind any attributes containing localizable text.
-
2304 for (auto& a : s_el->attributes) {
-
2305 if (a.value.empty() ||
-
2306 stdex::isblank(m_source + a.value.start, a.value.size(), stdex::std_locale_C))
-
2307 continue;
-
2308
-
2309 if (element_traits::is_uri(s_el->code, m_source + a.name.start, a.name.size())) {
-
2310 t->text.append(m_source + offset, a.value.start - offset);
-
2311 std::unique_ptr<url_token<_Elem, _Traits, _Alloc>> t_url(new url_token<_Elem, _Traits, _Alloc>(
-
2312 nullptr, 0,
-
2313 token_url_t::sgml,
-
2314 s.get()));
-
2315 stdex::sgml2strcat(t_url->url, m_source + a.value.start, a.value.size());
-
2316 append_token(std::move(t_url), t->text);
-
2317 t->text_type |= has_tokens;
-
2318 offset = a.value.end;
-
2319 }
-
2320 else if (element_traits::is_localizable(s_el->code, m_source + a.name.start, a.name.size())) {
-
2321 t->text.append(m_source + offset, a.value.start - offset);
-
2322 std::unique_ptr<text_token<_Elem, _Traits, _Alloc>> t_value(new text_token<_Elem, _Traits, _Alloc>(
-
2323 token_t::complete,
-
2324 nullptr, 0,
-
2325 has_text | is_title,
-
2326 s.get()));
-
2327 stdex::mapping<size_t> rel_value(a.value.start, 0);
-
2328 t_value->mapping.push_back(rel_value);
-
2329 stdex::sgml2strcpy(t_value->text, m_source + a.value.start, a.value.size(), 0, rel_value, &t_value->mapping);
-
2330 append_token(std::move(t_value), t->text);
-
2331 t->text_type |= has_tokens;
-
2332 offset = a.value.end;
-
2333 }
-
2334 }
-
2335
-
2336 t->text.append(m_source + offset, s->interval.end - offset);
-
2337 rel.from = s->interval.start;
-
2338 token->mapping.push_back(rel);
-
2339 rel.to += append_token(std::move(t), token->text);
-
2340 token->text_type |= has_tokens;
-
2341 }
-
2342 ++m_offset;
-
2343
-
2344 if (s_el_start) {
-
2345 if (s_el_start->code == element_t::address ||
-
2346 s_el_start->code == element_t::code ||
-
2347 s_el_start->code == element_t::comment ||
-
2348 s_el_start->code == element_t::cite ||
-
2349 s_el_start->code == element_t::kbd ||
-
2350 s_el_start->code == element_t::samp ||
-
2351 s_el_start->code == element_t::script ||
-
2352 s_el_start->code == element_t::style)
-
2353 {
-
2354 // Non-localizable
-
2355 auto s_end = s_el_start->end;
-
2356 _Assume_(s_end);
-
2357
-
2358 if (s->interval.end < s_end->interval.start) {
-
2359 if (s_el_start->code != element_t::style) {
-
2360 rel.from = s->interval.start;
-
2361 token->mapping.push_back(rel);
-
2362 rel.to += append_token(std::move(std::unique_ptr<text_token<_Elem, _Traits, _Alloc>>(
- -
2364 token_t::complete,
-
2365 m_source + s->interval.end, s_end->interval.start - s->interval.end,
-
2366 0,
-
2367 m_offset->get()))),
-
2368 token->text);
-
2369 }
-
2370 else {
-
2371 // Partially parse CSS. It may contain URLs we need to make absolute.
-
2372 auto t = parse_css(s->interval.end, s_end->interval.start);
-
2373 _Assume_(t);
-
2374 rel.from = s->interval.start;
-
2375 token->mapping.push_back(rel);
-
2376 rel.to += t->append_tag(token->text);
-
2377 }
-
2378 token->text_type |= has_tokens;
-
2379 }
-
2380 while (m_offset != end && m_offset->get() != s_end)
-
2381 ++m_offset;
-
2382 }
-
2383 else if (element_traits::is_group(s_el_start->code)) {
-
2384 auto limit = m_offset;
-
2385 while (limit != end && limit->get() != s_el_start->end)
-
2386 ++limit;
-
2387 auto t = parse(limit,
-
2388 (element_traits::is_heading(s_el_start->code) || s_el_start->code == element_t::dt || s_el_start->code == element_t::title ? is_title : 0) |
-
2389 (element_traits::is_list(s_el_start->code) ? is_bullet : 0));
-
2390 rel.from = s->interval.start;
-
2391 token->mapping.push_back(rel);
-
2392 rel.to += t->append_tag(token->text);
-
2393 token->text_type |= has_tokens;
-
2394 }
-
2395 }
-
2396 }
-
2397 else if (s->type == stdex::parser::html_sequence_t::element_end) {
-
2398 rel.from = s->interval.start;
-
2399 token->mapping.push_back(rel);
-
2400 rel.to += append_token(std::move(std::unique_ptr<text_token<_Elem, _Traits, _Alloc>>(
- -
2402 token_t::ending,
-
2403 m_source + s->interval.start, s->interval.size(),
-
2404 0,
-
2405 s.get()))),
-
2406 token->text);
-
2407 token->text_type |= has_tokens;
-
2408 ++m_offset;
-
2409 }
-
2410 else {
-
2411 // Declaration, instruction, (P)CDATA section, comment...
-
2412 rel.from = s->interval.start;
-
2413 token->mapping.push_back(rel);
-
2414 rel.to += append_token(std::move(std::unique_ptr<text_token<_Elem, _Traits, _Alloc>>(
- -
2416 token_t::complete,
-
2417 m_source + s->interval.start, s->interval.size(),
-
2418 0,
-
2419 s.get()))),
-
2420 token->text);
-
2421 token->text_type |= has_tokens;
-
2422 ++m_offset;
-
2423 }
-
2424 }
-
2425
-
2426 return append_token(std::move(token));
-
2427 }
+
2246
+
+
2255 text_token<_Elem, _Traits, _Alloc>* parse(_In_ const sequence_store::const_iterator& end, _In_ uint32_t text_type = 0)
+
2256 {
+ +
2258 std::unique_ptr<text_token<_Elem, _Traits, _Alloc>> token(new text_token<_Elem, _Traits, _Alloc>(
+
2259 token_t::complete,
+
2260 nullptr, 0,
+
2261 text_type,
+
2262 m_offset->get()));
+
2263
+
2264 while (m_offset != end) {
+
2265 auto& s = *m_offset;
+
2266
+
2267 if (m_progress) {
+
2268 if (m_progress->cancel())
+
2269 throw stdex::user_cancelled();
+
2270 m_progress->set(s->interval.start);
+
2271 }
+
2272
+
2273 // No token_tag_start and token_tag_end chars, please.
+
2274 _Assume_(
+
2275 stdex::strnchr(m_source + s->interval.start, s->interval.size(), static_cast<_Elem>(token_tag_start)) == stdex::npos &&
+
2276 stdex::strnchr(m_source + s->interval.start, s->interval.size(), static_cast<_Elem>(token_tag_end)) == stdex::npos);
+
2277
+
2278 if (s->type == stdex::parser::html_sequence_t::text) {
+
2279 rel.from = s->interval.start;
+
2280 token->mapping.push_back(rel);
+
2281 stdex::sgml2strcat(token->text, m_source + s->interval.start, s->interval.size(), 0, rel, &token->mapping);
+
2282 rel.to = token->text.size();
+
2283 if (!(token->text_type & has_text) &&
+
2284 !stdex::isblank(m_source + s->interval.start, s->interval.size()))
+
2285 token->text_type |= has_text;
+
2286 ++m_offset;
+
2287 }
+
2288 else if (s->type == stdex::parser::html_sequence_t::element || s->type == stdex::parser::html_sequence_t::element_start) {
+
2289 const element* s_el = static_cast<const element*>(s.get());
+
2290 _Assume_(s_el);
+
2291 const element_start* s_el_start = s->type == stdex::parser::html_sequence_t::element_start ? static_cast<const element_start*>(s.get()) : nullptr;
+
2292 if (s_el->code == element_t::frameset && !m_parse_frames)
+
2293 throw std::invalid_argument("<frameset> detected");
+
2294
+
2295 {
+
2296 size_t offset = s->interval.start;
+
2297 std::unique_ptr<text_token<_Elem, _Traits, _Alloc>> t(s->type == stdex::parser::html_sequence_t::element || element_traits::span(s_el_start->code) == element_span_t::immediate ?
+
2298 new text_token<_Elem, _Traits, _Alloc>(token_t::complete, nullptr, 0, 0, s.get()) :
+
2299 new starting_token<_Elem, _Traits, _Alloc>(nullptr, 0, m_source + s_el_start->name.start, s_el_start->name.size(), 0, s.get(), s_el_start->end));
+
2300
+
2301 // Copy the tag contents, but mind any attributes containing localizable text.
+
2302 for (auto& a : s_el->attributes) {
+
2303 if (a.value.empty() ||
+
2304 stdex::isblank(m_source + a.value.start, a.value.size()))
+
2305 continue;
+
2306
+
2307 if (element_traits::is_uri(s_el->code, m_source + a.name.start, a.name.size())) {
+
2308 t->text.append(m_source + offset, a.value.start - offset);
+
2309 std::unique_ptr<url_token<_Elem, _Traits, _Alloc>> t_url(new url_token<_Elem, _Traits, _Alloc>(
+
2310 nullptr, 0,
+
2311 token_url_t::sgml,
+
2312 s.get()));
+
2313 stdex::sgml2strcat(t_url->url, m_source + a.value.start, a.value.size());
+
2314 append_token(std::move(t_url), t->text);
+
2315 t->text_type |= has_tokens;
+
2316 offset = a.value.end;
+
2317 }
+
2318 else if (element_traits::is_localizable(s_el->code, m_source + a.name.start, a.name.size())) {
+
2319 t->text.append(m_source + offset, a.value.start - offset);
+
2320 std::unique_ptr<text_token<_Elem, _Traits, _Alloc>> t_value(new text_token<_Elem, _Traits, _Alloc>(
+
2321 token_t::complete,
+
2322 nullptr, 0,
+
2323 has_text | is_title,
+
2324 s.get()));
+
2325 stdex::mapping<size_t> rel_value(a.value.start, 0);
+
2326 t_value->mapping.push_back(rel_value);
+
2327 stdex::sgml2strcpy(t_value->text, m_source + a.value.start, a.value.size(), 0, rel_value, &t_value->mapping);
+
2328 append_token(std::move(t_value), t->text);
+
2329 t->text_type |= has_tokens;
+
2330 offset = a.value.end;
+
2331 }
+
2332 }
+
2333
+
2334 t->text.append(m_source + offset, s->interval.end - offset);
+
2335 rel.from = s->interval.start;
+
2336 token->mapping.push_back(rel);
+
2337 rel.to += append_token(std::move(t), token->text);
+
2338 token->text_type |= has_tokens;
+
2339 }
+
2340 ++m_offset;
+
2341
+
2342 if (s_el_start) {
+
2343 if (s_el_start->code == element_t::address ||
+
2344 s_el_start->code == element_t::code ||
+
2345 s_el_start->code == element_t::comment ||
+
2346 s_el_start->code == element_t::cite ||
+
2347 s_el_start->code == element_t::kbd ||
+
2348 s_el_start->code == element_t::samp ||
+
2349 s_el_start->code == element_t::script ||
+
2350 s_el_start->code == element_t::style)
+
2351 {
+
2352 // Non-localizable
+
2353 auto s_end = s_el_start->end;
+
2354 _Assume_(s_end);
+
2355
+
2356 if (s->interval.end < s_end->interval.start) {
+
2357 if (s_el_start->code != element_t::style) {
+
2358 rel.from = s->interval.start;
+
2359 token->mapping.push_back(rel);
+
2360 rel.to += append_token(std::move(std::unique_ptr<text_token<_Elem, _Traits, _Alloc>>(
+ +
2362 token_t::complete,
+
2363 m_source + s->interval.end, s_end->interval.start - s->interval.end,
+
2364 0,
+
2365 m_offset->get()))),
+
2366 token->text);
+
2367 }
+
2368 else {
+
2369 // Partially parse CSS. It may contain URLs we need to make absolute.
+
2370 auto t = parse_css(s->interval.end, s_end->interval.start);
+
2371 _Assume_(t);
+
2372 rel.from = s->interval.start;
+
2373 token->mapping.push_back(rel);
+
2374 rel.to += t->append_tag(token->text);
+
2375 }
+
2376 token->text_type |= has_tokens;
+
2377 }
+
2378 while (m_offset != end && m_offset->get() != s_end)
+
2379 ++m_offset;
+
2380 }
+
2381 else if (element_traits::is_group(s_el_start->code)) {
+
2382 auto limit = m_offset;
+
2383 while (limit != end && limit->get() != s_el_start->end)
+
2384 ++limit;
+
2385 auto t = parse(limit,
+
2386 (element_traits::is_heading(s_el_start->code) || s_el_start->code == element_t::dt || s_el_start->code == element_t::title ? is_title : 0) |
+
2387 (element_traits::is_list(s_el_start->code) ? is_bullet : 0));
+
2388 rel.from = s->interval.start;
+
2389 token->mapping.push_back(rel);
+
2390 rel.to += t->append_tag(token->text);
+
2391 token->text_type |= has_tokens;
+
2392 }
+
2393 }
+
2394 }
+
2395 else if (s->type == stdex::parser::html_sequence_t::element_end) {
+
2396 rel.from = s->interval.start;
+
2397 token->mapping.push_back(rel);
+
2398 rel.to += append_token(std::move(std::unique_ptr<text_token<_Elem, _Traits, _Alloc>>(
+ +
2400 token_t::ending,
+
2401 m_source + s->interval.start, s->interval.size(),
+
2402 0,
+
2403 s.get()))),
+
2404 token->text);
+
2405 token->text_type |= has_tokens;
+
2406 ++m_offset;
+
2407 }
+
2408 else {
+
2409 // Declaration, instruction, (P)CDATA section, comment...
+
2410 rel.from = s->interval.start;
+
2411 token->mapping.push_back(rel);
+
2412 rel.to += append_token(std::move(std::unique_ptr<text_token<_Elem, _Traits, _Alloc>>(
+ +
2414 token_t::complete,
+
2415 m_source + s->interval.start, s->interval.size(),
+
2416 0,
+
2417 s.get()))),
+
2418 token->text);
+
2419 token->text_type |= has_tokens;
+
2420 ++m_offset;
+
2421 }
+
2422 }
+
2423
+
2424 return append_token(std::move(token));
+
2425 }
-
2428
-
- -
2433 {
-
2434 stdex::interval<size_t> section, content;
-
2435 std::unique_ptr<text_token<_Elem, _Traits, _Alloc>> token(
- -
2437 token_t::complete,
-
2438 nullptr, 0,
-
2439 0,
-
2440 m_offset->get()));
-
2441
-
2442 for (;;) {
-
2443 if (m_css_comment.match(m_source, start, end)) {
-
2444 token->text.append(m_source + start, m_css_comment.interval.end - start);
-
2445 start = m_css_comment.interval.end;
-
2446 }
-
2447 else if (m_css_cdo.match(m_source, start, end)) {
-
2448 token->text.append(m_source + start, m_css_cdo.interval.end - start);
-
2449 start = m_css_cdo.interval.end;
-
2450 }
-
2451 else if (m_css_cdc.match(m_source, start, end)) {
-
2452 token->text.append(m_source + start, m_css_cdc.interval.end - start);
-
2453 start = m_css_cdc.interval.end;
-
2454 }
-
2455 else if (
-
2456 m_css_import.match(m_source, start, end) && (section = m_css_import.interval, content = m_css_import.content, true) ||
-
2457 m_css_uri.match(m_source, start, end) && (section = m_css_uri.interval, content = m_css_uri.content, true))
-
2458 {
-
2459 std::unique_ptr<url_token<_Elem, _Traits, _Alloc>> t_url(
- -
2461 nullptr, 0,
-
2462 token_url_t::css,
-
2463 m_offset->get()));
-
2464 css_unescape(t_url->url, m_source + content.start, content.size());
-
2465 token->text.append(m_source + start, content.start - start);
-
2466 append_token(std::move(t_url), token->text);
-
2467 token->text.append(m_source + content.end, section.end - content.end);
-
2468 token->text_type |= has_tokens;
-
2469 start = section.end;
-
2470 }
-
2471 else if (m_any_char.match(m_source, start, end)) {
-
2472 token->text.append(m_source + start, m_any_char.interval.end - start);
-
2473 start = m_any_char.interval.end;
-
2474 }
-
2475 else
-
2476 break;
-
2477 }
-
2478
-
2479 return append_token(std::move(token));
-
2480 }
+
2426
+
+ +
2431 {
+
2432 stdex::interval<size_t> section, content;
+
2433 std::unique_ptr<text_token<_Elem, _Traits, _Alloc>> token(
+ +
2435 token_t::complete,
+
2436 nullptr, 0,
+
2437 0,
+
2438 m_offset->get()));
+
2439
+
2440 for (;;) {
+
2441 if (m_css_comment.match(m_source, start, end)) {
+
2442 token->text.append(m_source + start, m_css_comment.interval.end - start);
+
2443 start = m_css_comment.interval.end;
+
2444 }
+
2445 else if (m_css_cdo.match(m_source, start, end)) {
+
2446 token->text.append(m_source + start, m_css_cdo.interval.end - start);
+
2447 start = m_css_cdo.interval.end;
+
2448 }
+
2449 else if (m_css_cdc.match(m_source, start, end)) {
+
2450 token->text.append(m_source + start, m_css_cdc.interval.end - start);
+
2451 start = m_css_cdc.interval.end;
+
2452 }
+
2453 else if (
+
2454 m_css_import.match(m_source, start, end) && (section = m_css_import.interval, content = m_css_import.content, true) ||
+
2455 m_css_uri.match(m_source, start, end) && (section = m_css_uri.interval, content = m_css_uri.content, true))
+
2456 {
+
2457 std::unique_ptr<url_token<_Elem, _Traits, _Alloc>> t_url(
+ +
2459 nullptr, 0,
+
2460 token_url_t::css,
+
2461 m_offset->get()));
+
2462 css_unescape(t_url->url, m_source + content.start, content.size());
+
2463 token->text.append(m_source + start, content.start - start);
+
2464 append_token(std::move(t_url), token->text);
+
2465 token->text.append(m_source + content.end, section.end - content.end);
+
2466 token->text_type |= has_tokens;
+
2467 start = section.end;
+
2468 }
+
2469 else if (m_any_char.match(m_source, start, end)) {
+
2470 token->text.append(m_source + start, m_any_char.interval.end - start);
+
2471 start = m_any_char.interval.end;
+
2472 }
+
2473 else
+
2474 break;
+
2475 }
+
2476
+
2477 return append_token(std::move(token));
+
2478 }
-
2481
-
2482 protected:
- -
2484 const stdex::sys_string m_url;
-
2485 const bool m_parse_frames;
- -
2487 const _Elem* m_source;
-
2488 token_vector m_tokens;
-
2489 sequence_store::const_iterator m_offset;
-
2490
-
2491 // For detecting URLs in CSS
- - - - - - - -
2499 };
+
2479
+
2480 protected:
+ +
2482 const stdex::sys_string m_url;
+
2483 const bool m_parse_frames;
+ +
2485 const _Elem* m_source;
+
2486 token_vector m_tokens;
+
2487 sequence_store::const_iterator m_offset;
+
2488
+
2489 // For detecting URLs in CSS
+ + + + + + + +
2497 };
-
2500 }
-
2501}
-
HTML comment.
Definition html.hpp:1385
-
stdex::interval< size_t > content
Comment content position in source.
Definition html.hpp:1394
-
HTML declaration.
Definition html.hpp:1367
-
stdex::interval< size_t > name
Declaration name position in source.
Definition html.hpp:1377
-
std::vector< stdex::parser::html_attribute > attributes
Declaration attribute positions in source.
Definition html.hpp:1378
-
HTML document.
Definition html.hpp:1434
-
std::vector< element_start * > m_element_stack
LIFO stack of started elements.
Definition html.hpp:1769
-
void finalize()
Finalizes document when no more appending is planned.
Definition html.hpp:1685
-
stdex::charset_id m_charset
Document charset.
Definition html.hpp:1754
-
bool m_is_rcdata
Inside of RCDATA?
Definition html.hpp:1760
-
bool m_is_special_element
Inside of a special element (<SCRIPT>, <STYLE>, ...)?
Definition html.hpp:1770
-
void append(_In_reads_or_z_opt_(num_chars) const _Elem *source, size_t num_chars=SIZE_MAX)
Parses HTML source code by chunks.
Definition html.hpp:1474
-
sequence_store m_sequences
Store of sequences.
Definition html.hpp:1768
-
size_t m_num_invalid_conditions
Number of started invalid conditions.
Definition html.hpp:1758
-
void assign(_In_reads_or_z_opt_(num_chars) const _Elem *source, size_t num_chars=SIZE_MAX)
Parses HTML document source code.
Definition html.hpp:1697
-
std::vector< std::unique_ptr< entity< _Elem, _Traits, _Alloc > > > m_entities
Array of entities.
Definition html.hpp:1764
-
std::basic_string< _Elem, _Traits, _Alloc > m_source
Document HTML source code.
Definition html.hpp:1752
-
element_start * active_element() const
Returns starting tag of currently active element or nullptr if no element is known to be started.
Definition html.hpp:1715
-
std::basic_string< _Elem, _Traits, _Alloc > replace_entities(_In_reads_or_z_opt_(num_chars) const _Elem *input, size_t num_chars) const
Replaces entities with their content.
Definition html.hpp:1723
-
void clear()
Empties document.
Definition html.hpp:1453
-
size_t m_num_valid_conditions
Number of started valid conditions.
Definition html.hpp:1757
-
const std::basic_string< _Elem, _Traits, _Alloc > & source() const
Returns document HTML source code.
Definition html.hpp:1707
-
size_t m_num_parsed
Number of characters already parsed.
Definition html.hpp:1753
-
bool m_is_cdata
Inside of CDATA?
Definition html.hpp:1759
-
Ending tag of an HTML element </...>
Definition html.hpp:1347
-
stdex::interval< size_t > name
Element name position in source.
Definition html.hpp:1359
-
element_start * start
Corresponding starting tag.
Definition html.hpp:1360
-
element_t code
Element code.
Definition html.hpp:1358
-
Starting tag of an HTML element <...>
Definition html.hpp:1331
-
sequence * end
Corresponding ending tag of type element_end; When element is ended by a start of another element,...
Definition html.hpp:1340
+
2498 }
+
2499}
+
HTML comment.
Definition html.hpp:1383
+
stdex::interval< size_t > content
Comment content position in source.
Definition html.hpp:1392
+
HTML declaration.
Definition html.hpp:1365
+
stdex::interval< size_t > name
Declaration name position in source.
Definition html.hpp:1375
+
std::vector< stdex::parser::html_attribute > attributes
Declaration attribute positions in source.
Definition html.hpp:1376
+
HTML document.
Definition html.hpp:1432
+
std::vector< element_start * > m_element_stack
LIFO stack of started elements.
Definition html.hpp:1767
+
void finalize()
Finalizes document when no more appending is planned.
Definition html.hpp:1683
+
stdex::charset_id m_charset
Document charset.
Definition html.hpp:1752
+
bool m_is_rcdata
Inside of RCDATA?
Definition html.hpp:1758
+
bool m_is_special_element
Inside of a special element (<SCRIPT>, <STYLE>, ...)?
Definition html.hpp:1768
+
void append(_In_reads_or_z_opt_(num_chars) const _Elem *source, size_t num_chars=SIZE_MAX)
Parses HTML source code by chunks.
Definition html.hpp:1472
+
sequence_store m_sequences
Store of sequences.
Definition html.hpp:1766
+
size_t m_num_invalid_conditions
Number of started invalid conditions.
Definition html.hpp:1756
+
void assign(_In_reads_or_z_opt_(num_chars) const _Elem *source, size_t num_chars=SIZE_MAX)
Parses HTML document source code.
Definition html.hpp:1695
+
std::vector< std::unique_ptr< entity< _Elem, _Traits, _Alloc > > > m_entities
Array of entities.
Definition html.hpp:1762
+
std::basic_string< _Elem, _Traits, _Alloc > m_source
Document HTML source code.
Definition html.hpp:1750
+
element_start * active_element() const
Returns starting tag of currently active element or nullptr if no element is known to be started.
Definition html.hpp:1713
+
std::basic_string< _Elem, _Traits, _Alloc > replace_entities(_In_reads_or_z_opt_(num_chars) const _Elem *input, size_t num_chars) const
Replaces entities with their content.
Definition html.hpp:1721
+
void clear()
Empties document.
Definition html.hpp:1451
+
size_t m_num_valid_conditions
Number of started valid conditions.
Definition html.hpp:1755
+
const std::basic_string< _Elem, _Traits, _Alloc > & source() const
Returns document HTML source code.
Definition html.hpp:1705
+
size_t m_num_parsed
Number of characters already parsed.
Definition html.hpp:1751
+
bool m_is_cdata
Inside of CDATA?
Definition html.hpp:1757
+
Ending tag of an HTML element </...>
Definition html.hpp:1345
+
stdex::interval< size_t > name
Element name position in source.
Definition html.hpp:1357
+
element_start * start
Corresponding starting tag.
Definition html.hpp:1358
+
element_t code
Element code.
Definition html.hpp:1356
+
Starting tag of an HTML element <...>
Definition html.hpp:1329
+
sequence * end
Corresponding ending tag of type element_end; When element is ended by a start of another element,...
Definition html.hpp:1338
HTML element <.../>
Definition html.hpp:1150
-
stdex::interval< size_t > name
Element name position in source.
Definition html.hpp:1321
-
std::vector< stdex::parser::html_attribute > attributes
Element attribute positions in source.
Definition html.hpp:1322
-
element_t code
Element code.
Definition html.hpp:1320
-
HTML instruction.
Definition html.hpp:1401
-
stdex::interval< size_t > content
Instruction content position in source.
Definition html.hpp:1410
-
HTML parser.
Definition html.hpp:1991
-
stdex::progress< size_t > * m_progress
Progress indicator.
Definition html.hpp:2486
-
text_token< _Elem, _Traits, _Alloc > * parse_css(size_t start, size_t end)
Parses CSS.
Definition html.hpp:2432
-
static void merge(token_list &a, const token_list &b)
Adds tokens from list b to list a creating an union.
Definition html.hpp:2179
-
token_list::const_iterator end_tokens(std::basic_string< _Elem, _Traits, _Alloc > &source, token_list &active_tokens, const token_list &new_tokens)
Pops ending tokens from the active token list and append their tags to the source code string.
Definition html.hpp:2112
-
static void link(std::basic_string< _Elem, _Traits, _Alloc > &source, const text_token< _Elem, _Traits, _Alloc > *t)
Rebuilds HTML source code from the token tree.
Definition html.hpp:2027
-
text_token< _Elem, _Traits, _Alloc > * parse(const sequence_store::const_iterator &end, uint32_t text_type=0)
Recursively parses HTML document.
Definition html.hpp:2257
-
const _Elem * m_source
HTML source code.
Definition html.hpp:2487
-
token_vector m_tokens
HTML token storage.
Definition html.hpp:2488
-
text_token< _Elem, _Traits, _Alloc > * parse()
Parses HTML document.
Definition html.hpp:2007
-
const document< _Elem, _Traits, _Alloc > & m_document
Document being analyzed.
Definition html.hpp:2483
-
void make_absolute_url(std::basic_string< _Elem, _Traits, _Alloc > &rel)
Converts URL to absolute.
Definition html.hpp:2198
-
size_t append_token(std::unique_ptr< T > &&token, std::basic_string< _Elem, _Traits, _Alloc > &source)
Adds token to the collection and appends its tag to the source code string.
Definition html.hpp:2240
-
const token_vector & tokens() const
Returns collection of tokens.
Definition html.hpp:2211
-
const stdex::sys_string m_url
Absolute document URL.
Definition html.hpp:2484
-
const bool m_parse_frames
Parse frames.
Definition html.hpp:2485
-
static void start_tokens(std::basic_string< _Elem, _Traits, _Alloc > &source, token_list &active_tokens, const token_list &new_tokens, token_list::const_iterator from)
Pushes tokens to the active token list and appends their tags to the source code string.
Definition html.hpp:2094
-
T * append_token(std::unique_ptr< T > &&token)
Adds token to the collection.
Definition html.hpp:2222
-
void append_inserted_tokens(std::basic_string< _Elem, _Traits, _Alloc > &source, inserted_token_list &inserted_tokens, size_t word_index, bool after_word, token_list &active_tokens)
Adds matching inserted tokens before/after the given word in source code.
Definition html.hpp:2155
-
sequence_store::const_iterator m_offset
Index of active section.
Definition html.hpp:2489
+
stdex::interval< size_t > name
Element name position in source.
Definition html.hpp:1319
+
std::vector< stdex::parser::html_attribute > attributes
Element attribute positions in source.
Definition html.hpp:1320
+
element_t code
Element code.
Definition html.hpp:1318
+
HTML instruction.
Definition html.hpp:1399
+
stdex::interval< size_t > content
Instruction content position in source.
Definition html.hpp:1408
+
HTML parser.
Definition html.hpp:1989
+
stdex::progress< size_t > * m_progress
Progress indicator.
Definition html.hpp:2484
+
text_token< _Elem, _Traits, _Alloc > * parse_css(size_t start, size_t end)
Parses CSS.
Definition html.hpp:2430
+
static void merge(token_list &a, const token_list &b)
Adds tokens from list b to list a creating an union.
Definition html.hpp:2177
+
token_list::const_iterator end_tokens(std::basic_string< _Elem, _Traits, _Alloc > &source, token_list &active_tokens, const token_list &new_tokens)
Pops ending tokens from the active token list and append their tags to the source code string.
Definition html.hpp:2110
+
static void link(std::basic_string< _Elem, _Traits, _Alloc > &source, const text_token< _Elem, _Traits, _Alloc > *t)
Rebuilds HTML source code from the token tree.
Definition html.hpp:2025
+
text_token< _Elem, _Traits, _Alloc > * parse(const sequence_store::const_iterator &end, uint32_t text_type=0)
Recursively parses HTML document.
Definition html.hpp:2255
+
const _Elem * m_source
HTML source code.
Definition html.hpp:2485
+
token_vector m_tokens
HTML token storage.
Definition html.hpp:2486
+
text_token< _Elem, _Traits, _Alloc > * parse()
Parses HTML document.
Definition html.hpp:2005
+
const document< _Elem, _Traits, _Alloc > & m_document
Document being analyzed.
Definition html.hpp:2481
+
void make_absolute_url(std::basic_string< _Elem, _Traits, _Alloc > &rel)
Converts URL to absolute.
Definition html.hpp:2196
+
size_t append_token(std::unique_ptr< T > &&token, std::basic_string< _Elem, _Traits, _Alloc > &source)
Adds token to the collection and appends its tag to the source code string.
Definition html.hpp:2238
+
const token_vector & tokens() const
Returns collection of tokens.
Definition html.hpp:2209
+
const stdex::sys_string m_url
Absolute document URL.
Definition html.hpp:2482
+
const bool m_parse_frames
Parse frames.
Definition html.hpp:2483
+
static void start_tokens(std::basic_string< _Elem, _Traits, _Alloc > &source, token_list &active_tokens, const token_list &new_tokens, token_list::const_iterator from)
Pushes tokens to the active token list and appends their tags to the source code string.
Definition html.hpp:2092
+
T * append_token(std::unique_ptr< T > &&token)
Adds token to the collection.
Definition html.hpp:2220
+
void append_inserted_tokens(std::basic_string< _Elem, _Traits, _Alloc > &source, inserted_token_list &inserted_tokens, size_t word_index, bool after_word, token_list &active_tokens)
Adds matching inserted tokens before/after the given word in source code.
Definition html.hpp:2153
+
sequence_store::const_iterator m_offset
Index of active section.
Definition html.hpp:2487
Base class for HTML sequences.
Definition html.hpp:1131
stdex::interval< size_t > interval
Sequence position in source.
Definition html.hpp:1134
stdex::parser::html_sequence_t type
Sequence type. Enum is used for performance reasons (vs. dynamic_cast)
Definition html.hpp:1133
sequence * parent
Parent sequence.
Definition html.hpp:1135
-
Token representing start HTML tag.
Definition html.hpp:1924
-
stdex::html::sequence * end_sequence
Ending tag sequence.
Definition html.hpp:1942
-
std::basic_string< _Elem, _Traits, _Alloc > name
Element name allowing later recreation of ending </tag>
Definition html.hpp:1941
-
Token representing part of HTML text.
Definition html.hpp:1899
-
stdex::mapping_vector< size_t > mapping
Mapping between source and text positions.
Definition html.hpp:1916
-
std::basic_string< _Elem, _Traits, _Alloc > text
Token text.
Definition html.hpp:1914
-
uint32_t text_type
Mask of text_type_flag_t to specify text content.
Definition html.hpp:1915
-
HTML token base class.
Definition html.hpp:1808
-
sequence * sequence
Pointer to the sequence this token represents or nullptr when it doesn't trivially represent one sequ...
Definition html.hpp:1877
-
size_t append_tag(std::basic_string< char, _Traits, _Alloc > &str) const
Appends token tag to the source code.
Definition html.hpp:1830
-
uintptr_t data
Any user-supplied data.
Definition html.hpp:1878
-
token_t type
Token type.
Definition html.hpp:1876
-
size_t append_tag(std::basic_string< wchar_t, _Traits, _Alloc > &str) const
Appends token tag to the source code.
Definition html.hpp:1846
-
HTTP token representing an URL.
Definition html.hpp:1959
-
token_url_t encoding
URL encoding.
Definition html.hpp:1974
-
std::basic_string< _Elem, _Traits, _Alloc > url
URL.
Definition html.hpp:1973
+
Token representing start HTML tag.
Definition html.hpp:1922
+
stdex::html::sequence * end_sequence
Ending tag sequence.
Definition html.hpp:1940
+
std::basic_string< _Elem, _Traits, _Alloc > name
Element name allowing later recreation of ending </tag>
Definition html.hpp:1939
+
Token representing part of HTML text.
Definition html.hpp:1897
+
stdex::mapping_vector< size_t > mapping
Mapping between source and text positions.
Definition html.hpp:1914
+
std::basic_string< _Elem, _Traits, _Alloc > text
Token text.
Definition html.hpp:1912
+
uint32_t text_type
Mask of text_type_flag_t to specify text content.
Definition html.hpp:1913
+
HTML token base class.
Definition html.hpp:1806
+
sequence * sequence
Pointer to the sequence this token represents or nullptr when it doesn't trivially represent one sequ...
Definition html.hpp:1875
+
size_t append_tag(std::basic_string< char, _Traits, _Alloc > &str) const
Appends token tag to the source code.
Definition html.hpp:1828
+
uintptr_t data
Any user-supplied data.
Definition html.hpp:1876
+
token_t type
Token type.
Definition html.hpp:1874
+
size_t append_tag(std::basic_string< wchar_t, _Traits, _Alloc > &str) const
Appends token tag to the source code.
Definition html.hpp:1844
+
HTTP token representing an URL.
Definition html.hpp:1957
+
token_url_t encoding
URL encoding.
Definition html.hpp:1972
+
std::basic_string< _Elem, _Traits, _Alloc > url
URL.
Definition html.hpp:1971
stdex::interval< size_t > content
content position in source
Definition parser.hpp:7835
stdex::interval< size_t > content
content position in source
Definition parser.hpp:7750
std::vector< html_attribute > attributes
tag attributes
Definition parser.hpp:8357
@@ -2440,14 +2438,14 @@ $(document).ready(function() { init_codefold(0); });
static bool is_phrase(element_t code)
Does element represent a phrase-of-speech?
Definition html.hpp:662
static bool may_contain(element_t parent, element_t child)
Checks if one element may nest inside another.
Definition html.hpp:950
static element_span_t span(element_t code)
Returns expected element span in HTML code.
Definition html.hpp:521
-
HTML entity.
Definition html.hpp:1418
-
stdex::interval< size_t > name
Name position in source.
Definition html.hpp:1419
-
std::basic_string< _Elem, _Traits, _Alloc > value
Entity value.
Definition html.hpp:1420
-
Inserted HTML token.
Definition html.hpp:1980
-
bool after_word
true if token is anchored after the word; false if anchored before the word
Definition html.hpp:1984
-
std::list< stdex::html::token * > active_tokens
List of started tokens at inserted token.
Definition html.hpp:1982
-
size_t word_index
Index of the word, token is anchored to.
Definition html.hpp:1983
-
token * token
Points to the token.
Definition html.hpp:1981
+
HTML entity.
Definition html.hpp:1416
+
stdex::interval< size_t > name
Name position in source.
Definition html.hpp:1417
+
std::basic_string< _Elem, _Traits, _Alloc > value
Entity value.
Definition html.hpp:1418
+
Inserted HTML token.
Definition html.hpp:1978
+
bool after_word
true if token is anchored after the word; false if anchored before the word
Definition html.hpp:1982
+
std::list< stdex::html::token * > active_tokens
List of started tokens at inserted token.
Definition html.hpp:1980
+
size_t word_index
Index of the word, token is anchored to.
Definition html.hpp:1981
+
token * token
Points to the token.
Definition html.hpp:1979
Numerical interval.
Definition interval.hpp:18
T size() const
Returns interval size.
Definition interval.hpp:47
T end
interval end
Definition interval.hpp:20
@@ -2459,7 +2457,7 @@ $(document).ready(function() { init_codefold(0); });
diff --git a/idrec_8hpp_source.html b/idrec_8hpp_source.html index 42a6c9810..d6c175fa2 100644 --- a/idrec_8hpp_source.html +++ b/idrec_8hpp_source.html @@ -471,7 +471,7 @@ $(document).ready(function() { init_codefold(0); });
diff --git a/include_2stdex_2compat_8hpp_source.html b/include_2stdex_2compat_8hpp_source.html index 40b3f6955..c0d77a1c0 100644 --- a/include_2stdex_2compat_8hpp_source.html +++ b/include_2stdex_2compat_8hpp_source.html @@ -294,7 +294,7 @@ $(document).ready(function() { init_codefold(0); });
diff --git a/index.html b/index.html index 7555d1d4e..355227f55 100644 --- a/index.html +++ b/index.html @@ -84,7 +84,7 @@ Requirements
diff --git a/interval_8hpp_source.html b/interval_8hpp_source.html index 7efa3e149..81330a111 100644 --- a/interval_8hpp_source.html +++ b/interval_8hpp_source.html @@ -231,7 +231,7 @@ $(document).ready(function() { init_codefold(0); });
diff --git a/locale_8hpp_source.html b/locale_8hpp_source.html index ff4730171..c40666aa3 100644 --- a/locale_8hpp_source.html +++ b/locale_8hpp_source.html @@ -149,7 +149,7 @@ $(document).ready(function() { init_codefold(0); });
diff --git a/mapping_8hpp_source.html b/mapping_8hpp_source.html index a7a8d133b..61de6c5f6 100644 --- a/mapping_8hpp_source.html +++ b/mapping_8hpp_source.html @@ -124,7 +124,7 @@ $(document).ready(function() { init_codefold(0); });
diff --git a/math_8cpp_source.html b/math_8cpp_source.html index a92e47bb2..bc406f301 100644 --- a/math_8cpp_source.html +++ b/math_8cpp_source.html @@ -129,7 +129,7 @@ $(document).ready(function() { init_codefold(0); });
diff --git a/math_8hpp_source.html b/math_8hpp_source.html index 0a608b603..6a0547be1 100644 --- a/math_8hpp_source.html +++ b/math_8hpp_source.html @@ -147,7 +147,7 @@ $(document).ready(function() { init_codefold(0); });
diff --git a/memory_8hpp_source.html b/memory_8hpp_source.html index a65afa5ab..978394834 100644 --- a/memory_8hpp_source.html +++ b/memory_8hpp_source.html @@ -129,7 +129,7 @@ $(document).ready(function() { init_codefold(0); });
diff --git a/parser_8cpp_source.html b/parser_8cpp_source.html index ab4d4dcf7..bdf14cc3b 100644 --- a/parser_8cpp_source.html +++ b/parser_8cpp_source.html @@ -597,7 +597,7 @@ $(document).ready(function() { init_codefold(0); });
diff --git a/parser_8hpp_source.html b/parser_8hpp_source.html index 73dae8b84..b4b04ffc2 100644 --- a/parser_8hpp_source.html +++ b/parser_8hpp_source.html @@ -5669,17 +5669,17 @@ $(document).ready(function() { init_codefold(0); });
5668 this->interval.end = start;
5669 if (m_line_break.match(text, this->interval.end, end, flags)) {
5670 this->interval.end = m_line_break.interval.end;
-
5671 if (this->interval.end < end && text[this->interval.end] && isspace(text[this->interval.end])) {
+
5671 if (this->interval.end < end && text[this->interval.end] && isspace(text[this->interval.end])) {
5672 this->interval.start = start;
5673 this->interval.end++;
-
5674 while (this->interval.end < end && text[this->interval.end] && isspace(text[this->interval.end])) this->interval.end++;
+
5674 while (this->interval.end < end && text[this->interval.end] && isspace(text[this->interval.end])) this->interval.end++;
5675 return true;
5676 }
5677 }
-
5678 else if (this->interval.end < end && text[this->interval.end] && isspace(text[this->interval.end])) {
+
5678 else if (this->interval.end < end && text[this->interval.end] && isspace(text[this->interval.end])) {
5679 this->interval.start = start;
5680 this->interval.end++;
-
5681 while (this->interval.end < end && text[this->interval.end] && isspace(text[this->interval.end])) this->interval.end++;
+
5681 while (this->interval.end < end && text[this->interval.end] && isspace(text[this->interval.end])) this->interval.end++;
5682 return true;
5683 }
5684 this->interval.invalidate();
@@ -5757,7 +5757,7 @@ $(document).ready(function() { init_codefold(0); });
5758 text[this->interval.end] == '=' ||
5759 text[this->interval.end] == '{' ||
5760 text[this->interval.end] == '}' ||
-
5761 isspace(text[this->interval.end]))
+
5761 isspace(text[this->interval.end]))
5762 break;
5763 else
5764 this->interval.end++;
@@ -6099,7 +6099,7 @@ $(document).ready(function() { init_codefold(0); });
6107 (unsigned int)text[this->interval.end] == 0x7f ||
6108 text[this->interval.end] == ':' ||
6109 text[this->interval.end] == '/' ||
-
6110 isspace(text[this->interval.end]))
+
6110 isspace(text[this->interval.end]))
6111 break;
6112 else
6113 this->interval.end++;
@@ -6190,7 +6190,7 @@ $(document).ready(function() { init_codefold(0); });
6200 (unsigned int)text[this->interval.end] == 0x7f ||
6201 text[this->interval.end] == '?' ||
6202 text[this->interval.end] == '/' ||
-
6203 isspace(text[this->interval.end]))
+
6203 isspace(text[this->interval.end]))
6204 break;
6205 else
6206 this->interval.end++;
@@ -6278,7 +6278,7 @@ $(document).ready(function() { init_codefold(0); });
6290 (unsigned int)text[this->interval.end] == 0x7f ||
6291 text[this->interval.end] == '&' ||
6292 text[this->interval.end] == '=' ||
-
6293 isspace(text[this->interval.end]))
+
6293 isspace(text[this->interval.end]))
6294 break;
6295 else
6296 this->interval.end++;
@@ -6298,7 +6298,7 @@ $(document).ready(function() { init_codefold(0); });
6310 if ((unsigned int)text[this->interval.end] < 0x20 ||
6311 (unsigned int)text[this->interval.end] == 0x7f ||
6312 text[this->interval.end] == '&' ||
-
6313 isspace(text[this->interval.end]))
+
6313 isspace(text[this->interval.end]))
6314 break;
6315 else
6316 this->interval.end++;
@@ -6392,7 +6392,7 @@ $(document).ready(function() { init_codefold(0); });
6405 if (this->interval.end < end && text[this->interval.end]) {
6406 if ((unsigned int)text[this->interval.end] < 0x20 ||
6407 (unsigned int)text[this->interval.end] == 0x7f ||
-
6408 isspace(text[this->interval.end]))
+
6408 isspace(text[this->interval.end]))
6409 break;
6410 else if (text[this->interval.end] == '&')
6411 this->interval.end++;
@@ -6625,16 +6625,16 @@ $(document).ready(function() { init_codefold(0); });
6642 return false;
6643 }
6644
-
6645 while (this->interval.end < end && text[this->interval.end] && isspace(text[this->interval.end])) this->interval.end++;
+
6645 while (this->interval.end < end && text[this->interval.end] && isspace(text[this->interval.end])) this->interval.end++;
6646 if (this->interval.end < end && text[this->interval.end] == ';') {
6647 this->interval.end++;
-
6648 while (this->interval.end < end && text[this->interval.end] && isspace(text[this->interval.end])) this->interval.end++;
+
6648 while (this->interval.end < end && text[this->interval.end] && isspace(text[this->interval.end])) this->interval.end++;
6649 if (this->interval.end < end && (text[this->interval.end] == 'q' || text[this->interval.end] == 'Q')) {
6650 this->interval.end++;
-
6651 while (this->interval.end < end && text[this->interval.end] && isspace(text[this->interval.end])) this->interval.end++;
+
6651 while (this->interval.end < end && text[this->interval.end] && isspace(text[this->interval.end])) this->interval.end++;
6652 if (this->interval.end < end && text[this->interval.end] == '=') {
6653 this->interval.end++;
-
6654 while (this->interval.end < end && text[this->interval.end] && isspace(text[this->interval.end])) this->interval.end++;
+
6654 while (this->interval.end < end && text[this->interval.end] && isspace(text[this->interval.end])) this->interval.end++;
6655 if (factor.match(text, this->interval.end, end, flags))
6656 this->interval.end = factor.interval.end;
6657 }
@@ -6823,7 +6823,7 @@ $(document).ready(function() { init_codefold(0); });
6843 version.start = this->interval.end;
6844 for (;;) {
6845 if (this->interval.end < end && text[this->interval.end]) {
-
6846 if (isspace(text[this->interval.end])) {
+
6846 if (isspace(text[this->interval.end])) {
6847 version.end = this->interval.end;
6848 break;
6849 }
@@ -6837,7 +6837,7 @@ $(document).ready(function() { init_codefold(0); });
6857 }
6858 break;
6859 }
-
6860 else if (isspace(text[this->interval.end])) {
+
6860 else if (isspace(text[this->interval.end])) {
6861 type.end = this->interval.end;
6862 break;
6863 }
@@ -6901,7 +6901,7 @@ $(document).ready(function() { init_codefold(0); });
6922 this->interval.end++;
6923 break;
6924 }
-
6925 else if (isspace(text[this->interval.end]))
+
6925 else if (isspace(text[this->interval.end]))
6926 goto error;
6927 else
6928 this->interval.end++;
@@ -6920,7 +6920,7 @@ $(document).ready(function() { init_codefold(0); });
6941 version_min.start = this->interval.end;
6942 for (;;) {
6943 if (this->interval.end < end && text[this->interval.end]) {
-
6944 if (isspace(text[this->interval.end])) {
+
6944 if (isspace(text[this->interval.end])) {
6945 version_min.end = this->interval.end;
6946 version =
6947 (uint16_t)strtoui(text + version_maj.start, version_maj.size(), nullptr, 10) * 0x100 +
@@ -6935,7 +6935,7 @@ $(document).ready(function() { init_codefold(0); });
6956 }
6957 break;
6958 }
-
6959 else if (isspace(text[this->interval.end])) {
+
6959 else if (isspace(text[this->interval.end])) {
6960 version_maj.end = this->interval.end;
6961 version_min.start = 1;
6962 version_min.end = 0;
@@ -7006,7 +7006,7 @@ $(document).ready(function() { init_codefold(0); });
7028 if (m_line_break.match(text, this->interval.end, end, flags))
7029 goto error;
7030 else if (this->interval.end < end && text[this->interval.end]) {
-
7031 if (isspace(text[this->interval.end]))
+
7031 if (isspace(text[this->interval.end]))
7032 this->interval.end++;
7033 else
7034 break;
@@ -7019,7 +7019,7 @@ $(document).ready(function() { init_codefold(0); });
7041 if (m_line_break.match(text, this->interval.end, end, flags))
7042 goto error;
7043 else if (this->interval.end < end && text[this->interval.end]) {
-
7044 if (isspace(text[this->interval.end])) {
+
7044 if (isspace(text[this->interval.end])) {
7045 verb.end = this->interval.end;
7046 this->interval.end++;
7047 break;
@@ -7035,7 +7035,7 @@ $(document).ready(function() { init_codefold(0); });
7057 if (m_line_break.match(text, this->interval.end, end, flags))
7058 goto error;
7059 else if (this->interval.end < end && text[this->interval.end]) {
-
7060 if (isspace(text[this->interval.end]))
+
7060 if (isspace(text[this->interval.end]))
7061 this->interval.end++;
7062 else
7063 break;
@@ -7055,7 +7055,7 @@ $(document).ready(function() { init_codefold(0); });
7077 goto end;
7078 }
7079 else if (this->interval.end < end && text[this->interval.end]) {
-
7080 if (isspace(text[this->interval.end]))
+
7080 if (isspace(text[this->interval.end]))
7081 this->interval.end++;
7082 else
7083 break;
@@ -7133,21 +7133,21 @@ $(document).ready(function() { init_codefold(0); });
7156 this->interval.end = start;
7157
7158 if (m_line_break.match(text, this->interval.end, end, flags) ||
-
7159 (this->interval.end < end && text[this->interval.end] && isspace(text[this->interval.end])))
+
7159 (this->interval.end < end && text[this->interval.end] && isspace(text[this->interval.end])))
7160 goto error;
7161 name.start = this->interval.end;
7162 for (;;) {
7163 if (m_line_break.match(text, this->interval.end, end, flags))
7164 goto error;
7165 else if (this->interval.end < end && text[this->interval.end]) {
-
7166 if (isspace(text[this->interval.end])) {
+
7166 if (isspace(text[this->interval.end])) {
7167 name.end = this->interval.end;
7168 this->interval.end++;
7169 for (;;) {
7170 if (m_line_break.match(text, this->interval.end, end, flags))
7171 goto error;
7172 else if (this->interval.end < end && text[this->interval.end]) {
-
7173 if (isspace(text[this->interval.end]))
+
7173 if (isspace(text[this->interval.end]))
7174 this->interval.end++;
7175 else
7176 break;
@@ -7180,13 +7180,13 @@ $(document).ready(function() { init_codefold(0); });
7203 if (m_line_break.match(text, this->interval.end, end, flags)) {
7204 this->interval.end = m_line_break.interval.end;
7205 if (!m_line_break.match(text, this->interval.end, end, flags) &&
-
7206 this->interval.end < end && text[this->interval.end] && isspace(text[this->interval.end]))
+
7206 this->interval.end < end && text[this->interval.end] && isspace(text[this->interval.end]))
7207 this->interval.end++;
7208 else
7209 break;
7210 }
7211 else if (this->interval.end < end && text[this->interval.end]) {
-
7212 if (isspace(text[this->interval.end]))
+
7212 if (isspace(text[this->interval.end]))
7213 this->interval.end++;
7214 else {
7215 if (value.start == SIZE_MAX) value.start = this->interval.end;
@@ -7238,10 +7238,10 @@ $(document).ready(function() { init_codefold(0); });
7262 _In_ int flags = match_default)
7263 {
7264 while (start < end) {
-
7265 while (start < end && text[start] && isspace(text[start])) start++;
+
7265 while (start < end && text[start] && isspace(text[start])) start++;
7266 if (start < end && text[start] == ',') {
7267 start++;
-
7268 while (start < end&& text[start] && isspace(text[start])) start++;
+
7268 while (start < end&& text[start] && isspace(text[start])) start++;
7269 }
7270 _Key el;
7271 if (el.match(text, start, end, flags)) {
@@ -8637,7 +8637,7 @@ $(document).ready(function() { init_codefold(0); });
diff --git a/pch_8hpp_source.html b/pch_8hpp_source.html index 7babf0585..ca3f0fb07 100644 --- a/pch_8hpp_source.html +++ b/pch_8hpp_source.html @@ -124,7 +124,7 @@ $(document).ready(function() { init_codefold(0); });
diff --git a/pool_8hpp_source.html b/pool_8hpp_source.html index b9376c11d..ea9b21a09 100644 --- a/pool_8hpp_source.html +++ b/pool_8hpp_source.html @@ -170,7 +170,7 @@ $(document).ready(function() { init_codefold(0); });
diff --git a/progress_8hpp_source.html b/progress_8hpp_source.html index c45d4934b..c67706170 100644 --- a/progress_8hpp_source.html +++ b/progress_8hpp_source.html @@ -331,7 +331,7 @@ $(document).ready(function() { init_codefold(0); });
diff --git a/ring_8cpp_source.html b/ring_8cpp_source.html index dec85285a..9b2ec5982 100644 --- a/ring_8cpp_source.html +++ b/ring_8cpp_source.html @@ -144,7 +144,7 @@ $(document).ready(function() { init_codefold(0); });
diff --git a/ring_8hpp_source.html b/ring_8hpp_source.html index 98e59085e..167f233e6 100644 --- a/ring_8hpp_source.html +++ b/ring_8hpp_source.html @@ -223,7 +223,7 @@ $(document).ready(function() { init_codefold(0); });
diff --git a/sgml_8cpp_source.html b/sgml_8cpp_source.html index f730282dc..f0003e926 100644 --- a/sgml_8cpp_source.html +++ b/sgml_8cpp_source.html @@ -153,7 +153,7 @@ $(document).ready(function() { init_codefold(0); }); diff --git a/sgml_8hpp_source.html b/sgml_8hpp_source.html index fc6097410..abee92612 100644 --- a/sgml_8hpp_source.html +++ b/sgml_8hpp_source.html @@ -710,7 +710,7 @@ $(document).ready(function() { init_codefold(0); }); diff --git a/sgml__unicode_8hpp_source.html b/sgml__unicode_8hpp_source.html index 739a00930..1f1dea6ba 100644 --- a/sgml__unicode_8hpp_source.html +++ b/sgml__unicode_8hpp_source.html @@ -3175,7 +3175,7 @@ $(document).ready(function() { init_codefold(0); }); diff --git a/socket_8hpp_source.html b/socket_8hpp_source.html index f277a6e20..ea46db4e1 100644 --- a/socket_8hpp_source.html +++ b/socket_8hpp_source.html @@ -113,7 +113,7 @@ $(document).ready(function() { init_codefold(0); }); diff --git a/spinlock_8hpp_source.html b/spinlock_8hpp_source.html index 788471e30..b51702c51 100644 --- a/spinlock_8hpp_source.html +++ b/spinlock_8hpp_source.html @@ -157,7 +157,7 @@ $(document).ready(function() { init_codefold(0); }); diff --git a/stream_8cpp_source.html b/stream_8cpp_source.html index 924298b69..1766fb217 100644 --- a/stream_8cpp_source.html +++ b/stream_8cpp_source.html @@ -257,7 +257,7 @@ $(document).ready(function() { init_codefold(0); }); diff --git a/stream_8hpp_source.html b/stream_8hpp_source.html index 88d141b37..8a7fdbf5d 100644 --- a/stream_8hpp_source.html +++ b/stream_8hpp_source.html @@ -4225,7 +4225,7 @@ $(document).ready(function() { init_codefold(0); }); diff --git a/string_8hpp_source.html b/string_8hpp_source.html index 25613e32a..ab3f39e5a 100644 --- a/string_8hpp_source.html +++ b/string_8hpp_source.html @@ -155,1030 +155,1316 @@ $(document).ready(function() { init_codefold(0); });
104 }
105
111 template <class T>
-
112 inline size_t islbreak(_In_ T chr)
+
112 inline bool islbreak(_In_ T chr)
113 {
114 return chr == '\n' || chr == '\r';
115 }
116
-
123 template <class T>
-
124 inline size_t islbreak(_In_reads_or_z_opt_(count) const T* chr, _In_ size_t count)
-
125 {
-
126 _Assume_(chr || !count);
-
127 if (count >= 2 && ((chr[0] == '\r' && chr[1] == '\n') || (chr[0] == '\n' && chr[1] == '\r')))
-
128 return 2;
-
129 if (count > 1 && (chr[0] == '\n' || chr[0] == '\r'))
-
130 return 1;
-
131 return 0;
-
132 }
-
133
-
140 inline size_t glyphlen(_In_reads_or_z_opt_(count) const wchar_t* glyph, _In_ size_t count)
-
141 {
-
142 _Assume_(glyph || !count);
-
143 if (count) {
-
144#ifdef _WIN32
-
145 size_t i = count < 2 || !is_surrogate_pair(glyph) ? 1 : 2;
-
146#else
-
147 size_t i = 1;
-
148#endif
-
149 for (; i < count && iscombining(glyph[i]); ++i);
-
150 return i;
-
151 }
-
152 return 0;
-
153 }
-
154
-
162 template <class T>
-
163 inline size_t strlen(_In_z_ const T* str)
-
164 {
-
165 _Assume_(str);
-
166 size_t i;
-
167 for (i = 0; str[i]; ++i);
-
168 return i;
-
169 }
-
170
-
179 template <class T>
-
180 inline size_t strnlen(_In_reads_or_z_opt_(count) const T* str, _In_ size_t count)
-
181 {
-
182 _Assume_(str || !count);
-
183 size_t i;
-
184 for (i = 0; i < count && str[i]; ++i);
-
185 return i;
-
186 }
-
187
-
188 constexpr auto npos{ static_cast<size_t>(-1) };
-
189
-
198 template <class T>
-
199 inline size_t strchr(_In_z_ const T* str, _In_ T chr)
-
200 {
-
201 _Assume_(str);
-
202 for (size_t i = 0; str[i]; ++i)
-
203 if (str[i] == chr) return i;
-
204 return npos;
-
205 }
-
206
-
216 template <class T>
-
217 inline size_t strnchr(
-
218 _In_reads_or_z_opt_(count) const T* str,
-
219 _In_ size_t count,
-
220 _In_ T chr)
-
221 {
-
222 _Assume_(str || !count);
-
223 for (size_t i = 0; i < count && str[i]; ++i)
-
224 if (str[i] == chr) return i;
-
225 return npos;
-
226 }
-
227
-
237 template <class T>
-
238 inline size_t strrnchr(
-
239 _In_reads_or_z_opt_(count) const T* str,
-
240 _In_ size_t count,
-
241 _In_ T chr)
-
242 {
-
243 _Assume_(str || !count);
-
244 size_t z = npos;
-
245 for (size_t i = 0; i < count && str[i]; ++i)
-
246 if (str[i] == chr) z = i;
-
247 return z;
-
248 }
-
249
-
253 const inline std::locale std_locale_C("C");
-
254
-
263 template <class T>
-
264 inline bool isblank(
-
265 _In_reads_or_z_opt_(count) const T* str,
-
266 _In_ size_t count,
-
267 _In_ const std::locale& locale)
-
268 {
-
269 _Assume_(str || !count);
-
270 const auto& ctype = std::use_facet<std::ctype<T>>(locale);
-
271 for (size_t i = 0; i < count && str[i]; ++i)
-
272 if (!ctype.is(ctype.space, str[i]))
-
273 return false;
-
274 return true;
-
275 }
-
276
-
286 template <class T>
-
287 inline size_t strnichr(
-
288 _In_reads_or_z_opt_(count) const T* str,
-
289 _In_ size_t count,
-
290 _In_ T chr,
-
291 _In_ const std::locale& locale)
-
292 {
-
293 _Assume_(str || !count);
-
294 const auto& ctype = std::use_facet<std::ctype<T>>(locale);
-
295 chr = ctype.tolower(chr);
-
296 for (size_t i = 0; i < count && str[i]; ++i)
-
297 if (ctype.tolower(str[i]) == chr) return i;
-
298 return npos;
-
299 }
-
300
-
310 template <class T>
-
311 inline size_t strrnichr(
-
312 _In_reads_or_z_opt_(count) const T* str,
-
313 _In_ size_t count,
-
314 _In_ T chr,
-
315 _In_ const std::locale& locale)
-
316 {
-
317 _Assume_(str || !count);
-
318 const auto& ctype = std::use_facet<std::ctype<T>>(locale);
-
319 chr = ctype.tolower(chr);
-
320 size_t z = npos;
-
321 for (size_t i = 0; i < count && str[i]; ++i)
-
322 if (ctype.tolower(str[i]) == chr) z = i;
-
323 return z;
-
324 }
-
325
-
334 template <class T1, class T2>
-
335 inline int strcmp(const T1* str1, const T2* str2)
-
336 {
-
337 _Assume_(str1 && str2);
-
338 T1 a; T2 b;
-
339 for (size_t i = 0; (a = str1[i]) | (b = str2[i]); ++i) {
-
340 if (a > b) return +1;
-
341 if (a < b) return -1;
-
342 }
-
343 return 0;
-
344 }
-
345
-
356 template <class T1, class T2>
-
357 inline int strncmp(
-
358 _In_reads_or_z_opt_(count1) const T1* str1, _In_ size_t count1,
-
359 _In_reads_or_z_opt_(count2) const T2* str2, _In_ size_t count2)
-
360 {
-
361 _Assume_(str1 || !count1);
-
362 _Assume_(str2 || !count2);
-
363 size_t i; T1 a; T2 b;
-
364 for (i = 0; i < count1 && i < count2 && ((a = str1[i]) | (b = str2[i])); ++i) {
-
365 if (a > b) return +1;
-
366 if (a < b) return -1;
-
367 }
-
368 if (i < count1 && str1[i]) return +1;
-
369 if (i < count2 && str2[i]) return -1;
-
370 return 0;
-
371 }
-
372
-
382 template <class T1, class T2>
-
383 inline int strncmp(_In_reads_or_z_opt_(count) const T1* str1, _In_reads_or_z_opt_(count) const T2* str2, _In_ size_t count)
-
384 {
-
385 _Assume_((str1 && str2) || !count);
-
386 size_t i; T1 a; T2 b;
-
387 for (i = 0; i < count && ((a = str1[i]) | (b = str2[i])); ++i) {
-
388 if (a > b) return +1;
-
389 if (a < b) return -1;
-
390 }
-
391 if (i < count && str1[i]) return +1;
-
392 if (i < count && str2[i]) return -1;
-
393 return 0;
-
394 }
-
395
-
406 template <class T>
-
407 inline int strncoll(
-
408 _In_reads_or_z_opt_(count1) const T* str1, _In_ size_t count1,
-
409 _In_reads_or_z_opt_(count2) const T* str2, _In_ size_t count2,
-
410 _In_ const std::locale& locale)
-
411 {
-
412 _Assume_(str1 || !count1);
-
413 _Assume_(str2 || !count2);
-
414 auto& collate = std::use_facet<std::collate<T>>(locale);
-
415 return collate.compare(str1, str1 + count1, str2, str2 + count2);
-
416 }
-
417
-
426 template <class T1, class T2>
-
427 inline int stricmp(_In_z_ const T1* str1, _In_z_ const T2* str2, _In_ const std::locale& locale)
-
428 {
-
429 _Assume_(str1);
-
430 _Assume_(str2);
-
431 size_t i; T1 a; T2 b;
-
432 const auto& ctype1 = std::use_facet<std::ctype<T1>>(locale);
-
433 const auto& ctype2 = std::use_facet<std::ctype<T2>>(locale);
-
434 for (i = 0; (a = ctype1.tolower(str1[i])) | (b = ctype2.tolower(str2[i])); i++) {
-
435 if (a > b) return +1;
-
436 if (a < b) return -1;
-
437 }
-
438 if (str1[i]) return +1;
-
439 if (str2[i]) return -1;
-
440 return 0;
-
441 }
-
442
-
452 template <class T1, class T2>
-
453 inline int strnicmp(_In_reads_or_z_opt_(count) const T1* str1, _In_reads_or_z_opt_(count) const T2* str2, _In_ size_t count, _In_ const std::locale& locale)
-
454 {
-
455 _Assume_(str1 || !count);
-
456 _Assume_(str2 || !count);
-
457 size_t i; T1 a; T2 b;
-
458 const auto& ctype1 = std::use_facet<std::ctype<T1>>(locale);
-
459 const auto& ctype2 = std::use_facet<std::ctype<T2>>(locale);
-
460 for (i = 0; i < count && ((a = ctype1.tolower(str1[i])) | (b = ctype2.tolower(str2[i]))); i++) {
-
461 if (a > b) return +1;
-
462 if (a < b) return -1;
-
463 }
-
464 if (i < count && str1[i]) return +1;
-
465 if (i < count && str2[i]) return -1;
-
466 return 0;
-
467 }
-
468
-
479 template <class T1, class T2>
-
480 inline int strnicmp(
-
481 _In_reads_or_z_opt_(count1) const T1* str1, _In_ size_t count1,
-
482 _In_reads_or_z_opt_(count2) const T2* str2, _In_ size_t count2,
-
483 _In_ const std::locale& locale)
-
484 {
-
485 _Assume_(str1 || !count1);
-
486 _Assume_(str2 || !count2);
-
487 size_t i; T1 a; T2 b;
-
488 const auto& ctype1 = std::use_facet<std::ctype<T1>>(locale);
-
489 const auto& ctype2 = std::use_facet<std::ctype<T2>>(locale);
-
490 for (i = 0; i < count1 && i < count2 && ((a = ctype1.tolower(str1[i])) | (b = ctype2.tolower(str2[i]))); i++) {
-
491 if (a > b) return +1;
-
492 if (a < b) return -1;
-
493 }
-
494 if (i < count1 && str1[i]) return +1;
-
495 if (i < count2 && str2[i]) return -1;
-
496 return 0;
-
497 }
-
498
-
507 template <class T1, class T2>
-
508 inline size_t strstr(
-
509 _In_z_ const T1* str,
-
510 _In_z_ const T2* sample)
-
511 {
-
512 _Assume_(str);
-
513 _Assume_(sample);
-
514 for (size_t offset = 0;; ++offset) {
-
515 for (size_t i = offset, j = 0;; ++i, ++j) {
-
516 if (!sample[j])
-
517 return offset;
-
518 if (!str[i])
-
519 return npos;
-
520 if (str[i] != sample[j])
-
521 break;
-
522 }
-
523 }
-
524 }
-
525
-
535 template <class T1, class T2>
-
536 inline size_t strnstr(
-
537 _In_reads_or_z_opt_(count) const T1* str,
-
538 _In_ size_t count,
-
539 _In_z_ const T2* sample)
-
540 {
-
541 _Assume_(str || !count);
-
542 _Assume_(sample);
-
543 for (size_t offset = 0;; ++offset) {
-
544 for (size_t i = offset, j = 0;; ++i, ++j) {
-
545 if (!sample[j])
-
546 return offset;
-
547 if (i >= count || !str[i])
-
548 return npos;
-
549 if (str[i] != sample[j])
-
550 break;
-
551 }
-
552 }
-
553 }
-
554
-
563 template <class T1, class T2>
-
564 inline size_t stristr(
-
565 _In_z_ const T1* str,
-
566 _In_z_ const T2* sample,
-
567 _In_ const std::locale& locale)
-
568 {
-
569 _Assume_(str);
-
570 _Assume_(sample);
-
571 const auto& ctype1 = std::use_facet<std::ctype<T1>>(locale);
-
572 const auto& ctype2 = std::use_facet<std::ctype<T2>>(locale);
-
573 for (size_t offset = 0;; ++offset) {
-
574 for (size_t i = offset, j = 0;; ++i, ++j) {
-
575 if (!sample[j])
-
576 return offset;
-
577 if (!str[i])
-
578 return npos;
-
579 if (ctype1.tolower(str[i]) != ctype2.tolower(sample[j]))
-
580 break;
-
581 }
-
582 }
-
583 }
-
584
-
594 template <class T1, class T2>
-
595 inline size_t strnistr(
-
596 _In_reads_or_z_opt_(count) const T1* str,
-
597 _In_ size_t count,
-
598 _In_z_ const T2* sample,
-
599 _In_ const std::locale& locale)
-
600 {
-
601 _Assume_(str || !count);
-
602 _Assume_(sample);
-
603 const auto& ctype1 = std::use_facet<std::ctype<T1>>(locale);
-
604 const auto& ctype2 = std::use_facet<std::ctype<T2>>(locale);
-
605 for (size_t offset = 0;; ++offset) {
-
606 for (size_t i = offset, j = 0;; ++i, ++j) {
-
607 if (!sample[j])
-
608 return offset;
-
609 if (i >= count || !str[i])
-
610 return npos;
-
611 if (ctype1.tolower(str[i]) != ctype2.tolower(sample[j]))
-
612 break;
-
613 }
-
614 }
-
615 }
-
616
-
625 template <class T1, class T2>
-
626 inline size_t strcpy(
-
627 _Out_writes_z_(_String_length_(src) + 1) T1* dst,
-
628 _In_z_ const T2* src)
-
629 {
-
630 _Assume_(dst && src);
-
631 for (size_t i = 0; ; ++i) {
-
632 if ((dst[i] = src[i]) == 0)
-
633 return i;
-
634 }
-
635 }
-
636
-
646 template <class T1, class T2>
-
647 inline size_t strncpy(
-
648 _Out_writes_(count) _Post_maybez_ T1* dst,
-
649 _In_reads_or_z_opt_(count) const T2* src, _In_ size_t count)
-
650 {
-
651 _Assume_(dst && src || !count);
-
652 for (size_t i = 0; ; ++i) {
-
653 if (i >= count)
-
654 return i;
-
655 if ((dst[i] = src[i]) == 0)
-
656 return i;
-
657 }
-
658 }
-
659
-
670 template <class T1, class T2>
-
671 inline size_t strncpy(
-
672 _Out_writes_(count_dst) _Post_maybez_ T1* dst, _In_ size_t count_dst,
-
673 _In_reads_or_z_opt_(count_src) const T2* src, _In_ size_t count_src)
-
674 {
-
675 _Assume_(dst || !count_dst);
-
676 _Assume_(src || !count_src);
-
677 for (size_t i = 0; ; ++i)
-
678 {
-
679 if (i >= count_dst)
-
680 return i;
-
681 if (i >= count_src) {
-
682 dst[i] = 0;
-
683 return i;
-
684 }
-
685 if ((dst[i] = src[i]) == 0)
-
686 return i;
-
687 }
-
688 }
-
689
-
698 template <class T1, class T2>
-
699 inline size_t strcat(
-
700 _In_z_ _Out_writes_z_(_String_length_(dst) + _String_length_(src) + 1) T1* dst,
-
701 _In_z_ const T2* src)
-
702 {
-
703 _Assume_(dst && src);
-
704 for (size_t i = 0, j = stdex::strlen<T1>(dst); ; ++i, ++j) {
-
705 if ((dst[j] = src[i]) == 0)
-
706 return j;
-
707 }
-
708 }
-
709
-
719 template <class T1, class T2>
-
720 inline size_t strncat(
-
721 _Inout_z_ T1* dst,
-
722 _In_reads_or_z_opt_(count) const T2* src, _In_ size_t count)
-
723 {
-
724 _Assume_(dst && src || !count);
-
725 for (size_t i = 0, j = stdex::strlen<T1>(dst); ; ++i, ++j) {
-
726 if (i >= count)
-
727 return j;
-
728 if ((dst[j] = src[i]) == 0)
-
729 return j;
-
730 }
-
731 }
-
732
-
743 template <class T1, class T2>
-
744 inline size_t strncat(
-
745 _Out_writes_(count_dst) _Post_maybez_ T1* dst, _In_ size_t count_dst,
-
746 _In_reads_or_z_opt_(count_src) const T2* src, _In_ size_t count_src)
-
747 {
-
748 _Assume_(dst || !count_dst);
-
749 _Assume_(src || !count_src);
-
750 for (size_t i = 0, j = stdex::strnlen<T1>(dst, count_dst); ; ++i, ++j)
-
751 {
-
752 if (j >= count_dst)
-
753 return j;
-
754 if (i >= count_src) {
-
755 dst[j] = 0;
-
756 return j;
-
757 }
-
758 if ((dst[j] = src[i]) == 0)
-
759 return j;
-
760 }
-
761 }
-
762
-
773 template <class T>
-
774 inline _Check_return_ _Ret_maybenull_z_ T* strdup(_In_opt_z_ const T* str)
-
775 {
-
776 if (!str) _Unlikely_
-
777 return nullptr;
-
778 size_t count = strlen(str) + 1;
-
779 T* dst = new T[count];
-
780 strncpy(dst, count, str, SIZE_MAX);
-
781 return dst;
-
782 }
-
783
-
795 template <class T>
-
796 inline _Ret_z_ T* strndup(
-
797 _In_reads_or_z_opt_(count) const T* str,
-
798 _In_ size_t count)
-
799 {
-
800 T* dst = new T[count];
-
801 strncpy(dst, count, str, SIZE_MAX);
-
802 return dst;
-
803 }
-
804
-
814 template <class T>
-
815 inline size_t crlf2nl(_Out_writes_z_(strlen(src)) T* dst, _In_z_ const T* src)
-
816 {
-
817 _Assume_(dst);
-
818 _Assume_(src);
-
819 size_t i, j;
-
820 for (i = j = 0; src[j];) {
-
821 if (src[j] != '\r' || src[j + 1] != '\n')
-
822 dst[i++] = src[j++];
-
823 else {
-
824 dst[i++] = '\n';
-
825 j += 2;
-
826 }
-
827 }
-
828 dst[i] = 0;
-
829 return i;
-
830 }
-
831
-
838 template<class _Elem, class _Traits = std::char_traits<_Elem>, class _Ax = std::allocator<_Elem>>
-
839 inline void crlf2nl(_Inout_ std::basic_string<_Elem, _Traits, _Ax> &dst, _In_z_ const _Elem* src)
+
125 template <class T>
+
126 inline size_t islbreak(_In_reads_or_z_opt_(count) const T* chr, _In_ size_t count)
+
127 {
+
128 _Assume_(chr || !count);
+
129 if (count >= 2 && ((chr[0] == '\r' && chr[1] == '\n') || (chr[0] == '\n' && chr[1] == '\r')))
+
130 return 2;
+
131 if (count > 1 && (chr[0] == '\n' || chr[0] == '\r'))
+
132 return 1;
+
133 return 0;
+
134 }
+
135
+
141 template <class T>
+
142 inline bool isspace(_In_ T chr)
+
143 {
+
144 return chr == ' ' || chr == '\t' || chr == '\n' || chr == '\r' || chr == '\v' || chr == '\f';
+
145 }
+
146
+
152 template <class T>
+
153 inline bool islower(_In_ T chr)
+
154 {
+
155 return 'a' <= chr && chr <= 'z';
+
156 }
+
157
+
163 template <class T>
+
164 inline bool isupper(_In_ T chr)
+
165 {
+
166 return 'A' <= chr && chr <= 'Z';
+
167 }
+
168
+
174 template <class T>
+
175 inline bool isdigit(_In_ T chr)
+
176 {
+
177 return '0' <= chr && chr <= '9';
+
178 }
+
179
+
186 inline size_t glyphlen(_In_reads_or_z_opt_(count) const wchar_t* glyph, _In_ size_t count)
+
187 {
+
188 _Assume_(glyph || !count);
+
189 if (count) {
+
190#ifdef _WIN32
+
191 size_t i = count < 2 || !is_surrogate_pair(glyph) ? 1 : 2;
+
192#else
+
193 size_t i = 1;
+
194#endif
+
195 for (; i < count && iscombining(glyph[i]); ++i);
+
196 return i;
+
197 }
+
198 return 0;
+
199 }
+
200
+
208 template <class T>
+
209 inline T tolower(_In_ T chr)
+
210 {
+
211 return isupper(chr) ? chr | 0x20 : chr;
+
212 }
+
213
+
221 template <class T>
+
222 inline T toupper(_In_ T chr)
+
223 {
+
224 return islower(chr) ? chr | ~0x20 : chr;
+
225 }
+
226
+
234 template <class T>
+
235 inline size_t strlen(_In_z_ const T* str)
+
236 {
+
237 _Assume_(str);
+
238 size_t i;
+
239 for (i = 0; str[i]; ++i);
+
240 return i;
+
241 }
+
242
+
251 template <class T>
+
252 inline size_t strnlen(_In_reads_or_z_opt_(count) const T* str, _In_ size_t count)
+
253 {
+
254 _Assume_(str || !count);
+
255 size_t i;
+
256 for (i = 0; i < count && str[i]; ++i);
+
257 return i;
+
258 }
+
259
+
260 constexpr auto npos{ static_cast<size_t>(-1) };
+
261
+
270 template <class T>
+
271 inline size_t strchr(_In_z_ const T* str, _In_ T chr)
+
272 {
+
273 _Assume_(str);
+
274 for (size_t i = 0; str[i]; ++i)
+
275 if (str[i] == chr) return i;
+
276 return npos;
+
277 }
+
278
+
288 template <class T>
+
289 inline size_t strnchr(
+
290 _In_reads_or_z_opt_(count) const T* str,
+
291 _In_ size_t count,
+
292 _In_ T chr)
+
293 {
+
294 _Assume_(str || !count);
+
295 for (size_t i = 0; i < count && str[i]; ++i)
+
296 if (str[i] == chr) return i;
+
297 return npos;
+
298 }
+
299
+
309 template <class T>
+
310 inline size_t strrnchr(
+
311 _In_reads_or_z_opt_(count) const T* str,
+
312 _In_ size_t count,
+
313 _In_ T chr)
+
314 {
+
315 _Assume_(str || !count);
+
316 size_t z = npos;
+
317 for (size_t i = 0; i < count && str[i]; ++i)
+
318 if (str[i] == chr) z = i;
+
319 return z;
+
320 }
+
321
+
330 template <class T>
+
331 inline bool isblank(
+
332 _In_reads_or_z_opt_(count) const T* str,
+
333 _In_ size_t count)
+
334 {
+
335 _Assume_(str || !count);
+
336 for (size_t i = 0; i < count && str[i]; ++i)
+
337 if (!isspace(str[i]))
+
338 return false;
+
339 return true;
+
340 }
+
341
+
351 template <class T>
+
352 inline bool isblank(
+
353 _In_reads_or_z_opt_(count) const T* str,
+
354 _In_ size_t count,
+
355 _In_ const std::locale& locale)
+
356 {
+
357 _Assume_(str || !count);
+
358 const auto& ctype = std::use_facet<std::ctype<T>>(locale);
+
359 for (size_t i = 0; i < count && str[i]; ++i)
+
360 if (!ctype.is(ctype.space, str[i]))
+
361 return false;
+
362 return true;
+
363 }
+
364
+
374 template <class T>
+
375 inline size_t strnichr(
+
376 _In_reads_or_z_opt_(count) const T* str,
+
377 _In_ size_t count,
+
378 _In_ T chr)
+
379 {
+
380 _Assume_(str || !count);
+
381 chr = tolower(chr);
+
382 for (size_t i = 0; i < count && str[i]; ++i)
+
383 if (tolower(str[i]) == chr) return i;
+
384 return npos;
+
385 }
+
386
+
397 template <class T>
+
398 inline size_t strnichr(
+
399 _In_reads_or_z_opt_(count) const T* str,
+
400 _In_ size_t count,
+
401 _In_ T chr,
+
402 _In_ const std::locale& locale)
+
403 {
+
404 _Assume_(str || !count);
+
405 const auto& ctype = std::use_facet<std::ctype<T>>(locale);
+
406 chr = ctype.tolower(chr);
+
407 for (size_t i = 0; i < count && str[i]; ++i)
+
408 if (ctype.tolower(str[i]) == chr) return i;
+
409 return npos;
+
410 }
+
411
+
421 template <class T>
+
422 inline size_t strrnichr(
+
423 _In_reads_or_z_opt_(count) const T* str,
+
424 _In_ size_t count,
+
425 _In_ T chr)
+
426 {
+
427 _Assume_(str || !count);
+
428 chr = tolower(chr);
+
429 size_t z = npos;
+
430 for (size_t i = 0; i < count && str[i]; ++i)
+
431 if (tolower(str[i]) == chr) z = i;
+
432 return z;
+
433 }
+
434
+
445 template <class T>
+
446 inline size_t strrnichr(
+
447 _In_reads_or_z_opt_(count) const T* str,
+
448 _In_ size_t count,
+
449 _In_ T chr,
+
450 _In_ const std::locale& locale)
+
451 {
+
452 _Assume_(str || !count);
+
453 const auto& ctype = std::use_facet<std::ctype<T>>(locale);
+
454 chr = ctype.tolower(chr);
+
455 size_t z = npos;
+
456 for (size_t i = 0; i < count && str[i]; ++i)
+
457 if (ctype.tolower(str[i]) == chr) z = i;
+
458 return z;
+
459 }
+
460
+
469 template <class T1, class T2>
+
470 inline int strcmp(const T1* str1, const T2* str2)
+
471 {
+
472 _Assume_(str1 && str2);
+
473 T1 a; T2 b;
+
474 for (size_t i = 0; (a = str1[i]) | (b = str2[i]); ++i) {
+
475 if (a > b) return +1;
+
476 if (a < b) return -1;
+
477 }
+
478 return 0;
+
479 }
+
480
+
491 template <class T1, class T2>
+
492 inline int strncmp(
+
493 _In_reads_or_z_opt_(count1) const T1* str1, _In_ size_t count1,
+
494 _In_reads_or_z_opt_(count2) const T2* str2, _In_ size_t count2)
+
495 {
+
496 _Assume_(str1 || !count1);
+
497 _Assume_(str2 || !count2);
+
498 size_t i; T1 a; T2 b;
+
499 for (i = 0; i < count1 && i < count2 && ((a = str1[i]) | (b = str2[i])); ++i) {
+
500 if (a > b) return +1;
+
501 if (a < b) return -1;
+
502 }
+
503 if (i < count1 && str1[i]) return +1;
+
504 if (i < count2 && str2[i]) return -1;
+
505 return 0;
+
506 }
+
507
+
517 template <class T1, class T2>
+
518 inline int strncmp(_In_reads_or_z_opt_(count) const T1* str1, _In_reads_or_z_opt_(count) const T2* str2, _In_ size_t count)
+
519 {
+
520 _Assume_((str1 && str2) || !count);
+
521 size_t i; T1 a; T2 b;
+
522 for (i = 0; i < count && ((a = str1[i]) | (b = str2[i])); ++i) {
+
523 if (a > b) return +1;
+
524 if (a < b) return -1;
+
525 }
+
526 if (i < count && str1[i]) return +1;
+
527 if (i < count && str2[i]) return -1;
+
528 return 0;
+
529 }
+
530
+
542 template <class T>
+
543 inline int strncoll(
+
544 _In_reads_or_z_opt_(count1) const T* str1, _In_ size_t count1,
+
545 _In_reads_or_z_opt_(count2) const T* str2, _In_ size_t count2,
+
546 _In_ const std::locale& locale)
+
547 {
+
548 _Assume_(str1 || !count1);
+
549 _Assume_(str2 || !count2);
+
550 auto& collate = std::use_facet<std::collate<T>>(locale);
+
551 return collate.compare(str1, str1 + count1, str2, str2 + count2);
+
552 }
+
553
+
562 template <class T1, class T2>
+
563 inline int stricmp(_In_z_ const T1* str1, _In_z_ const T2* str2)
+
564 {
+
565 _Assume_(str1);
+
566 _Assume_(str2);
+
567 size_t i; T1 a; T2 b;
+
568 for (i = 0; (a = tolower(str1[i])) | (b = tolower(str2[i])); i++) {
+
569 if (a > b) return +1;
+
570 if (a < b) return -1;
+
571 }
+
572 if (str1[i]) return +1;
+
573 if (str2[i]) return -1;
+
574 return 0;
+
575 }
+
576
+
586 template <class T1, class T2>
+
587 inline int stricmp(_In_z_ const T1* str1, _In_z_ const T2* str2, _In_ const std::locale& locale)
+
588 {
+
589 _Assume_(str1);
+
590 _Assume_(str2);
+
591 size_t i; T1 a; T2 b;
+
592 const auto& ctype1 = std::use_facet<std::ctype<T1>>(locale);
+
593 const auto& ctype2 = std::use_facet<std::ctype<T2>>(locale);
+
594 for (i = 0; (a = ctype1.tolower(str1[i])) | (b = ctype2.tolower(str2[i])); i++) {
+
595 if (a > b) return +1;
+
596 if (a < b) return -1;
+
597 }
+
598 if (str1[i]) return +1;
+
599 if (str2[i]) return -1;
+
600 return 0;
+
601 }
+
602
+
612 template <class T1, class T2>
+
613 inline int strnicmp(_In_reads_or_z_opt_(count) const T1* str1, _In_reads_or_z_opt_(count) const T2* str2, _In_ size_t count)
+
614 {
+
615 _Assume_(str1 || !count);
+
616 _Assume_(str2 || !count);
+
617 size_t i; T1 a; T2 b;
+
618 for (i = 0; i < count && ((a = tolower(str1[i])) | (b = tolower(str2[i]))); i++) {
+
619 if (a > b) return +1;
+
620 if (a < b) return -1;
+
621 }
+
622 if (i < count && str1[i]) return +1;
+
623 if (i < count && str2[i]) return -1;
+
624 return 0;
+
625 }
+
626
+
637 template <class T1, class T2>
+
638 inline int strnicmp(_In_reads_or_z_opt_(count) const T1* str1, _In_reads_or_z_opt_(count) const T2* str2, _In_ size_t count, _In_ const std::locale& locale)
+
639 {
+
640 _Assume_(str1 || !count);
+
641 _Assume_(str2 || !count);
+
642 size_t i; T1 a; T2 b;
+
643 const auto& ctype1 = std::use_facet<std::ctype<T1>>(locale);
+
644 const auto& ctype2 = std::use_facet<std::ctype<T2>>(locale);
+
645 for (i = 0; i < count && ((a = ctype1.tolower(str1[i])) | (b = ctype2.tolower(str2[i]))); i++) {
+
646 if (a > b) return +1;
+
647 if (a < b) return -1;
+
648 }
+
649 if (i < count && str1[i]) return +1;
+
650 if (i < count && str2[i]) return -1;
+
651 return 0;
+
652 }
+
653
+
664 template <class T1, class T2>
+
665 inline int strnicmp(
+
666 _In_reads_or_z_opt_(count1) const T1* str1, _In_ size_t count1,
+
667 _In_reads_or_z_opt_(count2) const T2* str2, _In_ size_t count2)
+
668 {
+
669 _Assume_(str1 || !count1);
+
670 _Assume_(str2 || !count2);
+
671 size_t i; T1 a; T2 b;
+
672 for (i = 0; i < count1 && i < count2 && ((a = tolower(str1[i])) | (b = tolower(str2[i]))); i++) {
+
673 if (a > b) return +1;
+
674 if (a < b) return -1;
+
675 }
+
676 if (i < count1 && str1[i]) return +1;
+
677 if (i < count2 && str2[i]) return -1;
+
678 return 0;
+
679 }
+
680
+
692 template <class T1, class T2>
+
693 inline int strnicmp(
+
694 _In_reads_or_z_opt_(count1) const T1* str1, _In_ size_t count1,
+
695 _In_reads_or_z_opt_(count2) const T2* str2, _In_ size_t count2,
+
696 _In_ const std::locale& locale)
+
697 {
+
698 _Assume_(str1 || !count1);
+
699 _Assume_(str2 || !count2);
+
700 size_t i; T1 a; T2 b;
+
701 const auto& ctype1 = std::use_facet<std::ctype<T1>>(locale);
+
702 const auto& ctype2 = std::use_facet<std::ctype<T2>>(locale);
+
703 for (i = 0; i < count1 && i < count2 && ((a = ctype1.tolower(str1[i])) | (b = ctype2.tolower(str2[i]))); i++) {
+
704 if (a > b) return +1;
+
705 if (a < b) return -1;
+
706 }
+
707 if (i < count1 && str1[i]) return +1;
+
708 if (i < count2 && str2[i]) return -1;
+
709 return 0;
+
710 }
+
711
+
720 template <class T1, class T2>
+
721 inline size_t strstr(
+
722 _In_z_ const T1* str,
+
723 _In_z_ const T2* sample)
+
724 {
+
725 _Assume_(str);
+
726 _Assume_(sample);
+
727 for (size_t offset = 0;; ++offset) {
+
728 for (size_t i = offset, j = 0;; ++i, ++j) {
+
729 if (!sample[j])
+
730 return offset;
+
731 if (!str[i])
+
732 return npos;
+
733 if (str[i] != sample[j])
+
734 break;
+
735 }
+
736 }
+
737 }
+
738
+
748 template <class T1, class T2>
+
749 inline size_t strnstr(
+
750 _In_reads_or_z_opt_(count) const T1* str,
+
751 _In_ size_t count,
+
752 _In_z_ const T2* sample)
+
753 {
+
754 _Assume_(str || !count);
+
755 _Assume_(sample);
+
756 for (size_t offset = 0;; ++offset) {
+
757 for (size_t i = offset, j = 0;; ++i, ++j) {
+
758 if (!sample[j])
+
759 return offset;
+
760 if (i >= count || !str[i])
+
761 return npos;
+
762 if (str[i] != sample[j])
+
763 break;
+
764 }
+
765 }
+
766 }
+
767
+
776 template <class T1, class T2>
+
777 inline size_t stristr(
+
778 _In_z_ const T1* str,
+
779 _In_z_ const T2* sample)
+
780 {
+
781 _Assume_(str);
+
782 _Assume_(sample);
+
783 for (size_t offset = 0;; ++offset) {
+
784 for (size_t i = offset, j = 0;; ++i, ++j) {
+
785 if (!sample[j])
+
786 return offset;
+
787 if (!str[i])
+
788 return npos;
+
789 if (tolower(str[i]) != tolower(sample[j]))
+
790 break;
+
791 }
+
792 }
+
793 }
+
794
+
804 template <class T1, class T2>
+
805 inline size_t stristr(
+
806 _In_z_ const T1* str,
+
807 _In_z_ const T2* sample,
+
808 _In_ const std::locale& locale)
+
809 {
+
810 _Assume_(str);
+
811 _Assume_(sample);
+
812 const auto& ctype1 = std::use_facet<std::ctype<T1>>(locale);
+
813 const auto& ctype2 = std::use_facet<std::ctype<T2>>(locale);
+
814 for (size_t offset = 0;; ++offset) {
+
815 for (size_t i = offset, j = 0;; ++i, ++j) {
+
816 if (!sample[j])
+
817 return offset;
+
818 if (!str[i])
+
819 return npos;
+
820 if (ctype1.tolower(str[i]) != ctype2.tolower(sample[j]))
+
821 break;
+
822 }
+
823 }
+
824 }
+
825
+
835 template <class T1, class T2>
+
836 inline size_t strnistr(
+
837 _In_reads_or_z_opt_(count) const T1* str,
+
838 _In_ size_t count,
+
839 _In_z_ const T2* sample)
840 {
-
841 _Assume_(src);
-
842 _Assume_(src != dst.c_str());
-
843 dst.clear();
-
844 dst.reserve(strlen(src));
-
845 for (size_t j = 0; src[j];) {
-
846 if (src[j] != '\r' || src[j + 1] != '\n')
-
847 dst += src[j++];
-
848 else {
-
849 dst += '\n';
-
850 j += 2;
+
841 _Assume_(str || !count);
+
842 _Assume_(sample);
+
843 for (size_t offset = 0;; ++offset) {
+
844 for (size_t i = offset, j = 0;; ++i, ++j) {
+
845 if (!sample[j])
+
846 return offset;
+
847 if (i >= count || !str[i])
+
848 return npos;
+
849 if (tolower(str[i]) != tolower(sample[j]))
+
850 break;
851 }
852 }
853 }
854
-
860 template<class _Elem, class _Traits = std::char_traits<_Elem>, class _Ax = std::allocator<_Elem>>
-
861 inline void crlf2nl(_Inout_ std::basic_string<_Elem, _Traits, _Ax>& str)
-
862 {
-
863 size_t i, j, n;
-
864 for (i = j = 0, n = str.size(); j < n;) {
-
865 if (str[j] != '\r' || str[j + 1] != '\n')
-
866 str[i++] = str[j++];
-
867 else {
-
868 str[i++] = '\n';
-
869 j += 2;
-
870 }
-
871 }
-
872 str.resize(i);
-
873 }
-
874
-
876 template <class T, class T_bin>
-
877 inline T_bin strtoint(
-
878 _In_reads_or_z_opt_(count) const T* str, _In_ size_t count,
-
879 _Out_opt_ size_t* end,
-
880 _In_ int radix,
-
881 _Out_ uint8_t& flags)
-
882 {
-
883 _Assume_(str || !count);
-
884 _Assume_(radix == 0 || 2 <= radix && radix <= 36);
-
885
-
886 size_t i = 0;
-
887 T_bin value = 0, digit,
-
888 max_ui = (T_bin)-1,
-
889 max_ui_pre1, max_ui_pre2;
-
890
-
891 flags = 0;
-
892
-
893 // Skip leading spaces.
-
894 for (;; ++i) {
-
895 if (i >= count || !str[i]) goto error;
-
896 if (!isspace(str[i])) break;
-
897 }
-
898
-
899 // Read the sign.
-
900 if (str[i] == '+') {
-
901 flags &= ~0x01;
-
902 ++i;
-
903 if (i >= count || !str[i]) goto error;
-
904 }
-
905 else if (str[i] == '-') {
-
906 flags |= 0x01;
-
907 ++i;
-
908 if (i >= count || !str[i]) goto error;
-
909 }
-
910
-
911 if (radix == 16) {
-
912 // On hexadecimal, allow leading 0x.
-
913 if (str[i] == '0' && i + 1 < count && (str[i + 1] == 'x' || str[i + 1] == 'X')) {
-
914 i += 2;
-
915 if (i >= count || !str[i]) goto error;
-
916 }
-
917 }
-
918 else if (!radix) {
-
919 // Autodetect radix.
-
920 if (str[i] == '0') {
-
921 ++i;
-
922 if (i >= count || !str[i]) goto error;
-
923 if (str[i] == 'x' || str[i] == 'X') {
-
924 radix = 16;
-
925 ++i;
-
926 if (i >= count || !str[i]) goto error;
-
927 }
-
928 else
-
929 radix = 8;
-
930 }
-
931 else
-
932 radix = 10;
-
933 }
-
934
-
935 // We have the radix.
-
936 max_ui_pre1 = max_ui / (T_bin)radix;
-
937 max_ui_pre2 = max_ui % (T_bin)radix;
-
938 for (;;) {
-
939 if ('0' <= str[i] && str[i] <= '9')
-
940 digit = (T_bin)str[i] - '0';
-
941 else if ('A' <= str[i] && str[i] <= 'Z')
-
942 digit = (T_bin)str[i] - 'A' + '\x0a';
-
943 else if ('a' <= str[i] && str[i] <= 'z')
-
944 digit = (T_bin)str[i] - 'a' + '\x0a';
-
945 else
-
946 goto error;
-
947 if (digit >= (T_bin)radix)
-
948 goto error;
-
949
-
950 if (value < max_ui_pre1 || // Multiplication nor addition will not overflow.
-
951 (value == max_ui_pre1 && digit <= max_ui_pre2)) // Small digits will not overflow.
-
952 value = value * (T_bin)radix + digit;
-
953 else {
-
954 // Overflow!
-
955 flags |= 0x02;
-
956 }
-
957
-
958 ++i;
-
959 if (i >= count || !str[i])
-
960 goto error;
-
961 }
-
962
-
963 error:
-
964 if (end) *end = i;
-
965 return value;
-
966 }
-
968
-
979 template <class T, class T_bin>
-
980 T_bin strtoint(
-
981 _In_reads_or_z_opt_(count) const T* str, _In_ size_t count,
-
982 _Out_opt_ size_t* end,
-
983 _In_ int radix)
-
984 {
-
985 uint8_t flags;
-
986 T_bin value;
-
987
-
988 switch (sizeof(T_bin)) {
-
989 case 1:
-
990 value = (T_bin)strtoint<T, uint8_t>(str, count, end, radix, flags);
-
991 if ((flags & 0x01) && (value & 0x80)) {
-
992 // Sign bit is 1 => overflow.
-
993 flags |= 0x02;
-
994 }
-
995 return (flags & 0x02) ?
-
996 (flags & 0x01) ? (T_bin)0x80 : (T_bin)0x7f :
-
997 (flags & 0x01) ? -value : value;
-
998
-
999 case 2:
-
1000 value = (T_bin)strtoint<T, uint16_t>(str, count, end, radix, flags);
-
1001 if ((flags & 0x01) && (value & 0x8000)) {
-
1002 // Sign bit is 1 => overflow.
-
1003 flags |= 0x02;
-
1004 }
-
1005 return (flags & 0x02) ?
-
1006 (flags & 0x01) ? (T_bin)0x8000 : (T_bin)0x7fff :
-
1007 (flags & 0x01) ? -value : value;
-
1008
-
1009 case 4:
-
1010 value = (T_bin)strtoint<T, uint32_t>(str, count, end, radix, flags);
-
1011 if ((flags & 0x01) && (value & 0x80000000)) {
-
1012 // Sign bit is 1 => overflow.
-
1013 flags |= 0x02;
-
1014 }
-
1015 return (flags & 0x02) ?
-
1016 (flags & 0x01) ? (T_bin)0x80000000 : (T_bin)0x7fffffff :
-
1017 (flags & 0x01) ? -value : value;
-
1018
-
1019 case 8:
-
1020 value = (T_bin)strtoint<T, uint64_t>(str, count, end, radix, flags);
-
1021 if ((flags & 0x01) && (value & 0x8000000000000000)) {
-
1022 // Sign bit is 1 => overflow.
-
1023 flags |= 0x02;
-
1024 }
-
1025 return (flags & 0x02) ?
-
1026 (flags & 0x01) ? (T_bin)0x8000000000000000 : (T_bin)0x7fffffffffffffff :
-
1027 (flags & 0x01) ? -value : value;
-
1028
-
1029 default:
-
1030 throw std::invalid_argument("Unsupported bit length");
+
865 template <class T1, class T2>
+
866 inline size_t strnistr(
+
867 _In_reads_or_z_opt_(count) const T1* str,
+
868 _In_ size_t count,
+
869 _In_z_ const T2* sample,
+
870 _In_ const std::locale& locale)
+
871 {
+
872 _Assume_(str || !count);
+
873 _Assume_(sample);
+
874 const auto& ctype1 = std::use_facet<std::ctype<T1>>(locale);
+
875 const auto& ctype2 = std::use_facet<std::ctype<T2>>(locale);
+
876 for (size_t offset = 0;; ++offset) {
+
877 for (size_t i = offset, j = 0;; ++i, ++j) {
+
878 if (!sample[j])
+
879 return offset;
+
880 if (i >= count || !str[i])
+
881 return npos;
+
882 if (ctype1.tolower(str[i]) != ctype2.tolower(sample[j]))
+
883 break;
+
884 }
+
885 }
+
886 }
+
887
+
896 template <class T1, class T2>
+
897 inline size_t strcpy(
+
898 _Out_writes_z_(_String_length_(src) + 1) T1* dst,
+
899 _In_z_ const T2* src)
+
900 {
+
901 _Assume_(dst && src);
+
902 for (size_t i = 0; ; ++i) {
+
903 if ((dst[i] = src[i]) == 0)
+
904 return i;
+
905 }
+
906 }
+
907
+
917 template <class T1, class T2>
+
918 inline size_t strncpy(
+
919 _Out_writes_(count) _Post_maybez_ T1* dst,
+
920 _In_reads_or_z_opt_(count) const T2* src, _In_ size_t count)
+
921 {
+
922 _Assume_(dst && src || !count);
+
923 for (size_t i = 0; ; ++i) {
+
924 if (i >= count)
+
925 return i;
+
926 if ((dst[i] = src[i]) == 0)
+
927 return i;
+
928 }
+
929 }
+
930
+
941 template <class T1, class T2>
+
942 inline size_t strncpy(
+
943 _Out_writes_(count_dst) _Post_maybez_ T1* dst, _In_ size_t count_dst,
+
944 _In_reads_or_z_opt_(count_src) const T2* src, _In_ size_t count_src)
+
945 {
+
946 _Assume_(dst || !count_dst);
+
947 _Assume_(src || !count_src);
+
948 for (size_t i = 0; ; ++i)
+
949 {
+
950 if (i >= count_dst)
+
951 return i;
+
952 if (i >= count_src) {
+
953 dst[i] = 0;
+
954 return i;
+
955 }
+
956 if ((dst[i] = src[i]) == 0)
+
957 return i;
+
958 }
+
959 }
+
960
+
969 template <class T1, class T2>
+
970 inline size_t strcat(
+
971 _In_z_ _Out_writes_z_(_String_length_(dst) + _String_length_(src) + 1) T1* dst,
+
972 _In_z_ const T2* src)
+
973 {
+
974 _Assume_(dst && src);
+
975 for (size_t i = 0, j = stdex::strlen<T1>(dst); ; ++i, ++j) {
+
976 if ((dst[j] = src[i]) == 0)
+
977 return j;
+
978 }
+
979 }
+
980
+
990 template <class T1, class T2>
+
991 inline size_t strncat(
+
992 _Inout_z_ T1* dst,
+
993 _In_reads_or_z_opt_(count) const T2* src, _In_ size_t count)
+
994 {
+
995 _Assume_(dst && src || !count);
+
996 for (size_t i = 0, j = stdex::strlen<T1>(dst); ; ++i, ++j) {
+
997 if (i >= count)
+
998 return j;
+
999 if ((dst[j] = src[i]) == 0)
+
1000 return j;
+
1001 }
+
1002 }
+
1003
+
1014 template <class T1, class T2>
+
1015 inline size_t strncat(
+
1016 _Out_writes_(count_dst) _Post_maybez_ T1* dst, _In_ size_t count_dst,
+
1017 _In_reads_or_z_opt_(count_src) const T2* src, _In_ size_t count_src)
+
1018 {
+
1019 _Assume_(dst || !count_dst);
+
1020 _Assume_(src || !count_src);
+
1021 for (size_t i = 0, j = stdex::strnlen<T1>(dst, count_dst); ; ++i, ++j)
+
1022 {
+
1023 if (j >= count_dst)
+
1024 return j;
+
1025 if (i >= count_src) {
+
1026 dst[j] = 0;
+
1027 return j;
+
1028 }
+
1029 if ((dst[j] = src[i]) == 0)
+
1030 return j;
1031 }
1032 }
1033
-
1044 template <class T, class T_bin>
-
1045 inline T_bin strtouint(
-
1046 _In_reads_or_z_opt_(count) const T* str,
-
1047 _In_ size_t count,
-
1048 _Out_opt_ size_t* end,
-
1049 _In_ int radix)
-
1050 {
-
1051 uint8_t flags;
-
1052 T_bin value;
-
1053
-
1054 switch (sizeof(T_bin)) {
-
1055 case 1: value = (T_bin)strtoint<T, uint8_t>(str, count, end, radix, flags); break;
-
1056 case 2: value = (T_bin)strtoint<T, uint16_t>(str, count, end, radix, flags); break;
-
1057 case 4: value = (T_bin)strtoint<T, uint32_t>(str, count, end, radix, flags); break;
-
1058 case 8: value = (T_bin)strtoint<T, uint64_t>(str, count, end, radix, flags); break;
-
1059 default: throw std::invalid_argument("Unsupported bit length");
-
1060 }
-
1061
-
1062 return (flags & 0x02) ?
-
1063 (flags & 0x01) ? (T_bin)0 : (T_bin)-1 :
-
1064 (flags & 0x01) ? ~value : value;
-
1065 }
-
1066
-
1077 template <class T>
-
1078 inline int32_t strto32(
-
1079 _In_reads_or_z_opt_(count) const T* str, _In_ size_t count,
-
1080 _Out_opt_ size_t* end,
-
1081 _In_ int radix)
-
1082 {
-
1083 return strtoint<T, int32_t>(str, count, end, radix);
-
1084 }
-
1085
-
1096 template <class T>
-
1097 inline int64_t strto64(
-
1098 _In_reads_or_z_opt_(count) const T* str, _In_ size_t count,
-
1099 _Out_opt_ size_t* end,
-
1100 _In_ int radix)
-
1101 {
-
1102 return strtoint<T, int64_t>(str, count, end, radix);
-
1103 }
-
1104
-
1116 template <class T>
-
1117 inline intptr_t strtoi(
-
1118 _In_reads_or_z_opt_(count) const T* str, _In_ size_t count,
-
1119 _Out_opt_ size_t* end,
-
1120 _In_ int radix)
-
1121 {
-
1122#if defined(_WIN64) || defined(__LP64__)
-
1123 return (intptr_t)strto64(str, count, end, radix);
-
1124#else
-
1125 return (intptr_t)strto32(str, count, end, radix);
-
1126#endif
-
1127 }
-
1128
-
1139 template <class T>
-
1140 inline uint32_t strtou32(
-
1141 _In_reads_or_z_opt_(count) const T* str, _In_ size_t count,
-
1142 _Out_opt_ size_t* end,
-
1143 _In_ int radix)
-
1144 {
-
1145 return strtouint<T, uint32_t>(str, count, end, radix);
-
1146 }
-
1147
-
1158 template <class T>
-
1159 inline uint64_t strtou64(
-
1160 _In_reads_or_z_opt_(count) const T* str, _In_ size_t count,
-
1161 _Out_opt_ size_t* end,
-
1162 _In_ int radix)
-
1163 {
-
1164 return strtouint<T, uint64_t>(str, count, end, radix);
-
1165 }
-
1166
-
1178 template <class T>
-
1179 inline size_t strtoui(
-
1180 _In_reads_or_z_opt_(count) const T* str, _In_ size_t count,
-
1181 _Out_opt_ size_t* end,
-
1182 _In_ int radix)
-
1183 {
-
1184#if defined(_WIN64) || defined(__LP64__)
-
1185 return (size_t)strtou64(str, count, end, radix);
-
1186#else
-
1187 return (size_t)strtou32(str, count, end, radix);
-
1188#endif
-
1189 }
-
1190
-
1192 inline int vsnprintf(_Out_z_cap_(capacity) char *str, _In_ size_t capacity, _In_z_ _Printf_format_string_params_(2) const char *format, _In_opt_ locale_t locale, _In_ va_list arg)
-
1193 {
-
1194 int r;
-
1195#ifdef _WIN32
-
1196 // Don't use _vsnprintf_s(). It terminates the string even if we want to print to the edge of the buffer.
-
1197#pragma warning(suppress: 4996)
-
1198 r = _vsnprintf_l(str, capacity, format, locale, arg);
-
1199#else
-
1200 r = ::vsnprintf(str, capacity, format, arg);
-
1201#endif
-
1202 if (r == -1 && strnlen(str, capacity) == capacity) {
-
1203 // Buffer overrun. Estimate buffer size for the next iteration.
-
1204 capacity += std::max<size_t>(capacity / 8, 0x80);
-
1205 if (capacity > INT_MAX)
-
1206 throw std::invalid_argument("string too big");
-
1207 return (int)capacity;
-
1208 }
-
1209 return r;
-
1210 }
-
1211
-
1212 inline int vsnprintf(_Out_z_cap_(capacity) wchar_t *str, _In_ size_t capacity, _In_z_ _Printf_format_string_params_(2) const wchar_t *format, _In_opt_ locale_t locale, _In_ va_list arg)
-
1213 {
-
1214 int r;
-
1215#ifdef _WIN32
-
1216 // Don't use _vsnwprintf_s(). It terminates the string even if we want to print to the edge of the buffer.
-
1217#pragma warning(suppress: 4996)
-
1218 r = _vsnwprintf_l(str, capacity, format, locale, arg);
-
1219#else
-
1220 r = vswprintf(str, capacity, format, arg);
-
1221#endif
-
1222 if (r == -1 && strnlen(str, capacity) == capacity) {
-
1223 // Buffer overrun. Estimate buffer size for the next iteration.
-
1224 capacity += std::max<size_t>(capacity / 8, 0x80);
-
1225 if (capacity > INT_MAX)
-
1226 throw std::invalid_argument("string too big");
-
1227 return (int)capacity;
-
1228 }
-
1229 return r;
-
1230 }
-
1232
-
1243 template<class _Elem, class _Traits, class _Ax>
-
1244 inline size_t vappendf(_Inout_ std::basic_string<_Elem, _Traits, _Ax> &str, _In_z_ _Printf_format_string_params_(2) const _Elem *format, _In_opt_ locale_t locale, _In_ va_list arg)
-
1245 {
-
1246 _Elem buf[1024/sizeof(_Elem)];
-
1247
-
1248 // Try with stack buffer first.
-
1249 int count = vsnprintf(buf, _countof(buf) - 1, format, locale, arg);
-
1250 if (count >= 0) {
-
1251 // Copy from stack.
-
1252 str.append(buf, count);
-
1253 return count;
-
1254 }
-
1255 for (size_t capacity = 2*1024/sizeof(_Elem);; capacity *= 2) {
-
1256 // Allocate on heap and retry.
-
1257 auto buf_dyn = std::make_unique<_Elem[]>(capacity);
-
1258 count = vsnprintf(buf_dyn.get(), capacity - 1, format, locale, arg);
-
1259 if (count >= 0) {
-
1260 str.append(buf_dyn.get(), count);
-
1261 return count;
-
1262 }
-
1263 }
-
1264 }
-
1265
-
1275 template<class _Elem, class _Traits, class _Ax>
-
1276 inline size_t appendf(_Inout_ std::basic_string<_Elem, _Traits, _Ax> &str, _In_z_ _Printf_format_string_params_(2) const _Elem *format, _In_opt_ locale_t locale, ...)
-
1277 {
-
1278 va_list arg;
-
1279 va_start(arg, locale);
-
1280 size_t n = vappendf(str, format, locale, arg);
-
1281 va_end(arg);
-
1282 return n;
-
1283 }
-
1284
-
1293 template<class _Elem, class _Traits, class _Ax>
-
1294 inline void vsprintf(_Inout_ std::basic_string<_Elem, _Traits, _Ax> &str, _In_z_ _Printf_format_string_params_(2) const _Elem *format, _In_opt_ locale_t locale, _In_ va_list arg)
-
1295 {
-
1296 str.clear();
-
1297 vappendf(str, format, locale, arg);
-
1298 }
+
1044 template <class T>
+
1045 inline _Check_return_ _Ret_maybenull_z_ T* strdup(_In_opt_z_ const T* str)
+
1046 {
+
1047 if (!str) _Unlikely_
+
1048 return nullptr;
+
1049 size_t count = strlen(str) + 1;
+
1050 T* dst = new T[count];
+
1051 strncpy(dst, count, str, SIZE_MAX);
+
1052 return dst;
+
1053 }
+
1054
+
1066 template <class T>
+
1067 inline _Ret_z_ T* strndup(
+
1068 _In_reads_or_z_opt_(count) const T* str,
+
1069 _In_ size_t count)
+
1070 {
+
1071 T* dst = new T[count];
+
1072 strncpy(dst, count, str, SIZE_MAX);
+
1073 return dst;
+
1074 }
+
1075
+
1085 template <class T>
+
1086 inline size_t crlf2nl(_Out_writes_z_(strlen(src)) T* dst, _In_z_ const T* src)
+
1087 {
+
1088 _Assume_(dst);
+
1089 _Assume_(src);
+
1090 size_t i, j;
+
1091 for (i = j = 0; src[j];) {
+
1092 if (src[j] != '\r' || src[j + 1] != '\n')
+
1093 dst[i++] = src[j++];
+
1094 else {
+
1095 dst[i++] = '\n';
+
1096 j += 2;
+
1097 }
+
1098 }
+
1099 dst[i] = 0;
+
1100 return i;
+
1101 }
+
1102
+
1109 template<class _Elem, class _Traits = std::char_traits<_Elem>, class _Ax = std::allocator<_Elem>>
+
1110 inline void crlf2nl(_Inout_ std::basic_string<_Elem, _Traits, _Ax>& dst, _In_z_ const _Elem* src)
+
1111 {
+
1112 _Assume_(src);
+
1113 _Assume_(src != dst.c_str());
+
1114 dst.clear();
+
1115 dst.reserve(strlen(src));
+
1116 for (size_t j = 0; src[j];) {
+
1117 if (src[j] != '\r' || src[j + 1] != '\n')
+
1118 dst += src[j++];
+
1119 else {
+
1120 dst += '\n';
+
1121 j += 2;
+
1122 }
+
1123 }
+
1124 }
+
1125
+
1131 template<class _Elem, class _Traits = std::char_traits<_Elem>, class _Ax = std::allocator<_Elem>>
+
1132 inline void crlf2nl(_Inout_ std::basic_string<_Elem, _Traits, _Ax>& str)
+
1133 {
+
1134 size_t i, j, n;
+
1135 for (i = j = 0, n = str.size(); j < n;) {
+
1136 if (str[j] != '\r' || str[j + 1] != '\n')
+
1137 str[i++] = str[j++];
+
1138 else {
+
1139 str[i++] = '\n';
+
1140 j += 2;
+
1141 }
+
1142 }
+
1143 str.resize(i);
+
1144 }
+
1145
+
1147 template <class T, class T_bin>
+
1148 inline T_bin strtoint(
+
1149 _In_reads_or_z_opt_(count) const T* str, _In_ size_t count,
+
1150 _Out_opt_ size_t* end,
+
1151 _In_ int radix,
+
1152 _Out_ uint8_t& flags)
+
1153 {
+
1154 _Assume_(str || !count);
+
1155 _Assume_(radix == 0 || 2 <= radix && radix <= 36);
+
1156
+
1157 size_t i = 0;
+
1158 T_bin value = 0, digit,
+
1159 max_ui = (T_bin)-1,
+
1160 max_ui_pre1, max_ui_pre2;
+
1161
+
1162 flags = 0;
+
1163
+
1164 // Skip leading spaces.
+
1165 for (;; ++i) {
+
1166 if (i >= count || !str[i]) goto error;
+
1167 if (!isspace(str[i])) break;
+
1168 }
+
1169
+
1170 // Read the sign.
+
1171 if (str[i] == '+') {
+
1172 flags &= ~0x01;
+
1173 ++i;
+
1174 if (i >= count || !str[i]) goto error;
+
1175 }
+
1176 else if (str[i] == '-') {
+
1177 flags |= 0x01;
+
1178 ++i;
+
1179 if (i >= count || !str[i]) goto error;
+
1180 }
+
1181
+
1182 if (radix == 16) {
+
1183 // On hexadecimal, allow leading 0x.
+
1184 if (str[i] == '0' && i + 1 < count && (str[i + 1] == 'x' || str[i + 1] == 'X')) {
+
1185 i += 2;
+
1186 if (i >= count || !str[i]) goto error;
+
1187 }
+
1188 }
+
1189 else if (!radix) {
+
1190 // Autodetect radix.
+
1191 if (str[i] == '0') {
+
1192 ++i;
+
1193 if (i >= count || !str[i]) goto error;
+
1194 if (str[i] == 'x' || str[i] == 'X') {
+
1195 radix = 16;
+
1196 ++i;
+
1197 if (i >= count || !str[i]) goto error;
+
1198 }
+
1199 else
+
1200 radix = 8;
+
1201 }
+
1202 else
+
1203 radix = 10;
+
1204 }
+
1205
+
1206 // We have the radix.
+
1207 max_ui_pre1 = max_ui / (T_bin)radix;
+
1208 max_ui_pre2 = max_ui % (T_bin)radix;
+
1209 for (;;) {
+
1210 if ('0' <= str[i] && str[i] <= '9')
+
1211 digit = (T_bin)str[i] - '0';
+
1212 else if ('A' <= str[i] && str[i] <= 'Z')
+
1213 digit = (T_bin)str[i] - 'A' + '\x0a';
+
1214 else if ('a' <= str[i] && str[i] <= 'z')
+
1215 digit = (T_bin)str[i] - 'a' + '\x0a';
+
1216 else
+
1217 goto error;
+
1218 if (digit >= (T_bin)radix)
+
1219 goto error;
+
1220
+
1221 if (value < max_ui_pre1 || // Multiplication nor addition will not overflow.
+
1222 (value == max_ui_pre1 && digit <= max_ui_pre2)) // Small digits will not overflow.
+
1223 value = value * (T_bin)radix + digit;
+
1224 else {
+
1225 // Overflow!
+
1226 flags |= 0x02;
+
1227 }
+
1228
+
1229 ++i;
+
1230 if (i >= count || !str[i])
+
1231 goto error;
+
1232 }
+
1233
+
1234 error:
+
1235 if (end) *end = i;
+
1236 return value;
+
1237 }
+
1239
+
1250 template <class T, class T_bin>
+
1251 T_bin strtoint(
+
1252 _In_reads_or_z_opt_(count) const T* str, _In_ size_t count,
+
1253 _Out_opt_ size_t* end,
+
1254 _In_ int radix)
+
1255 {
+
1256 uint8_t flags;
+
1257 T_bin value;
+
1258
+
1259 switch (sizeof(T_bin)) {
+
1260 case 1:
+
1261 value = (T_bin)strtoint<T, uint8_t>(str, count, end, radix, flags);
+
1262 if ((flags & 0x01) && (value & 0x80)) {
+
1263 // Sign bit is 1 => overflow.
+
1264 flags |= 0x02;
+
1265 }
+
1266 return (flags & 0x02) ?
+
1267 (flags & 0x01) ? (T_bin)0x80 : (T_bin)0x7f :
+
1268 (flags & 0x01) ? -value : value;
+
1269
+
1270 case 2:
+
1271 value = (T_bin)strtoint<T, uint16_t>(str, count, end, radix, flags);
+
1272 if ((flags & 0x01) && (value & 0x8000)) {
+
1273 // Sign bit is 1 => overflow.
+
1274 flags |= 0x02;
+
1275 }
+
1276 return (flags & 0x02) ?
+
1277 (flags & 0x01) ? (T_bin)0x8000 : (T_bin)0x7fff :
+
1278 (flags & 0x01) ? -value : value;
+
1279
+
1280 case 4:
+
1281 value = (T_bin)strtoint<T, uint32_t>(str, count, end, radix, flags);
+
1282 if ((flags & 0x01) && (value & 0x80000000)) {
+
1283 // Sign bit is 1 => overflow.
+
1284 flags |= 0x02;
+
1285 }
+
1286 return (flags & 0x02) ?
+
1287 (flags & 0x01) ? (T_bin)0x80000000 : (T_bin)0x7fffffff :
+
1288 (flags & 0x01) ? -value : value;
+
1289
+
1290 case 8:
+
1291 value = (T_bin)strtoint<T, uint64_t>(str, count, end, radix, flags);
+
1292 if ((flags & 0x01) && (value & 0x8000000000000000)) {
+
1293 // Sign bit is 1 => overflow.
+
1294 flags |= 0x02;
+
1295 }
+
1296 return (flags & 0x02) ?
+
1297 (flags & 0x01) ? (T_bin)0x8000000000000000 : (T_bin)0x7fffffffffffffff :
+
1298 (flags & 0x01) ? -value : value;
1299
-
1307 template<class _Elem, class _Traits, class _Ax>
-
1308 inline void sprintf(_Inout_ std::basic_string<_Elem, _Traits, _Ax> &str, _In_z_ _Printf_format_string_params_(2) const _Elem *format, _In_opt_ locale_t locale, ...)
-
1309 {
-
1310 va_list arg;
-
1311 va_start(arg, locale);
-
1312 vsprintf(str, format, locale, arg);
-
1313 va_end(arg);
-
1314 }
-
1315
-
1325 template<class _Elem, class _Traits = std::char_traits<_Elem>, class _Ax = std::allocator<_Elem>>
-
1326 inline std::basic_string<_Elem, _Traits, _Ax> vsprintf(_In_z_ _Printf_format_string_params_(2) const _Elem *format, _In_opt_ locale_t locale, _In_ va_list arg)
-
1327 {
-
1328 std::basic_string<_Elem, _Traits, _Ax> str;
-
1329 vappendf(str, format, locale, arg);
-
1330 return str;
-
1331 }
+
1300 default:
+
1301 throw std::invalid_argument("Unsupported bit length");
+
1302 }
+
1303 }
+
1304
+
1315 template <class T, class T_bin>
+
1316 inline T_bin strtouint(
+
1317 _In_reads_or_z_opt_(count) const T* str,
+
1318 _In_ size_t count,
+
1319 _Out_opt_ size_t* end,
+
1320 _In_ int radix)
+
1321 {
+
1322 uint8_t flags;
+
1323 T_bin value;
+
1324
+
1325 switch (sizeof(T_bin)) {
+
1326 case 1: value = (T_bin)strtoint<T, uint8_t>(str, count, end, radix, flags); break;
+
1327 case 2: value = (T_bin)strtoint<T, uint16_t>(str, count, end, radix, flags); break;
+
1328 case 4: value = (T_bin)strtoint<T, uint32_t>(str, count, end, radix, flags); break;
+
1329 case 8: value = (T_bin)strtoint<T, uint64_t>(str, count, end, radix, flags); break;
+
1330 default: throw std::invalid_argument("Unsupported bit length");
+
1331 }
1332
-
1341 template<class _Elem, class _Traits = std::char_traits<_Elem>, class _Ax = std::allocator<_Elem>>
-
1342 inline std::basic_string<_Elem, _Traits, _Ax> sprintf(_In_z_ _Printf_format_string_params_(2) const _Elem *format, _In_opt_ locale_t locale, ...)
-
1343 {
-
1344 va_list arg;
-
1345 va_start(arg, locale);
-
1346 auto str = vsprintf(format, locale, arg);
-
1347 va_end(arg);
-
1348 return str;
-
1349 }
-
1350
-
1352 inline size_t strftime(_Out_z_cap_(capacity) char *str, _In_ size_t capacity, _In_z_ _Printf_format_string_ const char *format, _In_ const struct tm* time, _In_opt_ locale_t locale)
+
1333 return (flags & 0x02) ?
+
1334 (flags & 0x01) ? (T_bin)0 : (T_bin)-1 :
+
1335 (flags & 0x01) ? ~value : value;
+
1336 }
+
1337
+
1348 template <class T>
+
1349 inline int32_t strto32(
+
1350 _In_reads_or_z_opt_(count) const T* str, _In_ size_t count,
+
1351 _Out_opt_ size_t* end,
+
1352 _In_ int radix)
1353 {
-
1354#ifdef _WIN32
-
1355 return _strftime_l(str, capacity, format, time, locale);
-
1356#else
-
1357 return strftime_l(str, capacity, format, time, locale);
-
1358#endif
-
1359 }
-
1360
-
1361 inline size_t strftime(_Out_z_cap_(capacity) wchar_t *str, _In_ size_t capacity, _In_z_ _Printf_format_string_ const wchar_t *format, _In_ const struct tm* time, _In_opt_ locale_t locale)
-
1362 {
-
1363#ifdef _WIN32
-
1364 return _wcsftime_l(str, capacity, format, time, locale);
-
1365#else
-
1366 return wcsftime_l(str, capacity, format, time, locale);
-
1367#endif
-
1368 }
-
1370
-
1379 template<class _Elem, class _Traits, class _Ax>
-
1380 inline void strcatftime(_Inout_ std::basic_string<_Elem, _Traits, _Ax> &str, _In_z_ _Printf_format_string_ const _Elem *format, _In_ const struct tm* time, _In_opt_ locale_t locale)
-
1381 {
-
1382 _Elem buf[1024/sizeof(_Elem)];
-
1383
-
1384 // Try with stack buffer first.
-
1385 size_t count = strftime(buf, _countof(buf), format, time, locale);
-
1386 if (count) {
-
1387 // Copy from stack.
-
1388 str.append(buf, count);
-
1389 } else {
-
1390 for (size_t capacity = 2*1024/sizeof(_Elem);; capacity *= 2) {
-
1391 // Allocate on heap and retry.
-
1392 auto buf_dyn = std::make_unique<_Elem[]>(capacity);
-
1393 count = strftime(buf_dyn.get(), capacity, format, time, locale);
-
1394 if (count) {
-
1395 str.append(buf_dyn.get(), count);
-
1396 break;
-
1397 }
-
1398 }
-
1399 }
-
1400 }
-
1401
-
1410 template<class _Elem, class _Traits, class _Ax>
-
1411 inline void strftime(_Inout_ std::basic_string<_Elem, _Traits, _Ax> &str, _In_z_ _Printf_format_string_ const _Elem *format, _In_ const struct tm* time, _In_opt_ locale_t locale)
-
1412 {
-
1413 str.clear();
-
1414 strcatftime(str, format, time, locale);
-
1415 }
-
1416
-
1427 template<class _Elem, class _Traits = std::char_traits<_Elem>, class _Ax = std::allocator<_Elem>>
-
1428 inline std::basic_string<_Elem, _Traits, _Ax> strftime(_In_z_ _Printf_format_string_ const _Elem *format, _In_ const struct tm* time, _In_opt_ locale_t locale)
-
1429 {
-
1430 std::basic_string<_Elem, _Traits, _Ax> str;
-
1431 strcatftime(str, format, time, locale);
-
1432 return str;
-
1433 }
-
1434
-
1442 template<class T>
-
1443 inline void strlwr(_Inout_z_ T* str, _In_ const std::locale& locale)
-
1444 {
-
1445 _Assume_(str);
-
1446 const auto& ctype = std::use_facet<std::ctype<T>>(locale);
-
1447 for (size_t i = 0; str[i]; ++i)
-
1448 str[i] = ctype.tolower(str[i]);
-
1449 }
-
1450
-
1459 template<class T>
-
1460 inline void strlwr(_Inout_updates_z_(count) T* str, _In_ size_t count, _In_ const std::locale& locale)
-
1461 {
-
1462 _Assume_(str || !count);
-
1463 const auto& ctype = std::use_facet<std::ctype<T>>(locale);
-
1464 for (size_t i = 0; i < count && str[i]; ++i)
-
1465 str[i] = ctype.tolower(str[i]);
-
1466 }
-
1467
-
1475 template<class T>
-
1476 inline void strupr(_Inout_z_ T* str, _In_ const std::locale& locale)
-
1477 {
-
1478 _Assume_(str);
-
1479 const auto& ctype = std::use_facet<std::ctype<T>>(locale);
-
1480 for (size_t i = 0; str[i]; ++i)
-
1481 str[i] = ctype.toupper(str[i]);
-
1482 }
-
1483
-
1492 template<class T>
-
1493 inline void strupr(_Inout_updates_z_(count) T* str, _In_ size_t count, _In_ const std::locale& locale)
-
1494 {
-
1495 _Assume_(str || !count);
-
1496 const auto& ctype = std::use_facet<std::ctype<T>>(locale);
-
1497 for (size_t i = 0; i < count && str[i]; ++i)
-
1498 str[i] = ctype.toupper(str[i]);
-
1499 }
-
1500
-
1508 template<class _Elem, class _Traits = std::char_traits<_Elem>, class _Ax = std::allocator<_Elem>>
-
1509 inline void strupr(_Inout_ std::basic_string<_Elem, _Traits, _Ax>& str, _In_ const std::locale& locale)
-
1510 {
-
1511 const auto& ctype = std::use_facet<std::ctype<_Elem>>(locale);
-
1512 for (size_t i = 0; i < str.size(); ++i)
-
1513 str[i] = ctype.toupper(str[i]);
-
1514 }
-
1515
-
1524 template<class T>
-
1525 inline size_t ltrim(
-
1526 _Inout_z_count_(count) T* str, _In_ size_t count,
-
1527 _In_ const std::locale& locale)
-
1528 {
-
1529 const auto& ctype = std::use_facet<std::ctype<T>>(locale);
-
1530 for (size_t i = 0;; ++i) {
-
1531 if (i >= count) {
-
1532 if (count) str[0] = 0;
-
1533 return 0;
-
1534 }
-
1535 if (!str[i]) {
-
1536 str[0] = 0;
-
1537 return 0;
-
1538 }
-
1539 if (!ctype.is(ctype.space, str[i])) {
-
1540 if (!i)
-
1541 return strnlen(str, count);
-
1542 size_t n = count != SIZE_MAX ? strncpy(str, str + i, count - i) : strcpy(str, str + i);
-
1543 str[n] = 0;
-
1544 return n;
-
1545 }
-
1546 }
-
1547 }
-
1548
-
1554 template<class _Elem, class _Traits = std::char_traits<_Elem>, class _Ax = std::allocator<_Elem>>
-
1555 inline void ltrim(_Inout_ std::basic_string<_Elem, _Traits, _Ax> &s, _In_ const std::locale& locale)
-
1556 {
-
1557 const auto& ctype = std::use_facet<std::ctype<_Elem>>(locale);
-
1558 s.erase(
-
1559 s.begin(),
-
1560 std::find_if(
-
1561 s.begin(),
-
1562 s.end(),
-
1563 [&](_Elem ch) { return !ctype.is(ctype.space, ch); }));
-
1564 }
-
1565
-
1574 template<class T>
-
1575 inline size_t rtrim(
-
1576 _Inout_z_count_(count) T* str, _In_ size_t count,
-
1577 _In_ const std::locale& locale)
-
1578 {
-
1579 const auto& ctype = std::use_facet<std::ctype<T>>(locale);
-
1580 for (size_t i = 0, j = 0;;) {
-
1581 if (i >= count || !str[i]) {
-
1582 if (j < count) str[j] = 0;
-
1583 return j;
-
1584 }
-
1585 if (!ctype.is(ctype.space, str[i]))
-
1586 j = ++i;
-
1587 else
-
1588 ++i;
-
1589 }
-
1590 }
-
1591
-
1597 template<class _Elem, class _Traits = std::char_traits<_Elem>, class _Ax = std::allocator<_Elem>>
-
1598 static inline void rtrim(_Inout_ std::basic_string<_Elem, _Traits, _Ax> &s, _In_ const std::locale& locale)
-
1599 {
-
1600 const auto& ctype = std::use_facet<std::ctype<_Elem>>(locale);
-
1601 s.erase(
-
1602 std::find_if(
-
1603 s.rbegin(),
-
1604 s.rend(),
-
1605 [&](_Elem ch) { return !ctype.is(ctype.space, ch); }).base(),
-
1606 s.end());
-
1607 }
-
1608
-
1617 template<class T>
-
1618 inline size_t trim(
-
1619 _Inout_z_count_(count) T* str, _In_ size_t count,
-
1620 _In_ const std::locale& locale)
-
1621 {
-
1622 return ltrim(str, rtrim(str, count, locale), locale);
-
1623 }
-
1624
-
1630 template<class _Elem, class _Traits = std::char_traits<_Elem>, class _Ax = std::allocator<_Elem>>
-
1631 static inline void trim(_Inout_ std::basic_string<_Elem, _Traits, _Ax> &s, _In_ const std::locale& locale)
-
1632 {
-
1633 const auto& ctype = std::use_facet<std::ctype<_Elem>>(locale);
-
1634 s.erase(
-
1635 s.begin(),
-
1636 std::find_if(
-
1637 s.begin(),
-
1638 s.end(),
-
1639 [&](_Elem ch) { return !ctype.is(ctype.space, ch); }));
-
1640 s.erase(
-
1641 std::find_if(
-
1642 s.rbegin(),
-
1643 s.rend(),
-
1644 [&](_Elem ch) { return !ctype.is(ctype.space, ch); }).base(),
-
1645 s.end());
-
1646 }
-
1647}
+
1354 return strtoint<T, int32_t>(str, count, end, radix);
+
1355 }
+
1356
+
1367 template <class T>
+
1368 inline int64_t strto64(
+
1369 _In_reads_or_z_opt_(count) const T* str, _In_ size_t count,
+
1370 _Out_opt_ size_t* end,
+
1371 _In_ int radix)
+
1372 {
+
1373 return strtoint<T, int64_t>(str, count, end, radix);
+
1374 }
+
1375
+
1387 template <class T>
+
1388 inline intptr_t strtoi(
+
1389 _In_reads_or_z_opt_(count) const T* str, _In_ size_t count,
+
1390 _Out_opt_ size_t* end,
+
1391 _In_ int radix)
+
1392 {
+
1393#if defined(_WIN64) || defined(__LP64__)
+
1394 return (intptr_t)strto64(str, count, end, radix);
+
1395#else
+
1396 return (intptr_t)strto32(str, count, end, radix);
+
1397#endif
+
1398 }
+
1399
+
1410 template <class T>
+
1411 inline uint32_t strtou32(
+
1412 _In_reads_or_z_opt_(count) const T* str, _In_ size_t count,
+
1413 _Out_opt_ size_t* end,
+
1414 _In_ int radix)
+
1415 {
+
1416 return strtouint<T, uint32_t>(str, count, end, radix);
+
1417 }
+
1418
+
1429 template <class T>
+
1430 inline uint64_t strtou64(
+
1431 _In_reads_or_z_opt_(count) const T* str, _In_ size_t count,
+
1432 _Out_opt_ size_t* end,
+
1433 _In_ int radix)
+
1434 {
+
1435 return strtouint<T, uint64_t>(str, count, end, radix);
+
1436 }
+
1437
+
1449 template <class T>
+
1450 inline size_t strtoui(
+
1451 _In_reads_or_z_opt_(count) const T* str, _In_ size_t count,
+
1452 _Out_opt_ size_t* end,
+
1453 _In_ int radix)
+
1454 {
+
1455#if defined(_WIN64) || defined(__LP64__)
+
1456 return (size_t)strtou64(str, count, end, radix);
+
1457#else
+
1458 return (size_t)strtou32(str, count, end, radix);
+
1459#endif
+
1460 }
+
1461
+
1463 inline int vsnprintf(_Out_z_cap_(capacity) char* str, _In_ size_t capacity, _In_z_ _Printf_format_string_params_(2) const char* format, _In_opt_ locale_t locale, _In_ va_list arg)
+
1464 {
+
1465 int r;
+
1466#ifdef _WIN32
+
1467 // Don't use _vsnprintf_s(). It terminates the string even if we want to print to the edge of the buffer.
+
1468#pragma warning(suppress: 4996)
+
1469 r = _vsnprintf_l(str, capacity, format, locale, arg);
+
1470#else
+
1471 r = ::vsnprintf(str, capacity, format, arg);
+
1472#endif
+
1473 if (r == -1 && strnlen(str, capacity) == capacity) {
+
1474 // Buffer overrun. Estimate buffer size for the next iteration.
+
1475 capacity += std::max<size_t>(capacity / 8, 0x80);
+
1476 if (capacity > INT_MAX)
+
1477 throw std::invalid_argument("string too big");
+
1478 return (int)capacity;
+
1479 }
+
1480 return r;
+
1481 }
+
1482
+
1483 inline int vsnprintf(_Out_z_cap_(capacity) wchar_t* str, _In_ size_t capacity, _In_z_ _Printf_format_string_params_(2) const wchar_t* format, _In_opt_ locale_t locale, _In_ va_list arg)
+
1484 {
+
1485 int r;
+
1486#ifdef _WIN32
+
1487 // Don't use _vsnwprintf_s(). It terminates the string even if we want to print to the edge of the buffer.
+
1488#pragma warning(suppress: 4996)
+
1489 r = _vsnwprintf_l(str, capacity, format, locale, arg);
+
1490#else
+
1491 r = vswprintf(str, capacity, format, arg);
+
1492#endif
+
1493 if (r == -1 && strnlen(str, capacity) == capacity) {
+
1494 // Buffer overrun. Estimate buffer size for the next iteration.
+
1495 capacity += std::max<size_t>(capacity / 8, 0x80);
+
1496 if (capacity > INT_MAX)
+
1497 throw std::invalid_argument("string too big");
+
1498 return (int)capacity;
+
1499 }
+
1500 return r;
+
1501 }
+
1503
+
1514 template<class _Elem, class _Traits, class _Ax>
+
1515 inline size_t vappendf(_Inout_ std::basic_string<_Elem, _Traits, _Ax>& str, _In_z_ _Printf_format_string_params_(2) const _Elem* format, _In_opt_ locale_t locale, _In_ va_list arg)
+
1516 {
+
1517 _Elem buf[1024 / sizeof(_Elem)];
+
1518
+
1519 // Try with stack buffer first.
+
1520 int count = vsnprintf(buf, _countof(buf) - 1, format, locale, arg);
+
1521 if (count >= 0) {
+
1522 // Copy from stack.
+
1523 str.append(buf, count);
+
1524 return count;
+
1525 }
+
1526 for (size_t capacity = 2 * 1024 / sizeof(_Elem);; capacity *= 2) {
+
1527 // Allocate on heap and retry.
+
1528 auto buf_dyn = std::make_unique<_Elem[]>(capacity);
+
1529 count = vsnprintf(buf_dyn.get(), capacity - 1, format, locale, arg);
+
1530 if (count >= 0) {
+
1531 str.append(buf_dyn.get(), count);
+
1532 return count;
+
1533 }
+
1534 }
+
1535 }
+
1536
+
1546 template<class _Elem, class _Traits, class _Ax>
+
1547 inline size_t appendf(_Inout_ std::basic_string<_Elem, _Traits, _Ax>& str, _In_z_ _Printf_format_string_params_(2) const _Elem* format, _In_opt_ locale_t locale, ...)
+
1548 {
+
1549 va_list arg;
+
1550 va_start(arg, locale);
+
1551 size_t n = vappendf(str, format, locale, arg);
+
1552 va_end(arg);
+
1553 return n;
+
1554 }
+
1555
+
1564 template<class _Elem, class _Traits, class _Ax>
+
1565 inline void vsprintf(_Inout_ std::basic_string<_Elem, _Traits, _Ax>& str, _In_z_ _Printf_format_string_params_(2) const _Elem* format, _In_opt_ locale_t locale, _In_ va_list arg)
+
1566 {
+
1567 str.clear();
+
1568 vappendf(str, format, locale, arg);
+
1569 }
+
1570
+
1578 template<class _Elem, class _Traits, class _Ax>
+
1579 inline void sprintf(_Inout_ std::basic_string<_Elem, _Traits, _Ax>& str, _In_z_ _Printf_format_string_params_(2) const _Elem* format, _In_opt_ locale_t locale, ...)
+
1580 {
+
1581 va_list arg;
+
1582 va_start(arg, locale);
+
1583 vsprintf(str, format, locale, arg);
+
1584 va_end(arg);
+
1585 }
+
1586
+
1596 template<class _Elem, class _Traits = std::char_traits<_Elem>, class _Ax = std::allocator<_Elem>>
+
1597 inline std::basic_string<_Elem, _Traits, _Ax> vsprintf(_In_z_ _Printf_format_string_params_(2) const _Elem* format, _In_opt_ locale_t locale, _In_ va_list arg)
+
1598 {
+
1599 std::basic_string<_Elem, _Traits, _Ax> str;
+
1600 vappendf(str, format, locale, arg);
+
1601 return str;
+
1602 }
+
1603
+
1612 template<class _Elem, class _Traits = std::char_traits<_Elem>, class _Ax = std::allocator<_Elem>>
+
1613 inline std::basic_string<_Elem, _Traits, _Ax> sprintf(_In_z_ _Printf_format_string_params_(2) const _Elem* format, _In_opt_ locale_t locale, ...)
+
1614 {
+
1615 va_list arg;
+
1616 va_start(arg, locale);
+
1617 auto str = vsprintf(format, locale, arg);
+
1618 va_end(arg);
+
1619 return str;
+
1620 }
+
1621
+
1623 inline size_t strftime(_Out_z_cap_(capacity) char* str, _In_ size_t capacity, _In_z_ _Printf_format_string_ const char* format, _In_ const struct tm* time, _In_opt_ locale_t locale)
+
1624 {
+
1625#ifdef _WIN32
+
1626 return _strftime_l(str, capacity, format, time, locale);
+
1627#else
+
1628 return strftime_l(str, capacity, format, time, locale);
+
1629#endif
+
1630 }
+
1631
+
1632 inline size_t strftime(_Out_z_cap_(capacity) wchar_t* str, _In_ size_t capacity, _In_z_ _Printf_format_string_ const wchar_t* format, _In_ const struct tm* time, _In_opt_ locale_t locale)
+
1633 {
+
1634#ifdef _WIN32
+
1635 return _wcsftime_l(str, capacity, format, time, locale);
+
1636#else
+
1637 return wcsftime_l(str, capacity, format, time, locale);
+
1638#endif
+
1639 }
+
1641
+
1650 template<class _Elem, class _Traits, class _Ax>
+
1651 inline void strcatftime(_Inout_ std::basic_string<_Elem, _Traits, _Ax>& str, _In_z_ _Printf_format_string_ const _Elem* format, _In_ const struct tm* time, _In_opt_ locale_t locale)
+
1652 {
+
1653 _Elem buf[1024 / sizeof(_Elem)];
+
1654
+
1655 // Try with stack buffer first.
+
1656 size_t count = strftime(buf, _countof(buf), format, time, locale);
+
1657 if (count) {
+
1658 // Copy from stack.
+
1659 str.append(buf, count);
+
1660 }
+
1661 else {
+
1662 for (size_t capacity = 2 * 1024 / sizeof(_Elem);; capacity *= 2) {
+
1663 // Allocate on heap and retry.
+
1664 auto buf_dyn = std::make_unique<_Elem[]>(capacity);
+
1665 count = strftime(buf_dyn.get(), capacity, format, time, locale);
+
1666 if (count) {
+
1667 str.append(buf_dyn.get(), count);
+
1668 break;
+
1669 }
+
1670 }
+
1671 }
+
1672 }
+
1673
+
1682 template<class _Elem, class _Traits, class _Ax>
+
1683 inline void strftime(_Inout_ std::basic_string<_Elem, _Traits, _Ax>& str, _In_z_ _Printf_format_string_ const _Elem* format, _In_ const struct tm* time, _In_opt_ locale_t locale)
+
1684 {
+
1685 str.clear();
+
1686 strcatftime(str, format, time, locale);
+
1687 }
+
1688
+
1699 template<class _Elem, class _Traits = std::char_traits<_Elem>, class _Ax = std::allocator<_Elem>>
+
1700 inline std::basic_string<_Elem, _Traits, _Ax> strftime(_In_z_ _Printf_format_string_ const _Elem* format, _In_ const struct tm* time, _In_opt_ locale_t locale)
+
1701 {
+
1702 std::basic_string<_Elem, _Traits, _Ax> str;
+
1703 strcatftime(str, format, time, locale);
+
1704 return str;
+
1705 }
+
1706
+
1712 template<class T>
+
1713 inline void strlwr(_Inout_z_ T* str)
+
1714 {
+
1715 _Assume_(str);
+
1716 for (size_t i = 0; str[i]; ++i)
+
1717 str[i] = tolower(str[i]);
+
1718 }
+
1719
+
1726 template<class T>
+
1727 inline void strlwr(_Inout_z_ T* str, _In_ const std::locale& locale)
+
1728 {
+
1729 _Assume_(str);
+
1730 const auto& ctype = std::use_facet<std::ctype<T>>(locale);
+
1731 for (size_t i = 0; str[i]; ++i)
+
1732 str[i] = ctype.tolower(str[i]);
+
1733 }
+
1734
+
1741 template<class T>
+
1742 inline void strlwr(_Inout_updates_z_(count) T* str, _In_ size_t count)
+
1743 {
+
1744 _Assume_(str || !count);
+
1745 for (size_t i = 0; i < count && str[i]; ++i)
+
1746 str[i] = tolower(str[i]);
+
1747 }
+
1748
+
1756 template<class T>
+
1757 inline void strlwr(_Inout_updates_z_(count) T* str, _In_ size_t count, _In_ const std::locale& locale)
+
1758 {
+
1759 _Assume_(str || !count);
+
1760 const auto& ctype = std::use_facet<std::ctype<T>>(locale);
+
1761 for (size_t i = 0; i < count && str[i]; ++i)
+
1762 str[i] = ctype.tolower(str[i]);
+
1763 }
+
1764
+
1770 template<class T>
+
1771 inline void strupr(_Inout_z_ T* str)
+
1772 {
+
1773 _Assume_(str);
+
1774 for (size_t i = 0; str[i]; ++i)
+
1775 str[i] = toupper(str[i]);
+
1776 }
+
1777
+
1784 template<class T>
+
1785 inline void strupr(_Inout_z_ T* str, _In_ const std::locale& locale)
+
1786 {
+
1787 _Assume_(str);
+
1788 const auto& ctype = std::use_facet<std::ctype<T>>(locale);
+
1789 for (size_t i = 0; str[i]; ++i)
+
1790 str[i] = ctype.toupper(str[i]);
+
1791 }
+
1792
+
1799 template<class T>
+
1800 inline void strupr(_Inout_updates_z_(count) T* str, _In_ size_t count)
+
1801 {
+
1802 _Assume_(str || !count);
+
1803 for (size_t i = 0; i < count && str[i]; ++i)
+
1804 str[i] = toupper(str[i]);
+
1805 }
+
1806
+
1814 template<class T>
+
1815 inline void strupr(_Inout_updates_z_(count) T* str, _In_ size_t count, _In_ const std::locale& locale)
+
1816 {
+
1817 _Assume_(str || !count);
+
1818 const auto& ctype = std::use_facet<std::ctype<T>>(locale);
+
1819 for (size_t i = 0; i < count && str[i]; ++i)
+
1820 str[i] = ctype.toupper(str[i]);
+
1821 }
+
1822
+
1828 template<class _Elem, class _Traits = std::char_traits<_Elem>, class _Ax = std::allocator<_Elem>>
+
1829 inline void strupr(_Inout_ std::basic_string<_Elem, _Traits, _Ax>& str)
+
1830 {
+
1831 for (size_t i = 0; i < str.size(); ++i)
+
1832 str[i] = toupper(str[i]);
+
1833 }
+
1834
+
1841 template<class _Elem, class _Traits = std::char_traits<_Elem>, class _Ax = std::allocator<_Elem>>
+
1842 inline void strupr(_Inout_ std::basic_string<_Elem, _Traits, _Ax>& str, _In_ const std::locale& locale)
+
1843 {
+
1844 const auto& ctype = std::use_facet<std::ctype<_Elem>>(locale);
+
1845 for (size_t i = 0; i < str.size(); ++i)
+
1846 str[i] = ctype.toupper(str[i]);
+
1847 }
+
1848
+
1857 template<class T>
+
1858 inline size_t ltrim(
+
1859 _Inout_z_count_(count) T* str, _In_ size_t count)
+
1860 {
+
1861 for (size_t i = 0;; ++i) {
+
1862 if (i >= count) {
+
1863 if (count) str[0] = 0;
+
1864 return 0;
+
1865 }
+
1866 if (!str[i]) {
+
1867 str[0] = 0;
+
1868 return 0;
+
1869 }
+
1870 if (!isspace(str[i])) {
+
1871 if (!i)
+
1872 return strnlen(str, count);
+
1873 size_t n = count != SIZE_MAX ? strncpy(str, str + i, count - i) : strcpy(str, str + i);
+
1874 str[n] = 0;
+
1875 return n;
+
1876 }
+
1877 }
+
1878 }
+
1879
+
1889 template<class T>
+
1890 inline size_t ltrim(
+
1891 _Inout_z_count_(count) T* str, _In_ size_t count,
+
1892 _In_ const std::locale& locale)
+
1893 {
+
1894 const auto& ctype = std::use_facet<std::ctype<T>>(locale);
+
1895 for (size_t i = 0;; ++i) {
+
1896 if (i >= count) {
+
1897 if (count) str[0] = 0;
+
1898 return 0;
+
1899 }
+
1900 if (!str[i]) {
+
1901 str[0] = 0;
+
1902 return 0;
+
1903 }
+
1904 if (!ctype.is(ctype.space, str[i])) {
+
1905 if (!i)
+
1906 return strnlen(str, count);
+
1907 size_t n = count != SIZE_MAX ? strncpy(str, str + i, count - i) : strcpy(str, str + i);
+
1908 str[n] = 0;
+
1909 return n;
+
1910 }
+
1911 }
+
1912 }
+
1913
+
1919 template<class _Elem, class _Traits = std::char_traits<_Elem>, class _Ax = std::allocator<_Elem>>
+
1920 inline void ltrim(_Inout_ std::basic_string<_Elem, _Traits, _Ax>& s)
+
1921 {
+
1922 s.erase(
+
1923 s.begin(),
+
1924 std::find_if(
+
1925 s.begin(),
+
1926 s.end(),
+
1927 [&](_In_ _Elem ch) { return !isspace(ch); }));
+
1928 }
+
1929
+
1936 template<class _Elem, class _Traits = std::char_traits<_Elem>, class _Ax = std::allocator<_Elem>>
+
1937 inline void ltrim(_Inout_ std::basic_string<_Elem, _Traits, _Ax>& s, _In_ const std::locale& locale)
+
1938 {
+
1939 const auto& ctype = std::use_facet<std::ctype<_Elem>>(locale);
+
1940 s.erase(
+
1941 s.begin(),
+
1942 std::find_if(
+
1943 s.begin(),
+
1944 s.end(),
+
1945 [&](_In_ _Elem ch) { return !ctype.is(ctype.space, ch); }));
+
1946 }
+
1947
+
1956 template<class T>
+
1957 inline size_t rtrim(
+
1958 _Inout_z_count_(count) T* str, _In_ size_t count)
+
1959 {
+
1960 for (size_t i = 0, j = 0;;) {
+
1961 if (i >= count || !str[i]) {
+
1962 if (j < count) str[j] = 0;
+
1963 return j;
+
1964 }
+
1965 if (!isspace(str[i]))
+
1966 j = ++i;
+
1967 else
+
1968 ++i;
+
1969 }
+
1970 }
+
1971
+
1981 template<class T>
+
1982 inline size_t rtrim(
+
1983 _Inout_z_count_(count) T* str, _In_ size_t count,
+
1984 _In_ const std::locale& locale)
+
1985 {
+
1986 const auto& ctype = std::use_facet<std::ctype<T>>(locale);
+
1987 for (size_t i = 0, j = 0;;) {
+
1988 if (i >= count || !str[i]) {
+
1989 if (j < count) str[j] = 0;
+
1990 return j;
+
1991 }
+
1992 if (!ctype.is(ctype.space, str[i]))
+
1993 j = ++i;
+
1994 else
+
1995 ++i;
+
1996 }
+
1997 }
+
1998
+
2004 template<class _Elem, class _Traits = std::char_traits<_Elem>, class _Ax = std::allocator<_Elem>>
+
2005 static inline void rtrim(_Inout_ std::basic_string<_Elem, _Traits, _Ax>& s)
+
2006 {
+
2007 s.erase(
+
2008 std::find_if(
+
2009 s.rbegin(),
+
2010 s.rend(),
+
2011 [&](_In_ _Elem ch) { return !isspace(ch); }).base(),
+
2012 s.end());
+
2013 }
+
2014
+
2021 template<class _Elem, class _Traits = std::char_traits<_Elem>, class _Ax = std::allocator<_Elem>>
+
2022 static inline void rtrim(_Inout_ std::basic_string<_Elem, _Traits, _Ax>& s, _In_ const std::locale& locale)
+
2023 {
+
2024 const auto& ctype = std::use_facet<std::ctype<_Elem>>(locale);
+
2025 s.erase(
+
2026 std::find_if(
+
2027 s.rbegin(),
+
2028 s.rend(),
+
2029 [&](_In_ _Elem ch) { return !ctype.is(ctype.space, ch); }).base(),
+
2030 s.end());
+
2031 }
+
2032
+
2041 template<class T>
+
2042 inline size_t trim(
+
2043 _Inout_z_count_(count) T* str, _In_ size_t count)
+
2044 {
+
2045 return ltrim(str, rtrim(str, count));
+
2046 }
+
2047
+
2057 template<class T>
+
2058 inline size_t trim(
+
2059 _Inout_z_count_(count) T* str, _In_ size_t count,
+
2060 _In_ const std::locale& locale)
+
2061 {
+
2062 return ltrim(str, rtrim(str, count, locale), locale);
+
2063 }
+
2064
+
2070 template<class _Elem, class _Traits = std::char_traits<_Elem>, class _Ax = std::allocator<_Elem>>
+
2071 static inline void trim(_Inout_ std::basic_string<_Elem, _Traits, _Ax>& s)
+
2072 {
+
2073 auto nonspace = [&](_In_ _Elem ch) { return !isspace(ch); };
+
2074 s.erase(
+
2075 s.begin(),
+
2076 std::find_if(
+
2077 s.begin(),
+
2078 s.end(),
+
2079 nonspace));
+
2080 s.erase(
+
2081 std::find_if(
+
2082 s.rbegin(),
+
2083 s.rend(),
+
2084 nonspace).base(),
+
2085 s.end());
+
2086 }
+
2087
+
2094 template<class _Elem, class _Traits = std::char_traits<_Elem>, class _Ax = std::allocator<_Elem>>
+
2095 static inline void trim(_Inout_ std::basic_string<_Elem, _Traits, _Ax>& s, _In_ const std::locale& locale)
+
2096 {
+
2097 const auto& ctype = std::use_facet<std::ctype<_Elem>>(locale);
+
2098 auto nonspace = [&](_In_ _Elem ch) { return !ctype.is(ctype.space, ch); };
+
2099 s.erase(
+
2100 s.begin(),
+
2101 std::find_if(
+
2102 s.begin(),
+
2103 s.end(),
+
2104 nonspace));
+
2105 s.erase(
+
2106 std::find_if(
+
2107 s.rbegin(),
+
2108 s.rend(),
+
2109 nonspace).base(),
+
2110 s.end());
+
2111 }
+
2112}
diff --git a/structstdex_1_1chrono_1_1aosn__date-members.html b/structstdex_1_1chrono_1_1aosn__date-members.html index 132d05c3c..86bdd63d8 100644 --- a/structstdex_1_1chrono_1_1aosn__date-members.html +++ b/structstdex_1_1chrono_1_1aosn__date-members.html @@ -96,7 +96,7 @@ $(function() { diff --git a/structstdex_1_1chrono_1_1aosn__date.html b/structstdex_1_1chrono_1_1aosn__date.html index b260c430d..6c13f9e78 100644 --- a/structstdex_1_1chrono_1_1aosn__date.html +++ b/structstdex_1_1chrono_1_1aosn__date.html @@ -152,7 +152,7 @@ static constexpr bool is_s diff --git a/structstdex_1_1chrono_1_1aosn__timestamp-members.html b/structstdex_1_1chrono_1_1aosn__timestamp-members.html index ab629db56..7d031459a 100644 --- a/structstdex_1_1chrono_1_1aosn__timestamp-members.html +++ b/structstdex_1_1chrono_1_1aosn__timestamp-members.html @@ -110,7 +110,7 @@ $(function() { diff --git a/structstdex_1_1chrono_1_1aosn__timestamp.html b/structstdex_1_1chrono_1_1aosn__timestamp.html index 502dcbdcd..7f2f0a1ea 100644 --- a/structstdex_1_1chrono_1_1aosn__timestamp.html +++ b/structstdex_1_1chrono_1_1aosn__timestamp.html @@ -197,7 +197,7 @@ static constexpr rep one_w diff --git a/structstdex_1_1free__locale__delete-members.html b/structstdex_1_1free__locale__delete-members.html index 75b841017..3801398dd 100644 --- a/structstdex_1_1free__locale__delete-members.html +++ b/structstdex_1_1free__locale__delete-members.html @@ -84,7 +84,7 @@ $(function() { diff --git a/structstdex_1_1free__locale__delete.html b/structstdex_1_1free__locale__delete.html index 12abfdfb9..8d1c3a7a2 100644 --- a/structstdex_1_1free__locale__delete.html +++ b/structstdex_1_1free__locale__delete.html @@ -101,7 +101,7 @@ void operator() (local diff --git a/structstdex_1_1html_1_1element__traits-members.html b/structstdex_1_1html_1_1element__traits-members.html index 79f1c23c2..f963950ba 100644 --- a/structstdex_1_1html_1_1element__traits-members.html +++ b/structstdex_1_1html_1_1element__traits-members.html @@ -102,7 +102,7 @@ $(function() { diff --git a/structstdex_1_1html_1_1element__traits.html b/structstdex_1_1html_1_1element__traits.html index de8dd9300..91a6d7959 100644 --- a/structstdex_1_1html_1_1element__traits.html +++ b/structstdex_1_1html_1_1element__traits.html @@ -858,7 +858,7 @@ template<class T > diff --git a/structstdex_1_1html_1_1entity-members.html b/structstdex_1_1html_1_1entity-members.html index 64f195041..292ec1d11 100644 --- a/structstdex_1_1html_1_1entity-members.html +++ b/structstdex_1_1html_1_1entity-members.html @@ -85,7 +85,7 @@ $(function() { diff --git a/structstdex_1_1html_1_1entity.html b/structstdex_1_1html_1_1entity.html index 23b8b428b..6194c4488 100644 --- a/structstdex_1_1html_1_1entity.html +++ b/structstdex_1_1html_1_1entity.html @@ -106,7 +106,7 @@ struct stdex::html::entity< _Elem, _Traits, _Alloc >

HTML entity.

diff --git a/structstdex_1_1html_1_1inserted__token-members.html b/structstdex_1_1html_1_1inserted__token-members.html index 1e82d92c9..317637f46 100644 --- a/structstdex_1_1html_1_1inserted__token-members.html +++ b/structstdex_1_1html_1_1inserted__token-members.html @@ -87,7 +87,7 @@ $(function() { diff --git a/structstdex_1_1html_1_1inserted__token.html b/structstdex_1_1html_1_1inserted__token.html index 33c2c7100..4190a0a7f 100644 --- a/structstdex_1_1html_1_1inserted__token.html +++ b/structstdex_1_1html_1_1inserted__token.html @@ -113,7 +113,7 @@ bool after_word diff --git a/structstdex_1_1interval-members.html b/structstdex_1_1interval-members.html index 2d9c9877e..91d1c6d16 100644 --- a/structstdex_1_1interval-members.html +++ b/structstdex_1_1interval-members.html @@ -103,7 +103,7 @@ $(function() { diff --git a/structstdex_1_1interval.html b/structstdex_1_1interval.html index 84024fab9..0f1754e7b 100644 --- a/structstdex_1_1interval.html +++ b/structstdex_1_1interval.html @@ -722,7 +722,7 @@ template<class T > diff --git a/structstdex_1_1mapping-members.html b/structstdex_1_1mapping-members.html index 39f85f957..dd719aea5 100644 --- a/structstdex_1_1mapping-members.html +++ b/structstdex_1_1mapping-members.html @@ -90,7 +90,7 @@ $(function() { diff --git a/structstdex_1_1mapping.html b/structstdex_1_1mapping.html index af3fbc51e..98c8d7646 100644 --- a/structstdex_1_1mapping.html +++ b/structstdex_1_1mapping.html @@ -283,7 +283,7 @@ template<class T > diff --git a/structstdex_1_1no__delete-members.html b/structstdex_1_1no__delete-members.html index 798492975..9591e4773 100644 --- a/structstdex_1_1no__delete-members.html +++ b/structstdex_1_1no__delete-members.html @@ -86,7 +86,7 @@ $(function() { diff --git a/structstdex_1_1no__delete.html b/structstdex_1_1no__delete.html index c514bf0a2..0fddfe8df 100644 --- a/structstdex_1_1no__delete.html +++ b/structstdex_1_1no__delete.html @@ -105,7 +105,7 @@ struct stdex::no_delete< T >

Noop deleter.

diff --git a/structstdex_1_1no__delete_3_01_t_0f_0e_4-members.html b/structstdex_1_1no__delete_3_01_t_0f_0e_4-members.html index 6d02a3e46..1b8ec9952 100644 --- a/structstdex_1_1no__delete_3_01_t_0f_0e_4-members.html +++ b/structstdex_1_1no__delete_3_01_t_0f_0e_4-members.html @@ -86,7 +86,7 @@ $(function() { diff --git a/structstdex_1_1no__delete_3_01_t_0f_0e_4.html b/structstdex_1_1no__delete_3_01_t_0f_0e_4.html index 1243159e8..10bb3a829 100644 --- a/structstdex_1_1no__delete_3_01_t_0f_0e_4.html +++ b/structstdex_1_1no__delete_3_01_t_0f_0e_4.html @@ -106,7 +106,7 @@ struct stdex::no_delete< T[]>

Noop array deleter.

diff --git a/structstdex_1_1parser_1_1html__attribute-members.html b/structstdex_1_1parser_1_1html__attribute-members.html index ba4383310..b3136c592 100644 --- a/structstdex_1_1parser_1_1html__attribute-members.html +++ b/structstdex_1_1parser_1_1html__attribute-members.html @@ -85,7 +85,7 @@ $(function() { diff --git a/structstdex_1_1parser_1_1html__attribute.html b/structstdex_1_1parser_1_1html__attribute.html index c9da4948b..f70c0db53 100644 --- a/structstdex_1_1parser_1_1html__attribute.html +++ b/structstdex_1_1parser_1_1html__attribute.html @@ -105,7 +105,7 @@ Public Attributes diff --git a/structstdex_1_1parser_1_1http__factor__more-members.html b/structstdex_1_1parser_1_1http__factor__more-members.html index cb2aef389..16da8dc9e 100644 --- a/structstdex_1_1parser_1_1http__factor__more-members.html +++ b/structstdex_1_1parser_1_1http__factor__more-members.html @@ -84,7 +84,7 @@ $(function() { diff --git a/structstdex_1_1parser_1_1http__factor__more.html b/structstdex_1_1parser_1_1http__factor__more.html index 50c5ac975..4b020a569 100644 --- a/structstdex_1_1parser_1_1http__factor__more.html +++ b/structstdex_1_1parser_1_1http__factor__more.html @@ -93,7 +93,7 @@ Public Member Functions diff --git a/structstdex_1_1stream_1_1buffer_1_1buffer__t-members.html b/structstdex_1_1stream_1_1buffer_1_1buffer__t-members.html index ef71640f5..17df87d6d 100644 --- a/structstdex_1_1stream_1_1buffer_1_1buffer__t-members.html +++ b/structstdex_1_1stream_1_1buffer_1_1buffer__t-members.html @@ -89,7 +89,7 @@ $(function() { diff --git a/structstdex_1_1stream_1_1buffer_1_1buffer__t.html b/structstdex_1_1stream_1_1buffer_1_1buffer__t.html index 100011fd0..327479fe8 100644 --- a/structstdex_1_1stream_1_1buffer_1_1buffer__t.html +++ b/structstdex_1_1stream_1_1buffer_1_1buffer__t.html @@ -109,7 +109,7 @@ size_t capacity diff --git a/structstdex_1_1stream_1_1fifo_1_1node__t-members.html b/structstdex_1_1stream_1_1fifo_1_1node__t-members.html index 36f108ff9..8ffc7f099 100644 --- a/structstdex_1_1stream_1_1fifo_1_1node__t-members.html +++ b/structstdex_1_1stream_1_1fifo_1_1node__t-members.html @@ -86,7 +86,7 @@ $(function() { diff --git a/structstdex_1_1stream_1_1fifo_1_1node__t.html b/structstdex_1_1stream_1_1fifo_1_1node__t.html index 2c667bf2b..a2e7b1b99 100644 --- a/structstdex_1_1stream_1_1fifo_1_1node__t.html +++ b/structstdex_1_1stream_1_1fifo_1_1node__t.html @@ -99,7 +99,7 @@ uint8_t data [0]< diff --git a/structstdex_1_1sys__info__t-members.html b/structstdex_1_1sys__info__t-members.html index 903d34e04..5f2069618 100644 --- a/structstdex_1_1sys__info__t-members.html +++ b/structstdex_1_1sys__info__t-members.html @@ -89,7 +89,7 @@ $(function() { diff --git a/structstdex_1_1sys__info__t.html b/structstdex_1_1sys__info__t.html index 82ac98a53..fde4bd96c 100644 --- a/structstdex_1_1sys__info__t.html +++ b/structstdex_1_1sys__info__t.html @@ -137,7 +137,7 @@ struct utsname m_utsn< diff --git a/sys__info_8hpp_source.html b/sys__info_8hpp_source.html index 6d41969bb..080632ccc 100644 --- a/sys__info_8hpp_source.html +++ b/sys__info_8hpp_source.html @@ -285,7 +285,7 @@ $(document).ready(function() { init_codefold(0); }); diff --git a/system_8hpp_source.html b/system_8hpp_source.html index b851d8400..cc2c25a8b 100644 --- a/system_8hpp_source.html +++ b/system_8hpp_source.html @@ -289,7 +289,7 @@ $(document).ready(function() { init_codefold(0); }); diff --git a/unicode_8cpp_source.html b/unicode_8cpp_source.html index 203f3d155..af5e99d13 100644 --- a/unicode_8cpp_source.html +++ b/unicode_8cpp_source.html @@ -181,7 +181,7 @@ $(document).ready(function() { init_codefold(0); }); diff --git a/unicode_8hpp_source.html b/unicode_8hpp_source.html index bd6aa0576..700163197 100644 --- a/unicode_8hpp_source.html +++ b/unicode_8hpp_source.html @@ -151,7 +151,7 @@ $(document).ready(function() { init_codefold(0); });
67 struct charset_less {
68 inline bool operator()(_In_z_ const char* a, _In_z_ const char* b) const
69 {
-
70 return stdex::stricmp(a, b, stdex::std_locale_C) < 0;
+
70 return stdex::stricmp(a, b) < 0;
71 }
72 };
73 static const std::map<const char*, charset_id, charset_less> charsets = {
@@ -709,7 +709,7 @@ $(document).ready(function() { init_codefold(0); }); diff --git a/unionstdex_1_1md2__t-members.html b/unionstdex_1_1md2__t-members.html index a2e59516a..a60e6ff5f 100644 --- a/unionstdex_1_1md2__t-members.html +++ b/unionstdex_1_1md2__t-members.html @@ -89,7 +89,7 @@ $(function() { diff --git a/unionstdex_1_1md2__t.html b/unionstdex_1_1md2__t.html index ea7e21f3f..d2f5646d8 100644 --- a/unionstdex_1_1md2__t.html +++ b/unionstdex_1_1md2__t.html @@ -123,7 +123,7 @@ Friends diff --git a/unionstdex_1_1sha256__t-members.html b/unionstdex_1_1sha256__t-members.html index 5935ba5d0..0095e63ad 100644 --- a/unionstdex_1_1sha256__t-members.html +++ b/unionstdex_1_1sha256__t-members.html @@ -89,7 +89,7 @@ $(function() { diff --git a/unionstdex_1_1sha256__t.html b/unionstdex_1_1sha256__t.html index 0c9031c64..6389b26ab 100644 --- a/unionstdex_1_1sha256__t.html +++ b/unionstdex_1_1sha256__t.html @@ -123,7 +123,7 @@ Friends diff --git a/unionstdex_1_1sha__t-members.html b/unionstdex_1_1sha__t-members.html index b68836067..a19c35378 100644 --- a/unionstdex_1_1sha__t-members.html +++ b/unionstdex_1_1sha__t-members.html @@ -89,7 +89,7 @@ $(function() { diff --git a/unionstdex_1_1sha__t.html b/unionstdex_1_1sha__t.html index 546fa3b7a..349c4d1be 100644 --- a/unionstdex_1_1sha__t.html +++ b/unionstdex_1_1sha__t.html @@ -123,7 +123,7 @@ Friends diff --git a/uuid_8hpp_source.html b/uuid_8hpp_source.html index b22204bb8..1072d50f3 100644 --- a/uuid_8hpp_source.html +++ b/uuid_8hpp_source.html @@ -145,7 +145,7 @@ $(document).ready(function() { init_codefold(0); }); diff --git a/vector__queue_8hpp_source.html b/vector__queue_8hpp_source.html index 05582f143..01ebe430a 100644 --- a/vector__queue_8hpp_source.html +++ b/vector__queue_8hpp_source.html @@ -453,7 +453,7 @@ $(document).ready(function() { init_codefold(0); }); diff --git a/watchdog_8cpp_source.html b/watchdog_8cpp_source.html index f9d6461f9..52649990f 100644 --- a/watchdog_8cpp_source.html +++ b/watchdog_8cpp_source.html @@ -118,7 +118,7 @@ $(document).ready(function() { init_codefold(0); }); diff --git a/watchdog_8hpp_source.html b/watchdog_8hpp_source.html index 73c7cf1e6..e3e6e3716 100644 --- a/watchdog_8hpp_source.html +++ b/watchdog_8hpp_source.html @@ -176,7 +176,7 @@ $(document).ready(function() { init_codefold(0); }); diff --git a/windows_8h_source.html b/windows_8h_source.html index 3babd94c8..f7f8e5518 100644 --- a/windows_8h_source.html +++ b/windows_8h_source.html @@ -109,7 +109,7 @@ $(document).ready(function() { init_codefold(0); });