diff --git a/_unit_tests_2compat_8hpp_source.html b/_unit_tests_2compat_8hpp_source.html index c57a78f5f..7aa5b32ec 100644 --- a/_unit_tests_2compat_8hpp_source.html +++ b/_unit_tests_2compat_8hpp_source.html @@ -162,7 +162,7 @@ $(document).ready(function() { init_codefold(0); }); diff --git a/annotated.html b/annotated.html index cfb4bcc29..c3a1984ab 100644 --- a/annotated.html +++ b/annotated.html @@ -87,88 +87,93 @@ $(function() {  Cbasic_bolTest for beginning of line  Cbasic_branchTest for any  Cbasic_chemical_formulaTest for chemical formula - Cbasic_cuTest for specific code unit - Cbasic_cu_setTest for any code unit from a given string of code units - Cbasic_dateTest for date - Cbasic_dns_domain_charTest for valid DNS domain character - Cbasic_dns_nameTest for DNS domain/hostname - Cbasic_email_addressTest for e-mail address - Cbasic_emoticonTest for emoticon - Cbasic_eolTest for end of line - Cbasic_fractionTest for fraction - Cbasic_integerBase class for integer testing - Cbasic_integer10Test for decimal integer - Cbasic_integer10tsTest for decimal integer possibly containing thousand separators - Cbasic_integer16Test for hexadecimal integer - Cbasic_ipv4_addressTest for IPv4 address - Cbasic_ipv6_addressTest for IPv6 address - Cbasic_ipv6_scope_id_charTest for valid IPv6 address scope ID character - Cbasic_iterationsTest for repeating - Cbasic_json_stringTest for JSON string - Cbasic_mixed_numeralTest for mixed numeral - Cbasic_monetary_numeralTest for monetary numeral - Cbasic_noop"No-op" match - Cbasic_parserBase template for all parsers - Cbasic_permutationTest for permutation - Cbasic_phone_numberTest for phone number - Cbasic_punct_cuTest for any punctuation code unit - Cbasic_roman_numeralTest for Roman numeral - Cbasic_scientific_numeralTest for scientific numeral - Cbasic_scoreTest for match score - Cbasic_sequenceTest for sequence - Cbasic_set - Cbasic_signed_numeralTest for signed numeral - Cbasic_space_cuTest for any space code unit - Cbasic_space_or_punct_cuTest for any space or punctuation code unit - Cbasic_stringTest for given string - Cbasic_string_branchTest for any string - Cbasic_timeTest for time - Cbasic_urlTest for URL - Cbasic_url_password_charTest for valid URL password character - Cbasic_url_pathTest for URL path - Cbasic_url_path_charTest for valid URL path character - Cbasic_url_username_charTest for valid URL username character - Chttp_agentTest for HTTP agent - Chttp_any_typeTest for HTTP any type - Chttp_asteriskTest for HTTP asterisk - Chttp_cookieTest for HTTP cookie (RFC2109) - Chttp_cookie_parameterTest for HTTP cookie parameter (RFC2109) - Chttp_factor_more - Chttp_headerTest for HTTP header - Chttp_languageTest for HTTP language (RFC1766) - Chttp_line_breakTest for HTTP line break (RFC2616: CRLF | LF) - Chttp_media_rangeTest for HTTP media range (RFC2616: media-range) - Chttp_media_typeTest for HTTP media type (RFC2616: media-type) - Chttp_parameterTest for HTTP parameter (RFC2616: parameter) - Chttp_protocolTest for HTTP protocol - Chttp_quoted_stringTest for HTTP quoted string (RFC2616: quoted-string) - Chttp_requestTest for HTTP request - Chttp_spaceTest for HTTP space (RFC2616: LWS) - Chttp_text_charTest for HTTP text character (RFC2616: TEXT) - Chttp_tokenTest for HTTP token (RFC2616: token - tolerates non-ASCII) - Chttp_urlTest for HTTP URL - Chttp_url_parameterTest for HTTP URL parameter - Chttp_url_pathTest for HTTP URL path segment - Chttp_url_path_segmentTest for HTTP URL path segment - Chttp_url_portTest for HTTP URL port - Chttp_url_serverTest for HTTP URL server - Chttp_valueTest for HTTP value (RFC2616: value) - Chttp_value_collectionCollection of HTTP values - Chttp_weightTest for HTTP weight factor - Chttp_weighted_valueTest for HTTP weighted value - Cparser_collectionBase template for collection-holding parsers - Csgml_any_cpTest for any SGML code point - Csgml_cpTest for specific SGML code point - Csgml_cp_setTest for any SGML code point from a given string of SGML code points - Csgml_dns_domain_charTest for valid DNS domain SGML character - Csgml_ipv6_scope_id_charTest for valid IPv6 address scope ID SGML character - Csgml_punct_cpTest for any SGML punctuation code point - Csgml_space_cpTest for any SGML space code point - Csgml_space_or_punct_cpTest for any SGML space or punctuation code point - Csgml_stringTest for SGML given string - Csgml_url_password_charTest for valid URL password SGML character - Csgml_url_path_charTest for valid URL path SGML character - Csgml_url_username_charTest for valid URL username SGML character + Cbasic_creditor_referenceTest for Creditor Reference + Cbasic_cuTest for specific code unit + Cbasic_cu_setTest for any code unit from a given string of code units + Cbasic_dateTest for date + Cbasic_dns_domain_charTest for valid DNS domain character + Cbasic_dns_nameTest for DNS domain/hostname + Cbasic_email_addressTest for e-mail address + Cbasic_emoticonTest for emoticon + Cbasic_eolTest for end of line + Cbasic_fractionTest for fraction + Cbasic_ibanTest for International Bank Account Number + Cbasic_integerBase class for integer testing + Cbasic_integer10Test for decimal integer + Cbasic_integer10tsTest for decimal integer possibly containing thousand separators + Cbasic_integer16Test for hexadecimal integer + Cbasic_ipv4_addressTest for IPv4 address + Cbasic_ipv6_addressTest for IPv6 address + Cbasic_ipv6_scope_id_charTest for valid IPv6 address scope ID character + Cbasic_iterationsTest for repeating + Cbasic_json_stringTest for JSON string + Cbasic_mixed_numeralTest for mixed numeral + Cbasic_monetary_numeralTest for monetary numeral + Cbasic_noop"No-op" match + Cbasic_parserBase template for all parsers + Cbasic_permutationTest for permutation + Cbasic_phone_numberTest for phone number + Cbasic_punct_cuTest for any punctuation code unit + Cbasic_roman_numeralTest for Roman numeral + Cbasic_scientific_numeralTest for scientific numeral + Cbasic_scoreTest for match score + Cbasic_sequenceTest for sequence + Cbasic_set + Cbasic_si_referenceTest for SI Reference + Cbasic_si_reference_delimiterTest for SI Reference delimiter + Cbasic_si_reference_partTest for SI Reference part + Cbasic_signed_numeralTest for signed numeral + Cbasic_space_cuTest for any space code unit + Cbasic_space_or_punct_cuTest for any space or punctuation code unit + Cbasic_stringTest for given string + Cbasic_string_branchTest for any string + Cbasic_timeTest for time + Cbasic_urlTest for URL + Cbasic_url_password_charTest for valid URL password character + Cbasic_url_pathTest for URL path + Cbasic_url_path_charTest for valid URL path character + Cbasic_url_username_charTest for valid URL username character + Chttp_agentTest for HTTP agent + Chttp_any_typeTest for HTTP any type + Chttp_asteriskTest for HTTP asterisk + Chttp_cookieTest for HTTP cookie (RFC2109) + Chttp_cookie_parameterTest for HTTP cookie parameter (RFC2109) + Chttp_factor_more + Chttp_headerTest for HTTP header + Chttp_languageTest for HTTP language (RFC1766) + Chttp_line_breakTest for HTTP line break (RFC2616: CRLF | LF) + Chttp_media_rangeTest for HTTP media range (RFC2616: media-range) + Chttp_media_typeTest for HTTP media type (RFC2616: media-type) + Chttp_parameterTest for HTTP parameter (RFC2616: parameter) + Chttp_protocolTest for HTTP protocol + Chttp_quoted_stringTest for HTTP quoted string (RFC2616: quoted-string) + Chttp_requestTest for HTTP request + Chttp_spaceTest for HTTP space (RFC2616: LWS) + Chttp_text_charTest for HTTP text character (RFC2616: TEXT) + Chttp_tokenTest for HTTP token (RFC2616: token - tolerates non-ASCII) + Chttp_urlTest for HTTP URL + Chttp_url_parameterTest for HTTP URL parameter + Chttp_url_pathTest for HTTP URL path segment + Chttp_url_path_segmentTest for HTTP URL path segment + Chttp_url_portTest for HTTP URL port + Chttp_url_serverTest for HTTP URL server + Chttp_valueTest for HTTP value (RFC2616: value) + Chttp_value_collectionCollection of HTTP values + Chttp_weightTest for HTTP weight factor + Chttp_weighted_valueTest for HTTP weighted value + Cparser_collectionBase template for collection-holding parsers + Csgml_any_cpTest for any SGML code point + Csgml_cpTest for specific SGML code point + Csgml_cp_setTest for any SGML code point from a given string of SGML code points + Csgml_dns_domain_charTest for valid DNS domain SGML character + Csgml_ipv6_scope_id_charTest for valid IPv6 address scope ID SGML character + Csgml_punct_cpTest for any SGML punctuation code point + Csgml_space_cpTest for any SGML space code point + Csgml_space_or_punct_cpTest for any SGML space or punctuation code point + Csgml_stringTest for SGML given string + Csgml_url_password_charTest for valid URL password SGML character + Csgml_url_path_charTest for valid URL path SGML character + Csgml_url_username_charTest for valid URL username SGML character  Nstream  Casync_readerProvides read-ahead stream capability  Casync_writerProvides write-back stream capability @@ -219,7 +224,7 @@ $(function() { diff --git a/base64_8hpp_source.html b/base64_8hpp_source.html index b5328a2b7..6e1753884 100644 --- a/base64_8hpp_source.html +++ b/base64_8hpp_source.html @@ -346,7 +346,7 @@ $(document).ready(function() { init_codefold(0); }); diff --git a/chrono_8hpp_source.html b/chrono_8hpp_source.html index 0d35dba81..a5b3969ab 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 2d172d309..f02f891b1 100644 --- a/classes.html +++ b/classes.html @@ -80,7 +80,7 @@ $(function() {
aosn_date (stdex::chrono)
aosn_timestamp (stdex::chrono)
async_reader (stdex::stream)
async_writer (stdex::stream)
B
-
base64_dec (stdex)
base64_enc (stdex)
basic (stdex::stream)
basic_angle (stdex::parser)
basic_any_cu (stdex::parser)
basic_bol (stdex::parser)
basic_branch (stdex::parser)
basic_chemical_formula (stdex::parser)
basic_cu (stdex::parser)
basic_cu_set (stdex::parser)
basic_date (stdex::parser)
basic_dns_domain_char (stdex::parser)
basic_dns_name (stdex::parser)
basic_email_address (stdex::parser)
basic_emoticon (stdex::parser)
basic_eol (stdex::parser)
basic_file (stdex::stream)
basic_fraction (stdex::parser)
basic_integer (stdex::parser)
basic_integer10 (stdex::parser)
basic_integer10ts (stdex::parser)
basic_integer16 (stdex::parser)
basic_ipv4_address (stdex::parser)
basic_ipv6_address (stdex::parser)
basic_ipv6_scope_id_char (stdex::parser)
basic_iterations (stdex::parser)
basic_json_string (stdex::parser)
basic_mixed_numeral (stdex::parser)
basic_monetary_numeral (stdex::parser)
basic_noop (stdex::parser)
basic_parser (stdex::parser)
basic_permutation (stdex::parser)
basic_phone_number (stdex::parser)
basic_punct_cu (stdex::parser)
basic_roman_numeral (stdex::parser)
basic_scientific_numeral (stdex::parser)
basic_score (stdex::parser)
basic_sequence (stdex::parser)
basic_set (stdex::parser)
basic_signed_numeral (stdex::parser)
basic_space_cu (stdex::parser)
basic_space_or_punct_cu (stdex::parser)
basic_string (stdex::parser)
basic_string_branch (stdex::parser)
basic_sys (stdex::stream)
basic_time (stdex::parser)
basic_url (stdex::parser)
basic_url_password_char (stdex::parser)
basic_url_path (stdex::parser)
basic_url_path_char (stdex::parser)
basic_url_username_char (stdex::parser)
buffer (stdex::stream)
buffer::buffer_t (stdex::stream)
buffered_sys (stdex::stream)
+
base64_dec (stdex)
base64_enc (stdex)
basic (stdex::stream)
basic_angle (stdex::parser)
basic_any_cu (stdex::parser)
basic_bol (stdex::parser)
basic_branch (stdex::parser)
basic_chemical_formula (stdex::parser)
basic_creditor_reference (stdex::parser)
basic_cu (stdex::parser)
basic_cu_set (stdex::parser)
basic_date (stdex::parser)
basic_dns_domain_char (stdex::parser)
basic_dns_name (stdex::parser)
basic_email_address (stdex::parser)
basic_emoticon (stdex::parser)
basic_eol (stdex::parser)
basic_file (stdex::stream)
basic_fraction (stdex::parser)
basic_iban (stdex::parser)
basic_integer (stdex::parser)
basic_integer10 (stdex::parser)
basic_integer10ts (stdex::parser)
basic_integer16 (stdex::parser)
basic_ipv4_address (stdex::parser)
basic_ipv6_address (stdex::parser)
basic_ipv6_scope_id_char (stdex::parser)
basic_iterations (stdex::parser)
basic_json_string (stdex::parser)
basic_mixed_numeral (stdex::parser)
basic_monetary_numeral (stdex::parser)
basic_noop (stdex::parser)
basic_parser (stdex::parser)
basic_permutation (stdex::parser)
basic_phone_number (stdex::parser)
basic_punct_cu (stdex::parser)
basic_roman_numeral (stdex::parser)
basic_scientific_numeral (stdex::parser)
basic_score (stdex::parser)
basic_sequence (stdex::parser)
basic_set (stdex::parser)
basic_si_reference (stdex::parser)
basic_si_reference_delimiter (stdex::parser)
basic_si_reference_part (stdex::parser)
basic_signed_numeral (stdex::parser)
basic_space_cu (stdex::parser)
basic_space_or_punct_cu (stdex::parser)
basic_string (stdex::parser)
basic_string_branch (stdex::parser)
basic_sys (stdex::stream)
basic_time (stdex::parser)
basic_url (stdex::parser)
basic_url_password_char (stdex::parser)
basic_url_path (stdex::parser)
basic_url_path_char (stdex::parser)
basic_url_username_char (stdex::parser)
buffer (stdex::stream)
buffer::buffer_t (stdex::stream)
buffered_sys (stdex::stream)
C
cache (stdex::stream)
cache::cache_t (stdex::stream)
cached_file (stdex::stream)
charset_encoder (stdex)
converter (stdex::stream)
@@ -133,7 +133,7 @@ $(function() { diff --git a/classstdex_1_1base64__dec-members.html b/classstdex_1_1base64__dec-members.html index 4274fdfad..bfb3d987f 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 b9d38a013..a912f125c 100644 --- a/classstdex_1_1base64__dec.html +++ b/classstdex_1_1base64__dec.html @@ -230,7 +230,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 461af0575..5e621e203 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 0c8d07ab9..069034538 100644 --- a/classstdex_1_1base64__enc.html +++ b/classstdex_1_1base64__enc.html @@ -235,7 +235,7 @@ template<class _Elem , class _Traits , class _Ax > diff --git a/classstdex_1_1charset__encoder-members.html b/classstdex_1_1charset__encoder-members.html index 28ce8b9c1..ba5b42275 100644 --- a/classstdex_1_1charset__encoder-members.html +++ b/classstdex_1_1charset__encoder-members.html @@ -98,7 +98,7 @@ $(function() { diff --git a/classstdex_1_1charset__encoder.html b/classstdex_1_1charset__encoder.html index b729b0c76..cc98902e1 100644 --- a/classstdex_1_1charset__encoder.html +++ b/classstdex_1_1charset__encoder.html @@ -595,7 +595,7 @@ template<class _Traits_to = std::char_traits<T_to>, class _Alloc_to = diff --git a/classstdex_1_1errno__error-members.html b/classstdex_1_1errno__error-members.html index a830d59de..192c8371c 100644 --- a/classstdex_1_1errno__error-members.html +++ b/classstdex_1_1errno__error-members.html @@ -89,7 +89,7 @@ $(function() { diff --git a/classstdex_1_1errno__error.html b/classstdex_1_1errno__error.html index b0006ff6d..3ccefc9e3 100644 --- a/classstdex_1_1errno__error.html +++ b/classstdex_1_1errno__error.html @@ -286,7 +286,7 @@ errno_t m_num diff --git a/classstdex_1_1global__progress-members.html b/classstdex_1_1global__progress-members.html index 4f7523363..bfb953d22 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 6085f68f8..26bccd552 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 2c7ca4eaf..0ce222e6b 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 d68485649..2e5245922 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 e5fb1c06e..ba5856e05 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 34fbe4ce2..98b9ea571 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_1idrec_1_1record-members.html b/classstdex_1_1idrec_1_1record-members.html index 37ac2691b..f66dc710f 100644 --- a/classstdex_1_1idrec_1_1record-members.html +++ b/classstdex_1_1idrec_1_1record-members.html @@ -94,7 +94,7 @@ $(function() { diff --git a/classstdex_1_1idrec_1_1record.html b/classstdex_1_1idrec_1_1record.html index 76c1afcec..a89b6eac3 100644 --- a/classstdex_1_1idrec_1_1record.html +++ b/classstdex_1_1idrec_1_1record.html @@ -526,7 +526,7 @@ template<class T , class T_ID , const T_ID ID, class T_SIZE , unsigned int AL diff --git a/classstdex_1_1lazy__progress-members.html b/classstdex_1_1lazy__progress-members.html index 61f46ef8d..e9a4b55a1 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 37a32a8d3..8ea2c40f8 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_1parser_1_1basic__angle-members.html b/classstdex_1_1parser_1_1basic__angle-members.html index 96649ba5a..d1afbd324 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 d586c5e72..c9c4379c8 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 adf4055d7..7aac4d47d 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 a4b29ac6f..947deee2f 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 4ceabce23..dd320e8d6 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 f3ece00ab..b45069ac5 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 88bde2098..cc4cc84dc 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 ad8e061b6..4b327023b 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 33d06d8ca..35acd2c11 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 6daffa0e0..9ccceea9c 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 new file mode 100644 index 000000000..8de7895b1 --- /dev/null +++ b/classstdex_1_1parser_1_1basic__creditor__reference-members.html @@ -0,0 +1,102 @@ + + + + + + + +stdex: Member List + + + + + + + + + +
+
+ + + + + + +
+
stdex +
+
Additional custom or not Standard C++ covered algorithms
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
stdex::parser::basic_creditor_reference< T > Member List
+
+
+ +

This is the complete list of members for stdex::parser::basic_creditor_reference< T >, including all inherited members.

+ + + + + + + + + + + + + + +
basic_creditor_reference(const std::shared_ptr< basic_parser< T > > &space, const std::locale &locale=std::locale()) (defined in stdex::parser::basic_creditor_reference< T >)stdex::parser::basic_creditor_reference< T >inline
basic_parser(const std::locale &locale=std::locale()) (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inline
check_digitsstdex::parser::basic_creditor_reference< T >
intervalstdex::parser::basic_parser< T >
invalidate() (defined in stdex::parser::basic_creditor_reference< T >)stdex::parser::basic_creditor_reference< T >inlinevirtual
is_validstdex::parser::basic_creditor_reference< T >
m_locale (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >protected
m_space (defined in stdex::parser::basic_creditor_reference< T >)stdex::parser::basic_creditor_reference< T >protected
match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default) (defined in stdex::parser::basic_creditor_reference< T >)stdex::parser::basic_creditor_reference< T >inlinevirtual
match(const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=(size_t) -1, int flags=match_default) (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inline
referencestdex::parser::basic_creditor_reference< T >
search(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default) (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inline
~basic_parser() (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inlinevirtual
+ + + + diff --git a/classstdex_1_1parser_1_1basic__creditor__reference.html b/classstdex_1_1parser_1_1basic__creditor__reference.html new file mode 100644 index 000000000..d7a4a4ceb --- /dev/null +++ b/classstdex_1_1parser_1_1basic__creditor__reference.html @@ -0,0 +1,246 @@ + + + + + + + +stdex: stdex::parser::basic_creditor_reference< T > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
stdex +
+
Additional custom or not Standard C++ covered algorithms
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+Public Member Functions | +Public Attributes | +Protected Attributes | +List of all members
+
stdex::parser::basic_creditor_reference< T > Class Template Reference
+
+
+ +

Test for Creditor Reference. + More...

+ +

#include <stdex/parser.hpp>

+
+Inheritance diagram for stdex::parser::basic_creditor_reference< T >:
+
+
+ + +stdex::parser::basic_parser< T > + +
+ + + + + + + + + + + + + + + + +

+Public Member Functions

basic_creditor_reference (const std::shared_ptr< basic_parser< T > > &space, const std::locale &locale=std::locale())
 
virtual bool match (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
virtual void invalidate ()
 
- Public Member Functions inherited from stdex::parser::basic_parser< T >
basic_parser (const std::locale &locale=std::locale())
 
+bool search (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
+template<class _Traits , class _Ax >
bool match (const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
+ + + + + + + + + + + + + + +

+Public Attributes

+T check_digits [3]
 Two check digits.
 
+T reference [22]
 Normalized national reference number.
 
+bool is_valid
 Is reference valid per ISO 7064.
 
- Public Attributes inherited from stdex::parser::basic_parser< T >
+interval< size_tinterval
 Region of the last match.
 
+ + + + + + +

+Protected Attributes

+std::shared_ptr< basic_parser< T > > m_space
 
- Protected Attributes inherited from stdex::parser::basic_parser< T >
+std::locale m_locale
 
+

Detailed Description

+
template<class T>
+class stdex::parser::basic_creditor_reference< T >

Test for Creditor Reference.

+
See also
Creditor Reference
+

Member Function Documentation

+ +

◆ invalidate()

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + +
virtual void stdex::parser::basic_creditor_reference< T >::invalidate ()
+
+inlinevirtual
+
+ +

Reimplemented from stdex::parser::basic_parser< T >.

+ +
+
+ +

◆ match()

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
virtual bool stdex::parser::basic_creditor_reference< T >::match (_In_reads_or_z_(end) const T * text,
size_t start = 0,
size_t end = (size_t)-1,
int flags = match_default 
)
+
+inlinevirtual
+
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classstdex_1_1parser_1_1basic__creditor__reference.png b/classstdex_1_1parser_1_1basic__creditor__reference.png new file mode 100644 index 000000000..2222540c2 Binary files /dev/null and b/classstdex_1_1parser_1_1basic__creditor__reference.png differ diff --git a/classstdex_1_1parser_1_1basic__cu-members.html b/classstdex_1_1parser_1_1basic__cu-members.html index 80a70c03c..48f96518a 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 9031d1d41..061d83498 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 947165888..3354ee03c 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 a93b06647..64205acc7 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 17d6eb793..1b475f6cb 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 00d1d1ff0..7cd8bbb08 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 4460e5783..75340ab94 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 824d7ebb3..7d5bf3d79 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 b8d546449..27260aa65 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 f66c9a4a3..f62a4bd18 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 5e3bd6199..32e2c9bed 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 c30d94bb3..7cd6d7e8f 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 0c2449149..7647544d4 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 4c9e4018c..ad75f6cbc 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 0a3eab729..97dd65617 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 981222b6e..9047cae69 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 1bae456f4..6a4b32cd6 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 6fa6f6d7c..d10883b1c 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__iban-members.html b/classstdex_1_1parser_1_1basic__iban-members.html new file mode 100644 index 000000000..7cca00fb8 --- /dev/null +++ b/classstdex_1_1parser_1_1basic__iban-members.html @@ -0,0 +1,103 @@ + + + + + + + +stdex: Member List + + + + + + + + + +
+
+ + + + + + +
+
stdex +
+
Additional custom or not Standard C++ covered algorithms
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
stdex::parser::basic_iban< T > Member List
+
+
+ +

This is the complete list of members for stdex::parser::basic_iban< T >, including all inherited members.

+ + + + + + + + + + + + + + + +
basic_iban(const std::shared_ptr< basic_parser< T > > &space, const std::locale &locale=std::locale()) (defined in stdex::parser::basic_iban< T >)stdex::parser::basic_iban< T >inline
basic_parser(const std::locale &locale=std::locale()) (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inline
bbanstdex::parser::basic_iban< T >
check_digitsstdex::parser::basic_iban< T >
countrystdex::parser::basic_iban< T >
intervalstdex::parser::basic_parser< T >
invalidate() (defined in stdex::parser::basic_iban< T >)stdex::parser::basic_iban< T >inlinevirtual
is_validstdex::parser::basic_iban< T >
m_locale (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >protected
m_space (defined in stdex::parser::basic_iban< T >)stdex::parser::basic_iban< T >protected
match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default) (defined in stdex::parser::basic_iban< T >)stdex::parser::basic_iban< T >inlinevirtual
match(const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=(size_t) -1, int flags=match_default) (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inline
search(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default) (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inline
~basic_parser() (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inlinevirtual
+ + + + diff --git a/classstdex_1_1parser_1_1basic__iban.html b/classstdex_1_1parser_1_1basic__iban.html new file mode 100644 index 000000000..55cd252de --- /dev/null +++ b/classstdex_1_1parser_1_1basic__iban.html @@ -0,0 +1,250 @@ + + + + + + + +stdex: stdex::parser::basic_iban< T > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
stdex +
+
Additional custom or not Standard C++ covered algorithms
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+Public Member Functions | +Public Attributes | +Protected Attributes | +List of all members
+
stdex::parser::basic_iban< T > Class Template Reference
+
+
+ +

Test for International Bank Account Number. + More...

+ +

#include <stdex/parser.hpp>

+
+Inheritance diagram for stdex::parser::basic_iban< T >:
+
+
+ + +stdex::parser::basic_parser< T > + +
+ + + + + + + + + + + + + + + + +

+Public Member Functions

basic_iban (const std::shared_ptr< basic_parser< T > > &space, const std::locale &locale=std::locale())
 
virtual bool match (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
virtual void invalidate ()
 
- Public Member Functions inherited from stdex::parser::basic_parser< T >
basic_parser (const std::locale &locale=std::locale())
 
+bool search (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
+template<class _Traits , class _Ax >
bool match (const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
+ + + + + + + + + + + + + + + + + +

+Public Attributes

+T country [3]
 ISO 3166-1 alpha-2 country code.
 
+T check_digits [3]
 Two check digits.
 
+T bban [31]
 Normalized Basic Bank Account Number.
 
+bool is_valid
 Is IBAN valid per ISO 7064.
 
- Public Attributes inherited from stdex::parser::basic_parser< T >
+interval< size_tinterval
 Region of the last match.
 
+ + + + + + +

+Protected Attributes

+std::shared_ptr< basic_parser< T > > m_space
 
- Protected Attributes inherited from stdex::parser::basic_parser< T >
+std::locale m_locale
 
+

Detailed Description

+
template<class T>
+class stdex::parser::basic_iban< T >

Test for International Bank Account Number.

+
See also
International Bank Account Number
+

Member Function Documentation

+ +

◆ invalidate()

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + +
virtual void stdex::parser::basic_iban< T >::invalidate ()
+
+inlinevirtual
+
+ +

Reimplemented from stdex::parser::basic_parser< T >.

+ +
+
+ +

◆ match()

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
virtual bool stdex::parser::basic_iban< T >::match (_In_reads_or_z_(end) const T * text,
size_t start = 0,
size_t end = (size_t)-1,
int flags = match_default 
)
+
+inlinevirtual
+
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classstdex_1_1parser_1_1basic__iban.png b/classstdex_1_1parser_1_1basic__iban.png new file mode 100644 index 000000000..92185ec41 Binary files /dev/null and b/classstdex_1_1parser_1_1basic__iban.png differ diff --git a/classstdex_1_1parser_1_1basic__integer-members.html b/classstdex_1_1parser_1_1basic__integer-members.html index e5bec0c65..9db610331 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 5086ff4ff..11ed4e28a 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 21c8d4824..e45bb13ba 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 50cb41241..7b9596121 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 ba8554f32..5b15c96ab 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 2f5e528fd..9f502658c 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 6b486deb0..9e955d0c6 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 2bad4f4bd..0306eb687 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 4681737e6..80a01bf21 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 9f8ed2cb3..8a7b5ca6e 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 d07c3c61a..e28f76c59 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 1600a6f51..71d4f1b03 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 4e70df50b..934f2d7ef 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 ef1797594..ef6afd2e1 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 0b36a07f2..eac7726e2 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 99928d9f7..82655327f 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 e9c17db50..7eb7f1f9e 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 1c66d4455..95308b598 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__mixed__numeral-members.html b/classstdex_1_1parser_1_1basic__mixed__numeral-members.html index 414c5d0d3..b53a071a2 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 4a91d9edb..fbf597185 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 c90dc5f13..8d1b4585a 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 6f1aba520..e9292ec03 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 aa7f7e0a7..f850b3718 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 9caac9239..38fe19579 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 bfb2d631b..4d4cea04c 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 d46e76692..d80dfcff7 100644 --- a/classstdex_1_1parser_1_1basic__parser.html +++ b/classstdex_1_1parser_1_1basic__parser.html @@ -106,39 +106,44 @@ Inheritance diagram for stdex::parser::basic_parser< T >: stdex::parser::basic_any_cu< T > stdex::parser::basic_bol< T > stdex::parser::basic_chemical_formula< T > -stdex::parser::basic_cu< T > -stdex::parser::basic_date< T > -stdex::parser::basic_dns_domain_char< T > -stdex::parser::basic_dns_name< T > -stdex::parser::basic_email_address< T > -stdex::parser::basic_emoticon< T > -stdex::parser::basic_eol< T > -stdex::parser::basic_fraction< T > -stdex::parser::basic_integer< T > -stdex::parser::basic_ipv4_address< T > -stdex::parser::basic_ipv6_address< T > -stdex::parser::basic_ipv6_scope_id_char< T > -stdex::parser::basic_iterations< T > -stdex::parser::basic_json_string< T > -stdex::parser::basic_mixed_numeral< T > -stdex::parser::basic_monetary_numeral< T > -stdex::parser::basic_noop< T > -stdex::parser::basic_phone_number< T > -stdex::parser::basic_punct_cu< T > -stdex::parser::basic_scientific_numeral< T > -stdex::parser::basic_score< T > -stdex::parser::basic_set< T > -stdex::parser::basic_signed_numeral< T > -stdex::parser::basic_space_cu< T > -stdex::parser::basic_space_or_punct_cu< T > -stdex::parser::basic_string< T > -stdex::parser::basic_time< T > -stdex::parser::basic_url< T > -stdex::parser::basic_url_password_char< T > -stdex::parser::basic_url_path< T > -stdex::parser::basic_url_path_char< T > -stdex::parser::basic_url_username_char< T > -stdex::parser::parser_collection< T > +stdex::parser::basic_creditor_reference< T > +stdex::parser::basic_cu< T > +stdex::parser::basic_date< T > +stdex::parser::basic_dns_domain_char< T > +stdex::parser::basic_dns_name< T > +stdex::parser::basic_email_address< T > +stdex::parser::basic_emoticon< T > +stdex::parser::basic_eol< T > +stdex::parser::basic_fraction< T > +stdex::parser::basic_iban< T > +stdex::parser::basic_integer< T > +stdex::parser::basic_ipv4_address< T > +stdex::parser::basic_ipv6_address< T > +stdex::parser::basic_ipv6_scope_id_char< T > +stdex::parser::basic_iterations< T > +stdex::parser::basic_json_string< T > +stdex::parser::basic_mixed_numeral< T > +stdex::parser::basic_monetary_numeral< T > +stdex::parser::basic_noop< T > +stdex::parser::basic_phone_number< T > +stdex::parser::basic_punct_cu< T > +stdex::parser::basic_scientific_numeral< T > +stdex::parser::basic_score< T > +stdex::parser::basic_set< T > +stdex::parser::basic_si_reference< T > +stdex::parser::basic_si_reference_delimiter< T > +stdex::parser::basic_si_reference_part< T > +stdex::parser::basic_signed_numeral< T > +stdex::parser::basic_space_cu< T > +stdex::parser::basic_space_or_punct_cu< T > +stdex::parser::basic_string< T > +stdex::parser::basic_time< T > +stdex::parser::basic_url< T > +stdex::parser::basic_url_password_char< T > +stdex::parser::basic_url_path< T > +stdex::parser::basic_url_path_char< T > +stdex::parser::basic_url_username_char< T > +stdex::parser::parser_collection< T > @@ -183,7 +188,7 @@ class stdex::parser::basic_parser< T >

Base template for all parse

diff --git a/classstdex_1_1parser_1_1basic__parser.png b/classstdex_1_1parser_1_1basic__parser.png index f759f0581..bb980f079 100644 Binary files a/classstdex_1_1parser_1_1basic__parser.png and b/classstdex_1_1parser_1_1basic__parser.png differ diff --git a/classstdex_1_1parser_1_1basic__permutation-members.html b/classstdex_1_1parser_1_1basic__permutation-members.html index 888a3a6b1..c0f0bdcb6 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 ec5ea1956..0b267be96 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 42becf678..044d17fb1 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 dab1e57f7..a5730270a 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 245bd3935..de8719713 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 24a9fa268..e25ff542a 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 2f40463f7..428ee8640 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 c8ac0a3d2..edc134c86 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 993e7896a..a6e90b77d 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 19cf041f8..55721a158 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 414a7f20e..34ab4e50b 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 ca607fa73..d97780a7a 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 ab7808819..5ed9ca941 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 3d4d31e1b..679e56f33 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 6280198ba..732078f1c 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 83341e4c8..401213f2c 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 new file mode 100644 index 000000000..a57ef0a02 --- /dev/null +++ b/classstdex_1_1parser_1_1basic__si__reference-members.html @@ -0,0 +1,108 @@ + + + + + + + +stdex: Member List + + + + + + + + + +
+
+ + + + + + +
+
stdex +
+
Additional custom or not Standard C++ covered algorithms
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
stdex::parser::basic_si_reference< T > Member List
+
+
+ +

This is the complete list of members for stdex::parser::basic_si_reference< T >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + +
basic_parser(const std::locale &locale=std::locale()) (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inline
basic_si_reference(const std::shared_ptr< basic_parser< T > > &space, const std::locale &locale=std::locale()) (defined in stdex::parser::basic_si_reference< T >)stdex::parser::basic_si_reference< T >inline
check11(const T *part1, size_t num_part1) (defined in stdex::parser::basic_si_reference< T >)stdex::parser::basic_si_reference< T >inlineprotectedstatic
check11(const T *part1, size_t num_part1, const T *part2, size_t num_part2) (defined in stdex::parser::basic_si_reference< T >)stdex::parser::basic_si_reference< T >inlineprotectedstatic
check11(const T *part1, size_t num_part1, const T *part2, size_t num_part2, const T *part3, size_t num_part3) (defined in stdex::parser::basic_si_reference< T >)stdex::parser::basic_si_reference< T >inlineprotectedstatic
intervalstdex::parser::basic_parser< T >
invalidate() (defined in stdex::parser::basic_si_reference< T >)stdex::parser::basic_si_reference< T >inlinevirtual
is_validstdex::parser::basic_si_reference< T >
m_delimiter (defined in stdex::parser::basic_si_reference< T >)stdex::parser::basic_si_reference< T >protected
m_locale (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >protected
m_space (defined in stdex::parser::basic_si_reference< T >)stdex::parser::basic_si_reference< T >protected
match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default) (defined in stdex::parser::basic_si_reference< T >)stdex::parser::basic_si_reference< T >inlinevirtual
match(const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=(size_t) -1, int flags=match_default) (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inline
modelstdex::parser::basic_si_reference< T >
part1stdex::parser::basic_si_reference< T >
part2stdex::parser::basic_si_reference< T >
part3stdex::parser::basic_si_reference< T >
search(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default) (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inline
~basic_parser() (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inlinevirtual
+ + + + diff --git a/classstdex_1_1parser_1_1basic__si__reference.html b/classstdex_1_1parser_1_1basic__si__reference.html new file mode 100644 index 000000000..05f62bfb4 --- /dev/null +++ b/classstdex_1_1parser_1_1basic__si__reference.html @@ -0,0 +1,271 @@ + + + + + + + +stdex: stdex::parser::basic_si_reference< T > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
stdex +
+
Additional custom or not Standard C++ covered algorithms
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+Public Member Functions | +Public Attributes | +Static Protected Member Functions | +Protected Attributes | +List of all members
+
stdex::parser::basic_si_reference< T > Class Template Reference
+
+
+ +

Test for SI Reference. + More...

+ +

#include <stdex/parser.hpp>

+
+Inheritance diagram for stdex::parser::basic_si_reference< T >:
+
+
+ + +stdex::parser::basic_parser< T > + +
+ + + + + + + + + + + + + + + + +

+Public Member Functions

basic_si_reference (const std::shared_ptr< basic_parser< T > > &space, const std::locale &locale=std::locale())
 
virtual bool match (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
virtual void invalidate ()
 
- Public Member Functions inherited from stdex::parser::basic_parser< T >
basic_parser (const std::locale &locale=std::locale())
 
+bool search (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
+template<class _Traits , class _Ax >
bool match (const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
+ + + + + + + + + + + + + + + + + + + + +

+Public Attributes

+T model [3]
 Reference model.
 
+basic_si_reference_part< T > part1
 Reference data part 1 (P1)
 
+basic_si_reference_part< T > part2
 Reference data part 2 (P2)
 
+basic_si_reference_part< T > part3
 Reference data part 3 (P3)
 
+bool is_valid
 Is reference valid.
 
- Public Attributes inherited from stdex::parser::basic_parser< T >
+interval< size_tinterval
 Region of the last match.
 
+ + + + + + + +

+Static Protected Member Functions

+static bool check11 (const T *part1, size_t num_part1)
 
+static bool check11 (const T *part1, size_t num_part1, const T *part2, size_t num_part2)
 
+static bool check11 (const T *part1, size_t num_part1, const T *part2, size_t num_part2, const T *part3, size_t num_part3)
 
+ + + + + + + + +

+Protected Attributes

+std::shared_ptr< basic_parser< T > > m_space
 
+basic_si_reference_delimiter< T > m_delimiter
 
- Protected Attributes inherited from stdex::parser::basic_parser< T >
+std::locale m_locale
 
+

Detailed Description

+
template<class T>
+class stdex::parser::basic_si_reference< T >

Test for SI Reference.

+

This is one utterly convoluted reference scheme used by Slovenian banks providing only poor integrity detection. 🤦‍

+
See also
Navodila za izpolnjevanje obrazca UPN – Univerzalni plačilni nalog
+

Member Function Documentation

+ +

◆ invalidate()

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + +
virtual void stdex::parser::basic_si_reference< T >::invalidate ()
+
+inlinevirtual
+
+ +

Reimplemented from stdex::parser::basic_parser< T >.

+ +
+
+ +

◆ match()

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
virtual bool stdex::parser::basic_si_reference< T >::match (_In_reads_or_z_(end) const T * text,
size_t start = 0,
size_t end = (size_t)-1,
int flags = match_default 
)
+
+inlinevirtual
+
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classstdex_1_1parser_1_1basic__si__reference.png b/classstdex_1_1parser_1_1basic__si__reference.png new file mode 100644 index 000000000..b2fe7b388 Binary files /dev/null and b/classstdex_1_1parser_1_1basic__si__reference.png differ diff --git a/classstdex_1_1parser_1_1basic__si__reference__delimiter-members.html b/classstdex_1_1parser_1_1basic__si__reference__delimiter-members.html new file mode 100644 index 000000000..a8f225fec --- /dev/null +++ b/classstdex_1_1parser_1_1basic__si__reference__delimiter-members.html @@ -0,0 +1,98 @@ + + + + + + + +stdex: Member List + + + + + + + + + +
+
+ + + + + + +
+
stdex +
+
Additional custom or not Standard C++ covered algorithms
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
stdex::parser::basic_si_reference_delimiter< T > Member List
+
+
+ +

This is the complete list of members for stdex::parser::basic_si_reference_delimiter< T >, including all inherited members.

+ + + + + + + + + + +
basic_parser(const std::locale &locale=std::locale()) (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inline
basic_si_reference_delimiter(const std::locale &locale=std::locale()) (defined in stdex::parser::basic_si_reference_delimiter< T >)stdex::parser::basic_si_reference_delimiter< T >inline
intervalstdex::parser::basic_parser< T >
invalidate() (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inlinevirtual
m_locale (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >protected
match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default) (defined in stdex::parser::basic_si_reference_delimiter< T >)stdex::parser::basic_si_reference_delimiter< T >inlinevirtual
match(const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=(size_t) -1, int flags=match_default) (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inline
search(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default) (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inline
~basic_parser() (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inlinevirtual
+ + + + diff --git a/classstdex_1_1parser_1_1basic__si__reference__delimiter.html b/classstdex_1_1parser_1_1basic__si__reference__delimiter.html new file mode 100644 index 000000000..896e9be88 --- /dev/null +++ b/classstdex_1_1parser_1_1basic__si__reference__delimiter.html @@ -0,0 +1,198 @@ + + + + + + + +stdex: stdex::parser::basic_si_reference_delimiter< T > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
stdex +
+
Additional custom or not Standard C++ covered algorithms
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+Public Member Functions | +List of all members
+
stdex::parser::basic_si_reference_delimiter< T > Class Template Reference
+
+
+ +

Test for SI Reference delimiter. + More...

+ +

#include <stdex/parser.hpp>

+
+Inheritance diagram for stdex::parser::basic_si_reference_delimiter< T >:
+
+
+ + +stdex::parser::basic_parser< T > + +
+ + + + + + + + + + + + + + + + +

+Public Member Functions

basic_si_reference_delimiter (const std::locale &locale=std::locale())
 
virtual bool match (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
- Public Member Functions inherited from stdex::parser::basic_parser< T >
basic_parser (const std::locale &locale=std::locale())
 
+bool search (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
+template<class _Traits , class _Ax >
bool match (const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
+virtual void invalidate ()
 
+ + + + + + + + +

+Additional Inherited Members

- Public Attributes inherited from stdex::parser::basic_parser< T >
+interval< size_tinterval
 Region of the last match.
 
- Protected Attributes inherited from stdex::parser::basic_parser< T >
+std::locale m_locale
 
+

Detailed Description

+
template<class T>
+class stdex::parser::basic_si_reference_delimiter< T >

Test for SI Reference delimiter.

+
See also
Navodila za izpolnjevanje obrazca UPN – Univerzalni plačilni nalog
+

Member Function Documentation

+ +

◆ match()

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
virtual bool stdex::parser::basic_si_reference_delimiter< T >::match (_In_reads_or_z_(end) const T * text,
size_t start = 0,
size_t end = (size_t)-1,
int flags = match_default 
)
+
+inlinevirtual
+
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classstdex_1_1parser_1_1basic__si__reference__delimiter.png b/classstdex_1_1parser_1_1basic__si__reference__delimiter.png new file mode 100644 index 000000000..8b7d19d12 Binary files /dev/null and b/classstdex_1_1parser_1_1basic__si__reference__delimiter.png differ diff --git a/classstdex_1_1parser_1_1basic__si__reference__part-members.html b/classstdex_1_1parser_1_1basic__si__reference__part-members.html new file mode 100644 index 000000000..4fd18ea1f --- /dev/null +++ b/classstdex_1_1parser_1_1basic__si__reference__part-members.html @@ -0,0 +1,98 @@ + + + + + + + +stdex: Member List + + + + + + + + + +
+
+ + + + + + +
+
stdex +
+
Additional custom or not Standard C++ covered algorithms
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
stdex::parser::basic_si_reference_part< T > Member List
+
+
+ +

This is the complete list of members for stdex::parser::basic_si_reference_part< T >, including all inherited members.

+ + + + + + + + + + +
basic_parser(const std::locale &locale=std::locale()) (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inline
basic_si_reference_part(const std::locale &locale=std::locale()) (defined in stdex::parser::basic_si_reference_part< T >)stdex::parser::basic_si_reference_part< T >inline
intervalstdex::parser::basic_parser< T >
invalidate() (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inlinevirtual
m_locale (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >protected
match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default) (defined in stdex::parser::basic_si_reference_part< T >)stdex::parser::basic_si_reference_part< T >inlinevirtual
match(const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=(size_t) -1, int flags=match_default) (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inline
search(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default) (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inline
~basic_parser() (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inlinevirtual
+ + + + diff --git a/classstdex_1_1parser_1_1basic__si__reference__part.html b/classstdex_1_1parser_1_1basic__si__reference__part.html new file mode 100644 index 000000000..f5b3bc48a --- /dev/null +++ b/classstdex_1_1parser_1_1basic__si__reference__part.html @@ -0,0 +1,198 @@ + + + + + + + +stdex: stdex::parser::basic_si_reference_part< T > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
stdex +
+
Additional custom or not Standard C++ covered algorithms
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+Public Member Functions | +List of all members
+
stdex::parser::basic_si_reference_part< T > Class Template Reference
+
+
+ +

Test for SI Reference part. + More...

+ +

#include <stdex/parser.hpp>

+
+Inheritance diagram for stdex::parser::basic_si_reference_part< T >:
+
+
+ + +stdex::parser::basic_parser< T > + +
+ + + + + + + + + + + + + + + + +

+Public Member Functions

basic_si_reference_part (const std::locale &locale=std::locale())
 
virtual bool match (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
- Public Member Functions inherited from stdex::parser::basic_parser< T >
basic_parser (const std::locale &locale=std::locale())
 
+bool search (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
+template<class _Traits , class _Ax >
bool match (const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
+virtual void invalidate ()
 
+ + + + + + + + +

+Additional Inherited Members

- Public Attributes inherited from stdex::parser::basic_parser< T >
+interval< size_tinterval
 Region of the last match.
 
- Protected Attributes inherited from stdex::parser::basic_parser< T >
+std::locale m_locale
 
+

Detailed Description

+
template<class T>
+class stdex::parser::basic_si_reference_part< T >

Test for SI Reference part.

+
See also
Navodila za izpolnjevanje obrazca UPN – Univerzalni plačilni nalog
+

Member Function Documentation

+ +

◆ match()

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
virtual bool stdex::parser::basic_si_reference_part< T >::match (_In_reads_or_z_(end) const T * text,
size_t start = 0,
size_t end = (size_t)-1,
int flags = match_default 
)
+
+inlinevirtual
+
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classstdex_1_1parser_1_1basic__si__reference__part.png b/classstdex_1_1parser_1_1basic__si__reference__part.png new file mode 100644 index 000000000..b31082ca6 Binary files /dev/null and b/classstdex_1_1parser_1_1basic__si__reference__part.png differ diff --git a/classstdex_1_1parser_1_1basic__signed__numeral-members.html b/classstdex_1_1parser_1_1basic__signed__numeral-members.html index cbdeae458..a8e0b0c14 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 d8450e5c4..127f47a5a 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 acf640a69..27e5ec950 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 58e8bccb6..001bd0909 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 24d7cb2a6..ad51c68dd 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 984663077..8a4e08104 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 c7d5e9e3f..d7649392c 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 d06915e5a..717177212 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 569d6f461..4447b5b10 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 eba1e4b32..114448fbd 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 e0a7fe773..2bdb6448f 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 8bb468bc1..3cb922a3d 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 8fa99a0b9..8fc11d236 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 d86880ec4..5cfa63e57 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 a749fc980..00ccc103f 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 9e6a64fe6..85142c0fb 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 59a941262..8e7689dbd 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 7b7bdcb30..3aca37134 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 cd3277253..736e12ba1 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 09071388b..584f80f23 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 d6895992d..23fcf6ebb 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 b604d94ac..6d9de2246 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 f823c78fa..9eb1222d5 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 6348283b2..d65e18596 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 3063621b2..ab5bcb132 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 9da0460da..13974b3ba 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 e0d72b40a..9976083ed 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 b8c6ac506..b0cdd4a50 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 10a63211b..dbbdc49a5 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 0a6dc39b4..250b0fb5b 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 3fddbb9da..082c4e0dc 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 b70a6564a..946096880 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 722c8f0fb..62ac2fe2a 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 cafaeae21..7e4fd0368 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 334c0736a..fe4531fb3 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 db9c72f3b..8fc92f761 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 f84846ffc..692cc1577 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 93d7fc04d..e61608c72 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 d6a870401..8627357b3 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 3d79686e7..b9a131779 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 6afc1e802..1e969212e 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 396977c46..aab3fb23c 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 512d607c9..4d9ec5362 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 fd0943c26..49e81f6f2 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 6cef3dc45..ece1b1103 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 3c8b40dc1..5c3a8e15c 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 5ff740c5c..a9932e6b3 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 fe320baae..2925ac227 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 a036d9b1b..90fcff5ec 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 27af8ed0d..a5f662690 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 bcfaa317b..d53d19f48 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 f08fe07fb..f2ed7ef4d 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 d5a848177..39f778c90 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 b96effb11..838770381 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 d5e5f3d46..b624fc87a 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 c7ca1704c..afb41dee8 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 af12643fd..8b3889a4b 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 29138b492..a07fca2bb 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 9a11b3100..ec75042dd 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 7a183285f..48c9969b6 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 b7673e473..56953ef44 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 83363b8a8..66e0d4a17 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 d464fd83f..72e078360 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 0b0c50fcc..ec5fdcb1a 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 33b2d47b9..4e811768d 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 4e98a3cdb..82262ea77 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 026d9e120..374be1dcd 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 0a72d57f9..2108ecf55 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 362bf5f37..e4c7be808 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 5f9dc6c9c..298e6394e 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 5f3843fad..ddb339e7d 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 a81532223..1e5cdc4bc 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 a1da36fc0..9b64cf823 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 a28ecefc8..ddf49209c 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 ec359552a..e25bf177a 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 8e2733b18..013701f3e 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 e6a2f0b3e..1a8bead52 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 f75eaa89a..cebff2656 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 6fc2815ef..174ea921f 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 2e2ab292f..1e5f0e2f4 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 a54ac29ff..96e0ba8c3 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 7aa812c76..9b8ac9304 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 aae5eab23..909cb225b 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 0360d1884..1bfb4b867 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 07b3d5ae7..ba3d1bfe1 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 261ca3de3..3a26993ed 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 9a7f4cf93..ba42e2ef0 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 1e4491ba0..2ebea33b7 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 4bcf0acd2..ed9a59bb8 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 95d109178..2ddf4c9a0 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 6d495e827..a677c1a19 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 0afc32fd1..33bc74337 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 38bcbbc78..385d6c084 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 a91c4ae11..ac0a640c7 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 cf4d5bec1..d1787f3b5 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 e81c123fe..ca14f63f5 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 13a108994..189b86b43 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 7cbe3e437..7fbc04877 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 9ef8ff0f3..e868eaa17 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 65524ac54..1b9fa465d 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 5af4f37ba..15fe2a777 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 804ac19ae..a51b4465d 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_1progress-members.html b/classstdex_1_1progress-members.html index 31628e883..0fb3a12e0 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 b2f9ad70f..8a943d586 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 7bf4d1391..fac60da46 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 93f19208e..e9c536952 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 720008c51..cb0d454c2 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 e44c1c289..47120a216 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_1stream_1_1async__reader-members.html b/classstdex_1_1stream_1_1async__reader-members.html index 2926c2d51..2090b76be 100644 --- a/classstdex_1_1stream_1_1async__reader-members.html +++ b/classstdex_1_1stream_1_1async__reader-members.html @@ -149,7 +149,7 @@ $(function() { diff --git a/classstdex_1_1stream_1_1async__reader.html b/classstdex_1_1stream_1_1async__reader.html index 2e98adb95..a7a3e986d 100644 --- a/classstdex_1_1stream_1_1async__reader.html +++ b/classstdex_1_1stream_1_1async__reader.html @@ -390,7 +390,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 b661f1514..5cf0bab6c 100644 --- a/classstdex_1_1stream_1_1async__writer-members.html +++ b/classstdex_1_1stream_1_1async__writer-members.html @@ -149,7 +149,7 @@ $(function() { diff --git a/classstdex_1_1stream_1_1async__writer.html b/classstdex_1_1stream_1_1async__writer.html index 000756f8a..b6893cb64 100644 --- a/classstdex_1_1stream_1_1async__writer.html +++ b/classstdex_1_1stream_1_1async__writer.html @@ -421,7 +421,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 ed171679f..73855cc47 100644 --- a/classstdex_1_1stream_1_1basic-members.html +++ b/classstdex_1_1stream_1_1basic-members.html @@ -139,7 +139,7 @@ $(function() { diff --git a/classstdex_1_1stream_1_1basic.html b/classstdex_1_1stream_1_1basic.html index 8485146f0..d34fdcb86 100644 --- a/classstdex_1_1stream_1_1basic.html +++ b/classstdex_1_1stream_1_1basic.html @@ -1320,7 +1320,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 8861226b8..f9cd7d423 100644 --- a/classstdex_1_1stream_1_1basic__file-members.html +++ b/classstdex_1_1stream_1_1basic__file-members.html @@ -155,7 +155,7 @@ $(function() { diff --git a/classstdex_1_1stream_1_1basic__file.html b/classstdex_1_1stream_1_1basic__file.html index b6d246a5d..8b0f067d4 100644 --- a/classstdex_1_1stream_1_1basic__file.html +++ b/classstdex_1_1stream_1_1basic__file.html @@ -927,7 +927,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 4de0d7fb4..49d3e22a7 100644 --- a/classstdex_1_1stream_1_1basic__sys-members.html +++ b/classstdex_1_1stream_1_1basic__sys-members.html @@ -151,7 +151,7 @@ $(function() { diff --git a/classstdex_1_1stream_1_1basic__sys.html b/classstdex_1_1stream_1_1basic__sys.html index 76d2da2f2..da23340f5 100644 --- a/classstdex_1_1stream_1_1basic__sys.html +++ b/classstdex_1_1stream_1_1basic__sys.html @@ -493,7 +493,7 @@ sys_handle m_h diff --git a/classstdex_1_1stream_1_1buffer-members.html b/classstdex_1_1stream_1_1buffer-members.html index 6d241c7ed..81e9c61a5 100644 --- a/classstdex_1_1stream_1_1buffer-members.html +++ b/classstdex_1_1stream_1_1buffer-members.html @@ -150,7 +150,7 @@ $(function() { diff --git a/classstdex_1_1stream_1_1buffer.html b/classstdex_1_1stream_1_1buffer.html index faf53e3bf..0d95ab4a4 100644 --- a/classstdex_1_1stream_1_1buffer.html +++ b/classstdex_1_1stream_1_1buffer.html @@ -468,7 +468,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 5dd05a2fc..d850a061f 100644 --- a/classstdex_1_1stream_1_1buffered__sys-members.html +++ b/classstdex_1_1stream_1_1buffered__sys-members.html @@ -152,7 +152,7 @@ $(function() { diff --git a/classstdex_1_1stream_1_1buffered__sys.html b/classstdex_1_1stream_1_1buffered__sys.html index afc3c92ed..1d4222bb9 100644 --- a/classstdex_1_1stream_1_1buffered__sys.html +++ b/classstdex_1_1stream_1_1buffered__sys.html @@ -344,7 +344,7 @@ void done () diff --git a/classstdex_1_1stream_1_1cache-members.html b/classstdex_1_1stream_1_1cache-members.html index 2fb6f01c9..8c32af460 100644 --- a/classstdex_1_1stream_1_1cache-members.html +++ b/classstdex_1_1stream_1_1cache-members.html @@ -167,7 +167,7 @@ $(function() { diff --git a/classstdex_1_1stream_1_1cache.html b/classstdex_1_1stream_1_1cache.html index e4071f04e..94e94d533 100644 --- a/classstdex_1_1stream_1_1cache.html +++ b/classstdex_1_1stream_1_1cache.html @@ -933,7 +933,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 c01bdda2d..e4dcf6f6f 100644 --- a/classstdex_1_1stream_1_1cached__file-members.html +++ b/classstdex_1_1stream_1_1cached__file-members.html @@ -171,7 +171,7 @@ $(function() { diff --git a/classstdex_1_1stream_1_1cached__file.html b/classstdex_1_1stream_1_1cached__file.html index 60083e672..519aa92ce 100644 --- a/classstdex_1_1stream_1_1cached__file.html +++ b/classstdex_1_1stream_1_1cached__file.html @@ -499,7 +499,7 @@ void write_cache () diff --git a/classstdex_1_1stream_1_1converter-members.html b/classstdex_1_1stream_1_1converter-members.html index 2238a1451..8c1946906 100644 --- a/classstdex_1_1stream_1_1converter-members.html +++ b/classstdex_1_1stream_1_1converter-members.html @@ -144,7 +144,7 @@ $(function() { diff --git a/classstdex_1_1stream_1_1converter.html b/classstdex_1_1stream_1_1converter.html index 2429efd53..9249acf58 100644 --- a/classstdex_1_1stream_1_1converter.html +++ b/classstdex_1_1stream_1_1converter.html @@ -480,7 +480,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 51bd8658e..dd5da4978 100644 --- a/classstdex_1_1stream_1_1diag__file-members.html +++ b/classstdex_1_1stream_1_1diag__file-members.html @@ -158,7 +158,7 @@ $(function() { diff --git a/classstdex_1_1stream_1_1diag__file.html b/classstdex_1_1stream_1_1diag__file.html index d6ece8a06..431396772 100644 --- a/classstdex_1_1stream_1_1diag__file.html +++ b/classstdex_1_1stream_1_1diag__file.html @@ -720,7 +720,7 @@ state_t m_state diff --git a/classstdex_1_1stream_1_1fifo-members.html b/classstdex_1_1stream_1_1fifo-members.html index 54b2be751..9de7d9568 100644 --- a/classstdex_1_1stream_1_1fifo-members.html +++ b/classstdex_1_1stream_1_1fifo-members.html @@ -146,7 +146,7 @@ $(function() { diff --git a/classstdex_1_1stream_1_1fifo.html b/classstdex_1_1stream_1_1fifo.html index 116e6164a..46bcadbee 100644 --- a/classstdex_1_1stream_1_1fifo.html +++ b/classstdex_1_1stream_1_1fifo.html @@ -445,7 +445,7 @@ state_t m_state diff --git a/classstdex_1_1stream_1_1file-members.html b/classstdex_1_1stream_1_1file-members.html index c8e73bafb..f5e37d829 100644 --- a/classstdex_1_1stream_1_1file-members.html +++ b/classstdex_1_1stream_1_1file-members.html @@ -174,7 +174,7 @@ $(function() { diff --git a/classstdex_1_1stream_1_1file.html b/classstdex_1_1stream_1_1file.html index 7dc0eb33c..f03048023 100644 --- a/classstdex_1_1stream_1_1file.html +++ b/classstdex_1_1stream_1_1file.html @@ -877,7 +877,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 2cf611689..a7b8e4ea2 100644 --- a/classstdex_1_1stream_1_1file__window-members.html +++ b/classstdex_1_1stream_1_1file__window-members.html @@ -159,7 +159,7 @@ $(function() { diff --git a/classstdex_1_1stream_1_1file__window.html b/classstdex_1_1stream_1_1file__window.html index de4679b57..3c9296206 100644 --- a/classstdex_1_1stream_1_1file__window.html +++ b/classstdex_1_1stream_1_1file__window.html @@ -753,7 +753,7 @@ state_t m_state diff --git a/classstdex_1_1stream_1_1limiter-members.html b/classstdex_1_1stream_1_1limiter-members.html index b4e0fdfc5..914ba7ddf 100644 --- a/classstdex_1_1stream_1_1limiter-members.html +++ b/classstdex_1_1stream_1_1limiter-members.html @@ -147,7 +147,7 @@ $(function() { diff --git a/classstdex_1_1stream_1_1limiter.html b/classstdex_1_1stream_1_1limiter.html index 8b11f7a19..0ced6c63a 100644 --- a/classstdex_1_1stream_1_1limiter.html +++ b/classstdex_1_1stream_1_1limiter.html @@ -429,7 +429,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 a8d9d14d8..16a2638b1 100644 --- a/classstdex_1_1stream_1_1memory__file-members.html +++ b/classstdex_1_1stream_1_1memory__file-members.html @@ -196,7 +196,7 @@ $(function() { diff --git a/classstdex_1_1stream_1_1memory__file.html b/classstdex_1_1stream_1_1memory__file.html index 9f104ef5a..189b0c2b6 100644 --- a/classstdex_1_1stream_1_1memory__file.html +++ b/classstdex_1_1stream_1_1memory__file.html @@ -1465,7 +1465,7 @@ template<class T > diff --git a/classstdex_1_1stream_1_1replicator-members.html b/classstdex_1_1stream_1_1replicator-members.html index 6d39e9a03..44b467832 100644 --- a/classstdex_1_1stream_1_1replicator-members.html +++ b/classstdex_1_1stream_1_1replicator-members.html @@ -144,7 +144,7 @@ $(function() { diff --git a/classstdex_1_1stream_1_1replicator.html b/classstdex_1_1stream_1_1replicator.html index 39a00dfb3..79633d258 100644 --- a/classstdex_1_1stream_1_1replicator.html +++ b/classstdex_1_1stream_1_1replicator.html @@ -428,7 +428,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 104112172..0c99b2058 100644 --- a/classstdex_1_1stream_1_1replicator_1_1worker-members.html +++ b/classstdex_1_1stream_1_1replicator_1_1worker-members.html @@ -94,7 +94,7 @@ $(function() { diff --git a/classstdex_1_1stream_1_1replicator_1_1worker.html b/classstdex_1_1stream_1_1replicator_1_1worker.html index fc8ae57d0..695bf01f8 100644 --- a/classstdex_1_1stream_1_1replicator_1_1worker.html +++ b/classstdex_1_1stream_1_1replicator_1_1worker.html @@ -146,7 +146,7 @@ static void process_op diff --git a/classstdex_1_1stream_1_1window-members.html b/classstdex_1_1stream_1_1window-members.html index e671f1cd1..0c929845c 100644 --- a/classstdex_1_1stream_1_1window-members.html +++ b/classstdex_1_1stream_1_1window-members.html @@ -150,7 +150,7 @@ $(function() { diff --git a/classstdex_1_1stream_1_1window.html b/classstdex_1_1stream_1_1window.html index b58bae2cd..9cc82a615 100644 --- a/classstdex_1_1stream_1_1window.html +++ b/classstdex_1_1stream_1_1window.html @@ -438,7 +438,7 @@ state_t m_state diff --git a/classstdex_1_1sys__object-members.html b/classstdex_1_1sys__object-members.html index 31a501b6b..ea0b372bb 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 d3f6fac10..2e0c98dd9 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 572b4e105..cb9373bc6 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 0ccf4b530..2b4e62d17 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 6cef1737b..5c801323b 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 34cf9a81e..f3dea4338 100644 --- a/classstdex_1_1vector__queue.html +++ b/classstdex_1_1vector__queue.html @@ -795,7 +795,7 @@ template<class T > diff --git a/dir_4be4f7b278e009bf0f1906cf31fb73bd.html b/dir_4be4f7b278e009bf0f1906cf31fb73bd.html index a78418ab8..bb668af2e 100644 --- a/dir_4be4f7b278e009bf0f1906cf31fb73bd.html +++ b/dir_4be4f7b278e009bf0f1906cf31fb73bd.html @@ -100,7 +100,7 @@ Files diff --git a/dir_d44c64559bbebec7f509842c48db8b23.html b/dir_d44c64559bbebec7f509842c48db8b23.html index d48f27454..fd882a43c 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 7bc1bbc4b..1883b8568 100644 --- a/dir_fca3c47b2ea228727bd6729832f89576.html +++ b/dir_fca3c47b2ea228727bd6729832f89576.html @@ -128,7 +128,7 @@ Files diff --git a/endian_8hpp_source.html b/endian_8hpp_source.html index 778e19188..a49af37b9 100644 --- a/endian_8hpp_source.html +++ b/endian_8hpp_source.html @@ -226,7 +226,7 @@ $(document).ready(function() { init_codefold(0); }); diff --git a/errno_8hpp_source.html b/errno_8hpp_source.html index 53e3f6149..7d7aaf8a2 100644 --- a/errno_8hpp_source.html +++ b/errno_8hpp_source.html @@ -153,7 +153,7 @@ $(document).ready(function() { init_codefold(0); }); diff --git a/exception_8hpp_source.html b/exception_8hpp_source.html index a8ae49291..62cd3e9d0 100644 --- a/exception_8hpp_source.html +++ b/exception_8hpp_source.html @@ -110,7 +110,7 @@ $(document).ready(function() { init_codefold(0); }); diff --git a/files.html b/files.html index 6fbed5d1f..e6949fb96 100644 --- a/files.html +++ b/files.html @@ -113,7 +113,7 @@ $(function() { diff --git a/functions.html b/functions.html index 1617a65ae..08227d0a0 100644 --- a/functions.html +++ b/functions.html @@ -84,7 +84,7 @@ $(function() { diff --git a/functions_b.html b/functions_b.html index 0a2e5853e..59dba96d7 100644 --- a/functions_b.html +++ b/functions_b.html @@ -76,12 +76,13 @@ $(function() {
  • back() : stdex::ring< T, CAPACITY >, stdex::vector_queue< T >
  • base64_dec() : stdex::base64_dec
  • base64_enc() : stdex::base64_enc
  • +
  • bban : stdex::parser::basic_iban< T >
  • buf : stdex::base64_dec, stdex::base64_enc, stdex::hex_dec
  • diff --git a/functions_c.html b/functions_c.html index 53034b1bb..d12177f50 100644 --- a/functions_c.html +++ b/functions_c.html @@ -76,6 +76,7 @@ $(function() {
  • cached_file() : stdex::stream::cached_file
  • cancel() : stdex::global_progress< T >, stdex::progress< T >
  • capacity() : stdex::vector_queue< T >
  • +
  • check_digits : stdex::parser::basic_creditor_reference< T >, stdex::parser::basic_iban< T >
  • clear() : stdex::base64_dec, stdex::base64_enc, stdex::hex_dec, stdex::vector_queue< T >
  • close() : stdex::idrec::record< T, T_ID, ID, T_SIZE, ALIGN >, stdex::stream::basic, stdex::stream::basic_sys, stdex::stream::cache, stdex::stream::converter, stdex::stream::diag_file, stdex::stream::fifo, stdex::stream::file_window, stdex::stream::memory_file, stdex::stream::replicator, stdex::sys_object
  • components : stdex::parser::basic_ipv4_address< T >, stdex::parser::basic_ipv6_address< T >
  • @@ -84,13 +85,14 @@ $(function() {
  • contains() : stdex::interval< T >
  • content : stdex::parser::http_quoted_string
  • convert() : stdex::charset_encoder< T_from, T_to >
  • +
  • country : stdex::parser::basic_iban< T >
  • ctime() : stdex::stream::basic_file, stdex::stream::cache, stdex::stream::file
  • currency : stdex::parser::basic_monetary_numeral< T >
  • diff --git a/functions_d.html b/functions_d.html index c5db176ed..4a0fdf2fc 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 22302ef17..f1f72622a 100644 --- a/functions_e.html +++ b/functions_e.html @@ -86,7 +86,7 @@ $(function() { diff --git a/functions_f.html b/functions_f.html index f621e1b48..58683eb47 100644 --- a/functions_f.html +++ b/functions_f.html @@ -86,7 +86,7 @@ $(function() { diff --git a/functions_func.html b/functions_func.html index 44a3bd1d8..401293576 100644 --- a/functions_func.html +++ b/functions_func.html @@ -82,7 +82,7 @@ $(function() { diff --git a/functions_func_b.html b/functions_func_b.html index de0844bb6..bb90a9ae9 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 a1a46ae10..dca8614fc 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 3bc0ea7c1..9cff37a13 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 1b6c9e1a8..676bbaaab 100644 --- a/functions_func_e.html +++ b/functions_func_e.html @@ -81,7 +81,7 @@ $(function() { diff --git a/functions_func_f.html b/functions_func_f.html index d142695da..0baa6ec6b 100644 --- a/functions_func_f.html +++ b/functions_func_f.html @@ -85,7 +85,7 @@ $(function() { diff --git a/functions_func_g.html b/functions_func_g.html index c2ee5c6d2..becb64195 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 f3617470c..c0ec47de7 100644 --- a/functions_func_h.html +++ b/functions_func_h.html @@ -80,7 +80,7 @@ $(function() { diff --git a/functions_func_i.html b/functions_func_i.html index f1c836500..cf897ec67 100644 --- a/functions_func_i.html +++ b/functions_func_i.html @@ -79,7 +79,7 @@ $(function() { diff --git a/functions_func_l.html b/functions_func_l.html index 45f63eff1..1873d9328 100644 --- a/functions_func_l.html +++ b/functions_func_l.html @@ -80,7 +80,7 @@ $(function() { diff --git a/functions_func_m.html b/functions_func_m.html index 73dd8e1cc..5da4d5549 100644 --- a/functions_func_m.html +++ b/functions_func_m.html @@ -80,7 +80,7 @@ $(function() { diff --git a/functions_func_n.html b/functions_func_n.html index 639e1319e..1372c1e5b 100644 --- a/functions_func_n.html +++ b/functions_func_n.html @@ -79,7 +79,7 @@ $(function() { diff --git a/functions_func_o.html b/functions_func_o.html index 2ca9824cb..79895617e 100644 --- a/functions_func_o.html +++ b/functions_func_o.html @@ -85,7 +85,7 @@ $(function() { diff --git a/functions_func_p.html b/functions_func_p.html index 9f4b3e3be..fbf51997d 100644 --- a/functions_func_p.html +++ b/functions_func_p.html @@ -83,7 +83,7 @@ $(function() { diff --git a/functions_func_q.html b/functions_func_q.html index 86d15916a..5b17dcfa8 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 2bbb6ba07..dab63fe19 100644 --- a/functions_func_r.html +++ b/functions_func_r.html @@ -89,7 +89,7 @@ $(function() { diff --git a/functions_func_s.html b/functions_func_s.html index f71d74607..993f9c936 100644 --- a/functions_func_s.html +++ b/functions_func_s.html @@ -97,7 +97,7 @@ $(function() { diff --git a/functions_func_t.html b/functions_func_t.html index a6d467297..5bef5ebf0 100644 --- a/functions_func_t.html +++ b/functions_func_t.html @@ -83,7 +83,7 @@ $(function() { diff --git a/functions_func_u.html b/functions_func_u.html index 69a294624..679f8157d 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 c038266ab..9413a628e 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 2cf3b9416..24c28ff97 100644 --- a/functions_func_w.html +++ b/functions_func_w.html @@ -86,7 +86,7 @@ $(function() { diff --git a/functions_func_~.html b/functions_func_~.html index fb92d8285..f84a62903 100644 --- a/functions_func_~.html +++ b/functions_func_~.html @@ -78,7 +78,7 @@ $(function() { diff --git a/functions_g.html b/functions_g.html index a9d8e3c1c..9bd5f32ef 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 4847b79aa..8f49f427f 100644 --- a/functions_h.html +++ b/functions_h.html @@ -81,7 +81,7 @@ $(function() { diff --git a/functions_i.html b/functions_i.html index d244b19dd..7edfc9ef1 100644 --- a/functions_i.html +++ b/functions_i.html @@ -76,11 +76,12 @@ $(function() {
  • id() : stdex::idrec::record< T, T_ID, ID, T_SIZE, ALIGN >
  • integer : stdex::parser::basic_mixed_numeral< T >, stdex::parser::basic_monetary_numeral< T >, stdex::parser::basic_scientific_numeral< T >
  • interval() : stdex::interval< T >, stdex::parser::basic_parser< T >
  • +
  • is_valid : stdex::parser::basic_creditor_reference< T >, stdex::parser::basic_iban< T >, stdex::parser::basic_si_reference< T >
  • diff --git a/functions_l.html b/functions_l.html index 42e7bb462..dfa51e81a 100644 --- a/functions_l.html +++ b/functions_l.html @@ -81,7 +81,7 @@ $(function() { diff --git a/functions_m.html b/functions_m.html index 98a700b31..650732d64 100644 --- a/functions_m.html +++ b/functions_m.html @@ -89,13 +89,14 @@ $(function() {
  • m_size_max : stdex::vector_queue< T >
  • mapping() : stdex::mapping< T >
  • memory_file() : stdex::stream::memory_file
  • +
  • model : stdex::parser::basic_si_reference< T >
  • mouth : stdex::parser::basic_emoticon< T >
  • mtime() : stdex::stream::basic_file, stdex::stream::cache, stdex::stream::file
  • diff --git a/functions_n.html b/functions_n.html index 01d4888e5..f093a5eac 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 72d5599cf..59ce9d237 100644 --- a/functions_o.html +++ b/functions_o.html @@ -86,7 +86,7 @@ $(function() { diff --git a/functions_p.html b/functions_p.html index f13b8cd26..ca9db4dd2 100644 --- a/functions_p.html +++ b/functions_p.html @@ -74,6 +74,9 @@ $(function() {

    - p -

    @@ -165,6 +170,9 @@ $(function() {

    - p -

    @@ -173,6 +181,7 @@ $(function() {

    - r -

    @@ -204,7 +213,7 @@ $(function() { diff --git a/functions_w.html b/functions_w.html index 5816333d6..78667a67e 100644 --- a/functions_w.html +++ b/functions_w.html @@ -88,7 +88,7 @@ $(function() { diff --git a/functions_~.html b/functions_~.html index d2f2c53d3..399aa8c14 100644 --- a/functions_~.html +++ b/functions_~.html @@ -78,7 +78,7 @@ $(function() { diff --git a/hex_8hpp_source.html b/hex_8hpp_source.html index c173dc7ff..6f0235d96 100644 --- a/hex_8hpp_source.html +++ b/hex_8hpp_source.html @@ -232,7 +232,7 @@ $(document).ready(function() { init_codefold(0); }); diff --git a/hierarchy.html b/hierarchy.html index 3aaaf9736..65acda06e 100644 --- a/hierarchy.html +++ b/hierarchy.html @@ -124,48 +124,53 @@ $(function() {  Cstdex::parser::basic_any_cu< T >Test for any code unit  Cstdex::parser::basic_bol< T >Test for beginning of line  Cstdex::parser::basic_chemical_formula< T >Test for chemical formula - Cstdex::parser::basic_cu< T >Test for specific code unit - Cstdex::parser::basic_date< T >Test for date - Cstdex::parser::basic_dns_domain_char< T >Test for valid DNS domain character - Cstdex::parser::basic_dns_name< T >Test for DNS domain/hostname - Cstdex::parser::basic_email_address< T >Test for e-mail address - Cstdex::parser::basic_emoticon< T >Test for emoticon - Cstdex::parser::basic_eol< T >Test for end of line - Cstdex::parser::basic_fraction< T >Test for fraction - Cstdex::parser::basic_integer< T >Base class for integer testing - Cstdex::parser::basic_integer10< T >Test for decimal integer - Cstdex::parser::basic_integer10ts< T >Test for decimal integer possibly containing thousand separators - Cstdex::parser::basic_integer16< T >Test for hexadecimal integer - Cstdex::parser::basic_roman_numeral< T >Test for Roman numeral - Cstdex::parser::basic_ipv4_address< T >Test for IPv4 address - Cstdex::parser::basic_ipv6_address< T >Test for IPv6 address - Cstdex::parser::basic_ipv6_scope_id_char< T >Test for valid IPv6 address scope ID character - Cstdex::parser::basic_iterations< T >Test for repeating - Cstdex::parser::basic_json_string< T >Test for JSON string - Cstdex::parser::basic_mixed_numeral< T >Test for mixed numeral - Cstdex::parser::basic_monetary_numeral< T >Test for monetary numeral - Cstdex::parser::basic_noop< T >"No-op" match - Cstdex::parser::basic_phone_number< T >Test for phone number - Cstdex::parser::basic_punct_cu< T >Test for any punctuation code unit - Cstdex::parser::basic_scientific_numeral< T >Test for scientific numeral - Cstdex::parser::basic_score< T >Test for match score - Cstdex::parser::basic_set< T > - Cstdex::parser::basic_cu_set< T >Test for any code unit from a given string of code units - Cstdex::parser::basic_signed_numeral< T >Test for signed numeral - Cstdex::parser::basic_space_cu< T >Test for any space code unit - Cstdex::parser::basic_space_or_punct_cu< T >Test for any space or punctuation code unit - Cstdex::parser::basic_string< T >Test for given string - Cstdex::parser::basic_time< T >Test for time - Cstdex::parser::basic_url< T >Test for URL - Cstdex::parser::basic_url_password_char< T >Test for valid URL password character - Cstdex::parser::basic_url_path< T >Test for URL path - Cstdex::parser::basic_url_path_char< T >Test for valid URL path character - Cstdex::parser::basic_url_username_char< T >Test for valid URL username character - Cstdex::parser::parser_collection< T >Base template for collection-holding parsers - Cstdex::parser::basic_branch< T >Test for any - Cstdex::parser::basic_string_branch< T, T_parser >Test for any string - Cstdex::parser::basic_permutation< T >Test for permutation - Cstdex::parser::basic_sequence< T >Test for sequence + Cstdex::parser::basic_creditor_reference< T >Test for Creditor Reference + Cstdex::parser::basic_cu< T >Test for specific code unit + Cstdex::parser::basic_date< T >Test for date + Cstdex::parser::basic_dns_domain_char< T >Test for valid DNS domain character + Cstdex::parser::basic_dns_name< T >Test for DNS domain/hostname + Cstdex::parser::basic_email_address< T >Test for e-mail address + Cstdex::parser::basic_emoticon< T >Test for emoticon + Cstdex::parser::basic_eol< T >Test for end of line + Cstdex::parser::basic_fraction< T >Test for fraction + Cstdex::parser::basic_iban< T >Test for International Bank Account Number + Cstdex::parser::basic_integer< T >Base class for integer testing + Cstdex::parser::basic_integer10< T >Test for decimal integer + Cstdex::parser::basic_integer10ts< T >Test for decimal integer possibly containing thousand separators + Cstdex::parser::basic_integer16< T >Test for hexadecimal integer + Cstdex::parser::basic_roman_numeral< T >Test for Roman numeral + Cstdex::parser::basic_ipv4_address< T >Test for IPv4 address + Cstdex::parser::basic_ipv6_address< T >Test for IPv6 address + Cstdex::parser::basic_ipv6_scope_id_char< T >Test for valid IPv6 address scope ID character + Cstdex::parser::basic_iterations< T >Test for repeating + Cstdex::parser::basic_json_string< T >Test for JSON string + Cstdex::parser::basic_mixed_numeral< T >Test for mixed numeral + Cstdex::parser::basic_monetary_numeral< T >Test for monetary numeral + Cstdex::parser::basic_noop< T >"No-op" match + Cstdex::parser::basic_phone_number< T >Test for phone number + Cstdex::parser::basic_punct_cu< T >Test for any punctuation code unit + Cstdex::parser::basic_scientific_numeral< T >Test for scientific numeral + Cstdex::parser::basic_score< T >Test for match score + Cstdex::parser::basic_set< T > + Cstdex::parser::basic_cu_set< T >Test for any code unit from a given string of code units + Cstdex::parser::basic_si_reference< T >Test for SI Reference + Cstdex::parser::basic_si_reference_delimiter< T >Test for SI Reference delimiter + Cstdex::parser::basic_si_reference_part< T >Test for SI Reference part + Cstdex::parser::basic_signed_numeral< T >Test for signed numeral + Cstdex::parser::basic_space_cu< T >Test for any space code unit + Cstdex::parser::basic_space_or_punct_cu< T >Test for any space or punctuation code unit + Cstdex::parser::basic_string< T >Test for given string + Cstdex::parser::basic_time< T >Test for time + Cstdex::parser::basic_url< T >Test for URL + Cstdex::parser::basic_url_password_char< T >Test for valid URL password character + Cstdex::parser::basic_url_path< T >Test for URL path + Cstdex::parser::basic_url_path_char< T >Test for valid URL path character + Cstdex::parser::basic_url_username_char< T >Test for valid URL username character + Cstdex::parser::parser_collection< T >Base template for collection-holding parsers + Cstdex::parser::basic_branch< T >Test for any + Cstdex::parser::basic_string_branch< T, T_parser >Test for any string + Cstdex::parser::basic_permutation< T >Test for permutation + Cstdex::parser::basic_sequence< T >Test for sequence  Cstdex::parser::basic_parser< char >  Cstdex::parser::http_agentTest for HTTP agent  Cstdex::parser::http_any_typeTest for HTTP any type @@ -231,7 +236,7 @@ $(function() { diff --git a/idrec_8hpp_source.html b/idrec_8hpp_source.html index d3e8742be..eeac06136 100644 --- a/idrec_8hpp_source.html +++ b/idrec_8hpp_source.html @@ -421,7 +421,7 @@ $(document).ready(function() { init_codefold(0); }); diff --git a/include_2stdex_2compat_8hpp_source.html b/include_2stdex_2compat_8hpp_source.html index 61ae87445..ae7a60122 100644 --- a/include_2stdex_2compat_8hpp_source.html +++ b/include_2stdex_2compat_8hpp_source.html @@ -282,7 +282,7 @@ $(document).ready(function() { init_codefold(0); }); diff --git a/index.html b/index.html index 40a45ec9a..ad41e9aac 100644 --- a/index.html +++ b/index.html @@ -76,7 +76,7 @@ $(function() { diff --git a/interval_8hpp_source.html b/interval_8hpp_source.html index 35ab9780f..61ff09ae0 100644 --- a/interval_8hpp_source.html +++ b/interval_8hpp_source.html @@ -202,7 +202,7 @@ $(document).ready(function() { init_codefold(0); }); diff --git a/mapping_8hpp_source.html b/mapping_8hpp_source.html index d0762cd86..e21d75e8c 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 0849f064f..edbf28a20 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 0764c71ee..1c826ad73 100644 --- a/math_8hpp_source.html +++ b/math_8hpp_source.html @@ -134,7 +134,7 @@ $(document).ready(function() { init_codefold(0); }); diff --git a/memory_8hpp_source.html b/memory_8hpp_source.html index de0f88acc..c33805fa4 100644 --- a/memory_8hpp_source.html +++ b/memory_8hpp_source.html @@ -128,7 +128,7 @@ $(document).ready(function() { init_codefold(0); }); diff --git a/parser_8cpp_source.html b/parser_8cpp_source.html index 8976064fc..5ea6a0b12 100644 --- a/parser_8cpp_source.html +++ b/parser_8cpp_source.html @@ -94,328 +94,470 @@ $(document).ready(function() { init_codefold(0); });
    10using namespace stdex::parser;
    11#ifdef _WIN32
    12using namespace Microsoft::VisualStudio::CppUnitTestFramework;
    -
    13#endif
    -
    14
    -
    15namespace UnitTests
    -
    16{
    -
    17 TEST_CLASS(parser)
    -
    18 {
    -
    19 public:
    -
    20 TEST_METHOD(wtest)
    -
    21 {
    -
    22 static const wchar_t text[] = L"This is a test.\nSecond line.";
    -
    23
    -
    24 {
    -
    25 wnoop p;
    -
    26 Assert::IsTrue(p.match(text));
    -
    27 Assert::AreEqual((size_t)0, p.interval.start);
    -
    28 Assert::AreEqual((size_t)0, p.interval.end);
    -
    29 }
    -
    30
    -
    31 {
    -
    32 wcu p(L't');
    -
    33 Assert::IsFalse(p.match(text));
    -
    34 Assert::IsTrue(p.match(text, 0, _countof(text), match_case_insensitive));
    -
    35 Assert::AreEqual((size_t)0, p.interval.start);
    -
    36 Assert::AreEqual((size_t)1, p.interval.end);
    -
    37 }
    -
    38
    -
    39 {
    -
    40 wspace_cu p;
    -
    41 Assert::IsFalse(p.match(text));
    -
    42 Assert::IsTrue(p.match(text, 4));
    -
    43 Assert::AreEqual((size_t)4, p.interval.start);
    -
    44 Assert::AreEqual((size_t)5, p.interval.end);
    -
    45 }
    -
    46
    -
    47 {
    -
    48 wpunct_cu p;
    -
    49 Assert::IsFalse(p.match(text));
    -
    50 Assert::IsTrue(p.match(text, 14));
    -
    51 Assert::AreEqual((size_t)14, p.interval.start);
    -
    52 Assert::AreEqual((size_t)15, p.interval.end);
    -
    53 }
    -
    54
    -
    55 {
    -
    56 wspace_or_punct_cu p;
    -
    57 Assert::IsFalse(p.match(text));
    -
    58 Assert::IsTrue(p.match(text, 4));
    -
    59 Assert::AreEqual((size_t)4, p.interval.start);
    -
    60 Assert::AreEqual((size_t)5, p.interval.end);
    +
    13
    +
    14namespace Microsoft {
    +
    15 namespace VisualStudio {
    +
    16 namespace CppUnitTestFramework {
    +
    17 static std::wstring ToString(const stdex::interval<size_t>& q)
    +
    18 {
    +
    19 return stdex::sprintf(L"<%zu, %zu>", nullptr, q.start, q.end);
    +
    20 }
    +
    21 }
    +
    22 }
    +
    23}
    +
    24#endif
    +
    25
    +
    26namespace UnitTests
    +
    27{
    +
    28 TEST_CLASS(parser)
    +
    29 {
    +
    30 public:
    +
    31 TEST_METHOD(wtest)
    +
    32 {
    +
    33 static const wchar_t text[] = L"This is a test.\nSecond line.";
    +
    34
    +
    35 {
    +
    36 wnoop p;
    +
    37 Assert::IsTrue(p.match(text));
    +
    38 Assert::AreEqual((size_t)0, p.interval.start);
    +
    39 Assert::AreEqual((size_t)0, p.interval.end);
    +
    40 }
    +
    41
    +
    42 {
    +
    43 wcu p(L't');
    +
    44 Assert::IsFalse(p.match(text));
    +
    45 Assert::IsTrue(p.match(text, 0, _countof(text), match_case_insensitive));
    +
    46 Assert::AreEqual((size_t)0, p.interval.start);
    +
    47 Assert::AreEqual((size_t)1, p.interval.end);
    +
    48 }
    +
    49
    +
    50 {
    +
    51 wspace_cu p;
    +
    52 Assert::IsFalse(p.match(text));
    +
    53 Assert::IsTrue(p.match(text, 4));
    +
    54 Assert::AreEqual((size_t)4, p.interval.start);
    +
    55 Assert::AreEqual((size_t)5, p.interval.end);
    +
    56 }
    +
    57
    +
    58 {
    +
    59 wpunct_cu p;
    +
    60 Assert::IsFalse(p.match(text));
    61 Assert::IsTrue(p.match(text, 14));
    62 Assert::AreEqual((size_t)14, p.interval.start);
    63 Assert::AreEqual((size_t)15, p.interval.end);
    64 }
    65
    66 {
    -
    67 wbol p;
    -
    68 Assert::IsTrue(p.match(text));
    -
    69 Assert::AreEqual((size_t)0, p.interval.start);
    -
    70 Assert::AreEqual((size_t)0, p.interval.end);
    -
    71 Assert::IsFalse(p.match(text, 1));
    -
    72 Assert::IsFalse(p.match(text, 15));
    -
    73 Assert::IsTrue(p.match(text, 16));
    -
    74 Assert::AreEqual((size_t)16, p.interval.start);
    -
    75 Assert::AreEqual((size_t)16, p.interval.end);
    -
    76 }
    -
    77
    -
    78 {
    -
    79 weol p;
    -
    80 Assert::IsFalse(p.match(text));
    -
    81 Assert::IsFalse(p.match(text, 1));
    -
    82 Assert::IsTrue(p.match(text, 15));
    -
    83 Assert::AreEqual((size_t)15, p.interval.start);
    -
    84 Assert::AreEqual((size_t)15, p.interval.end);
    -
    85 Assert::IsFalse(p.match(text, 16));
    -
    86 }
    -
    87
    -
    88 {
    -
    89 wcu_set p(L"abcD");
    -
    90 Assert::IsFalse(p.match(text));
    -
    91 Assert::IsTrue(p.match(text, 8));
    -
    92 Assert::AreEqual((size_t)8, p.interval.start);
    -
    93 Assert::AreEqual((size_t)9, p.interval.end);
    -
    94 Assert::AreEqual((size_t)0, p.hit_offset);
    -
    95 Assert::IsFalse(p.match(text, 21));
    -
    96 Assert::IsTrue(p.match(text, 21, _countof(text), match_case_insensitive));
    -
    97 Assert::AreEqual((size_t)21, p.interval.start);
    -
    98 Assert::AreEqual((size_t)22, p.interval.end);
    -
    99 Assert::AreEqual((size_t)3, p.hit_offset);
    -
    100 }
    -
    101
    -
    102 {
    -
    103 stdex::parser::wstring p(L"this");
    -
    104 Assert::IsFalse(p.match(text));
    -
    105 Assert::IsTrue(p.match(text, 0, sizeof(text), match_case_insensitive));
    -
    106 Assert::AreEqual((size_t)0, p.interval.start);
    -
    107 Assert::AreEqual((size_t)4, p.interval.end);
    -
    108 }
    -
    109
    -
    110 {
    -
    111 wany_cu chr;
    -
    112 witerations p(make_shared_no_delete(&chr), 1, 5);
    -
    113 Assert::IsTrue(p.match(text));
    -
    114 Assert::AreEqual((size_t)0, p.interval.start);
    -
    115 Assert::AreEqual((size_t)5, p.interval.end);
    -
    116 }
    -
    117
    -
    118 {
    -
    119 wspace_cu nospace(true);
    -
    120 witerations p(make_shared_no_delete(&nospace), 1);
    -
    121 Assert::IsTrue(p.match(text));
    -
    122 Assert::AreEqual((size_t)0, p.interval.start);
    -
    123 Assert::AreEqual((size_t)4, p.interval.end);
    -
    124 }
    -
    125
    -
    126 {
    -
    127 wcu chr_t(L't'), chr_h(L'h'), chr_i(L'i'), chr_s(L's');
    -
    128 wspace_cu space;
    -
    129 wsequence p({
    -
    130 make_shared_no_delete(&chr_t),
    -
    131 make_shared_no_delete(&chr_h),
    -
    132 make_shared_no_delete(&chr_i),
    -
    133 make_shared_no_delete(&chr_s),
    -
    134 make_shared_no_delete(&space) });
    -
    135 Assert::IsFalse(p.match(text));
    -
    136 Assert::IsTrue(p.match(text, 0, _countof(text), match_case_insensitive));
    -
    137 Assert::AreEqual((size_t)0, p.interval.start);
    -
    138 Assert::AreEqual((size_t)5, p.interval.end);
    -
    139 }
    -
    140
    -
    141 {
    -
    142 stdex::parser::wstring apple(L"apple"), orange(L"orange"), _this(L"this");
    -
    143 wspace_cu space;
    -
    144 wbranch p({
    -
    145 make_shared_no_delete(&apple),
    -
    146 make_shared_no_delete(&orange),
    -
    147 make_shared_no_delete(&_this),
    -
    148 make_shared_no_delete(&space) });
    -
    149 Assert::IsFalse(p.match(text));
    -
    150 Assert::IsTrue(p.match(text, 0, _countof(text), match_case_insensitive));
    -
    151 Assert::AreEqual((size_t)2, p.hit_offset);
    -
    152 Assert::AreEqual((size_t)0, p.interval.start);
    -
    153 Assert::AreEqual((size_t)4, p.interval.end);
    -
    154 }
    -
    155
    -
    156 {
    -
    157 wstring_branch p(L"apple", L"orange", L"this", nullptr);
    -
    158 Assert::IsFalse(p.match(text));
    -
    159 Assert::IsTrue(p.match(text, 0, _countof(text), match_case_insensitive));
    -
    160 Assert::AreEqual((size_t)2, p.hit_offset);
    -
    161 Assert::AreEqual((size_t)0, p.interval.start);
    -
    162 Assert::AreEqual((size_t)4, p.interval.end);
    -
    163 }
    -
    164
    -
    165 {
    -
    166 wcu chr_s(L's'), chr_h(L'h'), chr_i(L'i'), chr_t(L't');
    -
    167 wpermutation p({
    -
    168 make_shared_no_delete(&chr_s),
    -
    169 make_shared_no_delete(&chr_h),
    -
    170 make_shared_no_delete(&chr_i),
    -
    171 make_shared_no_delete(&chr_t) });
    -
    172 Assert::IsFalse(p.match(text));
    -
    173 Assert::IsTrue(p.match(text, 0, _countof(text), match_case_insensitive));
    -
    174 Assert::AreEqual((size_t)0, p.interval.start);
    -
    175 Assert::AreEqual((size_t)4, p.interval.end);
    -
    176 }
    -
    177 }
    -
    178
    -
    179 TEST_METHOD(sgml_test)
    -
    180 {
    -
    181 std::locale locale_slSI("sl_SI");
    -
    182 static const char text[] = "V ko&zcaron;u&scaron;&ccaron;ku zlobnega mizarja stopiclja fant\nin kli&ccaron;e&nbsp;1234567890.";
    -
    183
    -
    184 {
    -
    185 sgml_noop p;
    -
    186 Assert::IsTrue(p.match(text));
    -
    187 Assert::AreEqual((size_t)0, p.interval.start);
    -
    188 Assert::AreEqual((size_t)0, p.interval.end);
    -
    189 }
    -
    190
    -
    191 {
    -
    192 sgml_cp p("v");
    -
    193 Assert::IsFalse(p.match(text));
    -
    194 Assert::IsTrue(p.match(text, 0, _countof(text), match_case_insensitive));
    -
    195 Assert::AreEqual((size_t)0, p.interval.start);
    -
    196 Assert::AreEqual((size_t)1, p.interval.end);
    -
    197 }
    -
    198
    -
    199 {
    -
    200 sgml_cp p("&Zcaron;", SIZE_MAX, false, locale_slSI);
    -
    201 Assert::IsFalse(p.match(text, 4));
    -
    202 Assert::IsTrue(p.match(text, 4, _countof(text), match_case_insensitive));
    -
    203 Assert::AreEqual((size_t)4, p.interval.start);
    -
    204 Assert::AreEqual((size_t)12, p.interval.end);
    -
    205 }
    -
    206
    -
    207 {
    -
    208 sgml_space_cp p(false, locale_slSI);
    -
    209 Assert::IsFalse(p.match(text));
    -
    210 Assert::IsTrue(p.match(text, 1));
    -
    211 Assert::AreEqual((size_t)1, p.interval.start);
    -
    212 Assert::AreEqual((size_t)2, p.interval.end);
    -
    213 Assert::IsTrue(p.match(text, 79));
    -
    214 Assert::AreEqual((size_t)79, p.interval.start);
    -
    215 Assert::AreEqual((size_t)85, p.interval.end);
    -
    216 }
    -
    217
    -
    218 {
    -
    219 sgml_string_branch p(locale_slSI, "apple", "orange", "Ko&Zcaron;u&Scaron;&ccaron;Ku", nullptr);
    -
    220 Assert::IsFalse(p.match(text, 2));
    -
    221 Assert::IsTrue(p.match(text, 2, _countof(text), match_case_insensitive));
    -
    222 Assert::AreEqual((size_t)2, p.hit_offset);
    -
    223 Assert::AreEqual((size_t)2, p.interval.start);
    -
    224 Assert::AreEqual((size_t)31, p.interval.end);
    -
    225 }
    -
    226 }
    -
    227
    -
    228 TEST_METHOD(http_test)
    -
    229 {
    -
    230 static const std::locale locale("en_US.UTF-8");
    -
    231 static const char request[] =
    -
    232 "GET / HTTP/2\r\n"
    -
    233 "Host: stackoverflow.com\r\n"
    -
    234 "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/110.0\r\n"
    -
    235 "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8\r\n"
    -
    236 "Accept-Language: sl,en-US;q=0.8,en;q=0.6,de-DE;q=0.4,de;q=0.2\r\n"
    -
    237 "Accept-Encoding: gzip, deflate, br\r\n"
    -
    238 "DNT: 1\r\n"
    -
    239 "Connection: keep-alive\r\n"
    -
    240 "Cookie: prov=00000000-0000-0000-0000-000000000000; acct=t=00000000000000000%2f%2f0000%2b0000%2b000&s=00000000000000000000000000000000; OptanonConsent=isGpcEnabled=0&datestamp=Fri+Feb+03+2023+11%3A11%3A08+GMT%2B0100+(Srednjeevropski+standardni+%C4%8Das)&version=6.37.0&isIABGlobal=false&hosts=&consentId=00000000-0000-0000-0000-000000000000&interactionCount=1&landingPath=NotLandingPage&groups=00000%3A0%2C00000%3A0%2C00000%3A0%2C00000%3A0; OptanonAlertBoxClosed=2023-02-03T10:11:08.683Z\r\n"
    -
    241 "Upgrade-Insecure-Requests: 1\r\n"
    -
    242 "Sec-Fetch-Dest: document\r\n"
    -
    243 "Sec-Fetch-Mode: navigate\r\n"
    -
    244 "Sec-Fetch-Site: none\r\n"
    -
    245 "Sec-Fetch-User: ?1\r\n"
    -
    246 "Pragma: no-cache\r\n"
    -
    247 "Cache-Control: no-cache\r\n"
    -
    248 "\r\n";
    -
    249
    -
    250 {
    -
    251 http_request p(locale);
    -
    252 Assert::IsTrue(p.match(request));
    -
    253 Assert::AreEqual((size_t)0, p.interval.start);
    -
    254 Assert::AreEqual((size_t)14, p.interval.end);
    -
    255 Assert::AreEqual((size_t)0, p.verb.start);
    -
    256 Assert::AreEqual((size_t)3, p.verb.end);
    -
    257 Assert::AreEqual((size_t)4, p.url.interval.start);
    -
    258 Assert::AreEqual((size_t)5, p.url.interval.end);
    -
    259 Assert::AreEqual((size_t)6, p.protocol.interval.start);
    -
    260 Assert::AreEqual((size_t)12, p.protocol.interval.end);
    -
    261 Assert::AreEqual((uint16_t)0x200, p.protocol.version);
    -
    262 }
    -
    263
    -
    264 {
    -
    265 std::list<http_header> hdrs;
    -
    266 size_t offset = 14;
    -
    267 for (;;) {
    -
    268 http_header h;
    -
    269 if (h.match(request, offset)) {
    -
    270 offset = h.interval.end;
    -
    271 hdrs.push_back(std::move(h));
    -
    272 }
    -
    273 else
    -
    274 break;
    -
    275 }
    -
    276 Assert::AreEqual((size_t)15, hdrs.size());
    -
    277 http_weighted_collection<http_weighted_value<http_language>> langs;
    -
    278 for (const auto& h : hdrs)
    -
    279 if (strnicmp(request + h.name.start, h.name.size(), "Accept-Language", (size_t)-1, locale) == 0)
    -
    280 langs.insert(request, h.value.start, h.value.end);
    -
    281 Assert::IsTrue(!langs.empty());
    -
    282 {
    -
    283 const vector<std::string> control = {
    -
    284 "sl", "en-US", "en", "de-DE", "de"
    -
    285 };
    -
    286 auto c = control.cbegin();
    -
    287 auto l = langs.cbegin();
    -
    288 for (; c != control.cend() && l != langs.cend(); ++c, ++l)
    -
    289 Assert::IsTrue(strnicmp(request + l->value.interval.start, l->value.interval.size(), c->c_str(), c->size(), locale) == 0);
    -
    290 Assert::IsTrue(c == control.cend());
    -
    291 Assert::IsTrue(l == langs.cend());
    -
    292 }
    -
    293 }
    -
    294
    -
    295 //static const char response[] =
    -
    296 // "HTTP/2 200 OK\r\n"
    -
    297 // "cache-control: private\r\n"
    -
    298 // "content-type: text/html; charset=utf-8\r\n"
    -
    299 // "content-encoding: gzip\r\n"
    -
    300 // "strict-transport-security: max-age=15552000\r\n"
    -
    301 // "x-frame-options: SAMEORIGIN\r\n"
    -
    302 // "set-cookie: acct=t=00000000000000000%2f%2f0000%2b0000%2b000&s=00000000000000000000000000000000; expires=Sat, 16 Sep 2023 10:23:00 GMT; domain=.stackoverflow.com; path=/; secure; samesite=none; httponly\r\n"
    -
    303 // "set-cookie: prov_tgt=; expires=Tue, 14 Mar 2023 10:23:00 GMT; domain=.stackoverflow.com; path=/; secure; samesite=none; httponly\r\n"
    -
    304 // "x-request-guid: a6536a49-b473-4c6f-b313-c1e7c0d8f600\r\n"
    -
    305 // "feature-policy: microphone 'none'; speaker 'none'\r\n"
    -
    306 // "content-security-policy: upgrade-insecure-requests; frame-ancestors 'self' https://stackexchange.com\r\n"
    -
    307 // "accept-ranges: bytes\r\n"
    -
    308 // "date: Thu, 16 Mar 2023 10:23:00 GMT\r\n"
    -
    309 // "via: 1.1 varnish\r\n"
    -
    310 // "x-served-by: cache-vie6354-VIE\r\n"
    -
    311 // "x-cache: MISS\r\n"
    -
    312 // "x-cache-hits: 0\r\n"
    -
    313 // "x-timer: S1678962181.533907,VS0,VE144\r\n"
    -
    314 // "vary: Accept-Encoding,Fastly-SSL\r\n"
    -
    315 // "x-dns-prefetch-control: off\r\n"
    -
    316 // "X-Firefox-Spdy: h2\r\n"
    -
    317 // "\r\n";
    -
    318 }
    -
    319 };
    -
    320}
    +
    67 wspace_or_punct_cu p;
    +
    68 Assert::IsFalse(p.match(text));
    +
    69 Assert::IsTrue(p.match(text, 4));
    +
    70 Assert::AreEqual((size_t)4, p.interval.start);
    +
    71 Assert::AreEqual((size_t)5, p.interval.end);
    +
    72 Assert::IsTrue(p.match(text, 14));
    +
    73 Assert::AreEqual((size_t)14, p.interval.start);
    +
    74 Assert::AreEqual((size_t)15, p.interval.end);
    +
    75 }
    +
    76
    +
    77 {
    +
    78 wbol p;
    +
    79 Assert::IsTrue(p.match(text));
    +
    80 Assert::AreEqual((size_t)0, p.interval.start);
    +
    81 Assert::AreEqual((size_t)0, p.interval.end);
    +
    82 Assert::IsFalse(p.match(text, 1));
    +
    83 Assert::IsFalse(p.match(text, 15));
    +
    84 Assert::IsTrue(p.match(text, 16));
    +
    85 Assert::AreEqual((size_t)16, p.interval.start);
    +
    86 Assert::AreEqual((size_t)16, p.interval.end);
    +
    87 }
    +
    88
    +
    89 {
    +
    90 weol p;
    +
    91 Assert::IsFalse(p.match(text));
    +
    92 Assert::IsFalse(p.match(text, 1));
    +
    93 Assert::IsTrue(p.match(text, 15));
    +
    94 Assert::AreEqual((size_t)15, p.interval.start);
    +
    95 Assert::AreEqual((size_t)15, p.interval.end);
    +
    96 Assert::IsFalse(p.match(text, 16));
    +
    97 }
    +
    98
    +
    99 {
    +
    100 wcu_set p(L"abcD");
    +
    101 Assert::IsFalse(p.match(text));
    +
    102 Assert::IsTrue(p.match(text, 8));
    +
    103 Assert::AreEqual((size_t)8, p.interval.start);
    +
    104 Assert::AreEqual((size_t)9, p.interval.end);
    +
    105 Assert::AreEqual((size_t)0, p.hit_offset);
    +
    106 Assert::IsFalse(p.match(text, 21));
    +
    107 Assert::IsTrue(p.match(text, 21, _countof(text), match_case_insensitive));
    +
    108 Assert::AreEqual((size_t)21, p.interval.start);
    +
    109 Assert::AreEqual((size_t)22, p.interval.end);
    +
    110 Assert::AreEqual((size_t)3, p.hit_offset);
    +
    111 }
    +
    112
    +
    113 {
    +
    114 stdex::parser::wstring p(L"this");
    +
    115 Assert::IsFalse(p.match(text));
    +
    116 Assert::IsTrue(p.match(text, 0, sizeof(text), match_case_insensitive));
    +
    117 Assert::AreEqual((size_t)0, p.interval.start);
    +
    118 Assert::AreEqual((size_t)4, p.interval.end);
    +
    119 }
    +
    120
    +
    121 {
    +
    122 wany_cu chr;
    +
    123 witerations p(make_shared_no_delete(&chr), 1, 5);
    +
    124 Assert::IsTrue(p.match(text));
    +
    125 Assert::AreEqual((size_t)0, p.interval.start);
    +
    126 Assert::AreEqual((size_t)5, p.interval.end);
    +
    127 }
    +
    128
    +
    129 {
    +
    130 wspace_cu nospace(true);
    +
    131 witerations p(make_shared_no_delete(&nospace), 1);
    +
    132 Assert::IsTrue(p.match(text));
    +
    133 Assert::AreEqual((size_t)0, p.interval.start);
    +
    134 Assert::AreEqual((size_t)4, p.interval.end);
    +
    135 }
    +
    136
    +
    137 {
    +
    138 wcu chr_t(L't'), chr_h(L'h'), chr_i(L'i'), chr_s(L's');
    +
    139 wspace_cu space;
    +
    140 wsequence p({
    +
    141 make_shared_no_delete(&chr_t),
    +
    142 make_shared_no_delete(&chr_h),
    +
    143 make_shared_no_delete(&chr_i),
    +
    144 make_shared_no_delete(&chr_s),
    +
    145 make_shared_no_delete(&space) });
    +
    146 Assert::IsFalse(p.match(text));
    +
    147 Assert::IsTrue(p.match(text, 0, _countof(text), match_case_insensitive));
    +
    148 Assert::AreEqual((size_t)0, p.interval.start);
    +
    149 Assert::AreEqual((size_t)5, p.interval.end);
    +
    150 }
    +
    151
    +
    152 {
    +
    153 stdex::parser::wstring apple(L"apple"), orange(L"orange"), _this(L"this");
    +
    154 wspace_cu space;
    +
    155 wbranch p({
    +
    156 make_shared_no_delete(&apple),
    +
    157 make_shared_no_delete(&orange),
    +
    158 make_shared_no_delete(&_this),
    +
    159 make_shared_no_delete(&space) });
    +
    160 Assert::IsFalse(p.match(text));
    +
    161 Assert::IsTrue(p.match(text, 0, _countof(text), match_case_insensitive));
    +
    162 Assert::AreEqual((size_t)2, p.hit_offset);
    +
    163 Assert::AreEqual((size_t)0, p.interval.start);
    +
    164 Assert::AreEqual((size_t)4, p.interval.end);
    +
    165 }
    +
    166
    +
    167 {
    +
    168 wstring_branch p(L"apple", L"orange", L"this", nullptr);
    +
    169 Assert::IsFalse(p.match(text));
    +
    170 Assert::IsTrue(p.match(text, 0, _countof(text), match_case_insensitive));
    +
    171 Assert::AreEqual((size_t)2, p.hit_offset);
    +
    172 Assert::AreEqual((size_t)0, p.interval.start);
    +
    173 Assert::AreEqual((size_t)4, p.interval.end);
    +
    174 }
    +
    175
    +
    176 {
    +
    177 wcu chr_s(L's'), chr_h(L'h'), chr_i(L'i'), chr_t(L't');
    +
    178 wpermutation p({
    +
    179 make_shared_no_delete(&chr_s),
    +
    180 make_shared_no_delete(&chr_h),
    +
    181 make_shared_no_delete(&chr_i),
    +
    182 make_shared_no_delete(&chr_t) });
    +
    183 Assert::IsFalse(p.match(text));
    +
    184 Assert::IsTrue(p.match(text, 0, _countof(text), match_case_insensitive));
    +
    185 Assert::AreEqual((size_t)0, p.interval.start);
    +
    186 Assert::AreEqual((size_t)4, p.interval.end);
    +
    187 }
    +
    188
    +
    189 {
    +
    190 wspace_cu space;
    +
    191 wiban p(make_shared_no_delete(&space));
    +
    192 Assert::IsTrue(p.match(L"SI56023120015226972", 0, SIZE_MAX));
    +
    193 Assert::IsTrue(p.is_valid);
    +
    194 Assert::AreEqual(L"SI", p.country);
    +
    195 Assert::AreEqual(L"56", p.check_digits);
    +
    196 Assert::AreEqual(L"023120015226972", p.bban);
    +
    197 Assert::IsTrue(p.match(L"SI56 0231 2001 5226 972", 0, SIZE_MAX));
    +
    198 Assert::IsTrue(p.is_valid);
    +
    199 Assert::AreEqual(L"SI", p.country);
    +
    200 Assert::AreEqual(L"56", p.check_digits);
    +
    201 Assert::AreEqual(L"023120015226972", p.bban);
    +
    202 Assert::IsFalse(p.match(L"si56 0231 2001 5226 972", 0, SIZE_MAX));
    +
    203 Assert::IsFalse(p.is_valid);
    +
    204 Assert::IsTrue(p.match(L"si56 0231 2001 5226 972", 0, SIZE_MAX, match_case_insensitive));
    +
    205 Assert::IsTrue(p.is_valid);
    +
    206 Assert::IsTrue(p.match(L"SI56 0231 2001 5226 9720", 0, SIZE_MAX));
    +
    207 Assert::IsFalse(p.is_valid);
    +
    208 Assert::IsTrue(p.match(L"...SI56 0231 2001 5226 972...", 3, SIZE_MAX));
    +
    209 Assert::IsTrue(p.is_valid);
    +
    210 Assert::IsTrue(p.match(L"SI56 0231 2001 5226 972", 0, SIZE_MAX)); // no-break space
    +
    211 Assert::IsTrue(p.is_valid);
    +
    212 }
    +
    213
    +
    214 {
    +
    215 wspace_cu space;
    +
    216 wcreditor_reference p(make_shared_no_delete(&space));
    +
    217 Assert::IsTrue(p.match(L"RF18539007547034", 0, SIZE_MAX));
    +
    218 Assert::IsTrue(p.is_valid);
    +
    219 Assert::AreEqual(L"18", p.check_digits);
    +
    220 Assert::AreEqual(L"000000000539007547034", p.reference);
    +
    221 Assert::IsTrue(p.match(L"RF18 5390 0754 7034", 0, SIZE_MAX));
    +
    222 Assert::IsTrue(p.is_valid);
    +
    223 Assert::AreEqual(L"18", p.check_digits);
    +
    224 Assert::AreEqual(L"000000000539007547034", p.reference);
    +
    225 Assert::IsFalse(p.match(L"rf18 5390 0754 7034", 0, SIZE_MAX));
    +
    226 Assert::IsFalse(p.is_valid);
    +
    227 Assert::IsTrue(p.match(L"rf18 5390 0754 7034", 0, SIZE_MAX, match_case_insensitive));
    +
    228 Assert::IsTrue(p.is_valid);
    +
    229 Assert::IsTrue(p.match(L"RF18 5390 0754 70340", 0, SIZE_MAX));
    +
    230 Assert::IsFalse(p.is_valid);
    +
    231 Assert::IsTrue(p.match(L"...RF18 5390 0754 7034...", 3, SIZE_MAX));
    +
    232 Assert::IsTrue(p.is_valid);
    +
    233 Assert::IsTrue(p.match(L"RF18 5390 0754 7034", 0, SIZE_MAX)); // no-break space
    +
    234 Assert::IsTrue(p.is_valid);
    +
    235 }
    +
    236
    +
    237 {
    +
    238 wspace_cu space;
    +
    239 wsi_reference p(make_shared_no_delete(&space));
    +
    240 Assert::IsTrue(p.match(L"SI121234567890120", 0, SIZE_MAX));
    +
    241 Assert::IsTrue(p.is_valid);
    +
    242 Assert::AreEqual(L"12", p.model);
    +
    243 Assert::AreEqual(stdex::interval<size_t>(4, 17), p.part1.interval);
    +
    244 Assert::IsTrue(p.match(L"SI12 1234567890120", 0, SIZE_MAX));
    +
    245 Assert::IsTrue(p.is_valid);
    +
    246 Assert::AreEqual(L"12", p.model);
    +
    247 Assert::AreEqual(stdex::interval<size_t>(5, 18), p.part1.interval);
    +
    248 Assert::IsFalse(p.match(L"si12 1234567890120", 0, SIZE_MAX));
    +
    249 Assert::IsTrue(p.match(L"si12 1234567890120", 0, SIZE_MAX, match_case_insensitive));
    +
    250 Assert::IsTrue(p.match(L"...SI12 1234567890120...", 3, SIZE_MAX));
    +
    251 Assert::IsTrue(p.match(L"SI12 1234567890120", 0, SIZE_MAX)); // no-break space
    +
    252 }
    +
    253 }
    +
    254
    +
    255 TEST_METHOD(sgml_test)
    +
    256 {
    +
    257 std::locale locale_slSI("sl_SI");
    +
    258 static const char text[] = "V ko&zcaron;u&scaron;&ccaron;ku zlobnega mizarja stopiclja fant\nin kli&ccaron;e&nbsp;1234567890.";
    +
    259
    +
    260 {
    +
    261 sgml_noop p;
    +
    262 Assert::IsTrue(p.match(text));
    +
    263 Assert::AreEqual((size_t)0, p.interval.start);
    +
    264 Assert::AreEqual((size_t)0, p.interval.end);
    +
    265 }
    +
    266
    +
    267 {
    +
    268 sgml_cp p("v");
    +
    269 Assert::IsFalse(p.match(text));
    +
    270 Assert::IsTrue(p.match(text, 0, _countof(text), match_case_insensitive));
    +
    271 Assert::AreEqual((size_t)0, p.interval.start);
    +
    272 Assert::AreEqual((size_t)1, p.interval.end);
    +
    273 }
    +
    274
    +
    275 {
    +
    276 sgml_cp p("&Zcaron;", SIZE_MAX, false, locale_slSI);
    +
    277 Assert::IsFalse(p.match(text, 4));
    +
    278 Assert::IsTrue(p.match(text, 4, _countof(text), match_case_insensitive));
    +
    279 Assert::AreEqual((size_t)4, p.interval.start);
    +
    280 Assert::AreEqual((size_t)12, p.interval.end);
    +
    281 }
    +
    282
    +
    283 {
    +
    284 sgml_space_cp p(false, locale_slSI);
    +
    285 Assert::IsFalse(p.match(text));
    +
    286 Assert::IsTrue(p.match(text, 1));
    +
    287 Assert::AreEqual((size_t)1, p.interval.start);
    +
    288 Assert::AreEqual((size_t)2, p.interval.end);
    +
    289 Assert::IsTrue(p.match(text, 79));
    +
    290 Assert::AreEqual((size_t)79, p.interval.start);
    +
    291 Assert::AreEqual((size_t)85, p.interval.end);
    +
    292 }
    +
    293
    +
    294 {
    +
    295 sgml_string_branch p(locale_slSI, "apple", "orange", "Ko&Zcaron;u&Scaron;&ccaron;Ku", nullptr);
    +
    296 Assert::IsFalse(p.match(text, 2));
    +
    297 Assert::IsTrue(p.match(text, 2, _countof(text), match_case_insensitive));
    +
    298 Assert::AreEqual((size_t)2, p.hit_offset);
    +
    299 Assert::AreEqual((size_t)2, p.interval.start);
    +
    300 Assert::AreEqual((size_t)31, p.interval.end);
    +
    301 }
    +
    302
    +
    303 {
    +
    304 sgml_space_cp space;
    +
    305 sgml_iban p(make_shared_no_delete(&space));
    +
    306 Assert::IsTrue(p.match("SI56023120015226972", 0, SIZE_MAX));
    +
    307 Assert::IsTrue(p.is_valid);
    +
    308 Assert::AreEqual("SI", p.country);
    +
    309 Assert::AreEqual("56", p.check_digits);
    +
    310 Assert::AreEqual("023120015226972", p.bban);
    +
    311 Assert::IsTrue(p.match("SI56 0231 2001 5226 972", 0, SIZE_MAX));
    +
    312 Assert::IsTrue(p.is_valid);
    +
    313 Assert::AreEqual("SI", p.country);
    +
    314 Assert::AreEqual("56", p.check_digits);
    +
    315 Assert::AreEqual("023120015226972", p.bban);
    +
    316 Assert::IsFalse(p.match("si56 0231 2001 5226 972", 0, SIZE_MAX));
    +
    317 Assert::IsFalse(p.is_valid);
    +
    318 Assert::IsTrue(p.match("si56 0231 2001 5226 972", 0, SIZE_MAX, match_case_insensitive));
    +
    319 Assert::IsTrue(p.is_valid);
    +
    320 Assert::IsTrue(p.match("SI56 0231 2001 5226 9720", 0, SIZE_MAX));
    +
    321 Assert::IsFalse(p.is_valid);
    +
    322 Assert::IsTrue(p.match("...SI56 0231 2001 5226 972...", 3, SIZE_MAX));
    +
    323 Assert::IsTrue(p.is_valid);
    +
    324 Assert::IsTrue(p.match("SI56&nbsp;0231&nbsp;2001&nbsp;5226&nbsp;972", 0, SIZE_MAX));
    +
    325 Assert::IsTrue(p.is_valid);
    +
    326 }
    +
    327
    +
    328 {
    +
    329 sgml_space_cp space;
    +
    330 sgml_creditor_reference p(make_shared_no_delete(&space));
    +
    331 Assert::IsTrue(p.match("RF18539007547034", 0, SIZE_MAX));
    +
    332 Assert::IsTrue(p.is_valid);
    +
    333 Assert::AreEqual("18", p.check_digits);
    +
    334 Assert::AreEqual("000000000539007547034", p.reference);
    +
    335 Assert::IsTrue(p.match("RF18 5390 0754 7034", 0, SIZE_MAX));
    +
    336 Assert::IsTrue(p.is_valid);
    +
    337 Assert::AreEqual("18", p.check_digits);
    +
    338 Assert::AreEqual("000000000539007547034", p.reference);
    +
    339 Assert::IsFalse(p.match("rf18 5390 0754 7034", 0, SIZE_MAX));
    +
    340 Assert::IsFalse(p.is_valid);
    +
    341 Assert::IsTrue(p.match("rf18 5390 0754 7034", 0, SIZE_MAX, match_case_insensitive));
    +
    342 Assert::IsTrue(p.is_valid);
    +
    343 Assert::IsTrue(p.match("RF18 5390 0754 70340", 0, SIZE_MAX));
    +
    344 Assert::IsFalse(p.is_valid);
    +
    345 Assert::IsTrue(p.match("...RF18 5390 0754 7034...", 3, SIZE_MAX));
    +
    346 Assert::IsTrue(p.is_valid);
    +
    347 Assert::IsTrue(p.match("RF18&nbsp;5390&nbsp;0754&nbsp;7034", 0, SIZE_MAX));
    +
    348 Assert::IsTrue(p.is_valid);
    +
    349 }
    +
    350
    +
    351 {
    +
    352 sgml_space_cp space;
    +
    353 sgml_si_reference p(make_shared_no_delete(&space));
    +
    354 Assert::IsTrue(p.match("SI121234567890120", 0, SIZE_MAX));
    +
    355 Assert::IsTrue(p.is_valid);
    +
    356 Assert::AreEqual("12", p.model);
    +
    357 Assert::AreEqual(stdex::interval<size_t>(4, 17), p.part1.interval);
    +
    358 Assert::IsTrue(p.match("SI12 1234567890120", 0, SIZE_MAX));
    +
    359 Assert::IsTrue(p.is_valid);
    +
    360 Assert::AreEqual("12", p.model);
    +
    361 Assert::AreEqual(stdex::interval<size_t>(5, 18), p.part1.interval);
    +
    362 Assert::IsFalse(p.match("si12 1234567890120", 0, SIZE_MAX));
    +
    363 Assert::IsTrue(p.match("si12 1234567890120", 0, SIZE_MAX, match_case_insensitive));
    +
    364 Assert::IsTrue(p.match("...SI12 1234567890120...", 3, SIZE_MAX));
    +
    365 Assert::IsTrue(p.match("SI12&nbsp;1234567890120", 0, SIZE_MAX));
    +
    366 }
    +
    367 }
    +
    368
    +
    369 TEST_METHOD(http_test)
    +
    370 {
    +
    371 static const std::locale locale("en_US.UTF-8");
    +
    372 static const char request[] =
    +
    373 "GET / HTTP/2\r\n"
    +
    374 "Host: stackoverflow.com\r\n"
    +
    375 "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/110.0\r\n"
    +
    376 "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8\r\n"
    +
    377 "Accept-Language: sl,en-US;q=0.8,en;q=0.6,de-DE;q=0.4,de;q=0.2\r\n"
    +
    378 "Accept-Encoding: gzip, deflate, br\r\n"
    +
    379 "DNT: 1\r\n"
    +
    380 "Connection: keep-alive\r\n"
    +
    381 "Cookie: prov=00000000-0000-0000-0000-000000000000; acct=t=00000000000000000%2f%2f0000%2b0000%2b000&s=00000000000000000000000000000000; OptanonConsent=isGpcEnabled=0&datestamp=Fri+Feb+03+2023+11%3A11%3A08+GMT%2B0100+(Srednjeevropski+standardni+%C4%8Das)&version=6.37.0&isIABGlobal=false&hosts=&consentId=00000000-0000-0000-0000-000000000000&interactionCount=1&landingPath=NotLandingPage&groups=00000%3A0%2C00000%3A0%2C00000%3A0%2C00000%3A0; OptanonAlertBoxClosed=2023-02-03T10:11:08.683Z\r\n"
    +
    382 "Upgrade-Insecure-Requests: 1\r\n"
    +
    383 "Sec-Fetch-Dest: document\r\n"
    +
    384 "Sec-Fetch-Mode: navigate\r\n"
    +
    385 "Sec-Fetch-Site: none\r\n"
    +
    386 "Sec-Fetch-User: ?1\r\n"
    +
    387 "Pragma: no-cache\r\n"
    +
    388 "Cache-Control: no-cache\r\n"
    +
    389 "\r\n";
    +
    390
    +
    391 {
    +
    392 http_request p(locale);
    +
    393 Assert::IsTrue(p.match(request));
    +
    394 Assert::AreEqual((size_t)0, p.interval.start);
    +
    395 Assert::AreEqual((size_t)14, p.interval.end);
    +
    396 Assert::AreEqual((size_t)0, p.verb.start);
    +
    397 Assert::AreEqual((size_t)3, p.verb.end);
    +
    398 Assert::AreEqual((size_t)4, p.url.interval.start);
    +
    399 Assert::AreEqual((size_t)5, p.url.interval.end);
    +
    400 Assert::AreEqual((size_t)6, p.protocol.interval.start);
    +
    401 Assert::AreEqual((size_t)12, p.protocol.interval.end);
    +
    402 Assert::AreEqual((uint16_t)0x200, p.protocol.version);
    +
    403 }
    +
    404
    +
    405 {
    +
    406 std::list<http_header> hdrs;
    +
    407 size_t offset = 14;
    +
    408 for (;;) {
    +
    409 http_header h;
    +
    410 if (h.match(request, offset)) {
    +
    411 offset = h.interval.end;
    +
    412 hdrs.push_back(std::move(h));
    +
    413 }
    +
    414 else
    +
    415 break;
    +
    416 }
    +
    417 Assert::AreEqual((size_t)15, hdrs.size());
    +
    418 http_weighted_collection<http_weighted_value<http_language>> langs;
    +
    419 for (const auto& h : hdrs)
    +
    420 if (strnicmp(request + h.name.start, h.name.size(), "Accept-Language", (size_t)-1, locale) == 0)
    +
    421 langs.insert(request, h.value.start, h.value.end);
    +
    422 Assert::IsTrue(!langs.empty());
    +
    423 {
    +
    424 const vector<std::string> control = {
    +
    425 "sl", "en-US", "en", "de-DE", "de"
    +
    426 };
    +
    427 auto c = control.cbegin();
    +
    428 auto l = langs.cbegin();
    +
    429 for (; c != control.cend() && l != langs.cend(); ++c, ++l)
    +
    430 Assert::IsTrue(strnicmp(request + l->value.interval.start, l->value.interval.size(), c->c_str(), c->size(), locale) == 0);
    +
    431 Assert::IsTrue(c == control.cend());
    +
    432 Assert::IsTrue(l == langs.cend());
    +
    433 }
    +
    434 }
    +
    435
    +
    436 //static const char response[] =
    +
    437 // "HTTP/2 200 OK\r\n"
    +
    438 // "cache-control: private\r\n"
    +
    439 // "content-type: text/html; charset=utf-8\r\n"
    +
    440 // "content-encoding: gzip\r\n"
    +
    441 // "strict-transport-security: max-age=15552000\r\n"
    +
    442 // "x-frame-options: SAMEORIGIN\r\n"
    +
    443 // "set-cookie: acct=t=00000000000000000%2f%2f0000%2b0000%2b000&s=00000000000000000000000000000000; expires=Sat, 16 Sep 2023 10:23:00 GMT; domain=.stackoverflow.com; path=/; secure; samesite=none; httponly\r\n"
    +
    444 // "set-cookie: prov_tgt=; expires=Tue, 14 Mar 2023 10:23:00 GMT; domain=.stackoverflow.com; path=/; secure; samesite=none; httponly\r\n"
    +
    445 // "x-request-guid: a6536a49-b473-4c6f-b313-c1e7c0d8f600\r\n"
    +
    446 // "feature-policy: microphone 'none'; speaker 'none'\r\n"
    +
    447 // "content-security-policy: upgrade-insecure-requests; frame-ancestors 'self' https://stackexchange.com\r\n"
    +
    448 // "accept-ranges: bytes\r\n"
    +
    449 // "date: Thu, 16 Mar 2023 10:23:00 GMT\r\n"
    +
    450 // "via: 1.1 varnish\r\n"
    +
    451 // "x-served-by: cache-vie6354-VIE\r\n"
    +
    452 // "x-cache: MISS\r\n"
    +
    453 // "x-cache-hits: 0\r\n"
    +
    454 // "x-timer: S1678962181.533907,VS0,VE144\r\n"
    +
    455 // "vary: Accept-Encoding,Fastly-SSL\r\n"
    +
    456 // "x-dns-prefetch-control: off\r\n"
    +
    457 // "X-Firefox-Spdy: h2\r\n"
    +
    458 // "\r\n";
    +
    459 }
    +
    460 };
    +
    461}
    stdex::parser::basic_parser< char >
    stdex::parser::basic_parser::interval
    interval< size_t > interval
    Region of the last match.
    Definition parser.hpp:170
    stdex::parser::basic_string
    Test for given string.
    Definition parser.hpp:816
    -
    stdex::parser::http_header
    Test for HTTP header.
    Definition parser.hpp:6278
    -
    stdex::parser::http_request
    Test for HTTP request.
    Definition parser.hpp:6140
    +
    stdex::parser::http_header
    Test for HTTP header.
    Definition parser.hpp:7157
    +
    stdex::parser::http_request
    Test for HTTP request.
    Definition parser.hpp:7019
    stdex::parser::sgml_cp
    Test for specific SGML code point.
    Definition parser.hpp:341
    stdex::parser::sgml_space_cp
    Test for any SGML space code point.
    Definition parser.hpp:428
    +
    stdex::interval
    Numerical interval.
    Definition interval.hpp:18
    stdex::interval::size
    T size() const
    Returns interval size.
    Definition interval.hpp:47
    stdex::interval::end
    T end
    interval end
    Definition interval.hpp:20
    stdex::interval::start
    T start
    interval start
    Definition interval.hpp:19
    diff --git a/parser_8hpp_source.html b/parser_8hpp_source.html index 18716fb4a..89849f45f 100644 --- a/parser_8hpp_source.html +++ b/parser_8hpp_source.html @@ -4684,1904 +4684,2770 @@ $(document).ready(function() { init_codefold(0); });
    4662#endif
    4663 using sgml_phone_number = basic_phone_number<char>;
    4664
    -
    4668 template <class T>
    -
    -
    4669 class basic_chemical_formula : public basic_parser<T>
    -
    4670 {
    -
    4671 public:
    -
    4672 basic_chemical_formula(
    -
    4673 _In_ const std::shared_ptr<basic_parser<T>>& element,
    -
    4674 _In_ const std::shared_ptr<basic_parser<T>>& digit,
    -
    4675 _In_ const std::shared_ptr<basic_parser<T>>& sign,
    +
    4670 template <class T>
    +
    +
    4671 class basic_iban : public basic_parser<T>
    +
    4672 {
    +
    4673 public:
    +
    4674 basic_iban(
    +
    4675 _In_ const std::shared_ptr<basic_parser<T>>& space,
    4676 _In_ const std::locale& locale = std::locale()) :
    4677 basic_parser<T>(locale),
    -
    4678 m_element(element),
    -
    4679 m_digit(digit),
    -
    4680 m_sign(sign),
    -
    4681 has_digits(false),
    -
    4682 has_charge(false)
    -
    4683 {}
    -
    4684
    -
    4685 virtual bool match(
    -
    4686 _In_reads_or_z_(end) const T* text,
    -
    4687 _In_ size_t start = 0,
    -
    4688 _In_ size_t end = (size_t)-1,
    -
    4689 _In_ int flags = match_default)
    -
    4690 {
    -
    4691 assert(text || start >= end);
    -
    4692
    -
    4693 has_digits = false;
    -
    4694 has_charge = false;
    -
    4695 this->interval.end = start;
    -
    4696
    -
    4697 const int element_match_flags = flags & ~match_case_insensitive; // Chemical elements are always case-sensitive.
    -
    4698 for (;;) {
    -
    4699 if (m_element->match(text, this->interval.end, end, element_match_flags)) {
    -
    4700 this->interval.end = m_element->interval.end;
    -
    4701 while (m_digit->match(text, this->interval.end, end, flags)) {
    -
    4702 this->interval.end = m_digit->interval.end;
    -
    4703 has_digits = true;
    -
    4704 }
    -
    4705 }
    -
    4706 else if (start < this->interval.end) {
    -
    4707 if (m_sign->match(text, this->interval.end, end, flags)) {
    -
    4708 this->interval.end = m_sign->interval.end;
    -
    4709 has_charge = true;
    -
    4710 }
    -
    4711 this->interval.start = start;
    -
    4712 return true;
    -
    4713 }
    -
    4714 else {
    -
    4715 this->interval.start = (this->interval.end = start) + 1;
    -
    4716 return false;
    -
    4717 }
    -
    4718 }
    -
    4719 }
    -
    4720
    -
    4721 virtual void invalidate()
    -
    4722 {
    -
    4723 has_digits = false;
    -
    4724 has_charge = false;
    - -
    4726 }
    -
    4727
    -
    4728 public:
    -
    4729 bool has_digits;
    -
    4730 bool has_charge;
    -
    4731
    -
    4732 protected:
    -
    4733 std::shared_ptr<basic_parser<T>> m_element;
    -
    4734 std::shared_ptr<basic_parser<T>> m_digit;
    -
    4735 std::shared_ptr<basic_parser<T>> m_sign;
    -
    4736 };
    -
    -
    4737
    -
    4738 using chemical_formula = basic_chemical_formula<char>;
    -
    4739 using wchemical_formula = basic_chemical_formula<wchar_t>;
    -
    4740#ifdef _UNICODE
    -
    4741 using tchemical_formula = wchemical_formula;
    -
    4742#else
    -
    4743 using tchemical_formula = chemical_formula;
    -
    4744#endif
    -
    4745 using sgml_chemical_formula = basic_chemical_formula<char>;
    -
    4746
    -
    - -
    4751 {
    -
    4752 public:
    -
    4753 virtual bool match(
    -
    4754 _In_reads_or_z_(end) const char* text,
    -
    4755 _In_ size_t start = 0,
    -
    4756 _In_ size_t end = (size_t)-1,
    -
    4757 _In_ int flags = match_default)
    -
    4758 {
    -
    4759 assert(text || start >= end);
    -
    4760 this->interval.end = start;
    -
    4761
    -
    4762 assert(text || this->interval.end >= end);
    -
    4763 if (this->interval.end < end && text[this->interval.end]) {
    -
    4764 if (text[this->interval.end] == '\r') {
    -
    4765 this->interval.end++;
    -
    4766 if (this->interval.end < end && text[this->interval.end] == '\n') {
    -
    4767 this->interval.start = start;
    -
    4768 this->interval.end++;
    -
    4769 return true;
    -
    4770 }
    -
    4771 }
    -
    4772 else if (text[this->interval.end] == '\n') {
    -
    4773 this->interval.start = start;
    -
    4774 this->interval.end++;
    -
    4775 return true;
    -
    4776 }
    -
    4777 }
    -
    4778 this->interval.start = (this->interval.end = start) + 1;
    -
    4779 return false;
    -
    4780 }
    -
    4781 };
    -
    -
    4782
    -
    -
    4786 class http_space : public parser
    -
    4787 {
    -
    4788 public:
    -
    4789 virtual bool match(
    -
    4790 _In_reads_or_z_(end) const char* text,
    -
    4791 _In_ size_t start = 0,
    -
    4792 _In_ size_t end = (size_t)-1,
    -
    4793 _In_ int flags = match_default)
    -
    4794 {
    -
    4795 assert(text || start >= end);
    -
    4796 this->interval.end = start;
    -
    4797 if (m_line_break.match(text, this->interval.end, end, flags)) {
    -
    4798 this->interval.end = m_line_break.interval.end;
    -
    4799 if (this->interval.end < end && text[this->interval.end] && isspace(text[this->interval.end])) {
    -
    4800 this->interval.start = start;
    -
    4801 this->interval.end++;
    -
    4802 while (this->interval.end < end && text[this->interval.end] && isspace(text[this->interval.end])) this->interval.end++;
    -
    4803 return true;
    -
    4804 }
    -
    4805 }
    -
    4806 else if (this->interval.end < end && text[this->interval.end] && isspace(text[this->interval.end])) {
    -
    4807 this->interval.start = start;
    -
    4808 this->interval.end++;
    -
    4809 while (this->interval.end < end && text[this->interval.end] && isspace(text[this->interval.end])) this->interval.end++;
    -
    4810 return true;
    -
    4811 }
    -
    4812 this->interval.start = (this->interval.end = start) + 1;
    -
    4813 return false;
    -
    4814 }
    -
    4815
    -
    4816 protected:
    -
    4817 http_line_break m_line_break;
    -
    4818 };
    -
    -
    4819
    -
    -
    4823 class http_text_char : public parser
    -
    4824 {
    -
    4825 public:
    -
    4826 virtual bool match(
    -
    4827 _In_reads_or_z_(end) const char* text,
    -
    4828 _In_ size_t start = 0,
    -
    4829 _In_ size_t end = (size_t)-1,
    -
    4830 _In_ int flags = match_default)
    -
    4831 {
    -
    4832 assert(text || start >= end);
    -
    4833 this->interval.end = start;
    -
    4834
    -
    4835 assert(text || this->interval.end >= end);
    -
    4836 if (m_space.match(text, this->interval.end, end, flags)) {
    -
    4837 this->interval.start = start;
    -
    4838 this->interval.end = m_space.interval.end;
    -
    4839 return true;
    +
    4678 m_space(space)
    +
    4679 {
    +
    4680 this->country[0] = 0;
    +
    4681 this->check_digits[0] = 0;
    +
    4682 this->bban[0] = 0;
    +
    4683 this->is_valid = false;
    +
    4684 }
    +
    4685
    +
    4686 virtual bool match(
    +
    4687 _In_reads_or_z_(end) const T* text,
    +
    4688 _In_ size_t start = 0,
    +
    4689 _In_ size_t end = (size_t)-1,
    +
    4690 _In_ int flags = match_default)
    +
    4691 {
    +
    4692 assert(text || start >= end);
    +
    4693 const auto& ctype = std::use_facet<std::ctype<T>>(this->m_locale);
    +
    4694 const bool case_insensitive = flags & match_case_insensitive ? true : false;
    +
    4695
    +
    4696 this->interval.end = start;
    +
    4697 for (size_t i = 0; i < 2; ++i, ++this->interval.end) {
    +
    4698 if (this->interval.end >= end || !text[this->interval.end])
    +
    4699 goto error; // incomplete country code
    +
    4700 T chr = case_insensitive ? ctype.toupper(text[this->interval.end]) : text[this->interval.end];
    +
    4701 if (chr < 'A' || 'Z' < chr)
    +
    4702 goto error; // invalid country code
    +
    4703 this->country[i] = chr;
    +
    4704 }
    +
    4705 this->country[2] = 0;
    +
    4706
    +
    4707 struct country_t {
    +
    4708 T country[2];
    +
    4709 T check_digits[2];
    +
    4710 size_t length;
    +
    4711 };
    +
    4712 static const country_t s_countries[] = {
    +
    4713 { { 'A', 'D' }, {}, 24 }, // Andorra
    +
    4714 { { 'A', 'E' }, {}, 23 }, // United Arab Emirates
    +
    4715 { { 'A', 'L' }, {}, 28 }, // Albania
    +
    4716 { { 'A', 'O' }, {}, 25 }, // Angola
    +
    4717 { { 'A', 'T' }, {}, 20 }, // Austria
    +
    4718 { { 'A', 'Z' }, {}, 28 }, // Azerbaijan
    +
    4719 { { 'B', 'A' }, { '3', '9' }, 20}, // Bosnia and Herzegovina
    +
    4720 { { 'B', 'E' }, {}, 16 }, // Belgium
    +
    4721 { { 'B', 'F' }, {}, 28 }, // Burkina Faso
    +
    4722 { { 'B', 'G' }, {}, 22 }, // Bulgaria
    +
    4723 { { 'B', 'H' }, {}, 22 }, // Bahrain
    +
    4724 { { 'B', 'I' }, {}, 27 }, // Burundi
    +
    4725 { { 'B', 'J' }, {}, 28 }, // Benin
    +
    4726 { { 'B', 'R' }, {}, 29 }, // Brazil
    +
    4727 { { 'B', 'Y' }, {}, 28 }, // Belarus
    +
    4728 { { 'C', 'F' }, {}, 27 }, // Central African Republic
    +
    4729 { { 'C', 'G' }, {}, 27 }, // Congo, Republic of the
    +
    4730 { { 'C', 'H' }, {}, 21 }, // Switzerland
    +
    4731 { { 'C', 'I' }, {}, 28 }, // Côte d'Ivoire
    +
    4732 { { 'C', 'M' }, {}, 27 }, // Cameroon
    +
    4733 { { 'C', 'R' }, {}, 22 }, // Costa Rica
    +
    4734 { { 'C', 'V' }, {}, 25 }, // Cabo Verde
    +
    4735 { { 'C', 'Y' }, {}, 28 }, // Cyprus
    +
    4736 { { 'C', 'Z' }, {}, 24 }, // Czech Republic
    +
    4737 { { 'D', 'E' }, {}, 22 }, // Germany
    +
    4738 { { 'D', 'J' }, {}, 27 }, // Djibouti
    +
    4739 { { 'D', 'K' }, {}, 18 }, // Denmark
    +
    4740 { { 'D', 'O' }, {}, 28 }, // Dominican Republic
    +
    4741 { { 'D', 'Z' }, {}, 26 }, // Algeria
    +
    4742 { { 'E', 'E' }, {}, 20 }, // Estonia
    +
    4743 { { 'E', 'G' }, {}, 29 }, // Egypt
    +
    4744 { { 'E', 'S' }, {}, 24 }, // Spain
    +
    4745 { { 'F', 'I' }, {}, 18 }, // Finland
    +
    4746 { { 'F', 'O' }, {}, 18 }, // Faroe Islands
    +
    4747 { { 'F', 'R' }, {}, 27 }, // France
    +
    4748 { { 'G', 'A' }, {}, 27 }, // Gabon
    +
    4749 { { 'G', 'B' }, {}, 22 }, // United Kingdom
    +
    4750 { { 'G', 'E' }, {}, 22 }, // Georgia
    +
    4751 { { 'G', 'I' }, {}, 23 }, // Gibraltar
    +
    4752 { { 'G', 'L' }, {}, 18 }, // Greenland
    +
    4753 { { 'G', 'Q' }, {}, 27 }, // Equatorial Guinea
    +
    4754 { { 'G', 'R' }, {}, 27 }, // Greece
    +
    4755 { { 'G', 'T' }, {}, 28 }, // Guatemala
    +
    4756 { { 'G', 'W' }, {}, 25 }, // Guinea-Bissau
    +
    4757 { { 'H', 'N' }, {}, 28 }, // Honduras
    +
    4758 { { 'H', 'R' }, {}, 21 }, // Croatia
    +
    4759 { { 'H', 'U' }, {}, 28 }, // Hungary
    +
    4760 { { 'I', 'E' }, {}, 22 }, // Ireland
    +
    4761 { { 'I', 'L' }, {}, 23 }, // Israel
    +
    4762 { { 'I', 'Q' }, {}, 23 }, // Iraq
    +
    4763 { { 'I', 'R' }, {}, 26 }, // Iran
    +
    4764 { { 'I', 'S' }, {}, 26 }, // Iceland
    +
    4765 { { 'I', 'T' }, {}, 27 }, // Italy
    +
    4766 { { 'J', 'O' }, {}, 30 }, // Jordan
    +
    4767 { { 'K', 'M' }, {}, 27 }, // Comoros
    +
    4768 { { 'K', 'W' }, {}, 30 }, // Kuwait
    +
    4769 { { 'K', 'Z' }, {}, 20 }, // Kazakhstan
    +
    4770 { { 'L', 'B' }, {}, 28 }, // Lebanon
    +
    4771 { { 'L', 'C' }, {}, 32 }, // Saint Lucia
    +
    4772 { { 'L', 'I' }, {}, 21 }, // Liechtenstein
    +
    4773 { { 'L', 'T' }, {}, 20 }, // Lithuania
    +
    4774 { { 'L', 'U' }, {}, 20 }, // Luxembourg
    +
    4775 { { 'L', 'V' }, {}, 21 }, // Latvia
    +
    4776 { { 'L', 'Y' }, {}, 25 }, // Libya
    +
    4777 { { 'M', 'A' }, {}, 28 }, // Morocco
    +
    4778 { { 'M', 'C' }, {}, 27 }, // Monaco
    +
    4779 { { 'M', 'D' }, {}, 24 }, // Moldova
    +
    4780 { { 'M', 'E' }, { '2', '5' }, 22 }, // Montenegro
    +
    4781 { { 'M', 'G' }, {}, 27 }, // Madagascar
    +
    4782 { { 'M', 'K' }, { '0', '7' }, 19 }, // North Macedonia
    +
    4783 { { 'M', 'L' }, {}, 28 }, // Mali
    +
    4784 { { 'M', 'R' }, { '1', '3' }, 27}, // Mauritania
    +
    4785 { { 'M', 'T' }, {}, 31 }, // Malta
    +
    4786 { { 'M', 'U' }, {}, 30 }, // Mauritius
    +
    4787 { { 'M', 'Z' }, {}, 25 }, // Mozambique
    +
    4788 { { 'N', 'E' }, {}, 28 }, // Niger
    +
    4789 { { 'N', 'I' }, {}, 32 }, // Nicaragua
    +
    4790 { { 'N', 'L' }, {}, 18 }, // Netherlands
    +
    4791 { { 'N', 'O' }, {}, 15 }, // Norway
    +
    4792 { { 'P', 'K' }, {}, 24 }, // Pakistan
    +
    4793 { { 'P', 'L' }, {}, 28 }, // Poland
    +
    4794 { { 'P', 'S' }, {}, 29 }, // Palestinian territories
    +
    4795 { { 'P', 'T' }, { '5', '0' }, 25 }, // Portugal
    +
    4796 { { 'Q', 'A' }, {}, 29 }, // Qatar
    +
    4797 { { 'R', 'O' }, {}, 24 }, // Romania
    +
    4798 { { 'R', 'S' }, { '3', '5' }, 22 }, // Serbia
    +
    4799 { { 'R', 'U' }, {}, 33 }, // Russia
    +
    4800 { { 'S', 'A' }, {}, 24 }, // Saudi Arabia
    +
    4801 { { 'S', 'C' }, {}, 31 }, // Seychelles
    +
    4802 { { 'S', 'D' }, {}, 18 }, // Sudan
    +
    4803 { { 'S', 'E' }, {}, 24 }, // Sweden
    +
    4804 { { 'S', 'I' }, { '5', '6' }, 19 }, // Slovenia
    +
    4805 { { 'S', 'K' }, {}, 24 }, // Slovakia
    +
    4806 { { 'S', 'M' }, {}, 27 }, // San Marino
    +
    4807 { { 'S', 'N' }, {}, 28 }, // Senegal
    +
    4808 { { 'S', 'T' }, {}, 25 }, // São Tomé and Príncipe
    +
    4809 { { 'S', 'V' }, {}, 28 }, // El Salvador
    +
    4810 { { 'T', 'D' }, {}, 27 }, // Chad
    +
    4811 { { 'T', 'G' }, {}, 28 }, // Togo
    +
    4812 { { 'T', 'L' }, { '3', '8' }, 23}, // East Timor
    +
    4813 { { 'T', 'N' }, { '5', '9' }, 24 }, // Tunisia
    +
    4814 { { 'T', 'R' }, {}, 26 }, // Turkey
    +
    4815 { { 'U', 'A' }, {}, 29 }, // Ukraine
    +
    4816 { { 'V', 'A' }, {}, 22 }, // Vatican City
    +
    4817 { { 'V', 'G' }, {}, 24 }, // Virgin Islands, British
    +
    4818 { { 'X', 'K' }, {}, 20 }, // Kosovo
    +
    4819 };
    +
    4820 const country_t* country_desc = nullptr;
    +
    4821 for (size_t l = 0, r = _countof(s_countries);;) {
    +
    4822 if (l >= r)
    +
    4823 goto error; // unknown country
    +
    4824 size_t m = (l + r) / 2;
    +
    4825 const country_t& c = s_countries[m];
    +
    4826 if (c.country[0] < this->country[0] || (c.country[0] == this->country[0] && c.country[1] < this->country[1]))
    +
    4827 l = m + 1;
    +
    4828 else if (this->country[0] < c.country[0] || (this->country[0] == c.country[0] && this->country[1] < c.country[1]))
    +
    4829 r = m;
    +
    4830 else {
    +
    4831 country_desc = &c;
    +
    4832 break;
    +
    4833 }
    +
    4834 }
    +
    4835
    +
    4836 for (size_t i = 0; i < 2; ++i, ++this->interval.end) {
    +
    4837 if (this->interval.end >= end || text[this->interval.end] < '0' || '9' < text[this->interval.end])
    +
    4838 goto error; // incomplete or invalid check digits
    +
    4839 this->check_digits[i] = text[this->interval.end];
    4840 }
    -
    4841 else if (this->interval.end < end && text[this->interval.end] && text[this->interval.end] >= 0x20) {
    -
    4842 this->interval.start = start;
    -
    4843 this->interval.end++;
    -
    4844 return true;
    -
    4845 }
    -
    4846 this->interval.start = (this->interval.end = start) + 1;
    -
    4847 return false;
    -
    4848 }
    -
    4849
    -
    4850 protected:
    -
    4851 http_space m_space;
    -
    4852 };
    +
    4841 this->check_digits[2] = 0;
    +
    4842
    +
    4843 if ((country_desc->check_digits[0] && this->check_digits[0] != country_desc->check_digits[0]) ||
    +
    4844 (country_desc->check_digits[1] && this->check_digits[1] != country_desc->check_digits[1]))
    +
    4845 goto error; // unexpected check digits
    +
    4846
    +
    4847 size_t n = 0;
    +
    4848 for (; ;) {
    +
    4849 if (m_space && m_space->match(text, this->interval.end, end, flags))
    +
    4850 this->interval.end = m_space->interval.end;
    +
    4851 for (size_t j = 0; j < 4; ++j) {
    +
    4852 if (this->interval.end >= end || !text[this->interval.end])
    +
    4853 goto out;
    +
    4854 T chr = case_insensitive ? ctype.toupper(text[this->interval.end]) : text[this->interval.end];
    +
    4855 if (('0' <= chr && chr <= '9') || ('A' <= chr && chr <= 'Z')) {
    +
    4856 if (n >= _countof(this->bban) - 1)
    +
    4857 goto error; // bban overflow
    +
    4858 this->bban[n++] = chr;
    +
    4859 this->interval.end++;
    +
    4860 }
    +
    4861 else
    +
    4862 goto out;
    +
    4863 }
    +
    4864 }
    +
    4865 out:
    +
    4866 if (n < 11)
    +
    4867 goto error; // bban too short (shorter than Norwegian)
    +
    4868 this->bban[n] = 0;
    +
    4869
    +
    4870 if (n + 4 == country_desc->length) {
    +
    4871 // Normalize IBAN.
    +
    4872 T normalized[69];
    +
    4873 size_t available = 0;
    +
    4874 for (size_t i = 0; ; ++i) {
    +
    4875 if (!this->bban[i]) {
    +
    4876 for (i = 0; i < 2; ++i) {
    +
    4877 if ('A' <= this->country[i] && this->country[i] <= 'J') {
    +
    4878 normalized[available++] = '1';
    +
    4879 normalized[available++] = '0' + this->country[i] - 'A';
    +
    4880 }
    +
    4881 else if ('K' <= this->country[i] && this->country[i] <= 'T') {
    +
    4882 normalized[available++] = '2';
    +
    4883 normalized[available++] = '0' + this->country[i] - 'K';
    +
    4884 }
    +
    4885 else if ('U' <= this->country[i] && this->country[i] <= 'Z') {
    +
    4886 normalized[available++] = '3';
    +
    4887 normalized[available++] = '0' + this->country[i] - 'U';
    +
    4888 }
    +
    4889 }
    +
    4890 normalized[available++] = this->check_digits[0];
    +
    4891 normalized[available++] = this->check_digits[1];
    +
    4892 normalized[available] = 0;
    +
    4893 break;
    +
    4894 }
    +
    4895 if ('0' <= this->bban[i] && this->bban[i] <= '9')
    +
    4896 normalized[available++] = this->bban[i];
    +
    4897 else if ('A' <= this->bban[i] && this->bban[i] <= 'J') {
    +
    4898 normalized[available++] = '1';
    +
    4899 normalized[available++] = '0' + this->bban[i] - 'A';
    +
    4900 }
    +
    4901 else if ('K' <= this->bban[i] && this->bban[i] <= 'T') {
    +
    4902 normalized[available++] = '2';
    +
    4903 normalized[available++] = '0' + this->bban[i] - 'K';
    +
    4904 }
    +
    4905 else if ('U' <= this->bban[i] && this->bban[i] <= 'Z') {
    +
    4906 normalized[available++] = '3';
    +
    4907 normalized[available++] = '0' + this->bban[i] - 'U';
    +
    4908 }
    +
    4909 }
    +
    4910
    +
    4911 // Calculate modulo 97.
    +
    4912 size_t next;
    +
    4913 uint32_t nominator = stdex::strtou32(normalized, 9, &next, 10);
    +
    4914 for (;;) {
    +
    4915 nominator %= 97;
    +
    4916 if (!normalized[next]) {
    +
    4917 this->is_valid = nominator == 1;
    +
    4918 break;
    +
    4919 }
    +
    4920 size_t digit_count = nominator < 10 ? 1 : 2;
    +
    4921 for (; digit_count < 9 && normalized[next]; ++next, ++digit_count)
    +
    4922 nominator = nominator * 10 + (normalized[next] - '0');
    +
    4923 }
    +
    4924 }
    +
    4925 else
    +
    4926 this->is_valid = false;
    +
    4927
    +
    4928 this->interval.start = start;
    +
    4929 return true;
    +
    4930
    +
    4931 error:
    +
    4932 this->country[0] = 0;
    +
    4933 this->check_digits[0] = 0;
    +
    4934 this->bban[0] = 0;
    +
    4935 this->is_valid = false;
    +
    4936 this->interval.start = (this->interval.end = start) + 1;
    +
    4937 return false;
    +
    4938 }
    +
    4939
    +
    4940 virtual void invalidate()
    +
    4941 {
    +
    4942 this->country[0] = 0;
    +
    4943 this->check_digits[0] = 0;
    +
    4944 this->bban[0] = 0;
    +
    4945 this->is_valid = false;
    + +
    4947 }
    +
    4948
    +
    4949 public:
    +
    4950 T country[3];
    + +
    4952 T bban[31];
    + +
    4954
    +
    4955 protected:
    +
    4956 std::shared_ptr<basic_parser<T>> m_space;
    +
    4957 };
    -
    4853
    -
    -
    4857 class http_token : public parser
    -
    4858 {
    -
    4859 public:
    -
    4860 virtual bool match(
    -
    4861 _In_reads_or_z_(end) const char* text,
    -
    4862 _In_ size_t start = 0,
    -
    4863 _In_ size_t end = (size_t)-1,
    -
    4864 _In_ int flags = match_default)
    -
    4865 {
    -
    4866 assert(text || start >= end);
    -
    4867 this->interval.end = start;
    -
    4868 for (;;) {
    -
    4869 if (this->interval.end < end && text[this->interval.end]) {
    -
    4870 if ((unsigned int)text[this->interval.end] < 0x20 ||
    -
    4871 (unsigned int)text[this->interval.end] == 0x7f ||
    -
    4872 text[this->interval.end] == '(' ||
    -
    4873 text[this->interval.end] == ')' ||
    -
    4874 text[this->interval.end] == '<' ||
    -
    4875 text[this->interval.end] == '>' ||
    -
    4876 text[this->interval.end] == '@' ||
    -
    4877 text[this->interval.end] == ',' ||
    -
    4878 text[this->interval.end] == ';' ||
    -
    4879 text[this->interval.end] == ':' ||
    -
    4880 text[this->interval.end] == '\\' ||
    -
    4881 text[this->interval.end] == '\"' ||
    -
    4882 text[this->interval.end] == '/' ||
    -
    4883 text[this->interval.end] == '[' ||
    -
    4884 text[this->interval.end] == ']' ||
    -
    4885 text[this->interval.end] == '?' ||
    -
    4886 text[this->interval.end] == '=' ||
    -
    4887 text[this->interval.end] == '{' ||
    -
    4888 text[this->interval.end] == '}' ||
    -
    4889 isspace(text[this->interval.end]))
    -
    4890 break;
    -
    4891 else
    -
    4892 this->interval.end++;
    -
    4893 }
    -
    4894 else
    -
    4895 break;
    -
    4896 }
    - -
    4898 this->interval.start = start;
    -
    4899 return true;
    -
    4900 }
    -
    4901 else {
    -
    4902 this->interval.start = (this->interval.end = start) + 1;
    -
    4903 return false;
    -
    4904 }
    -
    4905 }
    -
    4906 };
    -
    -
    4907
    -
    - -
    4912 {
    -
    4913 public:
    -
    4914 virtual bool match(
    -
    4915 _In_reads_or_z_(end) const char* text,
    -
    4916 _In_ size_t start = 0,
    -
    4917 _In_ size_t end = (size_t)-1,
    -
    4918 _In_ int flags = match_default)
    -
    4919 {
    -
    4920 assert(text || start >= end);
    -
    4921 this->interval.end = start;
    -
    4922 if (this->interval.end < end && text[this->interval.end] != '"')
    -
    4923 goto error;
    -
    4924 this->interval.end++;
    -
    4925 content.start = this->interval.end;
    -
    4926 for (;;) {
    -
    4927 assert(text || this->interval.end >= end);
    -
    4928 if (this->interval.end < end && text[this->interval.end]) {
    -
    4929 if (text[this->interval.end] == '"') {
    -
    4930 content.end = this->interval.end;
    -
    4931 this->interval.end++;
    -
    4932 break;
    -
    4933 }
    -
    4934 else if (text[this->interval.end] == '\\') {
    -
    4935 this->interval.end++;
    -
    4936 if (this->interval.end < end && text[this->interval.end]) {
    -
    4937 this->interval.end++;
    -
    4938 }
    -
    4939 else
    -
    4940 goto error;
    -
    4941 }
    -
    4942 else if (m_chr.match(text, this->interval.end, end, flags))
    -
    4943 this->interval.end++;
    -
    4944 else
    -
    4945 goto error;
    -
    4946 }
    -
    4947 else
    -
    4948 goto error;
    -
    4949 }
    -
    4950 this->interval.start = start;
    -
    4951 return true;
    -
    4952
    -
    4953 error:
    -
    4954 content.start = 1;
    -
    4955 content.end = 0;
    -
    4956 this->interval.start = (this->interval.end = start) + 1;
    -
    4957 return false;
    -
    4958 }
    -
    4959
    -
    4960 virtual void invalidate()
    -
    4961 {
    -
    4962 content.start = 1;
    -
    4963 content.end = 0;
    -
    4964 parser::invalidate();
    -
    4965 }
    -
    4966
    -
    4967 public:
    - -
    4969
    -
    4970 protected:
    -
    4971 http_text_char m_chr;
    -
    4972 };
    -
    -
    4973
    -
    -
    4977 class http_value : public parser
    -
    4978 {
    -
    4979 public:
    -
    4980 virtual bool match(
    -
    4981 _In_reads_or_z_(end) const char* text,
    -
    4982 _In_ size_t start = 0,
    -
    4983 _In_ size_t end = (size_t)-1,
    -
    4984 _In_ int flags = match_default)
    -
    4985 {
    -
    4986 assert(text || start >= end);
    -
    4987 this->interval.end = start;
    -
    4988 if (string.match(text, this->interval.end, end, flags)) {
    -
    4989 token.invalidate();
    -
    4990 this->interval.end = string.interval.end;
    -
    4991 this->interval.start = start;
    -
    4992 return true;
    -
    4993 }
    -
    4994 else if (token.match(text, this->interval.end, end, flags)) {
    -
    4995 string.invalidate();
    -
    4996 this->interval.end = token.interval.end;
    -
    4997 this->interval.start = start;
    -
    4998 return true;
    -
    4999 }
    -
    5000 else {
    -
    5001 this->interval.start = (this->interval.end = start) + 1;
    -
    5002 return false;
    -
    5003 }
    -
    5004 }
    -
    5005
    -
    5006 virtual void invalidate()
    -
    5007 {
    -
    5008 string.invalidate();
    -
    5009 token.invalidate();
    -
    5010 parser::invalidate();
    -
    5011 }
    -
    5012
    -
    5013 public:
    - - -
    5016 };
    -
    -
    5017
    -
    -
    5021 class http_parameter : public parser
    -
    5022 {
    -
    5023 public:
    -
    5024 virtual bool match(
    -
    5025 _In_reads_or_z_(end) const char* text,
    -
    5026 _In_ size_t start = 0,
    -
    5027 _In_ size_t end = (size_t)-1,
    -
    5028 _In_ int flags = match_default)
    -
    5029 {
    -
    5030 assert(text || start >= end);
    -
    5031 this->interval.end = start;
    -
    5032 if (name.match(text, this->interval.end, end, flags))
    -
    5033 this->interval.end = name.interval.end;
    -
    5034 else
    -
    5035 goto error;
    -
    5036 while (m_space.match(text, this->interval.end, end, flags))
    -
    5037 this->interval.end = m_space.interval.end;
    -
    5038 assert(text || this->interval.end >= end);
    -
    5039 if (this->interval.end < end && text[this->interval.end] == '=')
    -
    5040 this->interval.end++;
    -
    5041 else
    -
    5042 while (m_space.match(text, this->interval.end, end, flags))
    -
    5043 this->interval.end = m_space.interval.end;
    -
    5044 if (value.match(text, this->interval.end, end, flags))
    -
    5045 this->interval.end = value.interval.end;
    -
    5046 else
    -
    5047 goto error;
    -
    5048 this->interval.start = start;
    -
    5049 return true;
    -
    5050
    -
    5051 error:
    -
    5052 name.invalidate();
    -
    5053 value.invalidate();
    -
    5054 this->interval.start = (this->interval.end = start) + 1;
    -
    5055 return false;
    -
    5056 }
    -
    5057
    -
    5058 virtual void invalidate()
    -
    5059 {
    -
    5060 name.invalidate();
    -
    5061 value.invalidate();
    -
    5062 parser::invalidate();
    -
    5063 }
    -
    5064
    -
    5065 public:
    - - +
    4958
    +
    4959 using iban = basic_iban<char>;
    +
    4960 using wiban = basic_iban<wchar_t>;
    +
    4961#ifdef _UNICODE
    +
    4962 using tiban = wiban;
    +
    4963#else
    +
    4964 using tiban = iban;
    +
    4965#endif
    + +
    4967
    +
    4973 template <class T>
    +
    + +
    4975 {
    +
    4976 public:
    + +
    4978 _In_ const std::shared_ptr<basic_parser<T>>& space,
    +
    4979 _In_ const std::locale& locale = std::locale()) :
    +
    4980 basic_parser<T>(locale),
    +
    4981 m_space(space)
    +
    4982 {
    +
    4983 this->check_digits[0] = 0;
    +
    4984 this->reference[0] = 0;
    +
    4985 this->is_valid = false;
    +
    4986 }
    +
    4987
    +
    4988 virtual bool match(
    +
    4989 _In_reads_or_z_(end) const T* text,
    +
    4990 _In_ size_t start = 0,
    +
    4991 _In_ size_t end = (size_t)-1,
    +
    4992 _In_ int flags = match_default)
    +
    4993 {
    +
    4994 assert(text || start >= end);
    +
    4995 const auto& ctype = std::use_facet<std::ctype<T>>(this->m_locale);
    +
    4996 const bool case_insensitive = flags & match_case_insensitive ? true : false;
    +
    4997
    +
    4998 this->interval.end = start;
    +
    4999 if (this->interval.end + 1 >= end ||
    +
    5000 (case_insensitive ? ctype.toupper(text[this->interval.end]) : text[this->interval.end]) != 'R' ||
    +
    5001 (case_insensitive ? ctype.toupper(text[this->interval.end + 1]) : text[this->interval.end + 1]) != 'F')
    +
    5002 goto error; // incomplete or wrong reference ID
    +
    5003 this->interval.end += 2;
    +
    5004
    +
    5005 for (size_t i = 0; i < 2; ++i, ++this->interval.end) {
    +
    5006 if (this->interval.end >= end || text[this->interval.end] < '0' || '9' < text[this->interval.end])
    +
    5007 goto error; // incomplete or invalid check digits
    +
    5008 this->check_digits[i] = text[this->interval.end];
    +
    5009 }
    +
    5010 this->check_digits[2] = 0;
    +
    5011
    +
    5012 size_t n = 0;
    +
    5013 for (;;) {
    +
    5014 if (m_space && m_space->match(text, this->interval.end, end, flags))
    +
    5015 this->interval.end = m_space->interval.end;
    +
    5016 for (size_t j = 0; j < 4; ++j) {
    +
    5017 if (this->interval.end >= end || !text[this->interval.end])
    +
    5018 goto out;
    +
    5019 T chr = case_insensitive ? ctype.toupper(text[this->interval.end]) : text[this->interval.end];
    +
    5020 if (('0' <= chr && chr <= '9') || ('A' <= chr && chr <= 'Z')) {
    +
    5021 if (n >= _countof(reference) - 1)
    +
    5022 goto error; // reference overflow
    +
    5023 this->reference[n++] = chr;
    +
    5024 this->interval.end++;
    +
    5025 }
    +
    5026 else
    +
    5027 goto out;
    +
    5028 }
    +
    5029 }
    +
    5030 out:
    +
    5031 if (!n)
    +
    5032 goto error; // reference too short
    +
    5033 this->reference[_countof(this->reference) - 1] = 0;
    +
    5034 for (size_t i = n, j = _countof(this->reference) - 1; i;)
    +
    5035 this->reference[--j] = this->reference[--i];
    +
    5036 for (size_t j = _countof(this->reference) - 1 - n; j;)
    +
    5037 this->reference[--j] = '0';
    +
    5038
    +
    5039 // Normalize creditor reference.
    +
    5040 T normalized[47];
    +
    5041 size_t available = 0;
    +
    5042 for (size_t i = 0; ; ++i) {
    +
    5043 if (!this->reference[i]) {
    +
    5044 normalized[available++] = '2'; // R
    +
    5045 normalized[available++] = '7';
    +
    5046 normalized[available++] = '1'; // F
    +
    5047 normalized[available++] = '5';
    +
    5048 normalized[available++] = this->check_digits[0];
    +
    5049 normalized[available++] = this->check_digits[1];
    +
    5050 normalized[available] = 0;
    +
    5051 break;
    +
    5052 }
    +
    5053 if ('0' <= this->reference[i] && this->reference[i] <= '9')
    +
    5054 normalized[available++] = this->reference[i];
    +
    5055 else if ('A' <= this->reference[i] && this->reference[i] <= 'J') {
    +
    5056 normalized[available++] = '1';
    +
    5057 normalized[available++] = '0' + this->reference[i] - 'A';
    +
    5058 }
    +
    5059 else if ('K' <= this->reference[i] && this->reference[i] <= 'T') {
    +
    5060 normalized[available++] = '2';
    +
    5061 normalized[available++] = '0' + this->reference[i] - 'K';
    +
    5062 }
    +
    5063 else if ('U' <= this->reference[i] && this->reference[i] <= 'Z') {
    +
    5064 normalized[available++] = '3';
    +
    5065 normalized[available++] = '0' + this->reference[i] - 'U';
    +
    5066 }
    +
    5067 }
    5068
    -
    5069 protected:
    -
    5070 http_space m_space;
    -
    5071 };
    +
    5069 // Calculate modulo 97.
    +
    5070 size_t next;
    +
    5071 uint32_t nominator = stdex::strtou32(normalized, 9, &next, 10);
    +
    5072 for (;;) {
    +
    5073 nominator %= 97;
    +
    5074 if (!normalized[next]) {
    +
    5075 this->is_valid = nominator == 1;
    +
    5076 break;
    +
    5077 }
    +
    5078 size_t digit_count = nominator < 10 ? 1 : 2;
    +
    5079 for (; digit_count < 9 && normalized[next]; ++next, ++digit_count)
    +
    5080 nominator = nominator * 10 + (normalized[next] - '0');
    +
    5081 }
    +
    5082
    +
    5083 this->interval.start = start;
    +
    5084 return true;
    +
    5085
    +
    5086 error:
    +
    5087 this->check_digits[0] = 0;
    +
    5088 this->reference[0] = 0;
    +
    5089 this->is_valid = false;
    +
    5090 this->interval.start = (this->interval.end = start) + 1;
    +
    5091 return false;
    +
    5092 }
    +
    5093
    +
    5094 virtual void invalidate()
    +
    5095 {
    +
    5096 this->check_digits[0] = 0;
    +
    5097 this->reference[0] = 0;
    +
    5098 this->is_valid = false;
    + +
    5100 }
    +
    5101
    +
    5102 public:
    + + + +
    5106
    +
    5107 protected:
    +
    5108 std::shared_ptr<basic_parser<T>> m_space;
    +
    5109 };
    -
    5072
    -
    -
    5076 class http_any_type : public parser
    -
    5077 {
    -
    5078 public:
    -
    5079 virtual bool match(
    -
    5080 _In_reads_or_z_(end) const char* text,
    -
    5081 _In_ size_t start = 0,
    -
    5082 _In_ size_t end = (size_t)-1,
    -
    5083 _In_ int flags = match_default)
    -
    5084 {
    -
    5085 assert(text || start >= end);
    -
    5086 if (start + 2 < end &&
    -
    5087 text[start] == '*' &&
    -
    5088 text[start + 1] == '/' &&
    -
    5089 text[start + 2] == '*')
    -
    5090 {
    -
    5091 this->interval.end = (this->interval.start = start) + 3;
    -
    5092 return true;
    -
    5093 }
    -
    5094 else if (start < end && text[start] == '*') {
    -
    5095 this->interval.end = (this->interval.start = start) + 1;
    -
    5096 return true;
    -
    5097 }
    -
    5098 else {
    -
    5099 this->interval.start = (this->interval.end = start) + 1;
    -
    5100 return false;
    -
    5101 }
    -
    5102 }
    -
    5103 };
    +
    5110
    + + +
    5113#ifdef _UNICODE
    + +
    5115#else
    + +
    5117#endif
    + +
    5119
    +
    5125 template <class T>
    +
    + +
    5127 {
    +
    5128 public:
    +
    5129 basic_si_reference_part(_In_ const std::locale& locale = std::locale()) : basic_parser<T>(locale) {}
    +
    5130
    +
    5131 virtual bool match(
    +
    5132 _In_reads_or_z_(end) const T* text,
    +
    5133 _In_ size_t start = 0,
    +
    5134 _In_ size_t end = (size_t)-1,
    +
    5135 _In_ int flags = match_default)
    +
    5136 {
    +
    5137 assert(text || start >= end);
    +
    5138 this->interval.end = start;
    +
    5139 for (;;) {
    +
    5140 if (this->interval.end >= end || !text[this->interval.end])
    +
    5141 break;
    +
    5142 if ('0' <= text[this->interval.end] && text[this->interval.end] <= '9')
    +
    5143 this->interval.end++;
    +
    5144 else
    +
    5145 break;
    +
    5146 }
    + +
    5148 this->interval.start = start;
    +
    5149 return true;
    +
    5150 }
    +
    5151 this->interval.start = (this->interval.end = start) + 1;
    +
    5152 return false;
    +
    5153 }
    +
    5154 };
    -
    5104
    -
    - -
    5109 {
    -
    5110 public:
    -
    5111 virtual bool match(
    -
    5112 _In_reads_or_z_(end) const char* text,
    -
    5113 _In_ size_t start = 0,
    -
    5114 _In_ size_t end = (size_t)-1,
    -
    5115 _In_ int flags = match_default)
    -
    5116 {
    -
    5117 assert(text || start >= end);
    -
    5118 this->interval.end = start;
    -
    5119 if (type.match(text, this->interval.end, end, flags))
    -
    5120 this->interval.end = type.interval.end;
    -
    5121 else
    -
    5122 goto error;
    -
    5123 while (m_space.match(text, this->interval.end, end, flags))
    -
    5124 this->interval.end = m_space.interval.end;
    -
    5125 if (this->interval.end < end && text[this->interval.end] == '/')
    -
    5126 this->interval.end++;
    -
    5127 else
    -
    5128 goto error;
    -
    5129 while (m_space.match(text, this->interval.end, end, flags))
    -
    5130 this->interval.end = m_space.interval.end;
    -
    5131 if (subtype.match(text, this->interval.end, end, flags))
    -
    5132 this->interval.end = subtype.interval.end;
    -
    5133 else
    -
    5134 goto error;
    -
    5135 this->interval.start = start;
    -
    5136 return true;
    -
    5137
    -
    5138 error:
    -
    5139 type.invalidate();
    -
    5140 subtype.invalidate();
    -
    5141 this->interval.start = (this->interval.end = start) + 1;
    -
    5142 return false;
    -
    5143 }
    -
    5144
    -
    5145 virtual void invalidate()
    -
    5146 {
    -
    5147 type.invalidate();
    -
    5148 subtype.invalidate();
    -
    5149 parser::invalidate();
    -
    5150 }
    -
    5151
    -
    5152 public:
    -
    5153 http_token type;
    -
    5154 http_token subtype;
    5155
    -
    5156 protected:
    -
    5157 http_space m_space;
    -
    5158 };
    + + +
    5158#ifdef _UNICODE
    + +
    5160#else
    + +
    5162#endif
    + +
    5164
    +
    5170 template <class T>
    +
    + +
    5172 {
    +
    5173 public:
    +
    5174 basic_si_reference_delimiter(_In_ const std::locale& locale = std::locale()) : basic_parser<T>(locale) {}
    +
    5175
    +
    5176 virtual bool match(
    +
    5177 _In_reads_or_z_(end) const T* text,
    +
    5178 _In_ size_t start = 0,
    +
    5179 _In_ size_t end = (size_t)-1,
    +
    5180 _In_ int flags = match_default)
    +
    5181 {
    +
    5182 assert(text || start >= end);
    +
    5183 if (start < end && text[start] == '-') {
    +
    5184 this->interval.end = (this->interval.start = start) + 1;
    +
    5185 return true;
    +
    5186 }
    +
    5187 this->interval.start = (this->interval.end = start) + 1;
    +
    5188 return false;
    +
    5189 }
    +
    5190 };
    -
    5159
    -
    - -
    5164 {
    -
    5165 public:
    -
    5166 virtual bool match(
    -
    5167 _In_reads_or_z_(end) const char* text,
    -
    5168 _In_ size_t start = 0,
    -
    5169 _In_ size_t end = (size_t)-1,
    -
    5170 _In_ int flags = match_default)
    -
    5171 {
    -
    5172 assert(text || start >= end);
    -
    5173 if (!http_media_range::match(text, start, end, flags))
    -
    5174 goto error;
    -
    5175 params.clear();
    -
    5176 for (;;) {
    -
    5177 if (this->interval.end < end && text[this->interval.end]) {
    -
    5178 if (m_space.match(text, this->interval.end, end, flags))
    -
    5179 this->interval.end = m_space.interval.end;
    -
    5180 else if (text[this->interval.end] == ';') {
    -
    5181 this->interval.end++;
    -
    5182 while (m_space.match(text, this->interval.end, end, flags))
    -
    5183 this->interval.end = m_space.interval.end;
    - -
    5185 if (param.match(text, this->interval.end, end, flags)) {
    -
    5186 this->interval.end = param.interval.end;
    -
    5187 params.push_back(std::move(param));
    -
    5188 }
    -
    5189 else
    -
    5190 break;
    -
    5191 }
    -
    5192 else
    -
    5193 break;
    -
    5194 }
    -
    5195 else
    -
    5196 break;
    -
    5197 }
    -
    5198 this->interval.end = params.empty() ? subtype.interval.end : params.back().interval.end;
    -
    5199 return true;
    +
    5191
    + + +
    5194#ifdef _UNICODE
    + +
    5196#else
    + +
    5198#endif
    +
    5200
    -
    5201 error:
    -
    5202 http_media_range::invalidate();
    -
    5203 params.clear();
    -
    5204 this->interval.start = (this->interval.end = start) + 1;
    -
    5205 return false;
    -
    5206 }
    -
    5207
    -
    5208 virtual void invalidate()
    -
    5209 {
    -
    5210 params.clear();
    -
    5211 http_media_range::invalidate();
    -
    5212 }
    -
    5213
    -
    5214 public:
    -
    5215 std::list<http_parameter> params;
    -
    5216 };
    -
    -
    5217
    -
    - -
    5222 {
    -
    5223 public:
    -
    5224 virtual bool match(
    -
    5225 _In_reads_or_z_(end) const char* text,
    -
    5226 _In_ size_t start = 0,
    -
    5227 _In_ size_t end = (size_t)-1,
    -
    5228 _In_ int flags = match_default)
    -
    5229 {
    -
    5230 assert(text || start >= end);
    -
    5231 this->interval.end = start;
    -
    5232 for (;;) {
    -
    5233 if (this->interval.end < end && text[this->interval.end]) {
    -
    5234 if ((unsigned int)text[this->interval.end] < 0x20 ||
    -
    5235 (unsigned int)text[this->interval.end] == 0x7f ||
    -
    5236 text[this->interval.end] == ':' ||
    -
    5237 text[this->interval.end] == '/' ||
    -
    5238 isspace(text[this->interval.end]))
    -
    5239 break;
    -
    5240 else
    -
    5241 this->interval.end++;
    -
    5242 }
    -
    5243 else
    -
    5244 break;
    -
    5245 }
    - -
    5247 this->interval.start = start;
    -
    5248 return true;
    -
    5249 }
    -
    5250 this->interval.start = (this->interval.end = start) + 1;
    -
    5251 return false;
    -
    5252 }
    -
    5253 };
    -
    -
    5254
    -
    -
    5258 class http_url_port : public parser
    -
    5259 {
    -
    5260 public:
    -
    5261 http_url_port(_In_ const std::locale& locale = std::locale()) :
    -
    5262 parser(locale),
    -
    5263 value(0)
    -
    5264 {}
    -
    5265
    -
    5266 virtual bool match(
    -
    5267 _In_reads_or_z_(end) const char* text,
    -
    5268 _In_ size_t start = 0,
    -
    5269 _In_ size_t end = (size_t)-1,
    -
    5270 _In_ int flags = match_default)
    -
    5271 {
    -
    5272 assert(text || start >= end);
    -
    5273 value = 0;
    -
    5274 this->interval.end = start;
    -
    5275 for (;;) {
    -
    5276 if (this->interval.end < end && text[this->interval.end]) {
    -
    5277 if ('0' <= text[this->interval.end] && text[this->interval.end] <= '9') {
    -
    5278 size_t _value = (size_t)value * 10 + text[this->interval.end] - '0';
    -
    5279 if (_value > (uint16_t)-1) {
    -
    5280 value = 0;
    -
    5281 this->interval.start = (this->interval.end = start) + 1;
    -
    5282 return false;
    -
    5283 }
    -
    5284 value = (uint16_t)_value;
    -
    5285 this->interval.end++;
    -
    5286 }
    -
    5287 else
    -
    5288 break;
    -
    5289 }
    -
    5290 else
    -
    5291 break;
    -
    5292 }
    - -
    5294 this->interval.start = start;
    -
    5295 return true;
    -
    5296 }
    -
    5297 this->interval.start = (this->interval.end = start) + 1;
    -
    5298 return false;
    -
    5299 }
    -
    5300
    -
    5301 virtual void invalidate()
    -
    5302 {
    -
    5303 value = 0;
    -
    5304 parser::invalidate();
    -
    5305 }
    -
    5306
    -
    5307 public:
    -
    5308 uint16_t value;
    -
    5309 };
    -
    -
    5310
    -
    - -
    5315 {
    -
    5316 public:
    -
    5317 virtual bool match(
    -
    5318 _In_reads_or_z_(end) const char* text,
    -
    5319 _In_ size_t start = 0,
    -
    5320 _In_ size_t end = (size_t)-1,
    -
    5321 _In_ int flags = match_default)
    -
    5322 {
    -
    5323 assert(text || start >= end);
    -
    5324 this->interval.end = start;
    -
    5325 for (;;) {
    -
    5326 if (this->interval.end < end && text[this->interval.end]) {
    -
    5327 if ((unsigned int)text[this->interval.end] < 0x20 ||
    -
    5328 (unsigned int)text[this->interval.end] == 0x7f ||
    -
    5329 text[this->interval.end] == '?' ||
    -
    5330 text[this->interval.end] == '/' ||
    -
    5331 isspace(text[this->interval.end]))
    -
    5332 break;
    -
    5333 else
    -
    5334 this->interval.end++;
    -
    5335 }
    -
    5336 else
    -
    5337 break;
    -
    5338 }
    -
    5339 this->interval.start = start;
    -
    5340 return true;
    -
    5341 }
    -
    5342 };
    -
    -
    5343
    -
    -
    5347 class http_url_path : public parser
    -
    5348 {
    -
    5349 public:
    -
    5350 virtual bool match(
    -
    5351 _In_reads_or_z_(end) const char* text,
    -
    5352 _In_ size_t start = 0,
    -
    5353 _In_ size_t end = (size_t)-1,
    -
    5354 _In_ int flags = match_default)
    -
    5355 {
    -
    5356 assert(text || start >= end);
    - -
    5358 this->interval.end = start;
    -
    5359 segments.clear();
    -
    5360 assert(text || this->interval.end >= end);
    -
    5361 if (this->interval.end < end && text[this->interval.end] != '/')
    -
    5362 goto error;
    -
    5363 this->interval.end++;
    -
    5364 s.match(text, this->interval.end, end, flags);
    -
    5365 segments.push_back(s);
    -
    5366 this->interval.end = s.interval.end;
    -
    5367 for (;;) {
    -
    5368 if (this->interval.end < end && text[this->interval.end]) {
    -
    5369 if (text[this->interval.end] == '/') {
    -
    5370 this->interval.end++;
    -
    5371 s.match(text, this->interval.end, end, flags);
    -
    5372 segments.push_back(s);
    -
    5373 this->interval.end = s.interval.end;
    -
    5374 }
    -
    5375 else
    -
    5376 break;
    -
    5377 }
    -
    5378 else
    -
    5379 break;
    -
    5380 }
    -
    5381 this->interval.start = start;
    -
    5382 return true;
    -
    5383
    -
    5384 error:
    -
    5385 segments.clear();
    -
    5386 this->interval.start = (this->interval.end = start) + 1;
    -
    5387 return false;
    -
    5388 }
    -
    5389
    -
    5390 virtual void invalidate()
    -
    5391 {
    -
    5392 segments.clear();
    -
    5393 parser::invalidate();
    -
    5394 }
    -
    5395
    -
    5396 public:
    -
    5397 std::vector<http_url_path_segment> segments;
    -
    5398 };
    -
    -
    5399
    -
    - -
    5404 {
    -
    5405 public:
    -
    5406 virtual bool match(
    -
    5407 _In_reads_or_z_(end) const char* text,
    -
    5408 _In_ size_t start = 0,
    -
    5409 _In_ size_t end = (size_t)-1,
    -
    5410 _In_ int flags = match_default)
    -
    5411 {
    -
    5412 assert(text || start >= end);
    -
    5413 this->interval.end = start;
    -
    5414 name.start = this->interval.end;
    -
    5415 for (;;) {
    -
    5416 if (this->interval.end < end && text[this->interval.end]) {
    -
    5417 if ((unsigned int)text[this->interval.end] < 0x20 ||
    -
    5418 (unsigned int)text[this->interval.end] == 0x7f ||
    -
    5419 text[this->interval.end] == '&' ||
    -
    5420 text[this->interval.end] == '=' ||
    -
    5421 isspace(text[this->interval.end]))
    -
    5422 break;
    -
    5423 else
    -
    5424 this->interval.end++;
    -
    5425 }
    -
    5426 else
    -
    5427 break;
    -
    5428 }
    - -
    5430 name.end = this->interval.end;
    -
    5431 else
    -
    5432 goto error;
    -
    5433 if (text[this->interval.end] == '=') {
    -
    5434 this->interval.end++;
    -
    5435 value.start = this->interval.end;
    -
    5436 for (;;) {
    -
    5437 if (this->interval.end < end && text[this->interval.end]) {
    -
    5438 if ((unsigned int)text[this->interval.end] < 0x20 ||
    -
    5439 (unsigned int)text[this->interval.end] == 0x7f ||
    -
    5440 text[this->interval.end] == '&' ||
    -
    5441 isspace(text[this->interval.end]))
    -
    5442 break;
    -
    5443 else
    -
    5444 this->interval.end++;
    -
    5445 }
    -
    5446 else
    -
    5447 break;
    -
    5448 }
    -
    5449 value.end = this->interval.end;
    -
    5450 }
    -
    5451 else {
    -
    5452 value.start = 1;
    -
    5453 value.end = 0;
    -
    5454 }
    -
    5455 this->interval.start = start;
    -
    5456 return true;
    -
    5457
    -
    5458 error:
    -
    5459 name.start = 1;
    -
    5460 name.end = 0;
    -
    5461 value.start = 1;
    -
    5462 value.end = 0;
    -
    5463 this->interval.start = (this->interval.end = start) + 1;
    -
    5464 return false;
    -
    5465 }
    -
    5466
    -
    5467 virtual void invalidate()
    -
    5468 {
    -
    5469 name.start = 1;
    -
    5470 name.end = 0;
    -
    5471 value.start = 1;
    -
    5472 value.end = 0;
    -
    5473 parser::invalidate();
    -
    5474 }
    -
    5475
    -
    5476 public:
    - - -
    5479 };
    -
    -
    5480
    -
    -
    5484 class http_url : public parser
    -
    5485 {
    -
    5486 public:
    -
    5487 http_url(_In_ const std::locale& locale = std::locale()) :
    -
    5488 parser(locale),
    -
    5489 port(locale)
    -
    5490 {}
    -
    5491
    -
    5492 virtual bool match(
    -
    5493 _In_reads_or_z_(end) const char* text,
    -
    5494 _In_ size_t start = 0,
    -
    5495 _In_ size_t end = (size_t)-1,
    -
    5496 _In_ int flags = match_default)
    -
    5497 {
    -
    5498 assert(text || start >= end);
    -
    5499 this->interval.end = start;
    -
    5500
    -
    5501 if (this->interval.end + 7 <= end && stdex::strnicmp(text + this->interval.end, 7, "http://", (size_t)-1, m_locale) == 0) {
    -
    5502 this->interval.end += 7;
    -
    5503 if (server.match(text, this->interval.end, end, flags))
    -
    5504 this->interval.end = server.interval.end;
    -
    5505 else
    -
    5506 goto error;
    -
    5507 if (this->interval.end < end && text[this->interval.end] == ':') {
    -
    5508 this->interval.end++;
    -
    5509 if (port.match(text, this->interval.end, end, flags))
    -
    5510 this->interval.end = port.interval.end;
    -
    5511 }
    -
    5512 else {
    -
    5513 port.invalidate();
    -
    5514 port.value = 80;
    -
    5515 }
    -
    5516 }
    -
    5517 else {
    -
    5518 server.invalidate();
    -
    5519 port.invalidate();
    -
    5520 port.value = 80;
    -
    5521 }
    +
    5208 template <class T>
    +
    + +
    5210 {
    +
    5211 public:
    + +
    5213 _In_ const std::shared_ptr<basic_parser<T>>& space,
    +
    5214 _In_ const std::locale& locale = std::locale()) :
    +
    5215 basic_parser<T>(locale),
    +
    5216 part1(locale),
    +
    5217 part2(locale),
    +
    5218 part3(locale),
    +
    5219 is_valid(false),
    +
    5220 m_space(space),
    +
    5221 m_delimiter(locale)
    +
    5222 {
    +
    5223 this->model[0] = 0;
    +
    5224 }
    +
    5225
    +
    5226 virtual bool match(
    +
    5227 _In_reads_or_z_(end) const T* text,
    +
    5228 _In_ size_t start = 0,
    +
    5229 _In_ size_t end = (size_t)-1,
    +
    5230 _In_ int flags = match_default)
    +
    5231 {
    +
    5232 assert(text || start >= end);
    +
    5233 const auto& ctype = std::use_facet<std::ctype<T>>(this->m_locale);
    +
    5234 const bool case_insensitive = flags & match_case_insensitive ? true : false;
    +
    5235
    +
    5236 this->interval.end = start;
    +
    5237 if (this->interval.end + 1 >= end ||
    +
    5238 (case_insensitive ? ctype.toupper(text[this->interval.end]) : text[this->interval.end]) != 'S' ||
    +
    5239 (case_insensitive ? ctype.toupper(text[this->interval.end + 1]) : text[this->interval.end + 1]) != 'I')
    +
    5240 goto error; // incomplete or wrong reference ID
    +
    5241 this->interval.end += 2;
    +
    5242
    +
    5243 for (size_t i = 0; i < 2; ++i, ++this->interval.end) {
    +
    5244 if (this->interval.end >= end || text[this->interval.end] < '0' || '9' < text[this->interval.end])
    +
    5245 goto error; // incomplete or invalid model
    +
    5246 this->model[i] = text[this->interval.end];
    +
    5247 }
    +
    5248 this->model[2] = 0;
    +
    5249
    +
    5250 this->part1.invalidate();
    +
    5251 this->part2.invalidate();
    +
    5252 this->part3.invalidate();
    +
    5253 if (this->model[0] == '9' && this->model[1] == '9') {
    +
    5254 is_valid = true;
    +
    5255 this->interval.start = start;
    +
    5256 return true;
    +
    5257 }
    +
    5258
    +
    5259 if (m_space && m_space->match(text, this->interval.end, end, flags))
    +
    5260 this->interval.end = m_space->interval.end;
    +
    5261
    +
    5262 this->part1.match(text, this->interval.end, end, flags) &&
    +
    5263 this->m_delimiter.match(text, this->part1.interval.end, end, flags) &&
    +
    5264 this->part2.match(text, this->m_delimiter.interval.end, end, flags) &&
    +
    5265 this->m_delimiter.match(text, this->part2.interval.end, end, flags) &&
    +
    5266 this->part3.match(text, this->m_delimiter.interval.end, end, flags);
    +
    5267
    +
    5268 this->interval.start = start;
    +
    5269 if (this->part3.interval)
    +
    5270 this->interval.end = this->part3.interval.end;
    +
    5271 else if (this->part2.interval)
    +
    5272 this->interval.end = this->part2.interval.end;
    +
    5273 else if (this->part1.interval)
    +
    5274 this->interval.end = this->part1.interval.end;
    +
    5275 else
    +
    5276 this->interval.end = start + 4;
    +
    5277
    +
    5278 if (this->model[0] == '0' && this->model[1] == '0')
    +
    5279 is_valid =
    +
    5280 this->part3.interval ?
    +
    5281 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 && this->part3.interval.size() <= 12 &&
    +
    5282 this->part1.interval.size() + this->part2.interval.size() + this->part3.interval.size() <= 20 :
    +
    5283 this->part2.interval ?
    +
    5284 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 &&
    +
    5285 this->part1.interval.size() + this->part2.interval.size() <= 20 :
    +
    5286 this->part1.interval ?
    +
    5287 this->part1.interval.size() <= 12 :
    +
    5288 false;
    +
    5289 else if (this->model[0] == '0' && this->model[1] == '1')
    +
    5290 is_valid =
    +
    5291 this->part3.interval ?
    +
    5292 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 && this->part3.interval.size() <= 12 &&
    +
    5293 this->part1.interval.size() + this->part2.interval.size() + this->part3.interval.size() <= 20 &&
    +
    5294 check11(
    +
    5295 text + this->part1.interval.start, this->part1.interval.size(),
    +
    5296 text + this->part2.interval.start, this->part2.interval.size(),
    +
    5297 text + this->part3.interval.start, this->part3.interval.size()) :
    +
    5298 this->part2.interval ?
    +
    5299 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 &&
    +
    5300 this->part1.interval.size() + this->part2.interval.size() <= 20 &&
    +
    5301 check11(
    +
    5302 text + this->part1.interval.start, this->part1.interval.size(),
    +
    5303 text + this->part2.interval.start, this->part2.interval.size()) :
    +
    5304 this->part1.interval ?
    +
    5305 this->part1.interval.size() <= 12 &&
    +
    5306 check11(text + this->part1.interval.start, this->part1.interval.size()) :
    +
    5307 false;
    +
    5308 else if (this->model[0] == '0' && this->model[1] == '2')
    +
    5309 is_valid =
    +
    5310 this->part3.interval ?
    +
    5311 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 && this->part3.interval.size() <= 12 &&
    +
    5312 this->part1.interval.size() + this->part2.interval.size() + this->part3.interval.size() <= 20 &&
    +
    5313 check11(text + this->part2.interval.start, this->part2.interval.size()) &&
    +
    5314 check11(text + this->part3.interval.start, this->part3.interval.size()) :
    +
    5315 false;
    +
    5316 else if (this->model[0] == '0' && this->model[1] == '3')
    +
    5317 is_valid =
    +
    5318 this->part3.interval ?
    +
    5319 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 && this->part3.interval.size() <= 12 &&
    +
    5320 this->part1.interval.size() + this->part2.interval.size() + this->part3.interval.size() <= 20 &&
    +
    5321 check11(text + this->part1.interval.start, this->part1.interval.size()) &&
    +
    5322 check11(text + this->part2.interval.start, this->part2.interval.size()) &&
    +
    5323 check11(text + this->part3.interval.start, this->part3.interval.size()) :
    +
    5324 false;
    +
    5325 else if (this->model[0] == '0' && this->model[1] == '4')
    +
    5326 is_valid =
    +
    5327 this->part3.interval ?
    +
    5328 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 && this->part3.interval.size() <= 12 &&
    +
    5329 this->part1.interval.size() + this->part2.interval.size() + this->part3.interval.size() <= 20 &&
    +
    5330 check11(text + this->part1.interval.start, this->part1.interval.size()) &&
    +
    5331 check11(text + this->part3.interval.start, this->part3.interval.size()) :
    +
    5332 false;
    +
    5333 else if ((this->model[0] == '0' || this->model[0] == '5') && this->model[1] == '5')
    +
    5334 is_valid =
    +
    5335 this->part3.interval ?
    +
    5336 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 && this->part3.interval.size() <= 12 &&
    +
    5337 this->part1.interval.size() + this->part2.interval.size() + this->part3.interval.size() <= 20 &&
    +
    5338 check11(text + this->part1.interval.start, this->part1.interval.size()) :
    +
    5339 this->part2.interval ?
    +
    5340 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 &&
    +
    5341 this->part1.interval.size() + this->part2.interval.size() <= 20 &&
    +
    5342 check11(text + this->part1.interval.start, this->part1.interval.size()) :
    +
    5343 this->part1.interval ?
    +
    5344 this->part1.interval.size() <= 12 &&
    +
    5345 check11(text + this->part1.interval.start, this->part1.interval.size()) :
    +
    5346 false;
    +
    5347 else if (this->model[0] == '0' && this->model[1] == '6')
    +
    5348 is_valid =
    +
    5349 this->part3.interval ?
    +
    5350 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 && this->part3.interval.size() <= 12 &&
    +
    5351 this->part1.interval.size() + this->part2.interval.size() + this->part3.interval.size() <= 20 &&
    +
    5352 check11(
    +
    5353 text + this->part2.interval.start, this->part2.interval.size(),
    +
    5354 text + this->part3.interval.start, this->part3.interval.size()) :
    +
    5355 this->part2.interval ?
    +
    5356 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 &&
    +
    5357 this->part1.interval.size() + this->part2.interval.size() <= 20 &&
    +
    5358 check11(text + this->part2.interval.start, this->part2.interval.size()) :
    +
    5359 false;
    +
    5360 else if (this->model[0] == '0' && this->model[1] == '7')
    +
    5361 is_valid =
    +
    5362 this->part3.interval ?
    +
    5363 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 && this->part3.interval.size() <= 12 &&
    +
    5364 this->part1.interval.size() + this->part2.interval.size() + this->part3.interval.size() <= 20 &&
    +
    5365 check11(text + this->part2.interval.start, this->part2.interval.size()) :
    +
    5366 this->part2.interval ?
    +
    5367 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 &&
    +
    5368 this->part1.interval.size() + this->part2.interval.size() <= 20 &&
    +
    5369 check11(text + this->part2.interval.start, this->part2.interval.size()) :
    +
    5370 false;
    +
    5371 else if (this->model[0] == '0' && this->model[1] == '8')
    +
    5372 is_valid =
    +
    5373 this->part3.interval ?
    +
    5374 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 && this->part3.interval.size() <= 12 &&
    +
    5375 this->part1.interval.size() + this->part2.interval.size() + this->part3.interval.size() <= 20 &&
    +
    5376 check11(
    +
    5377 text + this->part1.interval.start, this->part1.interval.size(),
    +
    5378 text + this->part2.interval.start, this->part2.interval.size()) &&
    +
    5379 check11(text + this->part3.interval.start, this->part3.interval.size()) :
    +
    5380 false;
    +
    5381 else if (this->model[0] == '0' && this->model[1] == '9')
    +
    5382 is_valid =
    +
    5383 this->part3.interval ?
    +
    5384 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 && this->part3.interval.size() <= 12 &&
    +
    5385 this->part1.interval.size() + this->part2.interval.size() + this->part3.interval.size() <= 20 &&
    +
    5386 check11(
    +
    5387 text + this->part1.interval.start, this->part1.interval.size(),
    +
    5388 text + this->part2.interval.start, this->part2.interval.size()) :
    +
    5389 this->part2.interval ?
    +
    5390 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 &&
    +
    5391 this->part1.interval.size() + this->part2.interval.size() <= 20 &&
    +
    5392 check11(
    +
    5393 text + this->part1.interval.start, this->part1.interval.size(),
    +
    5394 text + this->part2.interval.start, this->part2.interval.size()) :
    +
    5395 this->part1.interval ?
    +
    5396 this->part1.interval.size() <= 12 &&
    +
    5397 check11(text + this->part1.interval.start, this->part1.interval.size()) :
    +
    5398 false;
    +
    5399 else if (this->model[0] == '1' && this->model[1] == '0')
    +
    5400 is_valid =
    +
    5401 this->part3.interval ?
    +
    5402 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 && this->part3.interval.size() <= 12 &&
    +
    5403 this->part1.interval.size() + this->part2.interval.size() + this->part3.interval.size() <= 20 &&
    +
    5404 check11(text + this->part1.interval.start, this->part1.interval.size()) &&
    +
    5405 check11(
    +
    5406 text + this->part2.interval.start, this->part2.interval.size(),
    +
    5407 text + this->part3.interval.start, this->part3.interval.size()) :
    +
    5408 this->part2.interval ?
    +
    5409 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 &&
    +
    5410 this->part1.interval.size() + this->part2.interval.size() <= 20 &&
    +
    5411 check11(text + this->part1.interval.start, this->part1.interval.size()) &&
    +
    5412 check11(text + this->part2.interval.start, this->part2.interval.size()) :
    +
    5413 false;
    +
    5414 else if (
    +
    5415 (this->model[0] == '1' && (this->model[1] == '1' || this->model[1] == '8' || this->model[1] == '9')) ||
    +
    5416 ((this->model[0] == '2' || this->model[0] == '3') && this->model[1] == '8') ||
    +
    5417 (this->model[0] == '4' && (this->model[1] == '0' || this->model[1] == '1' || this->model[1] == '8' || this->model[1] == '9')) ||
    +
    5418 (this->model[0] == '5' && (this->model[1] == '1' || this->model[1] == '8')))
    +
    5419 is_valid =
    +
    5420 this->part3.interval ?
    +
    5421 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 && this->part3.interval.size() <= 12 &&
    +
    5422 this->part1.interval.size() + this->part2.interval.size() + this->part3.interval.size() <= 20 &&
    +
    5423 check11(text + this->part1.interval.start, this->part1.interval.size()) &&
    +
    5424 check11(text + this->part2.interval.start, this->part2.interval.size()) :
    +
    5425 this->part2.interval ?
    +
    5426 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 &&
    +
    5427 this->part1.interval.size() + this->part2.interval.size() <= 20 &&
    +
    5428 check11(text + this->part1.interval.start, this->part1.interval.size()) &&
    +
    5429 check11(text + this->part2.interval.start, this->part2.interval.size()) :
    +
    5430 false;
    +
    5431 else if (this->model[0] == '1' && this->model[1] == '2')
    +
    5432 is_valid =
    +
    5433 this->part3.interval ? false :
    +
    5434 this->part2.interval ? false :
    +
    5435 this->part1.interval ?
    +
    5436 this->part1.interval.size() <= 13 &&
    +
    5437 check11(text + this->part1.interval.start, this->part1.interval.size()) :
    +
    5438 false;
    +
    5439 else if ((this->model[0] == '2' || this->model[0] == '3') && this->model[1] == '1')
    +
    5440 is_valid =
    +
    5441 this->part3.interval ? false :
    +
    5442 this->part2.interval ?
    +
    5443 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 &&
    +
    5444 this->part1.interval.size() + this->part2.interval.size() <= 20 &&
    +
    5445 check11(text + this->part1.interval.start, this->part1.interval.size()) :
    +
    5446 false;
    +
    5447 else
    +
    5448 is_valid = true; // Assume models we don't handle as valid
    +
    5449 return true;
    +
    5450
    +
    5451 error:
    +
    5452 this->model[0] = 0;
    +
    5453 this->part1.interval.start = (this->part1.interval.end = start) + 1;
    +
    5454 this->part2.interval.start = (this->part2.interval.end = start) + 1;
    +
    5455 this->part3.interval.start = (this->part3.interval.end = start) + 1;
    +
    5456 this->is_valid = false;
    +
    5457 this->interval.start = (this->interval.end = start) + 1;
    +
    5458 return false;
    +
    5459 }
    +
    5460
    +
    5461 virtual void invalidate()
    +
    5462 {
    +
    5463 this->model[0] = 0;
    +
    5464 this->part1.invalidate();
    +
    5465 this->part2.invalidate();
    +
    5466 this->part3.invalidate();
    +
    5467 this->is_valid = false;
    + +
    5469 }
    +
    5470
    +
    5471 protected:
    +
    5472 static bool check11(
    +
    5473 _In_count_(num_part1) const T* part1, _In_ size_t num_part1)
    +
    5474 {
    +
    5475 assert(part1 && num_part1 >= 1);
    +
    5476 uint32_t nominator = 0, ponder = 2;
    +
    5477 for (size_t i = num_part1 - 1; i--; ++ponder)
    +
    5478 nominator += (part1[i] - '0') * ponder;
    +
    5479 uint8_t control = 11 - static_cast<uint8_t>(nominator % 11);
    +
    5480 if (control >= 10)
    +
    5481 control = 0;
    +
    5482 return control == part1[num_part1 - 1] - '0';
    +
    5483 }
    +
    5484
    +
    5485 static bool check11(
    +
    5486 _In_count_(num_part1) const T* part1, _In_ size_t num_part1,
    +
    5487 _In_count_(num_part2) const T* part2, _In_ size_t num_part2)
    +
    5488 {
    +
    5489 assert(part1 || !num_part1);
    +
    5490 assert(part2 && num_part2 >= 1);
    +
    5491 uint32_t nominator = 0, ponder = 2;
    +
    5492 for (size_t i = num_part2 - 1; i--; ++ponder)
    +
    5493 nominator += (part2[i] - '0') * ponder;
    +
    5494 for (size_t i = num_part1; i--; ++ponder)
    +
    5495 nominator += (part1[i] - '0') * ponder;
    +
    5496 uint8_t control = 11 - static_cast<uint8_t>(nominator % 11);
    +
    5497 if (control == 10)
    +
    5498 control = 0;
    +
    5499 return control == part2[num_part2 - 1] - '0';
    +
    5500 }
    +
    5501
    +
    5502 static bool check11(
    +
    5503 _In_count_(num_part1) const T* part1, _In_ size_t num_part1,
    +
    5504 _In_count_(num_part2) const T* part2, _In_ size_t num_part2,
    +
    5505 _In_count_(num_part3) const T* part3, _In_ size_t num_part3)
    +
    5506 {
    +
    5507 assert(part1 || !num_part1);
    +
    5508 assert(part2 || !num_part2);
    +
    5509 assert(part3 && num_part3 >= 1);
    +
    5510 uint32_t nominator = 0, ponder = 2;
    +
    5511 for (size_t i = num_part3 - 1; i--; ++ponder)
    +
    5512 nominator += (part3[i] - '0') * ponder;
    +
    5513 for (size_t i = num_part2; i--; ++ponder)
    +
    5514 nominator += (part2[i] - '0') * ponder;
    +
    5515 for (size_t i = num_part1; i--; ++ponder)
    +
    5516 nominator += (part1[i] - '0') * ponder;
    +
    5517 uint8_t control = 11 - static_cast<uint8_t>(nominator % 11);
    +
    5518 if (control == 10)
    +
    5519 control = 0;
    +
    5520 return control == part2[num_part3 - 1] - '0';
    +
    5521 }
    5522
    -
    5523 if (path.match(text, this->interval.end, end, flags))
    -
    5524 this->interval.end = path.interval.end;
    -
    5525 else
    -
    5526 goto error;
    -
    5527
    -
    5528 params.clear();
    +
    5523 public:
    +
    5524 T model[3];
    + + + +
    5529
    -
    5530 if (this->interval.end < end && text[this->interval.end] == '?') {
    -
    5531 this->interval.end++;
    -
    5532 for (;;) {
    -
    5533 if (this->interval.end < end && text[this->interval.end]) {
    -
    5534 if ((unsigned int)text[this->interval.end] < 0x20 ||
    -
    5535 (unsigned int)text[this->interval.end] == 0x7f ||
    -
    5536 isspace(text[this->interval.end]))
    -
    5537 break;
    -
    5538 else if (text[this->interval.end] == '&')
    -
    5539 this->interval.end++;
    -
    5540 else {
    - -
    5542 if (param.match(text, this->interval.end, end, flags)) {
    -
    5543 this->interval.end = param.interval.end;
    -
    5544 params.push_back(std::move(param));
    -
    5545 }
    -
    5546 else
    -
    5547 break;
    -
    5548 }
    -
    5549 }
    -
    5550 else
    -
    5551 break;
    -
    5552 }
    -
    5553 }
    -
    5554
    -
    5555 this->interval.start = start;
    -
    5556 return true;
    -
    5557
    -
    5558 error:
    -
    5559 server.invalidate();
    -
    5560 port.invalidate();
    -
    5561 path.invalidate();
    -
    5562 params.clear();
    -
    5563 this->interval.start = (this->interval.end = start) + 1;
    -
    5564 return false;
    -
    5565 }
    -
    5566
    -
    5567 virtual void invalidate()
    -
    5568 {
    -
    5569 server.invalidate();
    -
    5570 port.invalidate();
    -
    5571 path.invalidate();
    -
    5572 params.clear();
    -
    5573 parser::invalidate();
    -
    5574 }
    +
    5530 protected:
    +
    5531 std::shared_ptr<basic_parser<T>> m_space;
    + +
    5533 };
    +
    +
    5534
    + + +
    5537#ifdef _UNICODE
    + +
    5539#else
    + +
    5541#endif
    + +
    5543
    +
    5547 template <class T>
    +
    + +
    5549 {
    +
    5550 public:
    + +
    5552 _In_ const std::shared_ptr<basic_parser<T>>& element,
    +
    5553 _In_ const std::shared_ptr<basic_parser<T>>& digit,
    +
    5554 _In_ const std::shared_ptr<basic_parser<T>>& sign,
    +
    5555 _In_ const std::locale& locale = std::locale()) :
    +
    5556 basic_parser<T>(locale),
    +
    5557 m_element(element),
    +
    5558 m_digit(digit),
    +
    5559 m_sign(sign),
    +
    5560 has_digits(false),
    +
    5561 has_charge(false)
    +
    5562 {}
    +
    5563
    +
    5564 virtual bool match(
    +
    5565 _In_reads_or_z_(end) const T* text,
    +
    5566 _In_ size_t start = 0,
    +
    5567 _In_ size_t end = (size_t)-1,
    +
    5568 _In_ int flags = match_default)
    +
    5569 {
    +
    5570 assert(text || start >= end);
    +
    5571
    +
    5572 has_digits = false;
    +
    5573 has_charge = false;
    +
    5574 this->interval.end = start;
    5575
    -
    5576 public:
    -
    5577 http_url_server server;
    -
    5578 http_url_port port;
    -
    5579 http_url_path path;
    -
    5580 std::list<http_url_parameter> params;
    -
    5581 };
    +
    5576 const int element_match_flags = flags & ~match_case_insensitive; // Chemical elements are always case-sensitive.
    +
    5577 for (;;) {
    +
    5578 if (m_element->match(text, this->interval.end, end, element_match_flags)) {
    +
    5579 this->interval.end = m_element->interval.end;
    +
    5580 while (m_digit->match(text, this->interval.end, end, flags)) {
    +
    5581 this->interval.end = m_digit->interval.end;
    +
    5582 has_digits = true;
    +
    5583 }
    +
    5584 }
    +
    5585 else if (start < this->interval.end) {
    +
    5586 if (m_sign->match(text, this->interval.end, end, flags)) {
    +
    5587 this->interval.end = m_sign->interval.end;
    +
    5588 has_charge = true;
    +
    5589 }
    +
    5590 this->interval.start = start;
    +
    5591 return true;
    +
    5592 }
    +
    5593 else {
    +
    5594 this->interval.start = (this->interval.end = start) + 1;
    +
    5595 return false;
    +
    5596 }
    +
    5597 }
    +
    5598 }
    +
    5599
    +
    5600 virtual void invalidate()
    +
    5601 {
    +
    5602 has_digits = false;
    +
    5603 has_charge = false;
    + +
    5605 }
    +
    5606
    +
    5607 public:
    +
    5608 bool has_digits;
    +
    5609 bool has_charge;
    +
    5610
    +
    5611 protected:
    +
    5612 std::shared_ptr<basic_parser<T>> m_element;
    +
    5613 std::shared_ptr<basic_parser<T>> m_digit;
    +
    5614 std::shared_ptr<basic_parser<T>> m_sign;
    +
    5615 };
    -
    5582
    -
    -
    5586 class http_language : public parser
    -
    5587 {
    -
    5588 public:
    -
    5589 virtual bool match(
    -
    5590 _In_reads_or_z_(end) const char* text,
    -
    5591 _In_ size_t start = 0,
    -
    5592 _In_ size_t end = (size_t)-1,
    -
    5593 _In_ int flags = match_default)
    -
    5594 {
    -
    5595 assert(text || start >= end);
    -
    5596 this->interval.end = start;
    -
    5597 components.clear();
    -
    5598 for (;;) {
    -
    5599 if (this->interval.end < end && text[this->interval.end]) {
    - -
    5601 k.end = this->interval.end;
    -
    5602 for (;;) {
    -
    5603 if (k.end < end && text[k.end]) {
    -
    5604 if (isalpha(text[k.end]))
    -
    5605 k.end++;
    -
    5606 else
    -
    5607 break;
    -
    5608 }
    -
    5609 else
    -
    5610 break;
    -
    5611 }
    -
    5612 if (this->interval.end < k.end) {
    -
    5613 k.start = this->interval.end;
    -
    5614 this->interval.end = k.end;
    -
    5615 components.push_back(k);
    -
    5616 }
    -
    5617 else
    -
    5618 break;
    -
    5619 if (this->interval.end < end && text[this->interval.end] == '-')
    -
    5620 this->interval.end++;
    -
    5621 else
    -
    5622 break;
    -
    5623 }
    -
    5624 else
    -
    5625 break;
    -
    5626 }
    -
    5627 if (!components.empty()) {
    -
    5628 this->interval.start = start;
    -
    5629 this->interval.end = components.back().end;
    -
    5630 return true;
    -
    5631 }
    -
    5632 this->interval.start = (this->interval.end = start) + 1;
    -
    5633 return false;
    -
    5634 }
    -
    5635
    -
    5636 virtual void invalidate()
    +
    5616
    + + +
    5619#ifdef _UNICODE
    + +
    5621#else
    + +
    5623#endif
    + +
    5625
    +
    + +
    5630 {
    +
    5631 public:
    +
    5632 virtual bool match(
    +
    5633 _In_reads_or_z_(end) const char* text,
    +
    5634 _In_ size_t start = 0,
    +
    5635 _In_ size_t end = (size_t)-1,
    +
    5636 _In_ int flags = match_default)
    5637 {
    -
    5638 components.clear();
    -
    5639 parser::invalidate();
    -
    5640 }
    -
    5641
    -
    5642 public:
    -
    5643 std::vector<stdex::interval<size_t>> components;
    -
    5644 };
    +
    5638 assert(text || start >= end);
    +
    5639 this->interval.end = start;
    +
    5640
    +
    5641 assert(text || this->interval.end >= end);
    +
    5642 if (this->interval.end < end && text[this->interval.end]) {
    +
    5643 if (text[this->interval.end] == '\r') {
    +
    5644 this->interval.end++;
    +
    5645 if (this->interval.end < end && text[this->interval.end] == '\n') {
    +
    5646 this->interval.start = start;
    +
    5647 this->interval.end++;
    +
    5648 return true;
    +
    5649 }
    +
    5650 }
    +
    5651 else if (text[this->interval.end] == '\n') {
    +
    5652 this->interval.start = start;
    +
    5653 this->interval.end++;
    +
    5654 return true;
    +
    5655 }
    +
    5656 }
    +
    5657 this->interval.start = (this->interval.end = start) + 1;
    +
    5658 return false;
    +
    5659 }
    +
    5660 };
    -
    5645
    -
    -
    5649 class http_weight : public parser
    -
    5650 {
    -
    5651 public:
    -
    5652 http_weight(_In_ const std::locale& locale = std::locale()) :
    -
    5653 parser(locale),
    -
    5654 value(1.0f)
    -
    5655 {}
    -
    5656
    -
    5657 virtual bool match(
    -
    5658 _In_reads_or_z_(end) const char* text,
    -
    5659 _In_ size_t start = 0,
    -
    5660 _In_ size_t end = (size_t)-1,
    -
    5661 _In_ int flags = match_default)
    -
    5662 {
    -
    5663 assert(text || start >= end);
    -
    5664 size_t celi_del = 0, decimalni_del = 0, decimalni_del_n = 1;
    -
    5665 this->interval.end = start;
    -
    5666 for (;;) {
    -
    5667 if (this->interval.end < end && text[this->interval.end]) {
    -
    5668 if ('0' <= text[this->interval.end] && text[this->interval.end] <= '9') {
    -
    5669 celi_del = celi_del * 10 + text[this->interval.end] - '0';
    -
    5670 this->interval.end++;
    -
    5671 }
    -
    5672 else if (text[this->interval.end] == '.') {
    -
    5673 this->interval.end++;
    -
    5674 for (;;) {
    -
    5675 if (this->interval.end < end && text[this->interval.end]) {
    -
    5676 if ('0' <= text[this->interval.end] && text[this->interval.end] <= '9') {
    -
    5677 decimalni_del = decimalni_del * 10 + text[this->interval.end] - '0';
    -
    5678 decimalni_del_n *= 10;
    -
    5679 this->interval.end++;
    -
    5680 }
    -
    5681 else
    -
    5682 break;
    -
    5683 }
    -
    5684 else
    -
    5685 break;
    -
    5686 }
    -
    5687 break;
    -
    5688 }
    -
    5689 else
    -
    5690 break;
    -
    5691 }
    -
    5692 else
    -
    5693 break;
    -
    5694 }
    - - -
    5697 this->interval.start = start;
    -
    5698 return true;
    -
    5699 }
    -
    5700 value = 1.0f;
    -
    5701 this->interval.start = (this->interval.end = start) + 1;
    -
    5702 return false;
    -
    5703 }
    -
    5704
    -
    5705 virtual void invalidate()
    -
    5706 {
    -
    5707 value = 1.0f;
    -
    5708 parser::invalidate();
    -
    5709 }
    -
    5710
    -
    5711 public:
    -
    5712 float value;
    -
    5713 };
    +
    5661
    +
    +
    5665 class http_space : public parser
    +
    5666 {
    +
    5667 public:
    +
    5668 virtual bool match(
    +
    5669 _In_reads_or_z_(end) const char* text,
    +
    5670 _In_ size_t start = 0,
    +
    5671 _In_ size_t end = (size_t)-1,
    +
    5672 _In_ int flags = match_default)
    +
    5673 {
    +
    5674 assert(text || start >= end);
    +
    5675 this->interval.end = start;
    +
    5676 if (m_line_break.match(text, this->interval.end, end, flags)) {
    +
    5677 this->interval.end = m_line_break.interval.end;
    +
    5678 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++;
    +
    5682 return true;
    +
    5683 }
    +
    5684 }
    +
    5685 else if (this->interval.end < end && text[this->interval.end] && isspace(text[this->interval.end])) {
    +
    5686 this->interval.start = start;
    +
    5687 this->interval.end++;
    +
    5688 while (this->interval.end < end && text[this->interval.end] && isspace(text[this->interval.end])) this->interval.end++;
    +
    5689 return true;
    +
    5690 }
    +
    5691 this->interval.start = (this->interval.end = start) + 1;
    +
    5692 return false;
    +
    5693 }
    +
    5694
    +
    5695 protected:
    +
    5696 http_line_break m_line_break;
    +
    5697 };
    -
    5714
    -
    -
    5718 class http_asterisk : public parser
    -
    5719 {
    -
    5720 public:
    -
    5721 virtual bool match(
    -
    5722 _In_reads_or_z_(end) const char* text,
    -
    5723 _In_ size_t start = 0,
    -
    5724 _In_ size_t end = (size_t)-1,
    -
    5725 _In_ int flags = match_default)
    -
    5726 {
    -
    5727 assert(text || end <= start);
    -
    5728 if (start < end && text[start] == '*') {
    -
    5729 this->interval.end = (this->interval.start = start) + 1;
    -
    5730 return true;
    -
    5731 }
    -
    5732 this->interval.start = (this->interval.end = start) + 1;
    -
    5733 return false;
    -
    5734 }
    -
    5735 };
    +
    5698
    +
    +
    5702 class http_text_char : public parser
    +
    5703 {
    +
    5704 public:
    +
    5705 virtual bool match(
    +
    5706 _In_reads_or_z_(end) const char* text,
    +
    5707 _In_ size_t start = 0,
    +
    5708 _In_ size_t end = (size_t)-1,
    +
    5709 _In_ int flags = match_default)
    +
    5710 {
    +
    5711 assert(text || start >= end);
    +
    5712 this->interval.end = start;
    +
    5713
    +
    5714 assert(text || this->interval.end >= end);
    +
    5715 if (m_space.match(text, this->interval.end, end, flags)) {
    +
    5716 this->interval.start = start;
    +
    5717 this->interval.end = m_space.interval.end;
    +
    5718 return true;
    +
    5719 }
    +
    5720 else if (this->interval.end < end && text[this->interval.end] && text[this->interval.end] >= 0x20) {
    +
    5721 this->interval.start = start;
    +
    5722 this->interval.end++;
    +
    5723 return true;
    +
    5724 }
    +
    5725 this->interval.start = (this->interval.end = start) + 1;
    +
    5726 return false;
    +
    5727 }
    +
    5728
    +
    5729 protected:
    +
    5730 http_space m_space;
    +
    5731 };
    -
    5736
    -
    5740 template <class T, class T_asterisk = http_asterisk>
    -
    - -
    5742 {
    -
    5743 public:
    -
    5744 http_weighted_value(_In_ const std::locale& locale = std::locale()) :
    -
    5745 parser(locale),
    -
    5746 factor(locale)
    -
    5747 {}
    -
    5748
    -
    5749 virtual bool match(
    -
    5750 _In_reads_or_z_(end) const char* text,
    -
    5751 _In_ size_t start = 0,
    -
    5752 _In_ size_t end = (size_t)-1,
    -
    5753 _In_ int flags = match_default)
    -
    5754 {
    -
    5755 assert(text || start >= end);
    -
    5756 size_t konec_vrednosti;
    -
    5757 this->interval.end = start;
    -
    5758 if (asterisk.match(text, this->interval.end, end, flags)) {
    -
    5759 this->interval.end = konec_vrednosti = asterisk.interval.end;
    -
    5760 value.invalidate();
    -
    5761 }
    -
    5762 else if (value.match(text, this->interval.end, end, flags)) {
    -
    5763 this->interval.end = konec_vrednosti = value.interval.end;
    -
    5764 asterisk.invalidate();
    -
    5765 }
    -
    5766 else {
    -
    5767 asterisk.invalidate();
    -
    5768 value.invalidate();
    -
    5769 this->interval.start = (this->interval.end = start) + 1;
    -
    5770 return false;
    -
    5771 }
    -
    5772
    -
    5773 while (this->interval.end < end && text[this->interval.end] && isspace(text[this->interval.end])) this->interval.end++;
    -
    5774 if (this->interval.end < end && text[this->interval.end] == ';') {
    -
    5775 this->interval.end++;
    -
    5776 while (this->interval.end < end && text[this->interval.end] && isspace(text[this->interval.end])) this->interval.end++;
    -
    5777 if (this->interval.end < end && (text[this->interval.end] == 'q' || text[this->interval.end] == 'Q')) {
    -
    5778 this->interval.end++;
    -
    5779 while (this->interval.end < end && text[this->interval.end] && isspace(text[this->interval.end])) this->interval.end++;
    -
    5780 if (this->interval.end < end && text[this->interval.end] == '=') {
    -
    5781 this->interval.end++;
    -
    5782 while (this->interval.end < end && text[this->interval.end] && isspace(text[this->interval.end])) this->interval.end++;
    -
    5783 if (factor.match(text, this->interval.end, end, flags))
    -
    5784 this->interval.end = factor.interval.end;
    -
    5785 }
    -
    5786 }
    -
    5787 }
    -
    5788 if (!factor.interval) {
    -
    5789 factor.invalidate();
    - -
    5791 }
    -
    5792 this->interval.start = start;
    -
    5793 return true;
    -
    5794 }
    -
    5795
    -
    5796 virtual void invalidate()
    -
    5797 {
    -
    5798 asterisk.invalidate();
    -
    5799 value.invalidate();
    -
    5800 factor.invalidate();
    -
    5801 parser::invalidate();
    -
    5802 }
    -
    5803
    -
    5804 public:
    -
    5805 T_asterisk asterisk;
    -
    5806 T value;
    -
    5807 http_weight factor;
    -
    5808 };
    +
    5732
    +
    +
    5736 class http_token : public parser
    +
    5737 {
    +
    5738 public:
    +
    5739 virtual bool match(
    +
    5740 _In_reads_or_z_(end) const char* text,
    +
    5741 _In_ size_t start = 0,
    +
    5742 _In_ size_t end = (size_t)-1,
    +
    5743 _In_ int flags = match_default)
    +
    5744 {
    +
    5745 assert(text || start >= end);
    +
    5746 this->interval.end = start;
    +
    5747 for (;;) {
    +
    5748 if (this->interval.end < end && text[this->interval.end]) {
    +
    5749 if ((unsigned int)text[this->interval.end] < 0x20 ||
    +
    5750 (unsigned int)text[this->interval.end] == 0x7f ||
    +
    5751 text[this->interval.end] == '(' ||
    +
    5752 text[this->interval.end] == ')' ||
    +
    5753 text[this->interval.end] == '<' ||
    +
    5754 text[this->interval.end] == '>' ||
    +
    5755 text[this->interval.end] == '@' ||
    +
    5756 text[this->interval.end] == ',' ||
    +
    5757 text[this->interval.end] == ';' ||
    +
    5758 text[this->interval.end] == ':' ||
    +
    5759 text[this->interval.end] == '\\' ||
    +
    5760 text[this->interval.end] == '\"' ||
    +
    5761 text[this->interval.end] == '/' ||
    +
    5762 text[this->interval.end] == '[' ||
    +
    5763 text[this->interval.end] == ']' ||
    +
    5764 text[this->interval.end] == '?' ||
    +
    5765 text[this->interval.end] == '=' ||
    +
    5766 text[this->interval.end] == '{' ||
    +
    5767 text[this->interval.end] == '}' ||
    +
    5768 isspace(text[this->interval.end]))
    +
    5769 break;
    +
    5770 else
    +
    5771 this->interval.end++;
    +
    5772 }
    +
    5773 else
    +
    5774 break;
    +
    5775 }
    + +
    5777 this->interval.start = start;
    +
    5778 return true;
    +
    5779 }
    +
    5780 else {
    +
    5781 this->interval.start = (this->interval.end = start) + 1;
    +
    5782 return false;
    +
    5783 }
    +
    5784 }
    +
    5785 };
    -
    5809
    -
    - -
    5814 {
    -
    5815 public:
    -
    5816 virtual bool match(
    -
    5817 _In_reads_or_z_(end) const char* text,
    -
    5818 _In_ size_t start = 0,
    -
    5819 _In_ size_t end = (size_t)-1,
    -
    5820 _In_ int flags = match_default)
    -
    5821 {
    -
    5822 assert(text || start >= end);
    -
    5823 this->interval.end = start;
    -
    5824 if (this->interval.end < end && text[this->interval.end] == '$')
    -
    5825 this->interval.end++;
    -
    5826 else
    -
    5827 goto error;
    -
    5828 if (name.match(text, this->interval.end, end, flags))
    -
    5829 this->interval.end = name.interval.end;
    -
    5830 else
    -
    5831 goto error;
    -
    5832 while (m_space.match(text, this->interval.end, end, flags))
    -
    5833 this->interval.end = m_space.interval.end;
    -
    5834 if (this->interval.end < end && text[this->interval.end] == '=')
    -
    5835 this->interval.end++;
    -
    5836 else
    -
    5837 goto error;
    -
    5838 while (m_space.match(text, this->interval.end, end, flags))
    -
    5839 this->interval.end = m_space.interval.end;
    -
    5840 if (value.match(text, this->interval.end, end, flags))
    -
    5841 this->interval.end = value.interval.end;
    -
    5842 else
    -
    5843 goto error;
    -
    5844 this->interval.start = start;
    -
    5845 return true;
    -
    5846
    -
    5847 error:
    -
    5848 name.invalidate();
    -
    5849 value.invalidate();
    -
    5850 this->interval.start = (this->interval.end = start) + 1;
    -
    5851 return false;
    -
    5852 }
    -
    5853
    -
    5854 virtual void invalidate()
    -
    5855 {
    -
    5856 name.invalidate();
    -
    5857 value.invalidate();
    -
    5858 parser::invalidate();
    -
    5859 }
    -
    5860
    -
    5861 public:
    -
    5862 http_token name;
    -
    5863 http_value value;
    -
    5864
    -
    5865 protected:
    -
    5866 http_space m_space;
    -
    5867 };
    +
    5786
    +
    + +
    5791 {
    +
    5792 public:
    +
    5793 virtual bool match(
    +
    5794 _In_reads_or_z_(end) const char* text,
    +
    5795 _In_ size_t start = 0,
    +
    5796 _In_ size_t end = (size_t)-1,
    +
    5797 _In_ int flags = match_default)
    +
    5798 {
    +
    5799 assert(text || start >= end);
    +
    5800 this->interval.end = start;
    +
    5801 if (this->interval.end < end && text[this->interval.end] != '"')
    +
    5802 goto error;
    +
    5803 this->interval.end++;
    +
    5804 content.start = this->interval.end;
    +
    5805 for (;;) {
    +
    5806 assert(text || this->interval.end >= end);
    +
    5807 if (this->interval.end < end && text[this->interval.end]) {
    +
    5808 if (text[this->interval.end] == '"') {
    +
    5809 content.end = this->interval.end;
    +
    5810 this->interval.end++;
    +
    5811 break;
    +
    5812 }
    +
    5813 else if (text[this->interval.end] == '\\') {
    +
    5814 this->interval.end++;
    +
    5815 if (this->interval.end < end && text[this->interval.end]) {
    +
    5816 this->interval.end++;
    +
    5817 }
    +
    5818 else
    +
    5819 goto error;
    +
    5820 }
    +
    5821 else if (m_chr.match(text, this->interval.end, end, flags))
    +
    5822 this->interval.end++;
    +
    5823 else
    +
    5824 goto error;
    +
    5825 }
    +
    5826 else
    +
    5827 goto error;
    +
    5828 }
    +
    5829 this->interval.start = start;
    +
    5830 return true;
    +
    5831
    +
    5832 error:
    +
    5833 content.start = 1;
    +
    5834 content.end = 0;
    +
    5835 this->interval.start = (this->interval.end = start) + 1;
    +
    5836 return false;
    +
    5837 }
    +
    5838
    +
    5839 virtual void invalidate()
    +
    5840 {
    +
    5841 content.start = 1;
    +
    5842 content.end = 0;
    +
    5843 parser::invalidate();
    +
    5844 }
    +
    5845
    +
    5846 public:
    + +
    5848
    +
    5849 protected:
    +
    5850 http_text_char m_chr;
    +
    5851 };
    -
    5868
    -
    -
    5872 class http_cookie : public parser
    -
    5873 {
    -
    5874 public:
    -
    5875 virtual bool match(
    -
    5876 _In_reads_or_z_(end) const char* text,
    -
    5877 _In_ size_t start = 0,
    -
    5878 _In_ size_t end = (size_t)-1,
    -
    5879 _In_ int flags = match_default)
    -
    5880 {
    -
    5881 assert(text || start >= end);
    -
    5882 this->interval.end = start;
    -
    5883 if (name.match(text, this->interval.end, end, flags))
    -
    5884 this->interval.end = name.interval.end;
    -
    5885 else
    -
    5886 goto error;
    -
    5887 while (m_space.match(text, this->interval.end, end, flags))
    -
    5888 this->interval.end = m_space.interval.end;
    -
    5889 if (this->interval.end < end && text[this->interval.end] == '=')
    -
    5890 this->interval.end++;
    -
    5891 else
    -
    5892 goto error;
    -
    5893 while (m_space.match(text, this->interval.end, end, flags))
    -
    5894 this->interval.end = m_space.interval.end;
    -
    5895 if (value.match(text, this->interval.end, end, flags))
    -
    5896 this->interval.end = value.interval.end;
    -
    5897 else
    -
    5898 goto error;
    -
    5899 params.clear();
    -
    5900 for (;;) {
    -
    5901 if (this->interval.end < end && text[this->interval.end]) {
    -
    5902 if (m_space.match(text, this->interval.end, end, flags))
    -
    5903 this->interval.end = m_space.interval.end;
    -
    5904 else if (text[this->interval.end] == ';') {
    -
    5905 this->interval.end++;
    -
    5906 while (m_space.match(text, this->interval.end, end, flags))
    -
    5907 this->interval.end = m_space.interval.end;
    - -
    5909 if (param.match(text, this->interval.end, end, flags)) {
    -
    5910 this->interval.end = param.interval.end;
    -
    5911 params.push_back(std::move(param));
    -
    5912 }
    -
    5913 else
    -
    5914 break;
    -
    5915 }
    -
    5916 else
    -
    5917 break;
    -
    5918 }
    -
    5919 else
    -
    5920 break;
    -
    5921 }
    -
    5922 this->interval.start = start;
    -
    5923 this->interval.end = params.empty() ? value.interval.end : params.back().interval.end;
    -
    5924 return true;
    -
    5925
    -
    5926 error:
    -
    5927 name.invalidate();
    -
    5928 value.invalidate();
    -
    5929 params.clear();
    -
    5930 this->interval.start = (this->interval.end = start) + 1;
    -
    5931 return false;
    -
    5932 }
    -
    5933
    -
    5934 virtual void invalidate()
    -
    5935 {
    -
    5936 name.invalidate();
    -
    5937 value.invalidate();
    -
    5938 params.clear();
    -
    5939 parser::invalidate();
    -
    5940 }
    -
    5941
    -
    5942 public:
    - - -
    5945 std::list<http_cookie_parameter> params;
    -
    5946
    -
    5947 protected:
    -
    5948 http_space m_space;
    -
    5949 };
    +
    5852
    +
    +
    5856 class http_value : public parser
    +
    5857 {
    +
    5858 public:
    +
    5859 virtual bool match(
    +
    5860 _In_reads_or_z_(end) const char* text,
    +
    5861 _In_ size_t start = 0,
    +
    5862 _In_ size_t end = (size_t)-1,
    +
    5863 _In_ int flags = match_default)
    +
    5864 {
    +
    5865 assert(text || start >= end);
    +
    5866 this->interval.end = start;
    +
    5867 if (string.match(text, this->interval.end, end, flags)) {
    +
    5868 token.invalidate();
    +
    5869 this->interval.end = string.interval.end;
    +
    5870 this->interval.start = start;
    +
    5871 return true;
    +
    5872 }
    +
    5873 else if (token.match(text, this->interval.end, end, flags)) {
    +
    5874 string.invalidate();
    +
    5875 this->interval.end = token.interval.end;
    +
    5876 this->interval.start = start;
    +
    5877 return true;
    +
    5878 }
    +
    5879 else {
    +
    5880 this->interval.start = (this->interval.end = start) + 1;
    +
    5881 return false;
    +
    5882 }
    +
    5883 }
    +
    5884
    +
    5885 virtual void invalidate()
    +
    5886 {
    +
    5887 string.invalidate();
    +
    5888 token.invalidate();
    +
    5889 parser::invalidate();
    +
    5890 }
    +
    5891
    +
    5892 public:
    + + +
    5895 };
    -
    5950
    -
    -
    5954 class http_agent : public parser
    -
    5955 {
    -
    5956 public:
    -
    5957 virtual bool match(
    -
    5958 _In_reads_or_z_(end) const char* text,
    -
    5959 _In_ size_t start = 0,
    -
    5960 _In_ size_t end = (size_t)-1,
    -
    5961 _In_ int flags = match_default)
    -
    5962 {
    -
    5963 assert(text || start >= end);
    -
    5964 this->interval.end = start;
    -
    5965 type.start = this->interval.end;
    -
    5966 for (;;) {
    -
    5967 if (this->interval.end < end && text[this->interval.end]) {
    -
    5968 if (text[this->interval.end] == '/') {
    -
    5969 type.end = this->interval.end;
    -
    5970 this->interval.end++;
    -
    5971 version.start = this->interval.end;
    -
    5972 for (;;) {
    -
    5973 if (this->interval.end < end && text[this->interval.end]) {
    -
    5974 if (isspace(text[this->interval.end])) {
    -
    5975 version.end = this->interval.end;
    -
    5976 break;
    -
    5977 }
    -
    5978 else
    -
    5979 this->interval.end++;
    -
    5980 }
    -
    5981 else {
    -
    5982 version.end = this->interval.end;
    -
    5983 break;
    -
    5984 }
    -
    5985 }
    -
    5986 break;
    -
    5987 }
    -
    5988 else if (isspace(text[this->interval.end])) {
    -
    5989 type.end = this->interval.end;
    -
    5990 break;
    -
    5991 }
    -
    5992 else
    -
    5993 this->interval.end++;
    -
    5994 }
    -
    5995 else {
    -
    5996 type.end = this->interval.end;
    -
    5997 break;
    -
    5998 }
    -
    5999 }
    - -
    6001 this->interval.start = start;
    -
    6002 return true;
    -
    6003 }
    -
    6004 type.start = 1;
    -
    6005 type.end = 0;
    -
    6006 version.start = 1;
    -
    6007 version.end = 0;
    -
    6008 this->interval.start = 1;
    -
    6009 this->interval.end = 0;
    -
    6010 return false;
    -
    6011 }
    -
    6012
    -
    6013 virtual void invalidate()
    -
    6014 {
    -
    6015 type.start = 1;
    -
    6016 type.end = 0;
    -
    6017 version.start = 1;
    -
    6018 version.end = 0;
    -
    6019 parser::invalidate();
    -
    6020 }
    -
    6021
    -
    6022 public:
    - - -
    6025 };
    +
    5896
    +
    +
    5900 class http_parameter : public parser
    +
    5901 {
    +
    5902 public:
    +
    5903 virtual bool match(
    +
    5904 _In_reads_or_z_(end) const char* text,
    +
    5905 _In_ size_t start = 0,
    +
    5906 _In_ size_t end = (size_t)-1,
    +
    5907 _In_ int flags = match_default)
    +
    5908 {
    +
    5909 assert(text || start >= end);
    +
    5910 this->interval.end = start;
    +
    5911 if (name.match(text, this->interval.end, end, flags))
    +
    5912 this->interval.end = name.interval.end;
    +
    5913 else
    +
    5914 goto error;
    +
    5915 while (m_space.match(text, this->interval.end, end, flags))
    +
    5916 this->interval.end = m_space.interval.end;
    +
    5917 assert(text || this->interval.end >= end);
    +
    5918 if (this->interval.end < end && text[this->interval.end] == '=')
    +
    5919 this->interval.end++;
    +
    5920 else
    +
    5921 while (m_space.match(text, this->interval.end, end, flags))
    +
    5922 this->interval.end = m_space.interval.end;
    +
    5923 if (value.match(text, this->interval.end, end, flags))
    +
    5924 this->interval.end = value.interval.end;
    +
    5925 else
    +
    5926 goto error;
    +
    5927 this->interval.start = start;
    +
    5928 return true;
    +
    5929
    +
    5930 error:
    +
    5931 name.invalidate();
    +
    5932 value.invalidate();
    +
    5933 this->interval.start = (this->interval.end = start) + 1;
    +
    5934 return false;
    +
    5935 }
    +
    5936
    +
    5937 virtual void invalidate()
    +
    5938 {
    +
    5939 name.invalidate();
    +
    5940 value.invalidate();
    +
    5941 parser::invalidate();
    +
    5942 }
    +
    5943
    +
    5944 public:
    + + +
    5947
    +
    5948 protected:
    +
    5949 http_space m_space;
    +
    5950 };
    -
    6026
    -
    -
    6030 class http_protocol : public parser
    -
    6031 {
    -
    6032 public:
    -
    6033 http_protocol(_In_ const std::locale& locale = std::locale()) :
    -
    6034 parser(locale),
    -
    6035 version(0x009)
    -
    6036 {}
    -
    6037
    -
    6038 virtual bool match(
    -
    6039 _In_reads_or_z_(end) const char* text,
    -
    6040 _In_ size_t start = 0,
    -
    6041 _In_ size_t end = (size_t)-1,
    -
    6042 _In_ int flags = match_default)
    -
    6043 {
    -
    6044 assert(text || start >= end);
    -
    6045 this->interval.end = start;
    -
    6046 type.start = this->interval.end;
    -
    6047 for (;;) {
    -
    6048 if (this->interval.end < end && text[this->interval.end]) {
    -
    6049 if (text[this->interval.end] == '/') {
    -
    6050 type.end = this->interval.end;
    -
    6051 this->interval.end++;
    -
    6052 break;
    -
    6053 }
    -
    6054 else if (isspace(text[this->interval.end]))
    -
    6055 goto error;
    -
    6056 else
    -
    6057 this->interval.end++;
    -
    6058 }
    -
    6059 else {
    -
    6060 type.end = this->interval.end;
    -
    6061 goto error;
    -
    6062 }
    -
    6063 }
    -
    6064 version_maj.start = this->interval.end;
    -
    6065 for (;;) {
    -
    6066 if (this->interval.end < end && text[this->interval.end]) {
    -
    6067 if (text[this->interval.end] == '.') {
    -
    6068 version_maj.end = this->interval.end;
    -
    6069 this->interval.end++;
    -
    6070 version_min.start = this->interval.end;
    -
    6071 for (;;) {
    -
    6072 if (this->interval.end < end && text[this->interval.end]) {
    -
    6073 if (isspace(text[this->interval.end])) {
    -
    6074 version_min.end = this->interval.end;
    -
    6075 version =
    -
    6076 (uint16_t)strtoui(text + version_maj.start, version_maj.size(), nullptr, 10) * 0x100 +
    -
    6077 (uint16_t)strtoui(text + version_min.start, version_min.size(), nullptr, 10);
    -
    6078 break;
    -
    6079 }
    -
    6080 else
    -
    6081 this->interval.end++;
    -
    6082 }
    -
    6083 else
    -
    6084 goto error;
    -
    6085 }
    -
    6086 break;
    -
    6087 }
    -
    6088 else if (isspace(text[this->interval.end])) {
    -
    6089 version_maj.end = this->interval.end;
    -
    6090 version_min.start = 1;
    -
    6091 version_min.end = 0;
    -
    6092 version = (uint16_t)strtoui(text + version_maj.start, version_maj.size(), nullptr, 10) * 0x100;
    -
    6093 break;
    -
    6094 }
    -
    6095 else
    -
    6096 this->interval.end++;
    -
    6097 }
    -
    6098 else
    -
    6099 goto error;
    -
    6100 }
    -
    6101 this->interval.start = start;
    -
    6102 return true;
    -
    6103
    -
    6104 error:
    -
    6105 type.start = 1;
    -
    6106 type.end = 0;
    -
    6107 version_maj.start = 1;
    -
    6108 version_maj.end = 0;
    -
    6109 version_min.start = 1;
    -
    6110 version_min.end = 0;
    -
    6111 version = 0x009;
    -
    6112 this->interval.start = 1;
    -
    6113 this->interval.end = 0;
    -
    6114 return false;
    -
    6115 }
    -
    6116
    -
    6117 virtual void invalidate()
    -
    6118 {
    -
    6119 type.start = 1;
    -
    6120 type.end = 0;
    -
    6121 version_maj.start = 1;
    -
    6122 version_maj.end = 0;
    -
    6123 version_min.start = 1;
    -
    6124 version_min.end = 0;
    -
    6125 version = 0x009;
    -
    6126 parser::invalidate();
    -
    6127 }
    -
    6128
    -
    6129 public:
    - -
    6131 stdex::interval<size_t> version_maj;
    -
    6132 stdex::interval<size_t> version_min;
    - -
    6134 };
    +
    5951
    +
    +
    5955 class http_any_type : public parser
    +
    5956 {
    +
    5957 public:
    +
    5958 virtual bool match(
    +
    5959 _In_reads_or_z_(end) const char* text,
    +
    5960 _In_ size_t start = 0,
    +
    5961 _In_ size_t end = (size_t)-1,
    +
    5962 _In_ int flags = match_default)
    +
    5963 {
    +
    5964 assert(text || start >= end);
    +
    5965 if (start + 2 < end &&
    +
    5966 text[start] == '*' &&
    +
    5967 text[start + 1] == '/' &&
    +
    5968 text[start + 2] == '*')
    +
    5969 {
    +
    5970 this->interval.end = (this->interval.start = start) + 3;
    +
    5971 return true;
    +
    5972 }
    +
    5973 else if (start < end && text[start] == '*') {
    +
    5974 this->interval.end = (this->interval.start = start) + 1;
    +
    5975 return true;
    +
    5976 }
    +
    5977 else {
    +
    5978 this->interval.start = (this->interval.end = start) + 1;
    +
    5979 return false;
    +
    5980 }
    +
    5981 }
    +
    5982 };
    -
    6135
    -
    -
    6139 class http_request : public parser
    -
    6140 {
    -
    6141 public:
    -
    6142 http_request(_In_ const std::locale& locale = std::locale()) :
    -
    6143 parser(locale),
    -
    6144 url(locale),
    -
    6145 protocol(locale)
    -
    6146 {}
    -
    6147
    -
    6148 virtual bool match(
    -
    6149 _In_reads_or_z_(end) const char* text,
    -
    6150 _In_ size_t start = 0,
    -
    6151 _In_ size_t end = (size_t)-1,
    -
    6152 _In_ int flags = match_default)
    -
    6153 {
    -
    6154 assert(text || start >= end);
    -
    6155 this->interval.end = start;
    -
    6156
    -
    6157 for (;;) {
    -
    6158 if (m_line_break.match(text, this->interval.end, end, flags))
    -
    6159 goto error;
    -
    6160 else if (this->interval.end < end && text[this->interval.end]) {
    -
    6161 if (isspace(text[this->interval.end]))
    -
    6162 this->interval.end++;
    -
    6163 else
    -
    6164 break;
    -
    6165 }
    -
    6166 else
    -
    6167 goto error;
    -
    6168 }
    -
    6169 verb.start = this->interval.end;
    -
    6170 for (;;) {
    -
    6171 if (m_line_break.match(text, this->interval.end, end, flags))
    -
    6172 goto error;
    -
    6173 else if (this->interval.end < end && text[this->interval.end]) {
    -
    6174 if (isspace(text[this->interval.end])) {
    -
    6175 verb.end = this->interval.end;
    -
    6176 this->interval.end++;
    -
    6177 break;
    -
    6178 }
    -
    6179 else
    -
    6180 this->interval.end++;
    -
    6181 }
    -
    6182 else
    -
    6183 goto error;
    -
    6184 }
    +
    5983
    +
    + +
    5988 {
    +
    5989 public:
    +
    5990 virtual bool match(
    +
    5991 _In_reads_or_z_(end) const char* text,
    +
    5992 _In_ size_t start = 0,
    +
    5993 _In_ size_t end = (size_t)-1,
    +
    5994 _In_ int flags = match_default)
    +
    5995 {
    +
    5996 assert(text || start >= end);
    +
    5997 this->interval.end = start;
    +
    5998 if (type.match(text, this->interval.end, end, flags))
    +
    5999 this->interval.end = type.interval.end;
    +
    6000 else
    +
    6001 goto error;
    +
    6002 while (m_space.match(text, this->interval.end, end, flags))
    +
    6003 this->interval.end = m_space.interval.end;
    +
    6004 if (this->interval.end < end && text[this->interval.end] == '/')
    +
    6005 this->interval.end++;
    +
    6006 else
    +
    6007 goto error;
    +
    6008 while (m_space.match(text, this->interval.end, end, flags))
    +
    6009 this->interval.end = m_space.interval.end;
    +
    6010 if (subtype.match(text, this->interval.end, end, flags))
    +
    6011 this->interval.end = subtype.interval.end;
    +
    6012 else
    +
    6013 goto error;
    +
    6014 this->interval.start = start;
    +
    6015 return true;
    +
    6016
    +
    6017 error:
    +
    6018 type.invalidate();
    +
    6019 subtype.invalidate();
    +
    6020 this->interval.start = (this->interval.end = start) + 1;
    +
    6021 return false;
    +
    6022 }
    +
    6023
    +
    6024 virtual void invalidate()
    +
    6025 {
    +
    6026 type.invalidate();
    +
    6027 subtype.invalidate();
    +
    6028 parser::invalidate();
    +
    6029 }
    +
    6030
    +
    6031 public:
    +
    6032 http_token type;
    +
    6033 http_token subtype;
    +
    6034
    +
    6035 protected:
    +
    6036 http_space m_space;
    +
    6037 };
    +
    +
    6038
    +
    + +
    6043 {
    +
    6044 public:
    +
    6045 virtual bool match(
    +
    6046 _In_reads_or_z_(end) const char* text,
    +
    6047 _In_ size_t start = 0,
    +
    6048 _In_ size_t end = (size_t)-1,
    +
    6049 _In_ int flags = match_default)
    +
    6050 {
    +
    6051 assert(text || start >= end);
    +
    6052 if (!http_media_range::match(text, start, end, flags))
    +
    6053 goto error;
    +
    6054 params.clear();
    +
    6055 for (;;) {
    +
    6056 if (this->interval.end < end && text[this->interval.end]) {
    +
    6057 if (m_space.match(text, this->interval.end, end, flags))
    +
    6058 this->interval.end = m_space.interval.end;
    +
    6059 else if (text[this->interval.end] == ';') {
    +
    6060 this->interval.end++;
    +
    6061 while (m_space.match(text, this->interval.end, end, flags))
    +
    6062 this->interval.end = m_space.interval.end;
    + +
    6064 if (param.match(text, this->interval.end, end, flags)) {
    +
    6065 this->interval.end = param.interval.end;
    +
    6066 params.push_back(std::move(param));
    +
    6067 }
    +
    6068 else
    +
    6069 break;
    +
    6070 }
    +
    6071 else
    +
    6072 break;
    +
    6073 }
    +
    6074 else
    +
    6075 break;
    +
    6076 }
    +
    6077 this->interval.end = params.empty() ? subtype.interval.end : params.back().interval.end;
    +
    6078 return true;
    +
    6079
    +
    6080 error:
    +
    6081 http_media_range::invalidate();
    +
    6082 params.clear();
    +
    6083 this->interval.start = (this->interval.end = start) + 1;
    +
    6084 return false;
    +
    6085 }
    +
    6086
    +
    6087 virtual void invalidate()
    +
    6088 {
    +
    6089 params.clear();
    +
    6090 http_media_range::invalidate();
    +
    6091 }
    +
    6092
    +
    6093 public:
    +
    6094 std::list<http_parameter> params;
    +
    6095 };
    +
    +
    6096
    +
    + +
    6101 {
    +
    6102 public:
    +
    6103 virtual bool match(
    +
    6104 _In_reads_or_z_(end) const char* text,
    +
    6105 _In_ size_t start = 0,
    +
    6106 _In_ size_t end = (size_t)-1,
    +
    6107 _In_ int flags = match_default)
    +
    6108 {
    +
    6109 assert(text || start >= end);
    +
    6110 this->interval.end = start;
    +
    6111 for (;;) {
    +
    6112 if (this->interval.end < end && text[this->interval.end]) {
    +
    6113 if ((unsigned int)text[this->interval.end] < 0x20 ||
    +
    6114 (unsigned int)text[this->interval.end] == 0x7f ||
    +
    6115 text[this->interval.end] == ':' ||
    +
    6116 text[this->interval.end] == '/' ||
    +
    6117 isspace(text[this->interval.end]))
    +
    6118 break;
    +
    6119 else
    +
    6120 this->interval.end++;
    +
    6121 }
    +
    6122 else
    +
    6123 break;
    +
    6124 }
    + +
    6126 this->interval.start = start;
    +
    6127 return true;
    +
    6128 }
    +
    6129 this->interval.start = (this->interval.end = start) + 1;
    +
    6130 return false;
    +
    6131 }
    +
    6132 };
    +
    +
    6133
    +
    +
    6137 class http_url_port : public parser
    +
    6138 {
    +
    6139 public:
    +
    6140 http_url_port(_In_ const std::locale& locale = std::locale()) :
    +
    6141 parser(locale),
    +
    6142 value(0)
    +
    6143 {}
    +
    6144
    +
    6145 virtual bool match(
    +
    6146 _In_reads_or_z_(end) const char* text,
    +
    6147 _In_ size_t start = 0,
    +
    6148 _In_ size_t end = (size_t)-1,
    +
    6149 _In_ int flags = match_default)
    +
    6150 {
    +
    6151 assert(text || start >= end);
    +
    6152 value = 0;
    +
    6153 this->interval.end = start;
    +
    6154 for (;;) {
    +
    6155 if (this->interval.end < end && text[this->interval.end]) {
    +
    6156 if ('0' <= text[this->interval.end] && text[this->interval.end] <= '9') {
    +
    6157 size_t _value = (size_t)value * 10 + text[this->interval.end] - '0';
    +
    6158 if (_value > (uint16_t)-1) {
    +
    6159 value = 0;
    +
    6160 this->interval.start = (this->interval.end = start) + 1;
    +
    6161 return false;
    +
    6162 }
    +
    6163 value = (uint16_t)_value;
    +
    6164 this->interval.end++;
    +
    6165 }
    +
    6166 else
    +
    6167 break;
    +
    6168 }
    +
    6169 else
    +
    6170 break;
    +
    6171 }
    + +
    6173 this->interval.start = start;
    +
    6174 return true;
    +
    6175 }
    +
    6176 this->interval.start = (this->interval.end = start) + 1;
    +
    6177 return false;
    +
    6178 }
    +
    6179
    +
    6180 virtual void invalidate()
    +
    6181 {
    +
    6182 value = 0;
    +
    6183 parser::invalidate();
    +
    6184 }
    6185
    -
    6186 for (;;) {
    -
    6187 if (m_line_break.match(text, this->interval.end, end, flags))
    -
    6188 goto error;
    -
    6189 else if (this->interval.end < end && text[this->interval.end]) {
    -
    6190 if (isspace(text[this->interval.end]))
    -
    6191 this->interval.end++;
    -
    6192 else
    -
    6193 break;
    -
    6194 }
    -
    6195 else
    -
    6196 goto error;
    -
    6197 }
    -
    6198 if (url.match(text, this->interval.end, end, flags))
    -
    6199 this->interval.end = url.interval.end;
    -
    6200 else
    -
    6201 goto error;
    -
    6202
    -
    6203 protocol.invalidate();
    +
    6186 public:
    +
    6187 uint16_t value;
    +
    6188 };
    +
    +
    6189
    +
    + +
    6194 {
    +
    6195 public:
    +
    6196 virtual bool match(
    +
    6197 _In_reads_or_z_(end) const char* text,
    +
    6198 _In_ size_t start = 0,
    +
    6199 _In_ size_t end = (size_t)-1,
    +
    6200 _In_ int flags = match_default)
    +
    6201 {
    +
    6202 assert(text || start >= end);
    +
    6203 this->interval.end = start;
    6204 for (;;) {
    -
    6205 if (m_line_break.match(text, this->interval.end, end, flags)) {
    -
    6206 this->interval.end = m_line_break.interval.end;
    -
    6207 goto end;
    -
    6208 }
    -
    6209 else if (this->interval.end < end && text[this->interval.end]) {
    -
    6210 if (isspace(text[this->interval.end]))
    -
    6211 this->interval.end++;
    +
    6205 if (this->interval.end < end && text[this->interval.end]) {
    +
    6206 if ((unsigned int)text[this->interval.end] < 0x20 ||
    +
    6207 (unsigned int)text[this->interval.end] == 0x7f ||
    +
    6208 text[this->interval.end] == '?' ||
    +
    6209 text[this->interval.end] == '/' ||
    +
    6210 isspace(text[this->interval.end]))
    +
    6211 break;
    6212 else
    -
    6213 break;
    +
    6213 this->interval.end++;
    6214 }
    6215 else
    -
    6216 goto end;
    +
    6216 break;
    6217 }
    -
    6218 for (;;) {
    -
    6219 if (m_line_break.match(text, this->interval.end, end, flags)) {
    -
    6220 this->interval.end = m_line_break.interval.end;
    -
    6221 goto end;
    -
    6222 }
    -
    6223 else if (protocol.match(text, this->interval.end, end, flags)) {
    -
    6224 this->interval.end = protocol.interval.end;
    -
    6225 break;
    -
    6226 }
    -
    6227 else
    -
    6228 goto end;
    -
    6229 }
    -
    6230
    -
    6231 for (;;) {
    -
    6232 if (m_line_break.match(text, this->interval.end, end, flags)) {
    -
    6233 this->interval.end = m_line_break.interval.end;
    -
    6234 break;
    -
    6235 }
    -
    6236 else if (this->interval.end < end && text[this->interval.end])
    -
    6237 this->interval.end++;
    -
    6238 else
    -
    6239 goto end;
    -
    6240 }
    -
    6241
    -
    6242 end:
    -
    6243 this->interval.start = start;
    -
    6244 return true;
    -
    6245
    -
    6246 error:
    -
    6247 verb.start = 1;
    -
    6248 verb.end = 0;
    -
    6249 url.invalidate();
    -
    6250 protocol.invalidate();
    -
    6251 this->interval.start = 1;
    -
    6252 this->interval.end = 0;
    -
    6253 return false;
    -
    6254 }
    -
    6255
    -
    6256 virtual void invalidate()
    -
    6257 {
    -
    6258 verb.start = 1;
    -
    6259 verb.end = 0;
    -
    6260 url.invalidate();
    -
    6261 protocol.invalidate();
    -
    6262 parser::invalidate();
    -
    6263 }
    -
    6264
    -
    6265 public:
    - -
    6267 http_url url;
    -
    6268 http_protocol protocol;
    -
    6269
    -
    6270 protected:
    -
    6271 http_line_break m_line_break;
    -
    6272 };
    +
    6218 this->interval.start = start;
    +
    6219 return true;
    +
    6220 }
    +
    6221 };
    -
    6273
    -
    -
    6277 class http_header : public parser
    -
    6278 {
    -
    6279 public:
    -
    6280 virtual bool match(
    -
    6281 _In_reads_or_z_(end) const char* text,
    -
    6282 _In_ size_t start = 0,
    -
    6283 _In_ size_t end = (size_t)-1,
    -
    6284 _In_ int flags = match_default)
    -
    6285 {
    -
    6286 assert(text || start >= end);
    -
    6287 this->interval.end = start;
    -
    6288
    -
    6289 if (m_line_break.match(text, this->interval.end, end, flags) ||
    -
    6290 (this->interval.end < end && text[this->interval.end] && isspace(text[this->interval.end])))
    -
    6291 goto error;
    -
    6292 name.start = this->interval.end;
    -
    6293 for (;;) {
    -
    6294 if (m_line_break.match(text, this->interval.end, end, flags))
    -
    6295 goto error;
    -
    6296 else if (this->interval.end < end && text[this->interval.end]) {
    -
    6297 if (isspace(text[this->interval.end])) {
    -
    6298 name.end = this->interval.end;
    -
    6299 this->interval.end++;
    -
    6300 for (;;) {
    -
    6301 if (m_line_break.match(text, this->interval.end, end, flags))
    -
    6302 goto error;
    -
    6303 else if (this->interval.end < end && text[this->interval.end]) {
    -
    6304 if (isspace(text[this->interval.end]))
    -
    6305 this->interval.end++;
    -
    6306 else
    -
    6307 break;
    -
    6308 }
    -
    6309 else
    -
    6310 goto error;
    -
    6311 }
    -
    6312 if (this->interval.end < end && text[this->interval.end] == ':') {
    -
    6313 this->interval.end++;
    -
    6314 break;
    -
    6315 }
    -
    6316 else
    -
    6317 goto error;
    -
    6318 break;
    -
    6319 }
    -
    6320 else if (text[this->interval.end] == ':') {
    -
    6321 name.end = this->interval.end;
    -
    6322 this->interval.end++;
    -
    6323 break;
    +
    6222
    +
    +
    6226 class http_url_path : public parser
    +
    6227 {
    +
    6228 public:
    +
    6229 virtual bool match(
    +
    6230 _In_reads_or_z_(end) const char* text,
    +
    6231 _In_ size_t start = 0,
    +
    6232 _In_ size_t end = (size_t)-1,
    +
    6233 _In_ int flags = match_default)
    +
    6234 {
    +
    6235 assert(text || start >= end);
    + +
    6237 this->interval.end = start;
    +
    6238 segments.clear();
    +
    6239 assert(text || this->interval.end >= end);
    +
    6240 if (this->interval.end < end && text[this->interval.end] != '/')
    +
    6241 goto error;
    +
    6242 this->interval.end++;
    +
    6243 s.match(text, this->interval.end, end, flags);
    +
    6244 segments.push_back(s);
    +
    6245 this->interval.end = s.interval.end;
    +
    6246 for (;;) {
    +
    6247 if (this->interval.end < end && text[this->interval.end]) {
    +
    6248 if (text[this->interval.end] == '/') {
    +
    6249 this->interval.end++;
    +
    6250 s.match(text, this->interval.end, end, flags);
    +
    6251 segments.push_back(s);
    +
    6252 this->interval.end = s.interval.end;
    +
    6253 }
    +
    6254 else
    +
    6255 break;
    +
    6256 }
    +
    6257 else
    +
    6258 break;
    +
    6259 }
    +
    6260 this->interval.start = start;
    +
    6261 return true;
    +
    6262
    +
    6263 error:
    +
    6264 segments.clear();
    +
    6265 this->interval.start = (this->interval.end = start) + 1;
    +
    6266 return false;
    +
    6267 }
    +
    6268
    +
    6269 virtual void invalidate()
    +
    6270 {
    +
    6271 segments.clear();
    +
    6272 parser::invalidate();
    +
    6273 }
    +
    6274
    +
    6275 public:
    +
    6276 std::vector<http_url_path_segment> segments;
    +
    6277 };
    +
    +
    6278
    +
    + +
    6283 {
    +
    6284 public:
    +
    6285 virtual bool match(
    +
    6286 _In_reads_or_z_(end) const char* text,
    +
    6287 _In_ size_t start = 0,
    +
    6288 _In_ size_t end = (size_t)-1,
    +
    6289 _In_ int flags = match_default)
    +
    6290 {
    +
    6291 assert(text || start >= end);
    +
    6292 this->interval.end = start;
    +
    6293 name.start = this->interval.end;
    +
    6294 for (;;) {
    +
    6295 if (this->interval.end < end && text[this->interval.end]) {
    +
    6296 if ((unsigned int)text[this->interval.end] < 0x20 ||
    +
    6297 (unsigned int)text[this->interval.end] == 0x7f ||
    +
    6298 text[this->interval.end] == '&' ||
    +
    6299 text[this->interval.end] == '=' ||
    +
    6300 isspace(text[this->interval.end]))
    +
    6301 break;
    +
    6302 else
    +
    6303 this->interval.end++;
    +
    6304 }
    +
    6305 else
    +
    6306 break;
    +
    6307 }
    + +
    6309 name.end = this->interval.end;
    +
    6310 else
    +
    6311 goto error;
    +
    6312 if (text[this->interval.end] == '=') {
    +
    6313 this->interval.end++;
    +
    6314 value.start = this->interval.end;
    +
    6315 for (;;) {
    +
    6316 if (this->interval.end < end && text[this->interval.end]) {
    +
    6317 if ((unsigned int)text[this->interval.end] < 0x20 ||
    +
    6318 (unsigned int)text[this->interval.end] == 0x7f ||
    +
    6319 text[this->interval.end] == '&' ||
    +
    6320 isspace(text[this->interval.end]))
    +
    6321 break;
    +
    6322 else
    +
    6323 this->interval.end++;
    6324 }
    6325 else
    -
    6326 this->interval.end++;
    +
    6326 break;
    6327 }
    -
    6328 else
    -
    6329 goto error;
    -
    6330 }
    -
    6331 value.start = (size_t)-1;
    -
    6332 value.end = 0;
    -
    6333 for (;;) {
    -
    6334 if (m_line_break.match(text, this->interval.end, end, flags)) {
    -
    6335 this->interval.end = m_line_break.interval.end;
    -
    6336 if (!m_line_break.match(text, this->interval.end, end, flags) &&
    -
    6337 this->interval.end < end && text[this->interval.end] && isspace(text[this->interval.end]))
    -
    6338 this->interval.end++;
    -
    6339 else
    -
    6340 break;
    -
    6341 }
    -
    6342 else if (this->interval.end < end && text[this->interval.end]) {
    -
    6343 if (isspace(text[this->interval.end]))
    -
    6344 this->interval.end++;
    -
    6345 else {
    -
    6346 if (value.start == (size_t)-1) value.start = this->interval.end;
    -
    6347 value.end = ++this->interval.end;
    -
    6348 }
    -
    6349 }
    -
    6350 else
    -
    6351 break;
    -
    6352 }
    -
    6353 this->interval.start = start;
    -
    6354 return true;
    -
    6355
    -
    6356 error:
    -
    6357 name.start = 1;
    -
    6358 name.end = 0;
    -
    6359 value.start = 1;
    -
    6360 value.end = 0;
    -
    6361 this->interval.start = 1;
    -
    6362 this->interval.end = 0;
    -
    6363 return false;
    -
    6364 }
    -
    6365
    -
    6366 virtual void invalidate()
    -
    6367 {
    -
    6368 name.start = 1;
    -
    6369 name.end = 0;
    -
    6370 value.start = 1;
    -
    6371 value.end = 0;
    -
    6372 parser::invalidate();
    -
    6373 }
    -
    6374
    -
    6375 public:
    - - -
    6378
    -
    6379 protected:
    -
    6380 http_line_break m_line_break;
    -
    6381 };
    +
    6328 value.end = this->interval.end;
    +
    6329 }
    +
    6330 else {
    +
    6331 value.start = 1;
    +
    6332 value.end = 0;
    +
    6333 }
    +
    6334 this->interval.start = start;
    +
    6335 return true;
    +
    6336
    +
    6337 error:
    +
    6338 name.start = 1;
    +
    6339 name.end = 0;
    +
    6340 value.start = 1;
    +
    6341 value.end = 0;
    +
    6342 this->interval.start = (this->interval.end = start) + 1;
    +
    6343 return false;
    +
    6344 }
    +
    6345
    +
    6346 virtual void invalidate()
    +
    6347 {
    +
    6348 name.start = 1;
    +
    6349 name.end = 0;
    +
    6350 value.start = 1;
    +
    6351 value.end = 0;
    +
    6352 parser::invalidate();
    +
    6353 }
    +
    6354
    +
    6355 public:
    + + +
    6358 };
    -
    6382
    -
    6386 template <class _Key, class T>
    -
    -
    6387 class http_value_collection : public T
    -
    6388 {
    -
    6389 public:
    -
    6390 void insert(
    -
    6391 _In_reads_or_z_(end) const char* text,
    -
    6392 _In_ size_t start = 0,
    -
    6393 _In_ size_t end = (size_t)-1,
    -
    6394 _In_ int flags = match_default)
    -
    6395 {
    -
    6396 while (start < end) {
    -
    6397 while (start < end && text[start] && isspace(text[start])) start++;
    -
    6398 if (start < end && text[start] == ',') {
    -
    6399 start++;
    -
    6400 while (start < end&& text[start] && isspace(text[start])) start++;
    -
    6401 }
    -
    6402 _Key el;
    -
    6403 if (el.match(text, start, end, flags)) {
    -
    6404 start = el.interval.end;
    -
    6405 T::insert(std::move(el));
    -
    6406 }
    -
    6407 else
    -
    6408 break;
    -
    6409 }
    -
    6410 }
    -
    6411 };
    +
    6359
    +
    +
    6363 class http_url : public parser
    +
    6364 {
    +
    6365 public:
    +
    6366 http_url(_In_ const std::locale& locale = std::locale()) :
    +
    6367 parser(locale),
    +
    6368 port(locale)
    +
    6369 {}
    +
    6370
    +
    6371 virtual bool match(
    +
    6372 _In_reads_or_z_(end) const char* text,
    +
    6373 _In_ size_t start = 0,
    +
    6374 _In_ size_t end = (size_t)-1,
    +
    6375 _In_ int flags = match_default)
    +
    6376 {
    +
    6377 assert(text || start >= end);
    +
    6378 this->interval.end = start;
    +
    6379
    +
    6380 if (this->interval.end + 7 <= end && stdex::strnicmp(text + this->interval.end, 7, "http://", (size_t)-1, m_locale) == 0) {
    +
    6381 this->interval.end += 7;
    +
    6382 if (server.match(text, this->interval.end, end, flags))
    +
    6383 this->interval.end = server.interval.end;
    +
    6384 else
    +
    6385 goto error;
    +
    6386 if (this->interval.end < end && text[this->interval.end] == ':') {
    +
    6387 this->interval.end++;
    +
    6388 if (port.match(text, this->interval.end, end, flags))
    +
    6389 this->interval.end = port.interval.end;
    +
    6390 }
    +
    6391 else {
    +
    6392 port.invalidate();
    +
    6393 port.value = 80;
    +
    6394 }
    +
    6395 }
    +
    6396 else {
    +
    6397 server.invalidate();
    +
    6398 port.invalidate();
    +
    6399 port.value = 80;
    +
    6400 }
    +
    6401
    +
    6402 if (path.match(text, this->interval.end, end, flags))
    +
    6403 this->interval.end = path.interval.end;
    +
    6404 else
    +
    6405 goto error;
    +
    6406
    +
    6407 params.clear();
    +
    6408
    +
    6409 if (this->interval.end < end && text[this->interval.end] == '?') {
    +
    6410 this->interval.end++;
    +
    6411 for (;;) {
    +
    6412 if (this->interval.end < end && text[this->interval.end]) {
    +
    6413 if ((unsigned int)text[this->interval.end] < 0x20 ||
    +
    6414 (unsigned int)text[this->interval.end] == 0x7f ||
    +
    6415 isspace(text[this->interval.end]))
    +
    6416 break;
    +
    6417 else if (text[this->interval.end] == '&')
    +
    6418 this->interval.end++;
    +
    6419 else {
    + +
    6421 if (param.match(text, this->interval.end, end, flags)) {
    +
    6422 this->interval.end = param.interval.end;
    +
    6423 params.push_back(std::move(param));
    +
    6424 }
    +
    6425 else
    +
    6426 break;
    +
    6427 }
    +
    6428 }
    +
    6429 else
    +
    6430 break;
    +
    6431 }
    +
    6432 }
    +
    6433
    +
    6434 this->interval.start = start;
    +
    6435 return true;
    +
    6436
    +
    6437 error:
    +
    6438 server.invalidate();
    +
    6439 port.invalidate();
    +
    6440 path.invalidate();
    +
    6441 params.clear();
    +
    6442 this->interval.start = (this->interval.end = start) + 1;
    +
    6443 return false;
    +
    6444 }
    +
    6445
    +
    6446 virtual void invalidate()
    +
    6447 {
    +
    6448 server.invalidate();
    +
    6449 port.invalidate();
    +
    6450 path.invalidate();
    +
    6451 params.clear();
    +
    6452 parser::invalidate();
    +
    6453 }
    +
    6454
    +
    6455 public:
    +
    6456 http_url_server server;
    +
    6457 http_url_port port;
    +
    6458 http_url_path path;
    +
    6459 std::list<http_url_parameter> params;
    +
    6460 };
    -
    6412
    -
    6413 template <class T>
    -
    - -
    6415 constexpr bool operator()(const T& a, const T& b) const noexcept
    -
    6416 {
    -
    6417 return a.factor.value > b.factor.value;
    -
    6418 }
    -
    6419 };
    +
    6461
    +
    +
    6465 class http_language : public parser
    +
    6466 {
    +
    6467 public:
    +
    6468 virtual bool match(
    +
    6469 _In_reads_or_z_(end) const char* text,
    +
    6470 _In_ size_t start = 0,
    +
    6471 _In_ size_t end = (size_t)-1,
    +
    6472 _In_ int flags = match_default)
    +
    6473 {
    +
    6474 assert(text || start >= end);
    +
    6475 this->interval.end = start;
    +
    6476 components.clear();
    +
    6477 for (;;) {
    +
    6478 if (this->interval.end < end && text[this->interval.end]) {
    + +
    6480 k.end = this->interval.end;
    +
    6481 for (;;) {
    +
    6482 if (k.end < end && text[k.end]) {
    +
    6483 if (isalpha(text[k.end]))
    +
    6484 k.end++;
    +
    6485 else
    +
    6486 break;
    +
    6487 }
    +
    6488 else
    +
    6489 break;
    +
    6490 }
    +
    6491 if (this->interval.end < k.end) {
    +
    6492 k.start = this->interval.end;
    +
    6493 this->interval.end = k.end;
    +
    6494 components.push_back(k);
    +
    6495 }
    +
    6496 else
    +
    6497 break;
    +
    6498 if (this->interval.end < end && text[this->interval.end] == '-')
    +
    6499 this->interval.end++;
    +
    6500 else
    +
    6501 break;
    +
    6502 }
    +
    6503 else
    +
    6504 break;
    +
    6505 }
    +
    6506 if (!components.empty()) {
    +
    6507 this->interval.start = start;
    +
    6508 this->interval.end = components.back().end;
    +
    6509 return true;
    +
    6510 }
    +
    6511 this->interval.start = (this->interval.end = start) + 1;
    +
    6512 return false;
    +
    6513 }
    +
    6514
    +
    6515 virtual void invalidate()
    +
    6516 {
    +
    6517 components.clear();
    +
    6518 parser::invalidate();
    +
    6519 }
    +
    6520
    +
    6521 public:
    +
    6522 std::vector<stdex::interval<size_t>> components;
    +
    6523 };
    -
    6420
    -
    6424 template <class T, class _Alloc = std::allocator<T>>
    - -
    6426
    -
    6430 template <class T>
    -
    - -
    6432 {
    -
    6433 public:
    - -
    6435 _In_ const std::shared_ptr<basic_parser<T>>& quote,
    -
    6436 _In_ const std::shared_ptr<basic_parser<T>>& chr,
    -
    6437 _In_ const std::shared_ptr<basic_parser<T>>& escape,
    -
    6438 _In_ const std::shared_ptr<basic_parser<T>>& sol,
    -
    6439 _In_ const std::shared_ptr<basic_parser<T>>& bs,
    -
    6440 _In_ const std::shared_ptr<basic_parser<T>>& ff,
    -
    6441 _In_ const std::shared_ptr<basic_parser<T>>& lf,
    -
    6442 _In_ const std::shared_ptr<basic_parser<T>>& cr,
    -
    6443 _In_ const std::shared_ptr<basic_parser<T>>& htab,
    -
    6444 _In_ const std::shared_ptr<basic_parser<T>>& uni,
    -
    6445 _In_ const std::shared_ptr<basic_integer16<T>>& hex,
    -
    6446 _In_ const std::locale& locale = std::locale()) :
    -
    6447 basic_parser<T>(locale),
    -
    6448 m_quote(quote),
    -
    6449 m_chr(chr),
    -
    6450 m_escape(escape),
    -
    6451 m_sol(sol),
    -
    6452 m_bs(bs),
    -
    6453 m_ff(ff),
    -
    6454 m_lf(lf),
    -
    6455 m_cr(cr),
    -
    6456 m_htab(htab),
    -
    6457 m_uni(uni),
    -
    6458 m_hex(hex)
    -
    6459 {}
    -
    6460
    -
    6461 virtual bool match(
    -
    6462 _In_reads_or_z_(end) const T* text,
    -
    6463 _In_ size_t start = 0,
    -
    6464 _In_ size_t end = (size_t)-1,
    -
    6465 _In_ int flags = match_default)
    -
    6466 {
    -
    6467 assert(text || start >= end);
    -
    6468 this->interval.end = start;
    -
    6469 if (m_quote->match(text, this->interval.end, end, flags)) {
    -
    6470 this->interval.end = m_quote->interval.end;
    -
    6471 value.clear();
    -
    6472 for (;;) {
    -
    6473 if (m_quote->match(text, this->interval.end, end, flags)) {
    -
    6474 this->interval.start = start;
    -
    6475 this->interval.end = m_quote->interval.end;
    -
    6476 return true;
    -
    6477 }
    -
    6478 if (m_escape->match(text, this->interval.end, end, flags)) {
    -
    6479 if (m_quote->match(text, m_escape->interval.end, end, flags)) {
    -
    6480 value += '"'; this->interval.end = m_quote->interval.end;
    -
    6481 continue;
    -
    6482 }
    -
    6483 if (m_sol->match(text, m_escape->interval.end, end, flags)) {
    -
    6484 value += '/'; this->interval.end = m_sol->interval.end;
    -
    6485 continue;
    -
    6486 }
    -
    6487 if (m_bs->match(text, m_escape->interval.end, end, flags)) {
    -
    6488 value += '\b'; this->interval.end = m_bs->interval.end;
    -
    6489 continue;
    -
    6490 }
    -
    6491 if (m_ff->match(text, m_escape->interval.end, end, flags)) {
    -
    6492 value += '\f'; this->interval.end = m_ff->interval.end;
    -
    6493 continue;
    -
    6494 }
    -
    6495 if (m_lf->match(text, m_escape->interval.end, end, flags)) {
    -
    6496 value += '\n'; this->interval.end = m_lf->interval.end;
    -
    6497 continue;
    -
    6498 }
    -
    6499 if (m_cr->match(text, m_escape->interval.end, end, flags)) {
    -
    6500 value += '\r'; this->interval.end = m_cr->interval.end;
    -
    6501 continue;
    -
    6502 }
    -
    6503 if (m_htab->match(text, m_escape->interval.end, end, flags)) {
    -
    6504 value += '\t'; this->interval.end = m_htab->interval.end;
    -
    6505 continue;
    -
    6506 }
    -
    6507 if (
    -
    6508 m_uni->match(text, m_escape->interval.end, end, flags) &&
    -
    6509 m_hex->match(text, m_uni->interval.end, std::min(m_uni->interval.end + 4, end), flags | match_case_insensitive) &&
    -
    6510 m_hex->interval.size() == 4 /* JSON requests 4-digit Unicode sequneces: \u.... */)
    -
    6511 {
    -
    6512 assert(m_hex->value <= 0xffff);
    -
    6513 if (sizeof(T) == 1) {
    -
    6514 if (m_hex->value > 0x7ff) {
    -
    6515 value += (T)(0xe0 | ((m_hex->value >> 12) & 0x0f));
    -
    6516 value += (T)(0x80 | ((m_hex->value >> 6) & 0x3f));
    -
    6517 value += (T)(0x80 | (m_hex->value & 0x3f));
    -
    6518 }
    -
    6519 else if (m_hex->value > 0x7f) {
    -
    6520 value += (T)(0xc0 | ((m_hex->value >> 6) & 0x1f));
    -
    6521 value += (T)(0x80 | (m_hex->value & 0x3f));
    -
    6522 }
    -
    6523 else
    -
    6524 value += (T)(m_hex->value & 0x7f);
    -
    6525 }
    -
    6526 else
    -
    6527 value += (T)m_hex->value;
    -
    6528 this->interval.end = m_hex->interval.end;
    -
    6529 continue;
    -
    6530 }
    -
    6531 if (m_escape->match(text, m_escape->interval.end, end, flags)) {
    -
    6532 value += '\\'; this->interval.end = m_escape->interval.end;
    -
    6533 continue;
    -
    6534 }
    -
    6535 }
    -
    6536 if (m_chr->match(text, this->interval.end, end, flags)) {
    -
    6537 value.Prilepi(text + m_chr->interval.start, m_chr->interval.size());
    -
    6538 this->interval.end = m_chr->interval.end;
    -
    6539 continue;
    -
    6540 }
    -
    6541 break;
    -
    6542 }
    -
    6543 }
    -
    6544 value.clear();
    -
    6545 this->interval.start = (this->interval.end = start) + 1;
    -
    6546 return false;
    -
    6547 }
    -
    6548
    -
    6549 virtual void invalidate()
    -
    6550 {
    -
    6551 value.clear();
    - -
    6553 }
    -
    6554
    -
    6555 public:
    -
    6556 std::basic_string<T> value;
    -
    6557
    -
    6558 protected:
    -
    6559 std::shared_ptr<basic_parser<T>> m_quote;
    -
    6560 std::shared_ptr<basic_parser<T>> m_chr;
    -
    6561 std::shared_ptr<basic_parser<T>> m_escape;
    -
    6562 std::shared_ptr<basic_parser<T>> m_sol;
    -
    6563 std::shared_ptr<basic_parser<T>> m_bs;
    -
    6564 std::shared_ptr<basic_parser<T>> m_ff;
    -
    6565 std::shared_ptr<basic_parser<T>> m_lf;
    -
    6566 std::shared_ptr<basic_parser<T>> m_cr;
    -
    6567 std::shared_ptr<basic_parser<T>> m_htab;
    -
    6568 std::shared_ptr<basic_parser<T>> m_uni;
    -
    6569 std::shared_ptr<basic_integer16<T>> m_hex;
    -
    6570 };
    +
    6524
    +
    +
    6528 class http_weight : public parser
    +
    6529 {
    +
    6530 public:
    +
    6531 http_weight(_In_ const std::locale& locale = std::locale()) :
    +
    6532 parser(locale),
    +
    6533 value(1.0f)
    +
    6534 {}
    +
    6535
    +
    6536 virtual bool match(
    +
    6537 _In_reads_or_z_(end) const char* text,
    +
    6538 _In_ size_t start = 0,
    +
    6539 _In_ size_t end = (size_t)-1,
    +
    6540 _In_ int flags = match_default)
    +
    6541 {
    +
    6542 assert(text || start >= end);
    +
    6543 size_t celi_del = 0, decimalni_del = 0, decimalni_del_n = 1;
    +
    6544 this->interval.end = start;
    +
    6545 for (;;) {
    +
    6546 if (this->interval.end < end && text[this->interval.end]) {
    +
    6547 if ('0' <= text[this->interval.end] && text[this->interval.end] <= '9') {
    +
    6548 celi_del = celi_del * 10 + text[this->interval.end] - '0';
    +
    6549 this->interval.end++;
    +
    6550 }
    +
    6551 else if (text[this->interval.end] == '.') {
    +
    6552 this->interval.end++;
    +
    6553 for (;;) {
    +
    6554 if (this->interval.end < end && text[this->interval.end]) {
    +
    6555 if ('0' <= text[this->interval.end] && text[this->interval.end] <= '9') {
    +
    6556 decimalni_del = decimalni_del * 10 + text[this->interval.end] - '0';
    +
    6557 decimalni_del_n *= 10;
    +
    6558 this->interval.end++;
    +
    6559 }
    +
    6560 else
    +
    6561 break;
    +
    6562 }
    +
    6563 else
    +
    6564 break;
    +
    6565 }
    +
    6566 break;
    +
    6567 }
    +
    6568 else
    +
    6569 break;
    +
    6570 }
    +
    6571 else
    +
    6572 break;
    +
    6573 }
    + + +
    6576 this->interval.start = start;
    +
    6577 return true;
    +
    6578 }
    +
    6579 value = 1.0f;
    +
    6580 this->interval.start = (this->interval.end = start) + 1;
    +
    6581 return false;
    +
    6582 }
    +
    6583
    +
    6584 virtual void invalidate()
    +
    6585 {
    +
    6586 value = 1.0f;
    +
    6587 parser::invalidate();
    +
    6588 }
    +
    6589
    +
    6590 public:
    +
    6591 float value;
    +
    6592 };
    -
    6571
    - - -
    6574#ifdef _UNICODE
    -
    6575 using tjson_string = wjson_string;
    -
    6576#else
    -
    6577 using tjson_string = json_string;
    -
    6578#endif
    -
    6579 }
    -
    6580}
    -
    6581
    -
    6582#undef ENUM_FLAG_OPERATOR
    -
    6583#undef ENUM_FLAGS
    -
    6584
    -
    6585#ifdef _MSC_VER
    -
    6586#pragma warning(pop)
    -
    6587#endif
    +
    6593
    +
    +
    6597 class http_asterisk : public parser
    +
    6598 {
    +
    6599 public:
    +
    6600 virtual bool match(
    +
    6601 _In_reads_or_z_(end) const char* text,
    +
    6602 _In_ size_t start = 0,
    +
    6603 _In_ size_t end = (size_t)-1,
    +
    6604 _In_ int flags = match_default)
    +
    6605 {
    +
    6606 assert(text || end <= start);
    +
    6607 if (start < end && text[start] == '*') {
    +
    6608 this->interval.end = (this->interval.start = start) + 1;
    +
    6609 return true;
    +
    6610 }
    +
    6611 this->interval.start = (this->interval.end = start) + 1;
    +
    6612 return false;
    +
    6613 }
    +
    6614 };
    +
    +
    6615
    +
    6619 template <class T, class T_asterisk = http_asterisk>
    +
    + +
    6621 {
    +
    6622 public:
    +
    6623 http_weighted_value(_In_ const std::locale& locale = std::locale()) :
    +
    6624 parser(locale),
    +
    6625 factor(locale)
    +
    6626 {}
    +
    6627
    +
    6628 virtual bool match(
    +
    6629 _In_reads_or_z_(end) const char* text,
    +
    6630 _In_ size_t start = 0,
    +
    6631 _In_ size_t end = (size_t)-1,
    +
    6632 _In_ int flags = match_default)
    +
    6633 {
    +
    6634 assert(text || start >= end);
    +
    6635 size_t konec_vrednosti;
    +
    6636 this->interval.end = start;
    +
    6637 if (asterisk.match(text, this->interval.end, end, flags)) {
    +
    6638 this->interval.end = konec_vrednosti = asterisk.interval.end;
    +
    6639 value.invalidate();
    +
    6640 }
    +
    6641 else if (value.match(text, this->interval.end, end, flags)) {
    +
    6642 this->interval.end = konec_vrednosti = value.interval.end;
    +
    6643 asterisk.invalidate();
    +
    6644 }
    +
    6645 else {
    +
    6646 asterisk.invalidate();
    +
    6647 value.invalidate();
    +
    6648 this->interval.start = (this->interval.end = start) + 1;
    +
    6649 return false;
    +
    6650 }
    +
    6651
    +
    6652 while (this->interval.end < end && text[this->interval.end] && isspace(text[this->interval.end])) this->interval.end++;
    +
    6653 if (this->interval.end < end && text[this->interval.end] == ';') {
    +
    6654 this->interval.end++;
    +
    6655 while (this->interval.end < end && text[this->interval.end] && isspace(text[this->interval.end])) this->interval.end++;
    +
    6656 if (this->interval.end < end && (text[this->interval.end] == 'q' || text[this->interval.end] == 'Q')) {
    +
    6657 this->interval.end++;
    +
    6658 while (this->interval.end < end && text[this->interval.end] && isspace(text[this->interval.end])) this->interval.end++;
    +
    6659 if (this->interval.end < end && text[this->interval.end] == '=') {
    +
    6660 this->interval.end++;
    +
    6661 while (this->interval.end < end && text[this->interval.end] && isspace(text[this->interval.end])) this->interval.end++;
    +
    6662 if (factor.match(text, this->interval.end, end, flags))
    +
    6663 this->interval.end = factor.interval.end;
    +
    6664 }
    +
    6665 }
    +
    6666 }
    +
    6667 if (!factor.interval) {
    +
    6668 factor.invalidate();
    + +
    6670 }
    +
    6671 this->interval.start = start;
    +
    6672 return true;
    +
    6673 }
    +
    6674
    +
    6675 virtual void invalidate()
    +
    6676 {
    +
    6677 asterisk.invalidate();
    +
    6678 value.invalidate();
    +
    6679 factor.invalidate();
    +
    6680 parser::invalidate();
    +
    6681 }
    +
    6682
    +
    6683 public:
    +
    6684 T_asterisk asterisk;
    +
    6685 T value;
    +
    6686 http_weight factor;
    +
    6687 };
    +
    +
    6688
    +
    + +
    6693 {
    +
    6694 public:
    +
    6695 virtual bool match(
    +
    6696 _In_reads_or_z_(end) const char* text,
    +
    6697 _In_ size_t start = 0,
    +
    6698 _In_ size_t end = (size_t)-1,
    +
    6699 _In_ int flags = match_default)
    +
    6700 {
    +
    6701 assert(text || start >= end);
    +
    6702 this->interval.end = start;
    +
    6703 if (this->interval.end < end && text[this->interval.end] == '$')
    +
    6704 this->interval.end++;
    +
    6705 else
    +
    6706 goto error;
    +
    6707 if (name.match(text, this->interval.end, end, flags))
    +
    6708 this->interval.end = name.interval.end;
    +
    6709 else
    +
    6710 goto error;
    +
    6711 while (m_space.match(text, this->interval.end, end, flags))
    +
    6712 this->interval.end = m_space.interval.end;
    +
    6713 if (this->interval.end < end && text[this->interval.end] == '=')
    +
    6714 this->interval.end++;
    +
    6715 else
    +
    6716 goto error;
    +
    6717 while (m_space.match(text, this->interval.end, end, flags))
    +
    6718 this->interval.end = m_space.interval.end;
    +
    6719 if (value.match(text, this->interval.end, end, flags))
    +
    6720 this->interval.end = value.interval.end;
    +
    6721 else
    +
    6722 goto error;
    +
    6723 this->interval.start = start;
    +
    6724 return true;
    +
    6725
    +
    6726 error:
    +
    6727 name.invalidate();
    +
    6728 value.invalidate();
    +
    6729 this->interval.start = (this->interval.end = start) + 1;
    +
    6730 return false;
    +
    6731 }
    +
    6732
    +
    6733 virtual void invalidate()
    +
    6734 {
    +
    6735 name.invalidate();
    +
    6736 value.invalidate();
    +
    6737 parser::invalidate();
    +
    6738 }
    +
    6739
    +
    6740 public:
    +
    6741 http_token name;
    +
    6742 http_value value;
    +
    6743
    +
    6744 protected:
    +
    6745 http_space m_space;
    +
    6746 };
    +
    +
    6747
    +
    +
    6751 class http_cookie : public parser
    +
    6752 {
    +
    6753 public:
    +
    6754 virtual bool match(
    +
    6755 _In_reads_or_z_(end) const char* text,
    +
    6756 _In_ size_t start = 0,
    +
    6757 _In_ size_t end = (size_t)-1,
    +
    6758 _In_ int flags = match_default)
    +
    6759 {
    +
    6760 assert(text || start >= end);
    +
    6761 this->interval.end = start;
    +
    6762 if (name.match(text, this->interval.end, end, flags))
    +
    6763 this->interval.end = name.interval.end;
    +
    6764 else
    +
    6765 goto error;
    +
    6766 while (m_space.match(text, this->interval.end, end, flags))
    +
    6767 this->interval.end = m_space.interval.end;
    +
    6768 if (this->interval.end < end && text[this->interval.end] == '=')
    +
    6769 this->interval.end++;
    +
    6770 else
    +
    6771 goto error;
    +
    6772 while (m_space.match(text, this->interval.end, end, flags))
    +
    6773 this->interval.end = m_space.interval.end;
    +
    6774 if (value.match(text, this->interval.end, end, flags))
    +
    6775 this->interval.end = value.interval.end;
    +
    6776 else
    +
    6777 goto error;
    +
    6778 params.clear();
    +
    6779 for (;;) {
    +
    6780 if (this->interval.end < end && text[this->interval.end]) {
    +
    6781 if (m_space.match(text, this->interval.end, end, flags))
    +
    6782 this->interval.end = m_space.interval.end;
    +
    6783 else if (text[this->interval.end] == ';') {
    +
    6784 this->interval.end++;
    +
    6785 while (m_space.match(text, this->interval.end, end, flags))
    +
    6786 this->interval.end = m_space.interval.end;
    + +
    6788 if (param.match(text, this->interval.end, end, flags)) {
    +
    6789 this->interval.end = param.interval.end;
    +
    6790 params.push_back(std::move(param));
    +
    6791 }
    +
    6792 else
    +
    6793 break;
    +
    6794 }
    +
    6795 else
    +
    6796 break;
    +
    6797 }
    +
    6798 else
    +
    6799 break;
    +
    6800 }
    +
    6801 this->interval.start = start;
    +
    6802 this->interval.end = params.empty() ? value.interval.end : params.back().interval.end;
    +
    6803 return true;
    +
    6804
    +
    6805 error:
    +
    6806 name.invalidate();
    +
    6807 value.invalidate();
    +
    6808 params.clear();
    +
    6809 this->interval.start = (this->interval.end = start) + 1;
    +
    6810 return false;
    +
    6811 }
    +
    6812
    +
    6813 virtual void invalidate()
    +
    6814 {
    +
    6815 name.invalidate();
    +
    6816 value.invalidate();
    +
    6817 params.clear();
    +
    6818 parser::invalidate();
    +
    6819 }
    +
    6820
    +
    6821 public:
    + + +
    6824 std::list<http_cookie_parameter> params;
    +
    6825
    +
    6826 protected:
    +
    6827 http_space m_space;
    +
    6828 };
    +
    +
    6829
    +
    +
    6833 class http_agent : public parser
    +
    6834 {
    +
    6835 public:
    +
    6836 virtual bool match(
    +
    6837 _In_reads_or_z_(end) const char* text,
    +
    6838 _In_ size_t start = 0,
    +
    6839 _In_ size_t end = (size_t)-1,
    +
    6840 _In_ int flags = match_default)
    +
    6841 {
    +
    6842 assert(text || start >= end);
    +
    6843 this->interval.end = start;
    +
    6844 type.start = this->interval.end;
    +
    6845 for (;;) {
    +
    6846 if (this->interval.end < end && text[this->interval.end]) {
    +
    6847 if (text[this->interval.end] == '/') {
    +
    6848 type.end = this->interval.end;
    +
    6849 this->interval.end++;
    +
    6850 version.start = this->interval.end;
    +
    6851 for (;;) {
    +
    6852 if (this->interval.end < end && text[this->interval.end]) {
    +
    6853 if (isspace(text[this->interval.end])) {
    +
    6854 version.end = this->interval.end;
    +
    6855 break;
    +
    6856 }
    +
    6857 else
    +
    6858 this->interval.end++;
    +
    6859 }
    +
    6860 else {
    +
    6861 version.end = this->interval.end;
    +
    6862 break;
    +
    6863 }
    +
    6864 }
    +
    6865 break;
    +
    6866 }
    +
    6867 else if (isspace(text[this->interval.end])) {
    +
    6868 type.end = this->interval.end;
    +
    6869 break;
    +
    6870 }
    +
    6871 else
    +
    6872 this->interval.end++;
    +
    6873 }
    +
    6874 else {
    +
    6875 type.end = this->interval.end;
    +
    6876 break;
    +
    6877 }
    +
    6878 }
    + +
    6880 this->interval.start = start;
    +
    6881 return true;
    +
    6882 }
    +
    6883 type.start = 1;
    +
    6884 type.end = 0;
    +
    6885 version.start = 1;
    +
    6886 version.end = 0;
    +
    6887 this->interval.start = 1;
    +
    6888 this->interval.end = 0;
    +
    6889 return false;
    +
    6890 }
    +
    6891
    +
    6892 virtual void invalidate()
    +
    6893 {
    +
    6894 type.start = 1;
    +
    6895 type.end = 0;
    +
    6896 version.start = 1;
    +
    6897 version.end = 0;
    +
    6898 parser::invalidate();
    +
    6899 }
    +
    6900
    +
    6901 public:
    + + +
    6904 };
    +
    +
    6905
    +
    +
    6909 class http_protocol : public parser
    +
    6910 {
    +
    6911 public:
    +
    6912 http_protocol(_In_ const std::locale& locale = std::locale()) :
    +
    6913 parser(locale),
    +
    6914 version(0x009)
    +
    6915 {}
    +
    6916
    +
    6917 virtual bool match(
    +
    6918 _In_reads_or_z_(end) const char* text,
    +
    6919 _In_ size_t start = 0,
    +
    6920 _In_ size_t end = (size_t)-1,
    +
    6921 _In_ int flags = match_default)
    +
    6922 {
    +
    6923 assert(text || start >= end);
    +
    6924 this->interval.end = start;
    +
    6925 type.start = this->interval.end;
    +
    6926 for (;;) {
    +
    6927 if (this->interval.end < end && text[this->interval.end]) {
    +
    6928 if (text[this->interval.end] == '/') {
    +
    6929 type.end = this->interval.end;
    +
    6930 this->interval.end++;
    +
    6931 break;
    +
    6932 }
    +
    6933 else if (isspace(text[this->interval.end]))
    +
    6934 goto error;
    +
    6935 else
    +
    6936 this->interval.end++;
    +
    6937 }
    +
    6938 else {
    +
    6939 type.end = this->interval.end;
    +
    6940 goto error;
    +
    6941 }
    +
    6942 }
    +
    6943 version_maj.start = this->interval.end;
    +
    6944 for (;;) {
    +
    6945 if (this->interval.end < end && text[this->interval.end]) {
    +
    6946 if (text[this->interval.end] == '.') {
    +
    6947 version_maj.end = this->interval.end;
    +
    6948 this->interval.end++;
    +
    6949 version_min.start = this->interval.end;
    +
    6950 for (;;) {
    +
    6951 if (this->interval.end < end && text[this->interval.end]) {
    +
    6952 if (isspace(text[this->interval.end])) {
    +
    6953 version_min.end = this->interval.end;
    +
    6954 version =
    +
    6955 (uint16_t)strtoui(text + version_maj.start, version_maj.size(), nullptr, 10) * 0x100 +
    +
    6956 (uint16_t)strtoui(text + version_min.start, version_min.size(), nullptr, 10);
    +
    6957 break;
    +
    6958 }
    +
    6959 else
    +
    6960 this->interval.end++;
    +
    6961 }
    +
    6962 else
    +
    6963 goto error;
    +
    6964 }
    +
    6965 break;
    +
    6966 }
    +
    6967 else if (isspace(text[this->interval.end])) {
    +
    6968 version_maj.end = this->interval.end;
    +
    6969 version_min.start = 1;
    +
    6970 version_min.end = 0;
    +
    6971 version = (uint16_t)strtoui(text + version_maj.start, version_maj.size(), nullptr, 10) * 0x100;
    +
    6972 break;
    +
    6973 }
    +
    6974 else
    +
    6975 this->interval.end++;
    +
    6976 }
    +
    6977 else
    +
    6978 goto error;
    +
    6979 }
    +
    6980 this->interval.start = start;
    +
    6981 return true;
    +
    6982
    +
    6983 error:
    +
    6984 type.start = 1;
    +
    6985 type.end = 0;
    +
    6986 version_maj.start = 1;
    +
    6987 version_maj.end = 0;
    +
    6988 version_min.start = 1;
    +
    6989 version_min.end = 0;
    +
    6990 version = 0x009;
    +
    6991 this->interval.start = 1;
    +
    6992 this->interval.end = 0;
    +
    6993 return false;
    +
    6994 }
    +
    6995
    +
    6996 virtual void invalidate()
    +
    6997 {
    +
    6998 type.start = 1;
    +
    6999 type.end = 0;
    +
    7000 version_maj.start = 1;
    +
    7001 version_maj.end = 0;
    +
    7002 version_min.start = 1;
    +
    7003 version_min.end = 0;
    +
    7004 version = 0x009;
    +
    7005 parser::invalidate();
    +
    7006 }
    +
    7007
    +
    7008 public:
    + +
    7010 stdex::interval<size_t> version_maj;
    +
    7011 stdex::interval<size_t> version_min;
    + +
    7013 };
    +
    +
    7014
    +
    +
    7018 class http_request : public parser
    +
    7019 {
    +
    7020 public:
    +
    7021 http_request(_In_ const std::locale& locale = std::locale()) :
    +
    7022 parser(locale),
    +
    7023 url(locale),
    +
    7024 protocol(locale)
    +
    7025 {}
    +
    7026
    +
    7027 virtual bool match(
    +
    7028 _In_reads_or_z_(end) const char* text,
    +
    7029 _In_ size_t start = 0,
    +
    7030 _In_ size_t end = (size_t)-1,
    +
    7031 _In_ int flags = match_default)
    +
    7032 {
    +
    7033 assert(text || start >= end);
    +
    7034 this->interval.end = start;
    +
    7035
    +
    7036 for (;;) {
    +
    7037 if (m_line_break.match(text, this->interval.end, end, flags))
    +
    7038 goto error;
    +
    7039 else if (this->interval.end < end && text[this->interval.end]) {
    +
    7040 if (isspace(text[this->interval.end]))
    +
    7041 this->interval.end++;
    +
    7042 else
    +
    7043 break;
    +
    7044 }
    +
    7045 else
    +
    7046 goto error;
    +
    7047 }
    +
    7048 verb.start = this->interval.end;
    +
    7049 for (;;) {
    +
    7050 if (m_line_break.match(text, this->interval.end, end, flags))
    +
    7051 goto error;
    +
    7052 else if (this->interval.end < end && text[this->interval.end]) {
    +
    7053 if (isspace(text[this->interval.end])) {
    +
    7054 verb.end = this->interval.end;
    +
    7055 this->interval.end++;
    +
    7056 break;
    +
    7057 }
    +
    7058 else
    +
    7059 this->interval.end++;
    +
    7060 }
    +
    7061 else
    +
    7062 goto error;
    +
    7063 }
    +
    7064
    +
    7065 for (;;) {
    +
    7066 if (m_line_break.match(text, this->interval.end, end, flags))
    +
    7067 goto error;
    +
    7068 else if (this->interval.end < end && text[this->interval.end]) {
    +
    7069 if (isspace(text[this->interval.end]))
    +
    7070 this->interval.end++;
    +
    7071 else
    +
    7072 break;
    +
    7073 }
    +
    7074 else
    +
    7075 goto error;
    +
    7076 }
    +
    7077 if (url.match(text, this->interval.end, end, flags))
    +
    7078 this->interval.end = url.interval.end;
    +
    7079 else
    +
    7080 goto error;
    +
    7081
    +
    7082 protocol.invalidate();
    +
    7083 for (;;) {
    +
    7084 if (m_line_break.match(text, this->interval.end, end, flags)) {
    +
    7085 this->interval.end = m_line_break.interval.end;
    +
    7086 goto end;
    +
    7087 }
    +
    7088 else if (this->interval.end < end && text[this->interval.end]) {
    +
    7089 if (isspace(text[this->interval.end]))
    +
    7090 this->interval.end++;
    +
    7091 else
    +
    7092 break;
    +
    7093 }
    +
    7094 else
    +
    7095 goto end;
    +
    7096 }
    +
    7097 for (;;) {
    +
    7098 if (m_line_break.match(text, this->interval.end, end, flags)) {
    +
    7099 this->interval.end = m_line_break.interval.end;
    +
    7100 goto end;
    +
    7101 }
    +
    7102 else if (protocol.match(text, this->interval.end, end, flags)) {
    +
    7103 this->interval.end = protocol.interval.end;
    +
    7104 break;
    +
    7105 }
    +
    7106 else
    +
    7107 goto end;
    +
    7108 }
    +
    7109
    +
    7110 for (;;) {
    +
    7111 if (m_line_break.match(text, this->interval.end, end, flags)) {
    +
    7112 this->interval.end = m_line_break.interval.end;
    +
    7113 break;
    +
    7114 }
    +
    7115 else if (this->interval.end < end && text[this->interval.end])
    +
    7116 this->interval.end++;
    +
    7117 else
    +
    7118 goto end;
    +
    7119 }
    +
    7120
    +
    7121 end:
    +
    7122 this->interval.start = start;
    +
    7123 return true;
    +
    7124
    +
    7125 error:
    +
    7126 verb.start = 1;
    +
    7127 verb.end = 0;
    +
    7128 url.invalidate();
    +
    7129 protocol.invalidate();
    +
    7130 this->interval.start = 1;
    +
    7131 this->interval.end = 0;
    +
    7132 return false;
    +
    7133 }
    +
    7134
    +
    7135 virtual void invalidate()
    +
    7136 {
    +
    7137 verb.start = 1;
    +
    7138 verb.end = 0;
    +
    7139 url.invalidate();
    +
    7140 protocol.invalidate();
    +
    7141 parser::invalidate();
    +
    7142 }
    +
    7143
    +
    7144 public:
    + +
    7146 http_url url;
    +
    7147 http_protocol protocol;
    +
    7148
    +
    7149 protected:
    +
    7150 http_line_break m_line_break;
    +
    7151 };
    +
    +
    7152
    +
    +
    7156 class http_header : public parser
    +
    7157 {
    +
    7158 public:
    +
    7159 virtual bool match(
    +
    7160 _In_reads_or_z_(end) const char* text,
    +
    7161 _In_ size_t start = 0,
    +
    7162 _In_ size_t end = (size_t)-1,
    +
    7163 _In_ int flags = match_default)
    +
    7164 {
    +
    7165 assert(text || start >= end);
    +
    7166 this->interval.end = start;
    +
    7167
    +
    7168 if (m_line_break.match(text, this->interval.end, end, flags) ||
    +
    7169 (this->interval.end < end && text[this->interval.end] && isspace(text[this->interval.end])))
    +
    7170 goto error;
    +
    7171 name.start = this->interval.end;
    +
    7172 for (;;) {
    +
    7173 if (m_line_break.match(text, this->interval.end, end, flags))
    +
    7174 goto error;
    +
    7175 else if (this->interval.end < end && text[this->interval.end]) {
    +
    7176 if (isspace(text[this->interval.end])) {
    +
    7177 name.end = this->interval.end;
    +
    7178 this->interval.end++;
    +
    7179 for (;;) {
    +
    7180 if (m_line_break.match(text, this->interval.end, end, flags))
    +
    7181 goto error;
    +
    7182 else if (this->interval.end < end && text[this->interval.end]) {
    +
    7183 if (isspace(text[this->interval.end]))
    +
    7184 this->interval.end++;
    +
    7185 else
    +
    7186 break;
    +
    7187 }
    +
    7188 else
    +
    7189 goto error;
    +
    7190 }
    +
    7191 if (this->interval.end < end && text[this->interval.end] == ':') {
    +
    7192 this->interval.end++;
    +
    7193 break;
    +
    7194 }
    +
    7195 else
    +
    7196 goto error;
    +
    7197 break;
    +
    7198 }
    +
    7199 else if (text[this->interval.end] == ':') {
    +
    7200 name.end = this->interval.end;
    +
    7201 this->interval.end++;
    +
    7202 break;
    +
    7203 }
    +
    7204 else
    +
    7205 this->interval.end++;
    +
    7206 }
    +
    7207 else
    +
    7208 goto error;
    +
    7209 }
    +
    7210 value.start = (size_t)-1;
    +
    7211 value.end = 0;
    +
    7212 for (;;) {
    +
    7213 if (m_line_break.match(text, this->interval.end, end, flags)) {
    +
    7214 this->interval.end = m_line_break.interval.end;
    +
    7215 if (!m_line_break.match(text, this->interval.end, end, flags) &&
    +
    7216 this->interval.end < end && text[this->interval.end] && isspace(text[this->interval.end]))
    +
    7217 this->interval.end++;
    +
    7218 else
    +
    7219 break;
    +
    7220 }
    +
    7221 else if (this->interval.end < end && text[this->interval.end]) {
    +
    7222 if (isspace(text[this->interval.end]))
    +
    7223 this->interval.end++;
    +
    7224 else {
    +
    7225 if (value.start == (size_t)-1) value.start = this->interval.end;
    +
    7226 value.end = ++this->interval.end;
    +
    7227 }
    +
    7228 }
    +
    7229 else
    +
    7230 break;
    +
    7231 }
    +
    7232 this->interval.start = start;
    +
    7233 return true;
    +
    7234
    +
    7235 error:
    +
    7236 name.start = 1;
    +
    7237 name.end = 0;
    +
    7238 value.start = 1;
    +
    7239 value.end = 0;
    +
    7240 this->interval.start = 1;
    +
    7241 this->interval.end = 0;
    +
    7242 return false;
    +
    7243 }
    +
    7244
    +
    7245 virtual void invalidate()
    +
    7246 {
    +
    7247 name.start = 1;
    +
    7248 name.end = 0;
    +
    7249 value.start = 1;
    +
    7250 value.end = 0;
    +
    7251 parser::invalidate();
    +
    7252 }
    +
    7253
    +
    7254 public:
    + + +
    7257
    +
    7258 protected:
    +
    7259 http_line_break m_line_break;
    +
    7260 };
    +
    +
    7261
    +
    7265 template <class _Key, class T>
    +
    +
    7266 class http_value_collection : public T
    +
    7267 {
    +
    7268 public:
    +
    7269 void insert(
    +
    7270 _In_reads_or_z_(end) const char* text,
    +
    7271 _In_ size_t start = 0,
    +
    7272 _In_ size_t end = (size_t)-1,
    +
    7273 _In_ int flags = match_default)
    +
    7274 {
    +
    7275 while (start < end) {
    +
    7276 while (start < end && text[start] && isspace(text[start])) start++;
    +
    7277 if (start < end && text[start] == ',') {
    +
    7278 start++;
    +
    7279 while (start < end&& text[start] && isspace(text[start])) start++;
    +
    7280 }
    +
    7281 _Key el;
    +
    7282 if (el.match(text, start, end, flags)) {
    +
    7283 start = el.interval.end;
    +
    7284 T::insert(std::move(el));
    +
    7285 }
    +
    7286 else
    +
    7287 break;
    +
    7288 }
    +
    7289 }
    +
    7290 };
    +
    +
    7291
    +
    7292 template <class T>
    +
    + +
    7294 constexpr bool operator()(const T& a, const T& b) const noexcept
    +
    7295 {
    +
    7296 return a.factor.value > b.factor.value;
    +
    7297 }
    +
    7298 };
    +
    +
    7299
    +
    7303 template <class T, class _Alloc = std::allocator<T>>
    + +
    7305
    +
    7309 template <class T>
    +
    + +
    7311 {
    +
    7312 public:
    + +
    7314 _In_ const std::shared_ptr<basic_parser<T>>& quote,
    +
    7315 _In_ const std::shared_ptr<basic_parser<T>>& chr,
    +
    7316 _In_ const std::shared_ptr<basic_parser<T>>& escape,
    +
    7317 _In_ const std::shared_ptr<basic_parser<T>>& sol,
    +
    7318 _In_ const std::shared_ptr<basic_parser<T>>& bs,
    +
    7319 _In_ const std::shared_ptr<basic_parser<T>>& ff,
    +
    7320 _In_ const std::shared_ptr<basic_parser<T>>& lf,
    +
    7321 _In_ const std::shared_ptr<basic_parser<T>>& cr,
    +
    7322 _In_ const std::shared_ptr<basic_parser<T>>& htab,
    +
    7323 _In_ const std::shared_ptr<basic_parser<T>>& uni,
    +
    7324 _In_ const std::shared_ptr<basic_integer16<T>>& hex,
    +
    7325 _In_ const std::locale& locale = std::locale()) :
    +
    7326 basic_parser<T>(locale),
    +
    7327 m_quote(quote),
    +
    7328 m_chr(chr),
    +
    7329 m_escape(escape),
    +
    7330 m_sol(sol),
    +
    7331 m_bs(bs),
    +
    7332 m_ff(ff),
    +
    7333 m_lf(lf),
    +
    7334 m_cr(cr),
    +
    7335 m_htab(htab),
    +
    7336 m_uni(uni),
    +
    7337 m_hex(hex)
    +
    7338 {}
    +
    7339
    +
    7340 virtual bool match(
    +
    7341 _In_reads_or_z_(end) const T* text,
    +
    7342 _In_ size_t start = 0,
    +
    7343 _In_ size_t end = (size_t)-1,
    +
    7344 _In_ int flags = match_default)
    +
    7345 {
    +
    7346 assert(text || start >= end);
    +
    7347 this->interval.end = start;
    +
    7348 if (m_quote->match(text, this->interval.end, end, flags)) {
    +
    7349 this->interval.end = m_quote->interval.end;
    +
    7350 value.clear();
    +
    7351 for (;;) {
    +
    7352 if (m_quote->match(text, this->interval.end, end, flags)) {
    +
    7353 this->interval.start = start;
    +
    7354 this->interval.end = m_quote->interval.end;
    +
    7355 return true;
    +
    7356 }
    +
    7357 if (m_escape->match(text, this->interval.end, end, flags)) {
    +
    7358 if (m_quote->match(text, m_escape->interval.end, end, flags)) {
    +
    7359 value += '"'; this->interval.end = m_quote->interval.end;
    +
    7360 continue;
    +
    7361 }
    +
    7362 if (m_sol->match(text, m_escape->interval.end, end, flags)) {
    +
    7363 value += '/'; this->interval.end = m_sol->interval.end;
    +
    7364 continue;
    +
    7365 }
    +
    7366 if (m_bs->match(text, m_escape->interval.end, end, flags)) {
    +
    7367 value += '\b'; this->interval.end = m_bs->interval.end;
    +
    7368 continue;
    +
    7369 }
    +
    7370 if (m_ff->match(text, m_escape->interval.end, end, flags)) {
    +
    7371 value += '\f'; this->interval.end = m_ff->interval.end;
    +
    7372 continue;
    +
    7373 }
    +
    7374 if (m_lf->match(text, m_escape->interval.end, end, flags)) {
    +
    7375 value += '\n'; this->interval.end = m_lf->interval.end;
    +
    7376 continue;
    +
    7377 }
    +
    7378 if (m_cr->match(text, m_escape->interval.end, end, flags)) {
    +
    7379 value += '\r'; this->interval.end = m_cr->interval.end;
    +
    7380 continue;
    +
    7381 }
    +
    7382 if (m_htab->match(text, m_escape->interval.end, end, flags)) {
    +
    7383 value += '\t'; this->interval.end = m_htab->interval.end;
    +
    7384 continue;
    +
    7385 }
    +
    7386 if (
    +
    7387 m_uni->match(text, m_escape->interval.end, end, flags) &&
    +
    7388 m_hex->match(text, m_uni->interval.end, std::min(m_uni->interval.end + 4, end), flags | match_case_insensitive) &&
    +
    7389 m_hex->interval.size() == 4 /* JSON requests 4-digit Unicode sequneces: \u.... */)
    +
    7390 {
    +
    7391 assert(m_hex->value <= 0xffff);
    +
    7392 if (sizeof(T) == 1) {
    +
    7393 if (m_hex->value > 0x7ff) {
    +
    7394 value += (T)(0xe0 | ((m_hex->value >> 12) & 0x0f));
    +
    7395 value += (T)(0x80 | ((m_hex->value >> 6) & 0x3f));
    +
    7396 value += (T)(0x80 | (m_hex->value & 0x3f));
    +
    7397 }
    +
    7398 else if (m_hex->value > 0x7f) {
    +
    7399 value += (T)(0xc0 | ((m_hex->value >> 6) & 0x1f));
    +
    7400 value += (T)(0x80 | (m_hex->value & 0x3f));
    +
    7401 }
    +
    7402 else
    +
    7403 value += (T)(m_hex->value & 0x7f);
    +
    7404 }
    +
    7405 else
    +
    7406 value += (T)m_hex->value;
    +
    7407 this->interval.end = m_hex->interval.end;
    +
    7408 continue;
    +
    7409 }
    +
    7410 if (m_escape->match(text, m_escape->interval.end, end, flags)) {
    +
    7411 value += '\\'; this->interval.end = m_escape->interval.end;
    +
    7412 continue;
    +
    7413 }
    +
    7414 }
    +
    7415 if (m_chr->match(text, this->interval.end, end, flags)) {
    +
    7416 value.Prilepi(text + m_chr->interval.start, m_chr->interval.size());
    +
    7417 this->interval.end = m_chr->interval.end;
    +
    7418 continue;
    +
    7419 }
    +
    7420 break;
    +
    7421 }
    +
    7422 }
    +
    7423 value.clear();
    +
    7424 this->interval.start = (this->interval.end = start) + 1;
    +
    7425 return false;
    +
    7426 }
    +
    7427
    +
    7428 virtual void invalidate()
    +
    7429 {
    +
    7430 value.clear();
    + +
    7432 }
    +
    7433
    +
    7434 public:
    +
    7435 std::basic_string<T> value;
    +
    7436
    +
    7437 protected:
    +
    7438 std::shared_ptr<basic_parser<T>> m_quote;
    +
    7439 std::shared_ptr<basic_parser<T>> m_chr;
    +
    7440 std::shared_ptr<basic_parser<T>> m_escape;
    +
    7441 std::shared_ptr<basic_parser<T>> m_sol;
    +
    7442 std::shared_ptr<basic_parser<T>> m_bs;
    +
    7443 std::shared_ptr<basic_parser<T>> m_ff;
    +
    7444 std::shared_ptr<basic_parser<T>> m_lf;
    +
    7445 std::shared_ptr<basic_parser<T>> m_cr;
    +
    7446 std::shared_ptr<basic_parser<T>> m_htab;
    +
    7447 std::shared_ptr<basic_parser<T>> m_uni;
    +
    7448 std::shared_ptr<basic_integer16<T>> m_hex;
    +
    7449 };
    +
    +
    7450
    + + +
    7453#ifdef _UNICODE
    +
    7454 using tjson_string = wjson_string;
    +
    7455#else
    +
    7456 using tjson_string = json_string;
    +
    7457#endif
    +
    7458 }
    +
    7459}
    +
    7460
    +
    7461#undef ENUM_FLAG_OPERATOR
    +
    7462#undef ENUM_FLAGS
    +
    7463
    +
    7464#ifdef _MSC_VER
    +
    7465#pragma warning(pop)
    +
    7466#endif
    Test for angle in d°mm'ss.dddd form.
    Definition parser.hpp:4396
    Test for any code unit.
    Definition parser.hpp:222
    Test for beginning of line.
    Definition parser.hpp:616
    Test for any.
    Definition parser.hpp:1058
    -
    Test for chemical formula.
    Definition parser.hpp:4670
    +
    Test for chemical formula.
    Definition parser.hpp:5549
    +
    Test for Creditor Reference.
    Definition parser.hpp:4975
    +
    T reference[22]
    Normalized national reference number.
    Definition parser.hpp:5104
    +
    T check_digits[3]
    Two check digits.
    Definition parser.hpp:5103
    +
    bool is_valid
    Is reference valid per ISO 7064.
    Definition parser.hpp:5105
    Test for any code unit from a given string of code units.
    Definition parser.hpp:721
    Test for specific code unit.
    Definition parser.hpp:292
    Test for date.
    Definition parser.hpp:4026
    @@ -6598,6 +7464,11 @@ $(document).ready(function() { init_codefold(0); });
    std::shared_ptr< basic_parser< T > > emoticon
    emoticon as a whole (e.g. 😀, 🤔, 😶)
    Definition parser.hpp:3991
    Test for end of line.
    Definition parser.hpp:654
    Test for fraction.
    Definition parser.hpp:1687
    +
    Test for International Bank Account Number.
    Definition parser.hpp:4672
    +
    T bban[31]
    Normalized Basic Bank Account Number.
    Definition parser.hpp:4952
    +
    T country[3]
    ISO 3166-1 alpha-2 country code.
    Definition parser.hpp:4950
    +
    T check_digits[3]
    Two check digits.
    Definition parser.hpp:4951
    +
    bool is_valid
    Is IBAN valid per ISO 7064.
    Definition parser.hpp:4953
    Test for decimal integer.
    Definition parser.hpp:1296
    Test for decimal integer possibly containing thousand separators.
    Definition parser.hpp:1381
    bool has_separators
    Did integer have any separators?
    Definition parser.hpp:1441
    @@ -6618,7 +7489,7 @@ $(document).ready(function() { init_codefold(0); });
    std::shared_ptr< basic_parser< T > > m_el
    repeating element
    Definition parser.hpp:947
    size_t m_min_iterations
    minimum number of iterations
    Definition parser.hpp:948
    size_t m_max_iterations
    maximum number of iterations
    Definition parser.hpp:949
    -
    Test for JSON string.
    Definition parser.hpp:6432
    +
    Test for JSON string.
    Definition parser.hpp:7311
    Test for mixed numeral.
    Definition parser.hpp:1923
    std::shared_ptr< basic_parser< T > > fraction
    fraction
    Definition parser.hpp:2029
    std::shared_ptr< basic_parser< T > > special_sign
    Special sign (e.g. plus-minus '±')
    Definition parser.hpp:2027
    @@ -6656,6 +7527,14 @@ $(document).ready(function() { init_codefold(0); });
    Test for match score.
    Definition parser.hpp:1750
    Test for sequence.
    Definition parser.hpp:1007
    Definition parser.hpp:689
    +
    Test for SI Reference delimiter.
    Definition parser.hpp:5172
    +
    Test for SI Reference part.
    Definition parser.hpp:5127
    +
    Test for SI Reference.
    Definition parser.hpp:5210
    +
    basic_si_reference_part< T > part3
    Reference data part 3 (P3)
    Definition parser.hpp:5527
    +
    basic_si_reference_part< T > part1
    Reference data part 1 (P1)
    Definition parser.hpp:5525
    +
    bool is_valid
    Is reference valid.
    Definition parser.hpp:5528
    +
    T model[3]
    Reference model.
    Definition parser.hpp:5524
    +
    basic_si_reference_part< T > part2
    Reference data part 2 (P2)
    Definition parser.hpp:5526
    Test for signed numeral.
    Definition parser.hpp:1837
    std::shared_ptr< basic_parser< T > > special_sign
    Special sign (e.g. plus-minus '±')
    Definition parser.hpp:1905
    std::shared_ptr< basic_parser< T > > negative_sign
    Negative sign.
    Definition parser.hpp:1904
    @@ -6671,44 +7550,44 @@ $(document).ready(function() { init_codefold(0); });
    Test for URL path.
    Definition parser.hpp:3297
    Test for valid URL username character.
    Definition parser.hpp:2990
    Test for URL.
    Definition parser.hpp:3438
    -
    Test for HTTP agent.
    Definition parser.hpp:5955
    -
    Test for HTTP any type.
    Definition parser.hpp:5077
    -
    Test for HTTP asterisk.
    Definition parser.hpp:5719
    - - - - - -
    Test for HTTP header.
    Definition parser.hpp:6278
    -
    Test for HTTP language (RFC1766)
    Definition parser.hpp:5587
    -
    Test for HTTP line break (RFC2616: CRLF | LF)
    Definition parser.hpp:4751
    -
    Test for HTTP media range (RFC2616: media-range)
    Definition parser.hpp:5109
    -
    Test for HTTP media type (RFC2616: media-type)
    Definition parser.hpp:5164
    -
    Test for HTTP parameter (RFC2616: parameter)
    Definition parser.hpp:5022
    -
    http_token name
    Parameter name.
    Definition parser.hpp:5066
    -
    http_value value
    Parameter value.
    Definition parser.hpp:5067
    -
    Test for HTTP protocol.
    Definition parser.hpp:6031
    -
    uint16_t version
    HTTP protocol version: 0x100 = 1.0, 0x101 = 1.1...
    Definition parser.hpp:6133
    -
    Test for HTTP quoted string (RFC2616: quoted-string)
    Definition parser.hpp:4912
    -
    stdex::interval< size_t > content
    String content (without quotes)
    Definition parser.hpp:4968
    -
    Test for HTTP request.
    Definition parser.hpp:6140
    -
    Test for HTTP space (RFC2616: LWS)
    Definition parser.hpp:4787
    -
    Test for HTTP text character (RFC2616: TEXT)
    Definition parser.hpp:4824
    -
    Test for HTTP token (RFC2616: token - tolerates non-ASCII)
    Definition parser.hpp:4858
    -
    Test for HTTP URL parameter.
    Definition parser.hpp:5404
    -
    Test for HTTP URL path segment.
    Definition parser.hpp:5315
    -
    Test for HTTP URL path segment.
    Definition parser.hpp:5348
    -
    std::vector< http_url_path_segment > segments
    Path segments.
    Definition parser.hpp:5397
    -
    Test for HTTP URL port.
    Definition parser.hpp:5259
    -
    Test for HTTP URL server.
    Definition parser.hpp:5222
    -
    Test for HTTP URL.
    Definition parser.hpp:5485
    -
    Collection of HTTP values.
    Definition parser.hpp:6388
    -
    Test for HTTP value (RFC2616: value)
    Definition parser.hpp:4978
    -
    http_quoted_string string
    Value when matched as quoted string.
    Definition parser.hpp:5014
    -
    http_token token
    Value when matched as token.
    Definition parser.hpp:5015
    -
    Test for HTTP weight factor.
    Definition parser.hpp:5650
    -
    float value
    Calculated value of the weight factor.
    Definition parser.hpp:5712
    -
    Test for HTTP weighted value.
    Definition parser.hpp:5742
    +
    Test for HTTP agent.
    Definition parser.hpp:6834
    +
    Test for HTTP any type.
    Definition parser.hpp:5956
    +
    Test for HTTP asterisk.
    Definition parser.hpp:6598
    + + + + + +
    Test for HTTP header.
    Definition parser.hpp:7157
    +
    Test for HTTP language (RFC1766)
    Definition parser.hpp:6466
    +
    Test for HTTP line break (RFC2616: CRLF | LF)
    Definition parser.hpp:5630
    +
    Test for HTTP media range (RFC2616: media-range)
    Definition parser.hpp:5988
    +
    Test for HTTP media type (RFC2616: media-type)
    Definition parser.hpp:6043
    +
    Test for HTTP parameter (RFC2616: parameter)
    Definition parser.hpp:5901
    +
    http_token name
    Parameter name.
    Definition parser.hpp:5945
    +
    http_value value
    Parameter value.
    Definition parser.hpp:5946
    +
    Test for HTTP protocol.
    Definition parser.hpp:6910
    +
    uint16_t version
    HTTP protocol version: 0x100 = 1.0, 0x101 = 1.1...
    Definition parser.hpp:7012
    +
    Test for HTTP quoted string (RFC2616: quoted-string)
    Definition parser.hpp:5791
    +
    stdex::interval< size_t > content
    String content (without quotes)
    Definition parser.hpp:5847
    +
    Test for HTTP request.
    Definition parser.hpp:7019
    +
    Test for HTTP space (RFC2616: LWS)
    Definition parser.hpp:5666
    +
    Test for HTTP text character (RFC2616: TEXT)
    Definition parser.hpp:5703
    +
    Test for HTTP token (RFC2616: token - tolerates non-ASCII)
    Definition parser.hpp:5737
    +
    Test for HTTP URL parameter.
    Definition parser.hpp:6283
    +
    Test for HTTP URL path segment.
    Definition parser.hpp:6194
    +
    Test for HTTP URL path segment.
    Definition parser.hpp:6227
    +
    std::vector< http_url_path_segment > segments
    Path segments.
    Definition parser.hpp:6276
    +
    Test for HTTP URL port.
    Definition parser.hpp:6138
    +
    Test for HTTP URL server.
    Definition parser.hpp:6101
    +
    Test for HTTP URL.
    Definition parser.hpp:6364
    +
    Collection of HTTP values.
    Definition parser.hpp:7267
    +
    Test for HTTP value (RFC2616: value)
    Definition parser.hpp:5857
    +
    http_quoted_string string
    Value when matched as quoted string.
    Definition parser.hpp:5893
    +
    http_token token
    Value when matched as token.
    Definition parser.hpp:5894
    +
    Test for HTTP weight factor.
    Definition parser.hpp:6529
    +
    float value
    Calculated value of the weight factor.
    Definition parser.hpp:6591
    +
    Test for HTTP weighted value.
    Definition parser.hpp:6621
    Base template for collection-holding parsers.
    Definition parser.hpp:967
    Test for any SGML code point.
    Definition parser.hpp:254
    Test for any SGML code point from a given string of SGML code points.
    Definition parser.hpp:773
    @@ -6727,11 +7606,11 @@ $(document).ready(function() { init_codefold(0); });
    T end
    interval end
    Definition interval.hpp:20
    interval() noexcept
    Constructs an invalid interval.
    Definition interval.hpp:25
    T start
    interval start
    Definition interval.hpp:19
    -
    Definition parser.hpp:6414
    +
    Definition parser.hpp:7293
    diff --git a/pch_8h_source.html b/pch_8h_source.html index eaedf4689..4cc16d0b0 100644 --- a/pch_8h_source.html +++ b/pch_8h_source.html @@ -116,7 +116,7 @@ $(document).ready(function() { init_codefold(0); });
    diff --git a/progress_8hpp_source.html b/progress_8hpp_source.html index 64e70aa8b..6d2aac01e 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 b651e7719..e0dc7d9e3 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 267280fd0..43abebe4b 100644 --- a/ring_8hpp_source.html +++ b/ring_8hpp_source.html @@ -224,7 +224,7 @@ $(document).ready(function() { init_codefold(0); });
    diff --git a/search/all_1.js b/search/all_1.js index 3e6b88209..a137c02f4 100644 --- a/search/all_1.js +++ b/search/all_1.js @@ -10,60 +10,66 @@ var searchData= ['basic_5fbol_7',['basic_bol',['../classstdex_1_1parser_1_1basic__bol.html',1,'stdex::parser']]], ['basic_5fbranch_8',['basic_branch',['../classstdex_1_1parser_1_1basic__branch.html',1,'stdex::parser']]], ['basic_5fchemical_5fformula_9',['basic_chemical_formula',['../classstdex_1_1parser_1_1basic__chemical__formula.html',1,'stdex::parser']]], - ['basic_5fcu_10',['basic_cu',['../classstdex_1_1parser_1_1basic__cu.html',1,'stdex::parser']]], - ['basic_5fcu_5fset_11',['basic_cu_set',['../classstdex_1_1parser_1_1basic__cu__set.html',1,'stdex::parser']]], - ['basic_5fdate_12',['basic_date',['../classstdex_1_1parser_1_1basic__date.html',1,'stdex::parser']]], - ['basic_5fdns_5fdomain_5fchar_13',['basic_dns_domain_char',['../classstdex_1_1parser_1_1basic__dns__domain__char.html',1,'stdex::parser']]], - ['basic_5fdns_5fdomain_5fchar_3c_20char_20_3e_14',['basic_dns_domain_char< char >',['../classstdex_1_1parser_1_1basic__dns__domain__char.html',1,'stdex::parser']]], - ['basic_5fdns_5fname_15',['basic_dns_name',['../classstdex_1_1parser_1_1basic__dns__name.html',1,'stdex::parser']]], - ['basic_5femail_5faddress_16',['basic_email_address',['../classstdex_1_1parser_1_1basic__email__address.html',1,'stdex::parser']]], - ['basic_5femoticon_17',['basic_emoticon',['../classstdex_1_1parser_1_1basic__emoticon.html',1,'stdex::parser']]], - ['basic_5feol_18',['basic_eol',['../classstdex_1_1parser_1_1basic__eol.html',1,'stdex::parser']]], - ['basic_5ffile_19',['basic_file',['../classstdex_1_1stream_1_1basic__file.html',1,'stdex::stream']]], - ['basic_5ffraction_20',['basic_fraction',['../classstdex_1_1parser_1_1basic__fraction.html',1,'stdex::parser']]], - ['basic_5finteger_21',['basic_integer',['../classstdex_1_1parser_1_1basic__integer.html',1,'stdex::parser']]], - ['basic_5finteger10_22',['basic_integer10',['../classstdex_1_1parser_1_1basic__integer10.html',1,'stdex::parser']]], - ['basic_5finteger10ts_23',['basic_integer10ts',['../classstdex_1_1parser_1_1basic__integer10ts.html',1,'stdex::parser']]], - ['basic_5finteger16_24',['basic_integer16',['../classstdex_1_1parser_1_1basic__integer16.html',1,'stdex::parser']]], - ['basic_5fipv4_5faddress_25',['basic_ipv4_address',['../classstdex_1_1parser_1_1basic__ipv4__address.html',1,'stdex::parser']]], - ['basic_5fipv6_5faddress_26',['basic_ipv6_address',['../classstdex_1_1parser_1_1basic__ipv6__address.html',1,'stdex::parser']]], - ['basic_5fipv6_5fscope_5fid_5fchar_27',['basic_ipv6_scope_id_char',['../classstdex_1_1parser_1_1basic__ipv6__scope__id__char.html',1,'stdex::parser']]], - ['basic_5fiterations_28',['basic_iterations',['../classstdex_1_1parser_1_1basic__iterations.html',1,'stdex::parser']]], - ['basic_5fjson_5fstring_29',['basic_json_string',['../classstdex_1_1parser_1_1basic__json__string.html',1,'stdex::parser']]], - ['basic_5fmixed_5fnumeral_30',['basic_mixed_numeral',['../classstdex_1_1parser_1_1basic__mixed__numeral.html',1,'stdex::parser']]], - ['basic_5fmonetary_5fnumeral_31',['basic_monetary_numeral',['../classstdex_1_1parser_1_1basic__monetary__numeral.html',1,'stdex::parser']]], - ['basic_5fnoop_32',['basic_noop',['../classstdex_1_1parser_1_1basic__noop.html',1,'stdex::parser']]], - ['basic_5fparser_33',['basic_parser',['../classstdex_1_1parser_1_1basic__parser.html',1,'stdex::parser']]], - ['basic_5fparser_3c_20char_20_3e_34',['basic_parser< char >',['../classstdex_1_1parser_1_1basic__parser.html',1,'stdex::parser']]], - ['basic_5fpermutation_35',['basic_permutation',['../classstdex_1_1parser_1_1basic__permutation.html',1,'stdex::parser']]], - ['basic_5fphone_5fnumber_36',['basic_phone_number',['../classstdex_1_1parser_1_1basic__phone__number.html',1,'stdex::parser']]], - ['basic_5fpunct_5fcu_37',['basic_punct_cu',['../classstdex_1_1parser_1_1basic__punct__cu.html',1,'stdex::parser']]], - ['basic_5fpunct_5fcu_3c_20char_20_3e_38',['basic_punct_cu< char >',['../classstdex_1_1parser_1_1basic__punct__cu.html',1,'stdex::parser']]], - ['basic_5froman_5fnumeral_39',['basic_roman_numeral',['../classstdex_1_1parser_1_1basic__roman__numeral.html',1,'stdex::parser']]], - ['basic_5fscientific_5fnumeral_40',['basic_scientific_numeral',['../classstdex_1_1parser_1_1basic__scientific__numeral.html',1,'stdex::parser']]], - ['basic_5fscore_41',['basic_score',['../classstdex_1_1parser_1_1basic__score.html',1,'stdex::parser']]], - ['basic_5fsequence_42',['basic_sequence',['../classstdex_1_1parser_1_1basic__sequence.html',1,'stdex::parser']]], - ['basic_5fset_43',['basic_set',['../classstdex_1_1parser_1_1basic__set.html',1,'stdex::parser']]], - ['basic_5fset_3c_20char_20_3e_44',['basic_set< char >',['../classstdex_1_1parser_1_1basic__set.html',1,'stdex::parser']]], - ['basic_5fsigned_5fnumeral_45',['basic_signed_numeral',['../classstdex_1_1parser_1_1basic__signed__numeral.html',1,'stdex::parser']]], - ['basic_5fspace_5fcu_46',['basic_space_cu',['../classstdex_1_1parser_1_1basic__space__cu.html',1,'stdex::parser']]], - ['basic_5fspace_5fcu_3c_20char_20_3e_47',['basic_space_cu< char >',['../classstdex_1_1parser_1_1basic__space__cu.html',1,'stdex::parser']]], - ['basic_5fspace_5for_5fpunct_5fcu_48',['basic_space_or_punct_cu',['../classstdex_1_1parser_1_1basic__space__or__punct__cu.html',1,'stdex::parser']]], - ['basic_5fspace_5for_5fpunct_5fcu_3c_20char_20_3e_49',['basic_space_or_punct_cu< char >',['../classstdex_1_1parser_1_1basic__space__or__punct__cu.html',1,'stdex::parser']]], - ['basic_5fstring_50',['basic_string',['../classstdex_1_1parser_1_1basic__string.html',1,'stdex::parser']]], - ['basic_5fstring_5fbranch_51',['basic_string_branch',['../classstdex_1_1parser_1_1basic__string__branch.html',1,'stdex::parser']]], - ['basic_5fsys_52',['basic_sys',['../classstdex_1_1stream_1_1basic__sys.html',1,'stdex::stream']]], - ['basic_5ftime_53',['basic_time',['../classstdex_1_1parser_1_1basic__time.html',1,'stdex::parser']]], - ['basic_5furl_54',['basic_url',['../classstdex_1_1parser_1_1basic__url.html',1,'stdex::parser']]], - ['basic_5furl_5fpassword_5fchar_55',['basic_url_password_char',['../classstdex_1_1parser_1_1basic__url__password__char.html',1,'stdex::parser']]], - ['basic_5furl_5fpassword_5fchar_3c_20char_20_3e_56',['basic_url_password_char< char >',['../classstdex_1_1parser_1_1basic__url__password__char.html',1,'stdex::parser']]], - ['basic_5furl_5fpath_57',['basic_url_path',['../classstdex_1_1parser_1_1basic__url__path.html',1,'stdex::parser']]], - ['basic_5furl_5fpath_5fchar_58',['basic_url_path_char',['../classstdex_1_1parser_1_1basic__url__path__char.html',1,'stdex::parser']]], - ['basic_5furl_5fpath_5fchar_3c_20char_20_3e_59',['basic_url_path_char< char >',['../classstdex_1_1parser_1_1basic__url__path__char.html',1,'stdex::parser']]], - ['basic_5furl_5fusername_5fchar_60',['basic_url_username_char',['../classstdex_1_1parser_1_1basic__url__username__char.html',1,'stdex::parser']]], - ['basic_5furl_5fusername_5fchar_3c_20char_20_3e_61',['basic_url_username_char< char >',['../classstdex_1_1parser_1_1basic__url__username__char.html',1,'stdex::parser']]], - ['buf_62',['buf',['../classstdex_1_1base64__enc.html#aea9a31d698c85699d492b095ea569d73',1,'stdex::base64_enc::buf'],['../classstdex_1_1base64__dec.html#a4080daff84dfd499b3a15fe876ada2ca',1,'stdex::base64_dec::buf'],['../classstdex_1_1hex__dec.html#a47a6b05d03e3cd075fe74505675b5126',1,'stdex::hex_dec::buf']]], - ['buffer_63',['buffer',['../classstdex_1_1stream_1_1buffer.html',1,'stdex::stream']]], - ['buffer_5ft_64',['buffer_t',['../structstdex_1_1stream_1_1buffer_1_1buffer__t.html',1,'stdex::stream::buffer']]], - ['buffered_5fsys_65',['buffered_sys',['../classstdex_1_1stream_1_1buffered__sys.html',1,'stdex::stream']]] + ['basic_5fcreditor_5freference_10',['basic_creditor_reference',['../classstdex_1_1parser_1_1basic__creditor__reference.html',1,'stdex::parser']]], + ['basic_5fcu_11',['basic_cu',['../classstdex_1_1parser_1_1basic__cu.html',1,'stdex::parser']]], + ['basic_5fcu_5fset_12',['basic_cu_set',['../classstdex_1_1parser_1_1basic__cu__set.html',1,'stdex::parser']]], + ['basic_5fdate_13',['basic_date',['../classstdex_1_1parser_1_1basic__date.html',1,'stdex::parser']]], + ['basic_5fdns_5fdomain_5fchar_14',['basic_dns_domain_char',['../classstdex_1_1parser_1_1basic__dns__domain__char.html',1,'stdex::parser']]], + ['basic_5fdns_5fdomain_5fchar_3c_20char_20_3e_15',['basic_dns_domain_char< char >',['../classstdex_1_1parser_1_1basic__dns__domain__char.html',1,'stdex::parser']]], + ['basic_5fdns_5fname_16',['basic_dns_name',['../classstdex_1_1parser_1_1basic__dns__name.html',1,'stdex::parser']]], + ['basic_5femail_5faddress_17',['basic_email_address',['../classstdex_1_1parser_1_1basic__email__address.html',1,'stdex::parser']]], + ['basic_5femoticon_18',['basic_emoticon',['../classstdex_1_1parser_1_1basic__emoticon.html',1,'stdex::parser']]], + ['basic_5feol_19',['basic_eol',['../classstdex_1_1parser_1_1basic__eol.html',1,'stdex::parser']]], + ['basic_5ffile_20',['basic_file',['../classstdex_1_1stream_1_1basic__file.html',1,'stdex::stream']]], + ['basic_5ffraction_21',['basic_fraction',['../classstdex_1_1parser_1_1basic__fraction.html',1,'stdex::parser']]], + ['basic_5fiban_22',['basic_iban',['../classstdex_1_1parser_1_1basic__iban.html',1,'stdex::parser']]], + ['basic_5finteger_23',['basic_integer',['../classstdex_1_1parser_1_1basic__integer.html',1,'stdex::parser']]], + ['basic_5finteger10_24',['basic_integer10',['../classstdex_1_1parser_1_1basic__integer10.html',1,'stdex::parser']]], + ['basic_5finteger10ts_25',['basic_integer10ts',['../classstdex_1_1parser_1_1basic__integer10ts.html',1,'stdex::parser']]], + ['basic_5finteger16_26',['basic_integer16',['../classstdex_1_1parser_1_1basic__integer16.html',1,'stdex::parser']]], + ['basic_5fipv4_5faddress_27',['basic_ipv4_address',['../classstdex_1_1parser_1_1basic__ipv4__address.html',1,'stdex::parser']]], + ['basic_5fipv6_5faddress_28',['basic_ipv6_address',['../classstdex_1_1parser_1_1basic__ipv6__address.html',1,'stdex::parser']]], + ['basic_5fipv6_5fscope_5fid_5fchar_29',['basic_ipv6_scope_id_char',['../classstdex_1_1parser_1_1basic__ipv6__scope__id__char.html',1,'stdex::parser']]], + ['basic_5fiterations_30',['basic_iterations',['../classstdex_1_1parser_1_1basic__iterations.html',1,'stdex::parser']]], + ['basic_5fjson_5fstring_31',['basic_json_string',['../classstdex_1_1parser_1_1basic__json__string.html',1,'stdex::parser']]], + ['basic_5fmixed_5fnumeral_32',['basic_mixed_numeral',['../classstdex_1_1parser_1_1basic__mixed__numeral.html',1,'stdex::parser']]], + ['basic_5fmonetary_5fnumeral_33',['basic_monetary_numeral',['../classstdex_1_1parser_1_1basic__monetary__numeral.html',1,'stdex::parser']]], + ['basic_5fnoop_34',['basic_noop',['../classstdex_1_1parser_1_1basic__noop.html',1,'stdex::parser']]], + ['basic_5fparser_35',['basic_parser',['../classstdex_1_1parser_1_1basic__parser.html',1,'stdex::parser']]], + ['basic_5fparser_3c_20char_20_3e_36',['basic_parser< char >',['../classstdex_1_1parser_1_1basic__parser.html',1,'stdex::parser']]], + ['basic_5fpermutation_37',['basic_permutation',['../classstdex_1_1parser_1_1basic__permutation.html',1,'stdex::parser']]], + ['basic_5fphone_5fnumber_38',['basic_phone_number',['../classstdex_1_1parser_1_1basic__phone__number.html',1,'stdex::parser']]], + ['basic_5fpunct_5fcu_39',['basic_punct_cu',['../classstdex_1_1parser_1_1basic__punct__cu.html',1,'stdex::parser']]], + ['basic_5fpunct_5fcu_3c_20char_20_3e_40',['basic_punct_cu< char >',['../classstdex_1_1parser_1_1basic__punct__cu.html',1,'stdex::parser']]], + ['basic_5froman_5fnumeral_41',['basic_roman_numeral',['../classstdex_1_1parser_1_1basic__roman__numeral.html',1,'stdex::parser']]], + ['basic_5fscientific_5fnumeral_42',['basic_scientific_numeral',['../classstdex_1_1parser_1_1basic__scientific__numeral.html',1,'stdex::parser']]], + ['basic_5fscore_43',['basic_score',['../classstdex_1_1parser_1_1basic__score.html',1,'stdex::parser']]], + ['basic_5fsequence_44',['basic_sequence',['../classstdex_1_1parser_1_1basic__sequence.html',1,'stdex::parser']]], + ['basic_5fset_45',['basic_set',['../classstdex_1_1parser_1_1basic__set.html',1,'stdex::parser']]], + ['basic_5fset_3c_20char_20_3e_46',['basic_set< char >',['../classstdex_1_1parser_1_1basic__set.html',1,'stdex::parser']]], + ['basic_5fsi_5freference_47',['basic_si_reference',['../classstdex_1_1parser_1_1basic__si__reference.html',1,'stdex::parser']]], + ['basic_5fsi_5freference_5fdelimiter_48',['basic_si_reference_delimiter',['../classstdex_1_1parser_1_1basic__si__reference__delimiter.html',1,'stdex::parser']]], + ['basic_5fsi_5freference_5fpart_49',['basic_si_reference_part',['../classstdex_1_1parser_1_1basic__si__reference__part.html',1,'stdex::parser']]], + ['basic_5fsigned_5fnumeral_50',['basic_signed_numeral',['../classstdex_1_1parser_1_1basic__signed__numeral.html',1,'stdex::parser']]], + ['basic_5fspace_5fcu_51',['basic_space_cu',['../classstdex_1_1parser_1_1basic__space__cu.html',1,'stdex::parser']]], + ['basic_5fspace_5fcu_3c_20char_20_3e_52',['basic_space_cu< char >',['../classstdex_1_1parser_1_1basic__space__cu.html',1,'stdex::parser']]], + ['basic_5fspace_5for_5fpunct_5fcu_53',['basic_space_or_punct_cu',['../classstdex_1_1parser_1_1basic__space__or__punct__cu.html',1,'stdex::parser']]], + ['basic_5fspace_5for_5fpunct_5fcu_3c_20char_20_3e_54',['basic_space_or_punct_cu< char >',['../classstdex_1_1parser_1_1basic__space__or__punct__cu.html',1,'stdex::parser']]], + ['basic_5fstring_55',['basic_string',['../classstdex_1_1parser_1_1basic__string.html',1,'stdex::parser']]], + ['basic_5fstring_5fbranch_56',['basic_string_branch',['../classstdex_1_1parser_1_1basic__string__branch.html',1,'stdex::parser']]], + ['basic_5fsys_57',['basic_sys',['../classstdex_1_1stream_1_1basic__sys.html',1,'stdex::stream']]], + ['basic_5ftime_58',['basic_time',['../classstdex_1_1parser_1_1basic__time.html',1,'stdex::parser']]], + ['basic_5furl_59',['basic_url',['../classstdex_1_1parser_1_1basic__url.html',1,'stdex::parser']]], + ['basic_5furl_5fpassword_5fchar_60',['basic_url_password_char',['../classstdex_1_1parser_1_1basic__url__password__char.html',1,'stdex::parser']]], + ['basic_5furl_5fpassword_5fchar_3c_20char_20_3e_61',['basic_url_password_char< char >',['../classstdex_1_1parser_1_1basic__url__password__char.html',1,'stdex::parser']]], + ['basic_5furl_5fpath_62',['basic_url_path',['../classstdex_1_1parser_1_1basic__url__path.html',1,'stdex::parser']]], + ['basic_5furl_5fpath_5fchar_63',['basic_url_path_char',['../classstdex_1_1parser_1_1basic__url__path__char.html',1,'stdex::parser']]], + ['basic_5furl_5fpath_5fchar_3c_20char_20_3e_64',['basic_url_path_char< char >',['../classstdex_1_1parser_1_1basic__url__path__char.html',1,'stdex::parser']]], + ['basic_5furl_5fusername_5fchar_65',['basic_url_username_char',['../classstdex_1_1parser_1_1basic__url__username__char.html',1,'stdex::parser']]], + ['basic_5furl_5fusername_5fchar_3c_20char_20_3e_66',['basic_url_username_char< char >',['../classstdex_1_1parser_1_1basic__url__username__char.html',1,'stdex::parser']]], + ['bban_67',['bban',['../classstdex_1_1parser_1_1basic__iban.html#a527b724e495e34938d8e57179e5dbd71',1,'stdex::parser::basic_iban']]], + ['buf_68',['buf',['../classstdex_1_1base64__enc.html#aea9a31d698c85699d492b095ea569d73',1,'stdex::base64_enc::buf'],['../classstdex_1_1base64__dec.html#a4080daff84dfd499b3a15fe876ada2ca',1,'stdex::base64_dec::buf'],['../classstdex_1_1hex__dec.html#a47a6b05d03e3cd075fe74505675b5126',1,'stdex::hex_dec::buf']]], + ['buffer_69',['buffer',['../classstdex_1_1stream_1_1buffer.html',1,'stdex::stream']]], + ['buffer_5ft_70',['buffer_t',['../structstdex_1_1stream_1_1buffer_1_1buffer__t.html',1,'stdex::stream::buffer']]], + ['buffered_5fsys_71',['buffered_sys',['../classstdex_1_1stream_1_1buffered__sys.html',1,'stdex::stream']]] ]; diff --git a/search/all_2.js b/search/all_2.js index 39c5ae9be..44ed506ee 100644 --- a/search/all_2.js +++ b/search/all_2.js @@ -6,15 +6,17 @@ var searchData= ['cancel_3',['cancel',['../classstdex_1_1progress.html#a03380c822297092b3bb9867deee26202',1,'stdex::progress::cancel()'],['../classstdex_1_1global__progress.html#a74a5ea9089ff7b7015ea4a2071f3113e',1,'stdex::global_progress::cancel()']]], ['capacity_4',['capacity',['../classstdex_1_1vector__queue.html#add3d6ed93d3c1471b80351c56639bab7',1,'stdex::vector_queue']]], ['charset_5fencoder_5',['charset_encoder',['../classstdex_1_1charset__encoder.html',1,'stdex']]], - ['clear_6',['clear',['../classstdex_1_1base64__dec.html#a94738b63789489022e0c16063b732305',1,'stdex::base64_dec::clear()'],['../classstdex_1_1vector__queue.html#a93259be5f471580d2f8d7bee41032f9b',1,'stdex::vector_queue::clear()'],['../classstdex_1_1hex__dec.html#a282bf5db0d16b29b12c71b73d3a33cc4',1,'stdex::hex_dec::clear()'],['../classstdex_1_1base64__enc.html#afb6a85176589d9ce1f65ce6355592fe7',1,'stdex::base64_enc::clear()']]], - ['close_7',['close',['../classstdex_1_1sys__object.html#acbb82c6c1fce7ee39518f94b1209b0b8',1,'stdex::sys_object::close(sys_handle h)'],['../classstdex_1_1sys__object.html#ab8c0119bc4958f78f51ef2f3b7c91f66',1,'stdex::sys_object::close()'],['../classstdex_1_1stream_1_1diag__file.html#a4367a6d2840c1a2c5d9ab2ab3483ed2c',1,'stdex::stream::diag_file::close()'],['../classstdex_1_1stream_1_1fifo.html#a29e0a95836f4e2692bea3783acaf692d',1,'stdex::stream::fifo::close()'],['../classstdex_1_1stream_1_1memory__file.html#a4cf33faaf1686335bd3e3a7e72813dd6',1,'stdex::stream::memory_file::close()'],['../classstdex_1_1stream_1_1basic__sys.html#aee56fbeb8b576a4337cb205ae865fafc',1,'stdex::stream::basic_sys::close()'],['../classstdex_1_1stream_1_1cache.html#aa88074bb669bcb654e027b76e32a2799',1,'stdex::stream::cache::close()'],['../classstdex_1_1stream_1_1replicator.html#afa3e2cec6e254e7bb53cc5e1b1ea0f90',1,'stdex::stream::replicator::close()'],['../classstdex_1_1stream_1_1converter.html#a96c368204acf32239318a026762cd22c',1,'stdex::stream::converter::close()'],['../classstdex_1_1stream_1_1basic.html#a5392748c19b5799da94a5fe031f7ec3b',1,'stdex::stream::basic::close()'],['../classstdex_1_1idrec_1_1record.html#a0a91b8bf08dbd79ac40b4361a9faee2a',1,'stdex::idrec::record::close(stdex::stream::basic_file &stream, stdex::stream::foff_t start)'],['../classstdex_1_1idrec_1_1record.html#ae63ba9487daaf8ec39dfe7dd04c13cc9',1,'stdex::idrec::record::close(std::ostream &stream, std::streamoff start)'],['../classstdex_1_1stream_1_1file__window.html#acace60a7ba95a139852f85aa4232bb14',1,'stdex::stream::file_window::close()']]], - ['components_8',['components',['../classstdex_1_1parser_1_1basic__ipv4__address.html#a0dfb21ee671894048c831edef7257931',1,'stdex::parser::basic_ipv4_address::components'],['../classstdex_1_1parser_1_1basic__ipv6__address.html#abe14c21fb1d4cb35c0121ca610e6e87e',1,'stdex::parser::basic_ipv6_address::components']]], - ['const_5fpointer_9',['const_pointer',['../classstdex_1_1vector__queue.html#a0da411250e23047a37c4ac09abfa109d',1,'stdex::vector_queue']]], - ['const_5freference_10',['const_reference',['../classstdex_1_1vector__queue.html#afc37b516c234d4be0102412b28f46562',1,'stdex::vector_queue']]], - ['contains_11',['contains',['../structstdex_1_1interval.html#a1624ca77e8c9cb45cef61f7f8b532222',1,'stdex::interval']]], - ['content_12',['content',['../classstdex_1_1parser_1_1http__quoted__string.html#ab6e413ccf79e9f3dddd35c2a607381dd',1,'stdex::parser::http_quoted_string']]], - ['convert_13',['convert',['../classstdex_1_1charset__encoder.html#ad46b4c97b91eb4185a1424b0d369e37a',1,'stdex::charset_encoder::convert(_In_reads_or_z_opt_(count_src) const T_from *src, size_t count_src)'],['../classstdex_1_1charset__encoder.html#a7d475e52955d3aa1ed70ddfad2447003',1,'stdex::charset_encoder::convert(const T_from *src)'],['../classstdex_1_1charset__encoder.html#a454b31f807f99b77abb78f3793e5a026',1,'stdex::charset_encoder::convert(const std::basic_string< T_from, _Traits_from, _Alloc_from > &src)']]], - ['converter_14',['converter',['../classstdex_1_1stream_1_1converter.html',1,'stdex::stream']]], - ['ctime_15',['ctime',['../classstdex_1_1stream_1_1basic__file.html#a3c02c83246c43ed868dab1dd5a5d698d',1,'stdex::stream::basic_file::ctime()'],['../classstdex_1_1stream_1_1cache.html#a0306f70f169f924f41306c71646c9276',1,'stdex::stream::cache::ctime()'],['../classstdex_1_1stream_1_1file.html#aa54131619fe782de419ed74bab377dd5',1,'stdex::stream::file::ctime()']]], - ['currency_16',['currency',['../classstdex_1_1parser_1_1basic__monetary__numeral.html#a62545d1c49178d4412da46d3cb2eba25',1,'stdex::parser::basic_monetary_numeral']]] + ['check_5fdigits_6',['check_digits',['../classstdex_1_1parser_1_1basic__iban.html#a66ebb27363905e455f7bf6e405d418c4',1,'stdex::parser::basic_iban::check_digits'],['../classstdex_1_1parser_1_1basic__creditor__reference.html#a4885b1b2c4a90041a970323fe8300be3',1,'stdex::parser::basic_creditor_reference::check_digits']]], + ['clear_7',['clear',['../classstdex_1_1base64__enc.html#afb6a85176589d9ce1f65ce6355592fe7',1,'stdex::base64_enc::clear()'],['../classstdex_1_1vector__queue.html#a93259be5f471580d2f8d7bee41032f9b',1,'stdex::vector_queue::clear()'],['../classstdex_1_1hex__dec.html#a282bf5db0d16b29b12c71b73d3a33cc4',1,'stdex::hex_dec::clear()'],['../classstdex_1_1base64__dec.html#a94738b63789489022e0c16063b732305',1,'stdex::base64_dec::clear()']]], + ['close_8',['close',['../classstdex_1_1sys__object.html#acbb82c6c1fce7ee39518f94b1209b0b8',1,'stdex::sys_object::close(sys_handle h)'],['../classstdex_1_1sys__object.html#ab8c0119bc4958f78f51ef2f3b7c91f66',1,'stdex::sys_object::close()'],['../classstdex_1_1stream_1_1diag__file.html#a4367a6d2840c1a2c5d9ab2ab3483ed2c',1,'stdex::stream::diag_file::close()'],['../classstdex_1_1stream_1_1fifo.html#a29e0a95836f4e2692bea3783acaf692d',1,'stdex::stream::fifo::close()'],['../classstdex_1_1stream_1_1memory__file.html#a4cf33faaf1686335bd3e3a7e72813dd6',1,'stdex::stream::memory_file::close()'],['../classstdex_1_1stream_1_1basic__sys.html#aee56fbeb8b576a4337cb205ae865fafc',1,'stdex::stream::basic_sys::close()'],['../classstdex_1_1stream_1_1cache.html#aa88074bb669bcb654e027b76e32a2799',1,'stdex::stream::cache::close()'],['../classstdex_1_1stream_1_1replicator.html#afa3e2cec6e254e7bb53cc5e1b1ea0f90',1,'stdex::stream::replicator::close()'],['../classstdex_1_1stream_1_1converter.html#a96c368204acf32239318a026762cd22c',1,'stdex::stream::converter::close()'],['../classstdex_1_1stream_1_1basic.html#a5392748c19b5799da94a5fe031f7ec3b',1,'stdex::stream::basic::close()'],['../classstdex_1_1idrec_1_1record.html#a0a91b8bf08dbd79ac40b4361a9faee2a',1,'stdex::idrec::record::close(stdex::stream::basic_file &stream, stdex::stream::foff_t start)'],['../classstdex_1_1idrec_1_1record.html#ae63ba9487daaf8ec39dfe7dd04c13cc9',1,'stdex::idrec::record::close(std::ostream &stream, std::streamoff start)'],['../classstdex_1_1stream_1_1file__window.html#acace60a7ba95a139852f85aa4232bb14',1,'stdex::stream::file_window::close()']]], + ['components_9',['components',['../classstdex_1_1parser_1_1basic__ipv4__address.html#a0dfb21ee671894048c831edef7257931',1,'stdex::parser::basic_ipv4_address::components'],['../classstdex_1_1parser_1_1basic__ipv6__address.html#abe14c21fb1d4cb35c0121ca610e6e87e',1,'stdex::parser::basic_ipv6_address::components']]], + ['const_5fpointer_10',['const_pointer',['../classstdex_1_1vector__queue.html#a0da411250e23047a37c4ac09abfa109d',1,'stdex::vector_queue']]], + ['const_5freference_11',['const_reference',['../classstdex_1_1vector__queue.html#afc37b516c234d4be0102412b28f46562',1,'stdex::vector_queue']]], + ['contains_12',['contains',['../structstdex_1_1interval.html#a1624ca77e8c9cb45cef61f7f8b532222',1,'stdex::interval']]], + ['content_13',['content',['../classstdex_1_1parser_1_1http__quoted__string.html#ab6e413ccf79e9f3dddd35c2a607381dd',1,'stdex::parser::http_quoted_string']]], + ['convert_14',['convert',['../classstdex_1_1charset__encoder.html#ad46b4c97b91eb4185a1424b0d369e37a',1,'stdex::charset_encoder::convert(_In_reads_or_z_opt_(count_src) const T_from *src, size_t count_src)'],['../classstdex_1_1charset__encoder.html#a7d475e52955d3aa1ed70ddfad2447003',1,'stdex::charset_encoder::convert(const T_from *src)'],['../classstdex_1_1charset__encoder.html#a454b31f807f99b77abb78f3793e5a026',1,'stdex::charset_encoder::convert(const std::basic_string< T_from, _Traits_from, _Alloc_from > &src)']]], + ['converter_15',['converter',['../classstdex_1_1stream_1_1converter.html',1,'stdex::stream']]], + ['country_16',['country',['../classstdex_1_1parser_1_1basic__iban.html#a558e20a09ecb7796ce1cb02c638aec0a',1,'stdex::parser::basic_iban']]], + ['ctime_17',['ctime',['../classstdex_1_1stream_1_1basic__file.html#a3c02c83246c43ed868dab1dd5a5d698d',1,'stdex::stream::basic_file::ctime()'],['../classstdex_1_1stream_1_1cache.html#a0306f70f169f924f41306c71646c9276',1,'stdex::stream::cache::ctime()'],['../classstdex_1_1stream_1_1file.html#aa54131619fe782de419ed74bab377dd5',1,'stdex::stream::file::ctime()']]], + ['currency_18',['currency',['../classstdex_1_1parser_1_1basic__monetary__numeral.html#a62545d1c49178d4412da46d3cb2eba25',1,'stdex::parser::basic_monetary_numeral']]] ]; diff --git a/search/all_8.js b/search/all_8.js index 89e7d722d..ef11a6f0f 100644 --- a/search/all_8.js +++ b/search/all_8.js @@ -4,5 +4,6 @@ var searchData= ['integer_1',['integer',['../classstdex_1_1parser_1_1basic__mixed__numeral.html#af42e711d277a70c9624864e5f74a0bfd',1,'stdex::parser::basic_mixed_numeral::integer'],['../classstdex_1_1parser_1_1basic__scientific__numeral.html#aff899e847d2b78df90ab367ef824505a',1,'stdex::parser::basic_scientific_numeral::integer'],['../classstdex_1_1parser_1_1basic__monetary__numeral.html#acdbf4ca7d154c8723e8c318000853cce',1,'stdex::parser::basic_monetary_numeral::integer']]], ['interval_2',['interval',['../structstdex_1_1interval.html',1,'stdex::interval< T >'],['../classstdex_1_1parser_1_1basic__parser.html#a0b46b1904e5af116c34a10087a5bc056',1,'stdex::parser::basic_parser::interval'],['../structstdex_1_1interval.html#a9f6c66e8a3fd15c693011216bb45d6b9',1,'stdex::interval::interval() noexcept'],['../structstdex_1_1interval.html#a100a68cd81867cbf1b275cd5ab5d2160',1,'stdex::interval::interval(T x) noexcept'],['../structstdex_1_1interval.html#a41ac8e9fdb33a2dfaae6113006b792d8',1,'stdex::interval::interval(T _start, T _end) noexcept']]], ['interval_3c_20fpos_5ft_20_3e_3',['interval< fpos_t >',['../structstdex_1_1interval.html',1,'stdex']]], - ['interval_3c_20size_5ft_20_3e_4',['interval< size_t >',['../structstdex_1_1interval.html',1,'stdex']]] + ['interval_3c_20size_5ft_20_3e_4',['interval< size_t >',['../structstdex_1_1interval.html',1,'stdex']]], + ['is_5fvalid_5',['is_valid',['../classstdex_1_1parser_1_1basic__iban.html#acfc23c46ecbeef921e7b39a812c07ec7',1,'stdex::parser::basic_iban::is_valid'],['../classstdex_1_1parser_1_1basic__creditor__reference.html#aee8d302b914c5d7d64d2f7ace18d74cc',1,'stdex::parser::basic_creditor_reference::is_valid'],['../classstdex_1_1parser_1_1basic__si__reference.html#a75ec581785b9cfbab1c26ca9e4787b10',1,'stdex::parser::basic_si_reference::is_valid']]] ]; diff --git a/search/all_a.js b/search/all_a.js index 497f98580..d82ffcba1 100644 --- a/search/all_a.js +++ b/search/all_a.js @@ -16,6 +16,7 @@ var searchData= ['m_5fsize_5fmax_13',['m_size_max',['../classstdex_1_1vector__queue.html#a7192dc2991d690b04a2fb24dd6fdc325',1,'stdex::vector_queue']]], ['mapping_14',['mapping',['../structstdex_1_1mapping.html',1,'stdex::mapping< T >'],['../structstdex_1_1mapping.html#a48069d4eb38c276e856d650075f6c3bd',1,'stdex::mapping::mapping(T x)'],['../structstdex_1_1mapping.html#ae72436dbc2b54e2062822cd7772de830',1,'stdex::mapping::mapping(T _from, T _to)'],['../structstdex_1_1mapping.html#a9634b5ef182398e24b61c2ca78cc8e46',1,'stdex::mapping::mapping()']]], ['memory_5ffile_15',['memory_file',['../classstdex_1_1stream_1_1memory__file.html',1,'stdex::stream::memory_file'],['../classstdex_1_1stream_1_1memory__file.html#a0bb7b9759667e810c91b3e58c1771d91',1,'stdex::stream::memory_file::memory_file(const schar_t *filename, int mode)'],['../classstdex_1_1stream_1_1memory__file.html#ad0da8c8758672af312026957e2556b60',1,'stdex::stream::memory_file::memory_file(void *data, size_t size, bool manage=false, state_t state=state_t::ok)'],['../classstdex_1_1stream_1_1memory__file.html#af7fdc0b7ffcd3713487a75cfd9c1704f',1,'stdex::stream::memory_file::memory_file(void *data, size_t size, size_t reserved, bool manage=false, state_t state=state_t::ok)'],['../classstdex_1_1stream_1_1memory__file.html#a6b4b9daa088fb20678a502e81553c745',1,'stdex::stream::memory_file::memory_file(size_t size, state_t state=state_t::ok)']]], - ['mouth_16',['mouth',['../classstdex_1_1parser_1_1basic__emoticon.html#a43d0de6a54546e509807c7c888bb8dc8',1,'stdex::parser::basic_emoticon']]], - ['mtime_17',['mtime',['../classstdex_1_1stream_1_1basic__file.html#ae10432137e01b7ce7c254c2a455c719e',1,'stdex::stream::basic_file::mtime()'],['../classstdex_1_1stream_1_1cache.html#a8350e6c158982e5511da18ed122bf24d',1,'stdex::stream::cache::mtime()'],['../classstdex_1_1stream_1_1file.html#a23e1061f6a9473241ef8af99f6a3f08f',1,'stdex::stream::file::mtime()']]] + ['model_16',['model',['../classstdex_1_1parser_1_1basic__si__reference.html#a934cc4a41d64ca1aec35a58b8558bf2e',1,'stdex::parser::basic_si_reference']]], + ['mouth_17',['mouth',['../classstdex_1_1parser_1_1basic__emoticon.html#a43d0de6a54546e509807c7c888bb8dc8',1,'stdex::parser::basic_emoticon']]], + ['mtime_18',['mtime',['../classstdex_1_1stream_1_1basic__file.html#ae10432137e01b7ce7c254c2a455c719e',1,'stdex::stream::basic_file::mtime()'],['../classstdex_1_1stream_1_1cache.html#a8350e6c158982e5511da18ed122bf24d',1,'stdex::stream::cache::mtime()'],['../classstdex_1_1stream_1_1file.html#a23e1061f6a9473241ef8af99f6a3f08f',1,'stdex::stream::file::mtime()']]] ]; diff --git a/search/all_d.js b/search/all_d.js index d8f9f2591..b8a80c1af 100644 --- a/search/all_d.js +++ b/search/all_d.js @@ -2,15 +2,18 @@ var searchData= [ ['params_0',['params',['../classstdex_1_1parser_1_1http__cookie.html#aa3d227ae38c1f63b445097ca07091616',1,'stdex::parser::http_cookie']]], ['parser_5fcollection_1',['parser_collection',['../classstdex_1_1parser_1_1parser__collection.html',1,'stdex::parser']]], - ['pointer_2',['pointer',['../classstdex_1_1vector__queue.html#abf6db5997ee272e03e8db1696a162148',1,'stdex::vector_queue']]], - ['pop_3',['pop',['../classstdex_1_1ring.html#a6360d8186fa2bda1ef4b4ddbcae93749',1,'stdex::ring']]], - ['pop_5fback_4',['pop_back',['../classstdex_1_1vector__queue.html#abd0fdb316392da76bac13bdd9d176eb6',1,'stdex::vector_queue']]], - ['pop_5ffront_5',['pop_front',['../classstdex_1_1vector__queue.html#adc05fb6cec951f736337dc340996271f',1,'stdex::vector_queue']]], - ['positive_5fexp_5fsign_6',['positive_exp_sign',['../classstdex_1_1parser_1_1basic__scientific__numeral.html#abb5d26d24a7bb58d244b7d51722b117a',1,'stdex::parser::basic_scientific_numeral']]], - ['positive_5fsign_7',['positive_sign',['../classstdex_1_1parser_1_1basic__monetary__numeral.html#a23fedf450adaace6a027c7788e4a8c61',1,'stdex::parser::basic_monetary_numeral::positive_sign'],['../classstdex_1_1parser_1_1basic__signed__numeral.html#ac7c9dde1f5b3600a21c1b7935c0a5caf',1,'stdex::parser::basic_signed_numeral::positive_sign'],['../classstdex_1_1parser_1_1basic__mixed__numeral.html#aee09625077f56e1139e3a6c26e24e93f',1,'stdex::parser::basic_mixed_numeral::positive_sign'],['../classstdex_1_1parser_1_1basic__scientific__numeral.html#a6e6e08dd8ade04c9aa85fba70e12b7c4',1,'stdex::parser::basic_scientific_numeral::positive_sign']]], - ['progress_8',['progress',['../classstdex_1_1progress.html',1,'stdex']]], - ['progress_5fswitcher_9',['progress_switcher',['../classstdex_1_1progress__switcher.html',1,'stdex']]], - ['push_10',['push',['../classstdex_1_1ring.html#ab8b671ab4a84c370bdf8d4d2df7c0d9d',1,'stdex::ring']]], - ['push_5fback_11',['push_back',['../classstdex_1_1stream_1_1replicator.html#a26a983c6d340261ef1c55af0e9916701',1,'stdex::stream::replicator::push_back()'],['../classstdex_1_1vector__queue.html#ab063bf18b16eed7f4d67e0720bcb8f4f',1,'stdex::vector_queue::push_back(const value_type &v)'],['../classstdex_1_1vector__queue.html#a5b39a88669c8b7e21f1ada2aa8993b2e',1,'stdex::vector_queue::push_back(value_type &&v)']]], - ['push_5ffront_12',['push_front',['../classstdex_1_1vector__queue.html#adfc0d837fa11c1203e9c96a1a5c081b9',1,'stdex::vector_queue::push_front(const value_type &v)'],['../classstdex_1_1vector__queue.html#af307e59213be692f7918c3c541923373',1,'stdex::vector_queue::push_front(value_type &&v)']]] + ['part1_2',['part1',['../classstdex_1_1parser_1_1basic__si__reference.html#a6b62cf70186b22e2137d48b6eaf13ef8',1,'stdex::parser::basic_si_reference']]], + ['part2_3',['part2',['../classstdex_1_1parser_1_1basic__si__reference.html#ac55b905766e1021e5822e027c1906a5e',1,'stdex::parser::basic_si_reference']]], + ['part3_4',['part3',['../classstdex_1_1parser_1_1basic__si__reference.html#a214f6289c4587edc648115f0737b129a',1,'stdex::parser::basic_si_reference']]], + ['pointer_5',['pointer',['../classstdex_1_1vector__queue.html#abf6db5997ee272e03e8db1696a162148',1,'stdex::vector_queue']]], + ['pop_6',['pop',['../classstdex_1_1ring.html#a6360d8186fa2bda1ef4b4ddbcae93749',1,'stdex::ring']]], + ['pop_5fback_7',['pop_back',['../classstdex_1_1vector__queue.html#abd0fdb316392da76bac13bdd9d176eb6',1,'stdex::vector_queue']]], + ['pop_5ffront_8',['pop_front',['../classstdex_1_1vector__queue.html#adc05fb6cec951f736337dc340996271f',1,'stdex::vector_queue']]], + ['positive_5fexp_5fsign_9',['positive_exp_sign',['../classstdex_1_1parser_1_1basic__scientific__numeral.html#abb5d26d24a7bb58d244b7d51722b117a',1,'stdex::parser::basic_scientific_numeral']]], + ['positive_5fsign_10',['positive_sign',['../classstdex_1_1parser_1_1basic__monetary__numeral.html#a23fedf450adaace6a027c7788e4a8c61',1,'stdex::parser::basic_monetary_numeral::positive_sign'],['../classstdex_1_1parser_1_1basic__signed__numeral.html#ac7c9dde1f5b3600a21c1b7935c0a5caf',1,'stdex::parser::basic_signed_numeral::positive_sign'],['../classstdex_1_1parser_1_1basic__mixed__numeral.html#aee09625077f56e1139e3a6c26e24e93f',1,'stdex::parser::basic_mixed_numeral::positive_sign'],['../classstdex_1_1parser_1_1basic__scientific__numeral.html#a6e6e08dd8ade04c9aa85fba70e12b7c4',1,'stdex::parser::basic_scientific_numeral::positive_sign']]], + ['progress_11',['progress',['../classstdex_1_1progress.html',1,'stdex']]], + ['progress_5fswitcher_12',['progress_switcher',['../classstdex_1_1progress__switcher.html',1,'stdex']]], + ['push_13',['push',['../classstdex_1_1ring.html#ab8b671ab4a84c370bdf8d4d2df7c0d9d',1,'stdex::ring']]], + ['push_5fback_14',['push_back',['../classstdex_1_1stream_1_1replicator.html#a26a983c6d340261ef1c55af0e9916701',1,'stdex::stream::replicator::push_back()'],['../classstdex_1_1vector__queue.html#ab063bf18b16eed7f4d67e0720bcb8f4f',1,'stdex::vector_queue::push_back(const value_type &v)'],['../classstdex_1_1vector__queue.html#a5b39a88669c8b7e21f1ada2aa8993b2e',1,'stdex::vector_queue::push_back(value_type &&v)']]], + ['push_5ffront_15',['push_front',['../classstdex_1_1vector__queue.html#adfc0d837fa11c1203e9c96a1a5c081b9',1,'stdex::vector_queue::push_front(const value_type &v)'],['../classstdex_1_1vector__queue.html#af307e59213be692f7918c3c541923373',1,'stdex::vector_queue::push_front(value_type &&v)']]] ]; diff --git a/search/all_f.js b/search/all_f.js index cc9b40578..96c0a5579 100644 --- a/search/all_f.js +++ b/search/all_f.js @@ -12,7 +12,7 @@ var searchData= ['readln_9',['readln',['../classstdex_1_1stream_1_1basic.html#a674d87b6ac5ca7b50cb0498a7ffcefcb',1,'stdex::stream::basic::readln(std::basic_string< char, _Traits, _Ax > &str)'],['../classstdex_1_1stream_1_1basic.html#aa8ab653a03de90f7e60242915c3b5378',1,'stdex::stream::basic::readln(std::basic_string< wchar_t, _Traits, _Ax > &wstr)'],['../classstdex_1_1stream_1_1basic.html#ab93d06a993faf3b5f5026c0f5da326a1',1,'stdex::stream::basic::readln(std::basic_string< wchar_t, _Traits, _Ax > &wstr, charset_id charset)']]], ['readln_5fand_5fattach_10',['readln_and_attach',['../classstdex_1_1stream_1_1basic.html#a6e67bf06f20bc1743cd75622c4b83892',1,'stdex::stream::basic::readln_and_attach(std::basic_string< _Elem, _Traits, _Ax > &str)'],['../classstdex_1_1stream_1_1basic.html#a6386d7eb1316122d6403bcb83b7edfc9',1,'stdex::stream::basic::readln_and_attach(std::basic_string< wchar_t, _Traits, _Ax > &wstr, charset_id charset)']]], ['record_11',['record',['../classstdex_1_1idrec_1_1record.html#a611da3801d9e7215324c9a5992a27f39',1,'stdex::idrec::record::record(T &d)'],['../classstdex_1_1idrec_1_1record.html#ab84a09093bd1a2cbf720329b84c6d73b',1,'stdex::idrec::record::record(const T &d)'],['../classstdex_1_1idrec_1_1record.html',1,'stdex::idrec::record< T, T_ID, ID, T_SIZE, ALIGN >']]], - ['reference_12',['reference',['../classstdex_1_1vector__queue.html#a3e8d68368eb5014a2df5b3e26943e28c',1,'stdex::vector_queue']]], + ['reference_12',['reference',['../classstdex_1_1vector__queue.html#a3e8d68368eb5014a2df5b3e26943e28c',1,'stdex::vector_queue::reference'],['../classstdex_1_1parser_1_1basic__creditor__reference.html#a0fe3a5c082dc0424000650eb04124573',1,'stdex::parser::basic_creditor_reference::reference']]], ['region_13',['region',['../structstdex_1_1stream_1_1cache_1_1cache__t.html#ae4bbbd45000cca2b17d32c0d4b3609db',1,'stdex::stream::cache::cache_t']]], ['remove_14',['remove',['../classstdex_1_1stream_1_1replicator.html#a7916a391dfa9484df02b1202c0a03edf',1,'stdex::stream::replicator']]], ['replicator_15',['replicator',['../classstdex_1_1stream_1_1replicator.html',1,'stdex::stream']]], diff --git a/search/classes_1.js b/search/classes_1.js index 9129fc332..a0cda5575 100644 --- a/search/classes_1.js +++ b/search/classes_1.js @@ -9,59 +9,64 @@ var searchData= ['basic_5fbol_6',['basic_bol',['../classstdex_1_1parser_1_1basic__bol.html',1,'stdex::parser']]], ['basic_5fbranch_7',['basic_branch',['../classstdex_1_1parser_1_1basic__branch.html',1,'stdex::parser']]], ['basic_5fchemical_5fformula_8',['basic_chemical_formula',['../classstdex_1_1parser_1_1basic__chemical__formula.html',1,'stdex::parser']]], - ['basic_5fcu_9',['basic_cu',['../classstdex_1_1parser_1_1basic__cu.html',1,'stdex::parser']]], - ['basic_5fcu_5fset_10',['basic_cu_set',['../classstdex_1_1parser_1_1basic__cu__set.html',1,'stdex::parser']]], - ['basic_5fdate_11',['basic_date',['../classstdex_1_1parser_1_1basic__date.html',1,'stdex::parser']]], - ['basic_5fdns_5fdomain_5fchar_12',['basic_dns_domain_char',['../classstdex_1_1parser_1_1basic__dns__domain__char.html',1,'stdex::parser']]], - ['basic_5fdns_5fdomain_5fchar_3c_20char_20_3e_13',['basic_dns_domain_char< char >',['../classstdex_1_1parser_1_1basic__dns__domain__char.html',1,'stdex::parser']]], - ['basic_5fdns_5fname_14',['basic_dns_name',['../classstdex_1_1parser_1_1basic__dns__name.html',1,'stdex::parser']]], - ['basic_5femail_5faddress_15',['basic_email_address',['../classstdex_1_1parser_1_1basic__email__address.html',1,'stdex::parser']]], - ['basic_5femoticon_16',['basic_emoticon',['../classstdex_1_1parser_1_1basic__emoticon.html',1,'stdex::parser']]], - ['basic_5feol_17',['basic_eol',['../classstdex_1_1parser_1_1basic__eol.html',1,'stdex::parser']]], - ['basic_5ffile_18',['basic_file',['../classstdex_1_1stream_1_1basic__file.html',1,'stdex::stream']]], - ['basic_5ffraction_19',['basic_fraction',['../classstdex_1_1parser_1_1basic__fraction.html',1,'stdex::parser']]], - ['basic_5finteger_20',['basic_integer',['../classstdex_1_1parser_1_1basic__integer.html',1,'stdex::parser']]], - ['basic_5finteger10_21',['basic_integer10',['../classstdex_1_1parser_1_1basic__integer10.html',1,'stdex::parser']]], - ['basic_5finteger10ts_22',['basic_integer10ts',['../classstdex_1_1parser_1_1basic__integer10ts.html',1,'stdex::parser']]], - ['basic_5finteger16_23',['basic_integer16',['../classstdex_1_1parser_1_1basic__integer16.html',1,'stdex::parser']]], - ['basic_5fipv4_5faddress_24',['basic_ipv4_address',['../classstdex_1_1parser_1_1basic__ipv4__address.html',1,'stdex::parser']]], - ['basic_5fipv6_5faddress_25',['basic_ipv6_address',['../classstdex_1_1parser_1_1basic__ipv6__address.html',1,'stdex::parser']]], - ['basic_5fipv6_5fscope_5fid_5fchar_26',['basic_ipv6_scope_id_char',['../classstdex_1_1parser_1_1basic__ipv6__scope__id__char.html',1,'stdex::parser']]], - ['basic_5fiterations_27',['basic_iterations',['../classstdex_1_1parser_1_1basic__iterations.html',1,'stdex::parser']]], - ['basic_5fjson_5fstring_28',['basic_json_string',['../classstdex_1_1parser_1_1basic__json__string.html',1,'stdex::parser']]], - ['basic_5fmixed_5fnumeral_29',['basic_mixed_numeral',['../classstdex_1_1parser_1_1basic__mixed__numeral.html',1,'stdex::parser']]], - ['basic_5fmonetary_5fnumeral_30',['basic_monetary_numeral',['../classstdex_1_1parser_1_1basic__monetary__numeral.html',1,'stdex::parser']]], - ['basic_5fnoop_31',['basic_noop',['../classstdex_1_1parser_1_1basic__noop.html',1,'stdex::parser']]], - ['basic_5fparser_32',['basic_parser',['../classstdex_1_1parser_1_1basic__parser.html',1,'stdex::parser']]], - ['basic_5fparser_3c_20char_20_3e_33',['basic_parser< char >',['../classstdex_1_1parser_1_1basic__parser.html',1,'stdex::parser']]], - ['basic_5fpermutation_34',['basic_permutation',['../classstdex_1_1parser_1_1basic__permutation.html',1,'stdex::parser']]], - ['basic_5fphone_5fnumber_35',['basic_phone_number',['../classstdex_1_1parser_1_1basic__phone__number.html',1,'stdex::parser']]], - ['basic_5fpunct_5fcu_36',['basic_punct_cu',['../classstdex_1_1parser_1_1basic__punct__cu.html',1,'stdex::parser']]], - ['basic_5fpunct_5fcu_3c_20char_20_3e_37',['basic_punct_cu< char >',['../classstdex_1_1parser_1_1basic__punct__cu.html',1,'stdex::parser']]], - ['basic_5froman_5fnumeral_38',['basic_roman_numeral',['../classstdex_1_1parser_1_1basic__roman__numeral.html',1,'stdex::parser']]], - ['basic_5fscientific_5fnumeral_39',['basic_scientific_numeral',['../classstdex_1_1parser_1_1basic__scientific__numeral.html',1,'stdex::parser']]], - ['basic_5fscore_40',['basic_score',['../classstdex_1_1parser_1_1basic__score.html',1,'stdex::parser']]], - ['basic_5fsequence_41',['basic_sequence',['../classstdex_1_1parser_1_1basic__sequence.html',1,'stdex::parser']]], - ['basic_5fset_42',['basic_set',['../classstdex_1_1parser_1_1basic__set.html',1,'stdex::parser']]], - ['basic_5fset_3c_20char_20_3e_43',['basic_set< char >',['../classstdex_1_1parser_1_1basic__set.html',1,'stdex::parser']]], - ['basic_5fsigned_5fnumeral_44',['basic_signed_numeral',['../classstdex_1_1parser_1_1basic__signed__numeral.html',1,'stdex::parser']]], - ['basic_5fspace_5fcu_45',['basic_space_cu',['../classstdex_1_1parser_1_1basic__space__cu.html',1,'stdex::parser']]], - ['basic_5fspace_5fcu_3c_20char_20_3e_46',['basic_space_cu< char >',['../classstdex_1_1parser_1_1basic__space__cu.html',1,'stdex::parser']]], - ['basic_5fspace_5for_5fpunct_5fcu_47',['basic_space_or_punct_cu',['../classstdex_1_1parser_1_1basic__space__or__punct__cu.html',1,'stdex::parser']]], - ['basic_5fspace_5for_5fpunct_5fcu_3c_20char_20_3e_48',['basic_space_or_punct_cu< char >',['../classstdex_1_1parser_1_1basic__space__or__punct__cu.html',1,'stdex::parser']]], - ['basic_5fstring_49',['basic_string',['../classstdex_1_1parser_1_1basic__string.html',1,'stdex::parser']]], - ['basic_5fstring_5fbranch_50',['basic_string_branch',['../classstdex_1_1parser_1_1basic__string__branch.html',1,'stdex::parser']]], - ['basic_5fsys_51',['basic_sys',['../classstdex_1_1stream_1_1basic__sys.html',1,'stdex::stream']]], - ['basic_5ftime_52',['basic_time',['../classstdex_1_1parser_1_1basic__time.html',1,'stdex::parser']]], - ['basic_5furl_53',['basic_url',['../classstdex_1_1parser_1_1basic__url.html',1,'stdex::parser']]], - ['basic_5furl_5fpassword_5fchar_54',['basic_url_password_char',['../classstdex_1_1parser_1_1basic__url__password__char.html',1,'stdex::parser']]], - ['basic_5furl_5fpassword_5fchar_3c_20char_20_3e_55',['basic_url_password_char< char >',['../classstdex_1_1parser_1_1basic__url__password__char.html',1,'stdex::parser']]], - ['basic_5furl_5fpath_56',['basic_url_path',['../classstdex_1_1parser_1_1basic__url__path.html',1,'stdex::parser']]], - ['basic_5furl_5fpath_5fchar_57',['basic_url_path_char',['../classstdex_1_1parser_1_1basic__url__path__char.html',1,'stdex::parser']]], - ['basic_5furl_5fpath_5fchar_3c_20char_20_3e_58',['basic_url_path_char< char >',['../classstdex_1_1parser_1_1basic__url__path__char.html',1,'stdex::parser']]], - ['basic_5furl_5fusername_5fchar_59',['basic_url_username_char',['../classstdex_1_1parser_1_1basic__url__username__char.html',1,'stdex::parser']]], - ['basic_5furl_5fusername_5fchar_3c_20char_20_3e_60',['basic_url_username_char< char >',['../classstdex_1_1parser_1_1basic__url__username__char.html',1,'stdex::parser']]], - ['buffer_61',['buffer',['../classstdex_1_1stream_1_1buffer.html',1,'stdex::stream']]], - ['buffer_5ft_62',['buffer_t',['../structstdex_1_1stream_1_1buffer_1_1buffer__t.html',1,'stdex::stream::buffer']]], - ['buffered_5fsys_63',['buffered_sys',['../classstdex_1_1stream_1_1buffered__sys.html',1,'stdex::stream']]] + ['basic_5fcreditor_5freference_9',['basic_creditor_reference',['../classstdex_1_1parser_1_1basic__creditor__reference.html',1,'stdex::parser']]], + ['basic_5fcu_10',['basic_cu',['../classstdex_1_1parser_1_1basic__cu.html',1,'stdex::parser']]], + ['basic_5fcu_5fset_11',['basic_cu_set',['../classstdex_1_1parser_1_1basic__cu__set.html',1,'stdex::parser']]], + ['basic_5fdate_12',['basic_date',['../classstdex_1_1parser_1_1basic__date.html',1,'stdex::parser']]], + ['basic_5fdns_5fdomain_5fchar_13',['basic_dns_domain_char',['../classstdex_1_1parser_1_1basic__dns__domain__char.html',1,'stdex::parser']]], + ['basic_5fdns_5fdomain_5fchar_3c_20char_20_3e_14',['basic_dns_domain_char< char >',['../classstdex_1_1parser_1_1basic__dns__domain__char.html',1,'stdex::parser']]], + ['basic_5fdns_5fname_15',['basic_dns_name',['../classstdex_1_1parser_1_1basic__dns__name.html',1,'stdex::parser']]], + ['basic_5femail_5faddress_16',['basic_email_address',['../classstdex_1_1parser_1_1basic__email__address.html',1,'stdex::parser']]], + ['basic_5femoticon_17',['basic_emoticon',['../classstdex_1_1parser_1_1basic__emoticon.html',1,'stdex::parser']]], + ['basic_5feol_18',['basic_eol',['../classstdex_1_1parser_1_1basic__eol.html',1,'stdex::parser']]], + ['basic_5ffile_19',['basic_file',['../classstdex_1_1stream_1_1basic__file.html',1,'stdex::stream']]], + ['basic_5ffraction_20',['basic_fraction',['../classstdex_1_1parser_1_1basic__fraction.html',1,'stdex::parser']]], + ['basic_5fiban_21',['basic_iban',['../classstdex_1_1parser_1_1basic__iban.html',1,'stdex::parser']]], + ['basic_5finteger_22',['basic_integer',['../classstdex_1_1parser_1_1basic__integer.html',1,'stdex::parser']]], + ['basic_5finteger10_23',['basic_integer10',['../classstdex_1_1parser_1_1basic__integer10.html',1,'stdex::parser']]], + ['basic_5finteger10ts_24',['basic_integer10ts',['../classstdex_1_1parser_1_1basic__integer10ts.html',1,'stdex::parser']]], + ['basic_5finteger16_25',['basic_integer16',['../classstdex_1_1parser_1_1basic__integer16.html',1,'stdex::parser']]], + ['basic_5fipv4_5faddress_26',['basic_ipv4_address',['../classstdex_1_1parser_1_1basic__ipv4__address.html',1,'stdex::parser']]], + ['basic_5fipv6_5faddress_27',['basic_ipv6_address',['../classstdex_1_1parser_1_1basic__ipv6__address.html',1,'stdex::parser']]], + ['basic_5fipv6_5fscope_5fid_5fchar_28',['basic_ipv6_scope_id_char',['../classstdex_1_1parser_1_1basic__ipv6__scope__id__char.html',1,'stdex::parser']]], + ['basic_5fiterations_29',['basic_iterations',['../classstdex_1_1parser_1_1basic__iterations.html',1,'stdex::parser']]], + ['basic_5fjson_5fstring_30',['basic_json_string',['../classstdex_1_1parser_1_1basic__json__string.html',1,'stdex::parser']]], + ['basic_5fmixed_5fnumeral_31',['basic_mixed_numeral',['../classstdex_1_1parser_1_1basic__mixed__numeral.html',1,'stdex::parser']]], + ['basic_5fmonetary_5fnumeral_32',['basic_monetary_numeral',['../classstdex_1_1parser_1_1basic__monetary__numeral.html',1,'stdex::parser']]], + ['basic_5fnoop_33',['basic_noop',['../classstdex_1_1parser_1_1basic__noop.html',1,'stdex::parser']]], + ['basic_5fparser_34',['basic_parser',['../classstdex_1_1parser_1_1basic__parser.html',1,'stdex::parser']]], + ['basic_5fparser_3c_20char_20_3e_35',['basic_parser< char >',['../classstdex_1_1parser_1_1basic__parser.html',1,'stdex::parser']]], + ['basic_5fpermutation_36',['basic_permutation',['../classstdex_1_1parser_1_1basic__permutation.html',1,'stdex::parser']]], + ['basic_5fphone_5fnumber_37',['basic_phone_number',['../classstdex_1_1parser_1_1basic__phone__number.html',1,'stdex::parser']]], + ['basic_5fpunct_5fcu_38',['basic_punct_cu',['../classstdex_1_1parser_1_1basic__punct__cu.html',1,'stdex::parser']]], + ['basic_5fpunct_5fcu_3c_20char_20_3e_39',['basic_punct_cu< char >',['../classstdex_1_1parser_1_1basic__punct__cu.html',1,'stdex::parser']]], + ['basic_5froman_5fnumeral_40',['basic_roman_numeral',['../classstdex_1_1parser_1_1basic__roman__numeral.html',1,'stdex::parser']]], + ['basic_5fscientific_5fnumeral_41',['basic_scientific_numeral',['../classstdex_1_1parser_1_1basic__scientific__numeral.html',1,'stdex::parser']]], + ['basic_5fscore_42',['basic_score',['../classstdex_1_1parser_1_1basic__score.html',1,'stdex::parser']]], + ['basic_5fsequence_43',['basic_sequence',['../classstdex_1_1parser_1_1basic__sequence.html',1,'stdex::parser']]], + ['basic_5fset_44',['basic_set',['../classstdex_1_1parser_1_1basic__set.html',1,'stdex::parser']]], + ['basic_5fset_3c_20char_20_3e_45',['basic_set< char >',['../classstdex_1_1parser_1_1basic__set.html',1,'stdex::parser']]], + ['basic_5fsi_5freference_46',['basic_si_reference',['../classstdex_1_1parser_1_1basic__si__reference.html',1,'stdex::parser']]], + ['basic_5fsi_5freference_5fdelimiter_47',['basic_si_reference_delimiter',['../classstdex_1_1parser_1_1basic__si__reference__delimiter.html',1,'stdex::parser']]], + ['basic_5fsi_5freference_5fpart_48',['basic_si_reference_part',['../classstdex_1_1parser_1_1basic__si__reference__part.html',1,'stdex::parser']]], + ['basic_5fsigned_5fnumeral_49',['basic_signed_numeral',['../classstdex_1_1parser_1_1basic__signed__numeral.html',1,'stdex::parser']]], + ['basic_5fspace_5fcu_50',['basic_space_cu',['../classstdex_1_1parser_1_1basic__space__cu.html',1,'stdex::parser']]], + ['basic_5fspace_5fcu_3c_20char_20_3e_51',['basic_space_cu< char >',['../classstdex_1_1parser_1_1basic__space__cu.html',1,'stdex::parser']]], + ['basic_5fspace_5for_5fpunct_5fcu_52',['basic_space_or_punct_cu',['../classstdex_1_1parser_1_1basic__space__or__punct__cu.html',1,'stdex::parser']]], + ['basic_5fspace_5for_5fpunct_5fcu_3c_20char_20_3e_53',['basic_space_or_punct_cu< char >',['../classstdex_1_1parser_1_1basic__space__or__punct__cu.html',1,'stdex::parser']]], + ['basic_5fstring_54',['basic_string',['../classstdex_1_1parser_1_1basic__string.html',1,'stdex::parser']]], + ['basic_5fstring_5fbranch_55',['basic_string_branch',['../classstdex_1_1parser_1_1basic__string__branch.html',1,'stdex::parser']]], + ['basic_5fsys_56',['basic_sys',['../classstdex_1_1stream_1_1basic__sys.html',1,'stdex::stream']]], + ['basic_5ftime_57',['basic_time',['../classstdex_1_1parser_1_1basic__time.html',1,'stdex::parser']]], + ['basic_5furl_58',['basic_url',['../classstdex_1_1parser_1_1basic__url.html',1,'stdex::parser']]], + ['basic_5furl_5fpassword_5fchar_59',['basic_url_password_char',['../classstdex_1_1parser_1_1basic__url__password__char.html',1,'stdex::parser']]], + ['basic_5furl_5fpassword_5fchar_3c_20char_20_3e_60',['basic_url_password_char< char >',['../classstdex_1_1parser_1_1basic__url__password__char.html',1,'stdex::parser']]], + ['basic_5furl_5fpath_61',['basic_url_path',['../classstdex_1_1parser_1_1basic__url__path.html',1,'stdex::parser']]], + ['basic_5furl_5fpath_5fchar_62',['basic_url_path_char',['../classstdex_1_1parser_1_1basic__url__path__char.html',1,'stdex::parser']]], + ['basic_5furl_5fpath_5fchar_3c_20char_20_3e_63',['basic_url_path_char< char >',['../classstdex_1_1parser_1_1basic__url__path__char.html',1,'stdex::parser']]], + ['basic_5furl_5fusername_5fchar_64',['basic_url_username_char',['../classstdex_1_1parser_1_1basic__url__username__char.html',1,'stdex::parser']]], + ['basic_5furl_5fusername_5fchar_3c_20char_20_3e_65',['basic_url_username_char< char >',['../classstdex_1_1parser_1_1basic__url__username__char.html',1,'stdex::parser']]], + ['buffer_66',['buffer',['../classstdex_1_1stream_1_1buffer.html',1,'stdex::stream']]], + ['buffer_5ft_67',['buffer_t',['../structstdex_1_1stream_1_1buffer_1_1buffer__t.html',1,'stdex::stream::buffer']]], + ['buffered_5fsys_68',['buffered_sys',['../classstdex_1_1stream_1_1buffered__sys.html',1,'stdex::stream']]] ]; diff --git a/search/variables_1.js b/search/variables_1.js index 3a174502b..0e76a7c60 100644 --- a/search/variables_1.js +++ b/search/variables_1.js @@ -1,4 +1,5 @@ var searchData= [ - ['buf_0',['buf',['../classstdex_1_1base64__enc.html#aea9a31d698c85699d492b095ea569d73',1,'stdex::base64_enc::buf'],['../classstdex_1_1base64__dec.html#a4080daff84dfd499b3a15fe876ada2ca',1,'stdex::base64_dec::buf'],['../classstdex_1_1hex__dec.html#a47a6b05d03e3cd075fe74505675b5126',1,'stdex::hex_dec::buf']]] + ['bban_0',['bban',['../classstdex_1_1parser_1_1basic__iban.html#a527b724e495e34938d8e57179e5dbd71',1,'stdex::parser::basic_iban']]], + ['buf_1',['buf',['../classstdex_1_1base64__enc.html#aea9a31d698c85699d492b095ea569d73',1,'stdex::base64_enc::buf'],['../classstdex_1_1base64__dec.html#a4080daff84dfd499b3a15fe876ada2ca',1,'stdex::base64_dec::buf'],['../classstdex_1_1hex__dec.html#a47a6b05d03e3cd075fe74505675b5126',1,'stdex::hex_dec::buf']]] ]; diff --git a/search/variables_2.js b/search/variables_2.js index 0ca660586..ee135351c 100644 --- a/search/variables_2.js +++ b/search/variables_2.js @@ -1,6 +1,8 @@ var searchData= [ - ['components_0',['components',['../classstdex_1_1parser_1_1basic__ipv4__address.html#a0dfb21ee671894048c831edef7257931',1,'stdex::parser::basic_ipv4_address::components'],['../classstdex_1_1parser_1_1basic__ipv6__address.html#abe14c21fb1d4cb35c0121ca610e6e87e',1,'stdex::parser::basic_ipv6_address::components']]], - ['content_1',['content',['../classstdex_1_1parser_1_1http__quoted__string.html#ab6e413ccf79e9f3dddd35c2a607381dd',1,'stdex::parser::http_quoted_string']]], - ['currency_2',['currency',['../classstdex_1_1parser_1_1basic__monetary__numeral.html#a62545d1c49178d4412da46d3cb2eba25',1,'stdex::parser::basic_monetary_numeral']]] + ['check_5fdigits_0',['check_digits',['../classstdex_1_1parser_1_1basic__iban.html#a66ebb27363905e455f7bf6e405d418c4',1,'stdex::parser::basic_iban::check_digits'],['../classstdex_1_1parser_1_1basic__creditor__reference.html#a4885b1b2c4a90041a970323fe8300be3',1,'stdex::parser::basic_creditor_reference::check_digits']]], + ['components_1',['components',['../classstdex_1_1parser_1_1basic__ipv4__address.html#a0dfb21ee671894048c831edef7257931',1,'stdex::parser::basic_ipv4_address::components'],['../classstdex_1_1parser_1_1basic__ipv6__address.html#abe14c21fb1d4cb35c0121ca610e6e87e',1,'stdex::parser::basic_ipv6_address::components']]], + ['content_2',['content',['../classstdex_1_1parser_1_1http__quoted__string.html#ab6e413ccf79e9f3dddd35c2a607381dd',1,'stdex::parser::http_quoted_string']]], + ['country_3',['country',['../classstdex_1_1parser_1_1basic__iban.html#a558e20a09ecb7796ce1cb02c638aec0a',1,'stdex::parser::basic_iban']]], + ['currency_4',['currency',['../classstdex_1_1parser_1_1basic__monetary__numeral.html#a62545d1c49178d4412da46d3cb2eba25',1,'stdex::parser::basic_monetary_numeral']]] ]; diff --git a/search/variables_7.js b/search/variables_7.js index 5f8bdb1dc..fc08e784d 100644 --- a/search/variables_7.js +++ b/search/variables_7.js @@ -1,5 +1,6 @@ var searchData= [ ['integer_0',['integer',['../classstdex_1_1parser_1_1basic__mixed__numeral.html#af42e711d277a70c9624864e5f74a0bfd',1,'stdex::parser::basic_mixed_numeral::integer'],['../classstdex_1_1parser_1_1basic__scientific__numeral.html#aff899e847d2b78df90ab367ef824505a',1,'stdex::parser::basic_scientific_numeral::integer'],['../classstdex_1_1parser_1_1basic__monetary__numeral.html#acdbf4ca7d154c8723e8c318000853cce',1,'stdex::parser::basic_monetary_numeral::integer']]], - ['interval_1',['interval',['../classstdex_1_1parser_1_1basic__parser.html#a0b46b1904e5af116c34a10087a5bc056',1,'stdex::parser::basic_parser']]] + ['interval_1',['interval',['../classstdex_1_1parser_1_1basic__parser.html#a0b46b1904e5af116c34a10087a5bc056',1,'stdex::parser::basic_parser']]], + ['is_5fvalid_2',['is_valid',['../classstdex_1_1parser_1_1basic__iban.html#acfc23c46ecbeef921e7b39a812c07ec7',1,'stdex::parser::basic_iban::is_valid'],['../classstdex_1_1parser_1_1basic__creditor__reference.html#aee8d302b914c5d7d64d2f7ace18d74cc',1,'stdex::parser::basic_creditor_reference::is_valid'],['../classstdex_1_1parser_1_1basic__si__reference.html#a75ec581785b9cfbab1c26ca9e4787b10',1,'stdex::parser::basic_si_reference::is_valid']]] ]; diff --git a/search/variables_9.js b/search/variables_9.js index 5b3a6523d..704e18706 100644 --- a/search/variables_9.js +++ b/search/variables_9.js @@ -14,5 +14,6 @@ var searchData= ['m_5freserved_11',['m_reserved',['../classstdex_1_1stream_1_1memory__file.html#a6aa8c2deeabc66f065c858ba399d911c',1,'stdex::stream::memory_file']]], ['m_5fsize_12',['m_size',['../classstdex_1_1stream_1_1memory__file.html#a41121ff122745e109c1b9851632abce3',1,'stdex::stream::memory_file']]], ['m_5fsize_5fmax_13',['m_size_max',['../classstdex_1_1vector__queue.html#a7192dc2991d690b04a2fb24dd6fdc325',1,'stdex::vector_queue']]], - ['mouth_14',['mouth',['../classstdex_1_1parser_1_1basic__emoticon.html#a43d0de6a54546e509807c7c888bb8dc8',1,'stdex::parser::basic_emoticon']]] + ['model_14',['model',['../classstdex_1_1parser_1_1basic__si__reference.html#a934cc4a41d64ca1aec35a58b8558bf2e',1,'stdex::parser::basic_si_reference']]], + ['mouth_15',['mouth',['../classstdex_1_1parser_1_1basic__emoticon.html#a43d0de6a54546e509807c7c888bb8dc8',1,'stdex::parser::basic_emoticon']]] ]; diff --git a/search/variables_c.js b/search/variables_c.js index a58b60fcf..f7b73d4d3 100644 --- a/search/variables_c.js +++ b/search/variables_c.js @@ -1,6 +1,9 @@ var searchData= [ ['params_0',['params',['../classstdex_1_1parser_1_1http__cookie.html#aa3d227ae38c1f63b445097ca07091616',1,'stdex::parser::http_cookie']]], - ['positive_5fexp_5fsign_1',['positive_exp_sign',['../classstdex_1_1parser_1_1basic__scientific__numeral.html#abb5d26d24a7bb58d244b7d51722b117a',1,'stdex::parser::basic_scientific_numeral']]], - ['positive_5fsign_2',['positive_sign',['../classstdex_1_1parser_1_1basic__signed__numeral.html#ac7c9dde1f5b3600a21c1b7935c0a5caf',1,'stdex::parser::basic_signed_numeral::positive_sign'],['../classstdex_1_1parser_1_1basic__mixed__numeral.html#aee09625077f56e1139e3a6c26e24e93f',1,'stdex::parser::basic_mixed_numeral::positive_sign'],['../classstdex_1_1parser_1_1basic__scientific__numeral.html#a6e6e08dd8ade04c9aa85fba70e12b7c4',1,'stdex::parser::basic_scientific_numeral::positive_sign'],['../classstdex_1_1parser_1_1basic__monetary__numeral.html#a23fedf450adaace6a027c7788e4a8c61',1,'stdex::parser::basic_monetary_numeral::positive_sign']]] + ['part1_1',['part1',['../classstdex_1_1parser_1_1basic__si__reference.html#a6b62cf70186b22e2137d48b6eaf13ef8',1,'stdex::parser::basic_si_reference']]], + ['part2_2',['part2',['../classstdex_1_1parser_1_1basic__si__reference.html#ac55b905766e1021e5822e027c1906a5e',1,'stdex::parser::basic_si_reference']]], + ['part3_3',['part3',['../classstdex_1_1parser_1_1basic__si__reference.html#a214f6289c4587edc648115f0737b129a',1,'stdex::parser::basic_si_reference']]], + ['positive_5fexp_5fsign_4',['positive_exp_sign',['../classstdex_1_1parser_1_1basic__scientific__numeral.html#abb5d26d24a7bb58d244b7d51722b117a',1,'stdex::parser::basic_scientific_numeral']]], + ['positive_5fsign_5',['positive_sign',['../classstdex_1_1parser_1_1basic__signed__numeral.html#ac7c9dde1f5b3600a21c1b7935c0a5caf',1,'stdex::parser::basic_signed_numeral::positive_sign'],['../classstdex_1_1parser_1_1basic__mixed__numeral.html#aee09625077f56e1139e3a6c26e24e93f',1,'stdex::parser::basic_mixed_numeral::positive_sign'],['../classstdex_1_1parser_1_1basic__scientific__numeral.html#a6e6e08dd8ade04c9aa85fba70e12b7c4',1,'stdex::parser::basic_scientific_numeral::positive_sign'],['../classstdex_1_1parser_1_1basic__monetary__numeral.html#a23fedf450adaace6a027c7788e4a8c61',1,'stdex::parser::basic_monetary_numeral::positive_sign']]] ]; diff --git a/search/variables_d.js b/search/variables_d.js index 445f091d6..d51c0ff80 100644 --- a/search/variables_d.js +++ b/search/variables_d.js @@ -2,5 +2,6 @@ var searchData= [ ['read_5flimit_0',['read_limit',['../classstdex_1_1stream_1_1limiter.html#a455a9e38efe1e7473e501dd00fb3d7f0',1,'stdex::stream::limiter']]], ['read_5foffset_1',['read_offset',['../classstdex_1_1stream_1_1window.html#acff67a2931b8f1a85f12806002e7e131',1,'stdex::stream::window']]], - ['region_2',['region',['../structstdex_1_1stream_1_1cache_1_1cache__t.html#ae4bbbd45000cca2b17d32c0d4b3609db',1,'stdex::stream::cache::cache_t']]] + ['reference_2',['reference',['../classstdex_1_1parser_1_1basic__creditor__reference.html#a0fe3a5c082dc0424000650eb04124573',1,'stdex::parser::basic_creditor_reference']]], + ['region_3',['region',['../structstdex_1_1stream_1_1cache_1_1cache__t.html#ae4bbbd45000cca2b17d32c0d4b3609db',1,'stdex::stream::cache::cache_t']]] ]; diff --git a/sgml_8cpp_source.html b/sgml_8cpp_source.html index 40387e24b..1371a98c8 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 b2f7e6e2a..4cea1db25 100644 --- a/sgml_8hpp_source.html +++ b/sgml_8hpp_source.html @@ -773,7 +773,7 @@ $(document).ready(function() { init_codefold(0); });
    diff --git a/sgml__unicode_8hpp_source.html b/sgml__unicode_8hpp_source.html index fac28746c..6888a1b88 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/stream_8cpp_source.html b/stream_8cpp_source.html index d1acf96b4..0df6d1287 100644 --- a/stream_8cpp_source.html +++ b/stream_8cpp_source.html @@ -248,7 +248,7 @@ $(document).ready(function() { init_codefold(0); });
    diff --git a/stream_8hpp_source.html b/stream_8hpp_source.html index c2a1f443b..2b989a0eb 100644 --- a/stream_8hpp_source.html +++ b/stream_8hpp_source.html @@ -3865,7 +3865,7 @@ $(document).ready(function() { init_codefold(0); }); diff --git a/string_8hpp_source.html b/string_8hpp_source.html index 776b62ac2..cd30e9b95 100644 --- a/string_8hpp_source.html +++ b/string_8hpp_source.html @@ -927,7 +927,7 @@ $(document).ready(function() { init_codefold(0); }); diff --git a/structstdex_1_1chrono_1_1aosn__date-members.html b/structstdex_1_1chrono_1_1aosn__date-members.html index f51a410eb..ecc9ba829 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 0a25cb003..6f0e546aa 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 203d4ae8d..5af48b86d 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 94d13c584..e6bb2ea23 100644 --- a/structstdex_1_1chrono_1_1aosn__timestamp.html +++ b/structstdex_1_1chrono_1_1aosn__timestamp.html @@ -197,7 +197,7 @@ static constexpr rep p_wee diff --git a/structstdex_1_1free__locale__delete-members.html b/structstdex_1_1free__locale__delete-members.html index b93f62297..5fb0234f7 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 f1ebad401..0f145c4ce 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_1interval-members.html b/structstdex_1_1interval-members.html index 818f73b6d..f51dc1ae5 100644 --- a/structstdex_1_1interval-members.html +++ b/structstdex_1_1interval-members.html @@ -92,7 +92,7 @@ $(function() { diff --git a/structstdex_1_1interval.html b/structstdex_1_1interval.html index 5056aa2ee..ce6c70e00 100644 --- a/structstdex_1_1interval.html +++ b/structstdex_1_1interval.html @@ -344,7 +344,7 @@ template<class T > diff --git a/structstdex_1_1mapping-members.html b/structstdex_1_1mapping-members.html index 7596d63ab..263080e3f 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 18e17bff0..3d475b4db 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 d6be09537..0622a2a10 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 42f0d8a60..9b2c854d7 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 4d93ea3f1..e5c8e5552 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 f2e3bc098..efb2ab32e 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_1http__factor__more-members.html b/structstdex_1_1parser_1_1http__factor__more-members.html index 099cea45b..d9598e607 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 83bacab07..64b815146 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 78945fc10..816d75dd0 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 5462b7327..4d509e5c0 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_1cache_1_1cache__t-members.html b/structstdex_1_1stream_1_1cache_1_1cache__t-members.html index ac1f4ad2b..ab90fcc2a 100644 --- a/structstdex_1_1stream_1_1cache_1_1cache__t-members.html +++ b/structstdex_1_1stream_1_1cache_1_1cache__t-members.html @@ -90,7 +90,7 @@ $(function() { diff --git a/structstdex_1_1stream_1_1cache_1_1cache__t.html b/structstdex_1_1stream_1_1cache_1_1cache__t.html index 7f3658a9e..b9408f850 100644 --- a/structstdex_1_1stream_1_1cache_1_1cache__t.html +++ b/structstdex_1_1stream_1_1cache_1_1cache__t.html @@ -119,7 +119,7 @@ enum stdex::stream::cache::cache_t::status_t  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 9b01f943a..858bbb4c0 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 431cd2965..028b45144 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/system_8hpp_source.html b/system_8hpp_source.html index e5d270ee3..c105f3115 100644 --- a/system_8hpp_source.html +++ b/system_8hpp_source.html @@ -286,7 +286,7 @@ $(document).ready(function() { init_codefold(0); }); diff --git a/unicode_8cpp_source.html b/unicode_8cpp_source.html index bbedb9224..33e613673 100644 --- a/unicode_8cpp_source.html +++ b/unicode_8cpp_source.html @@ -174,7 +174,7 @@ $(document).ready(function() { init_codefold(0); }); diff --git a/unicode_8hpp_source.html b/unicode_8hpp_source.html index 6dfe22150..31665fe95 100644 --- a/unicode_8hpp_source.html +++ b/unicode_8hpp_source.html @@ -607,7 +607,7 @@ $(document).ready(function() { init_codefold(0); }); diff --git a/vector__queue_8hpp_source.html b/vector__queue_8hpp_source.html index 56ae651b3..3d0b5b8d2 100644 --- a/vector__queue_8hpp_source.html +++ b/vector__queue_8hpp_source.html @@ -451,7 +451,7 @@ $(document).ready(function() { init_codefold(0); });