From 7b7d3eb654b6c1cf9f05ae6a24f0f32f62c0dacb Mon Sep 17 00:00:00 2001 From: rozmansi Date: Fri, 17 Nov 2023 14:18:31 +0000 Subject: [PATCH] deploy: dff646a4f8185f57066d9837431ff6686d1bd51b --- _unit_tests_2compat_8hpp_source.html | 2 +- annotated.html | 334 +- base64_8hpp_source.html | 831 +- chrono_8hpp_source.html | 2 +- classes.html | 44 +- classstdex_1_1base64__dec-members.html | 2 +- classstdex_1_1base64__dec.html | 2 +- classstdex_1_1base64__enc-members.html | 2 +- classstdex_1_1base64__enc.html | 2 +- classstdex_1_1base64__reader-members.html | 2 +- classstdex_1_1base64__reader.html | 2 +- classstdex_1_1base64__writer-members.html | 2 +- classstdex_1_1base64__writer.html | 2 +- classstdex_1_1basic__hash-members.html | 2 +- classstdex_1_1basic__hash.html | 2 +- classstdex_1_1block__hash-members.html | 2 +- classstdex_1_1block__hash.html | 2 +- classstdex_1_1charset__encoder-members.html | 2 +- classstdex_1_1charset__encoder.html | 2 +- classstdex_1_1crc32__hash-members.html | 2 +- classstdex_1_1crc32__hash.html | 2 +- classstdex_1_1global__progress-members.html | 2 +- classstdex_1_1global__progress.html | 2 +- classstdex_1_1hex__dec-members.html | 2 +- classstdex_1_1hex__dec.html | 2 +- classstdex_1_1hex__enc-members.html | 2 +- classstdex_1_1hex__enc.html | 2 +- classstdex_1_1html_1_1comment-members.html | 96 + classstdex_1_1html_1_1comment.html | 141 + classstdex_1_1html_1_1comment.png | Bin 0 -> 534 bytes ...sstdex_1_1html_1_1declaration-members.html | 97 + classstdex_1_1html_1_1declaration.html | 145 + classstdex_1_1html_1_1declaration.png | Bin 0 -> 627 bytes classstdex_1_1html_1_1document-members.html | 113 + classstdex_1_1html_1_1document.html | 203 + classstdex_1_1html_1_1element-members.html | 99 + classstdex_1_1html_1_1element.html | 158 + classstdex_1_1html_1_1element.png | Bin 0 -> 929 bytes ...stdex_1_1html_1_1element__end-members.html | 98 + classstdex_1_1html_1_1element__end.html | 149 + classstdex_1_1html_1_1element__end.png | Bin 0 -> 649 bytes ...dex_1_1html_1_1element__start-members.html | 101 + classstdex_1_1html_1_1element__start.html | 168 + classstdex_1_1html_1_1element__start.png | Bin 0 -> 924 bytes ...sstdex_1_1html_1_1instruction-members.html | 96 + classstdex_1_1html_1_1instruction.html | 141 + classstdex_1_1html_1_1instruction.png | Bin 0 -> 590 bytes classstdex_1_1html_1_1parser-members.html | 116 + classstdex_1_1html_1_1parser.html | 624 + classstdex_1_1html_1_1sequence-members.html | 94 + classstdex_1_1html_1_1sequence.html | 136 + classstdex_1_1html_1_1sequence.png | Bin 0 -> 2057 bytes ...ex_1_1html_1_1starting__token-members.html | 105 + classstdex_1_1html_1_1starting__token.html | 187 + classstdex_1_1html_1_1starting__token.png | Bin 0 -> 1782 bytes ...sstdex_1_1html_1_1text__token-members.html | 102 + classstdex_1_1html_1_1text__token.html | 174 + classstdex_1_1html_1_1text__token.png | Bin 0 -> 1536 bytes classstdex_1_1html_1_1token-members.html | 98 + classstdex_1_1html_1_1token.html | 237 + classstdex_1_1html_1_1token.png | Bin 0 -> 3088 bytes classstdex_1_1html_1_1url__token-members.html | 101 + classstdex_1_1html_1_1url__token.html | 169 + classstdex_1_1html_1_1url__token.png | Bin 0 -> 912 bytes classstdex_1_1idrec_1_1record-members.html | 2 +- classstdex_1_1idrec_1_1record.html | 2 +- classstdex_1_1lazy__progress-members.html | 2 +- classstdex_1_1lazy__progress.html | 2 +- classstdex_1_1md5__hash-members.html | 2 +- classstdex_1_1md5__hash.html | 2 +- ...dex_1_1parser_1_1basic__angle-members.html | 8 +- classstdex_1_1parser_1_1basic__angle.html | 24 +- ...x_1_1parser_1_1basic__any__cu-members.html | 8 +- classstdex_1_1parser_1_1basic__any__cu.html | 24 +- ...stdex_1_1parser_1_1basic__bol-members.html | 8 +- classstdex_1_1parser_1_1basic__bol.html | 24 +- ...ex_1_1parser_1_1basic__branch-members.html | 8 +- classstdex_1_1parser_1_1basic__branch.html | 24 +- ...r_1_1basic__chemical__formula-members.html | 8 +- ...1_1parser_1_1basic__chemical__formula.html | 26 +- ...1_1basic__creditor__reference-members.html | 8 +- ...1parser_1_1basic__creditor__reference.html | 24 +- ..._1_1parser_1_1basic__css__cdc-members.html | 98 + classstdex_1_1parser_1_1basic__css__cdc.html | 145 + classstdex_1_1parser_1_1basic__css__cdc.png | Bin 0 -> 769 bytes ..._1_1parser_1_1basic__css__cdo-members.html | 98 + classstdex_1_1parser_1_1basic__css__cdo.html | 145 + classstdex_1_1parser_1_1basic__css__cdo.png | Bin 0 -> 766 bytes ...parser_1_1basic__css__comment-members.html | 99 + ...tdex_1_1parser_1_1basic__css__comment.html | 182 + ...stdex_1_1parser_1_1basic__css__comment.png | Bin 0 -> 822 bytes ...1parser_1_1basic__css__import-members.html | 99 + ...stdex_1_1parser_1_1basic__css__import.html | 182 + ...sstdex_1_1parser_1_1basic__css__import.png | Bin 0 -> 805 bytes ...1parser_1_1basic__css__string-members.html | 99 + ...stdex_1_1parser_1_1basic__css__string.html | 182 + ...sstdex_1_1parser_1_1basic__css__string.png | Bin 0 -> 808 bytes ..._1_1parser_1_1basic__css__uri-members.html | 99 + classstdex_1_1parser_1_1basic__css__uri.html | 182 + classstdex_1_1parser_1_1basic__css__uri.png | Bin 0 -> 773 bytes ...sstdex_1_1parser_1_1basic__cu-members.html | 8 +- classstdex_1_1parser_1_1basic__cu.html | 24 +- ...x_1_1parser_1_1basic__cu__set-members.html | 10 +- classstdex_1_1parser_1_1basic__cu__set.html | 30 +- ...tdex_1_1parser_1_1basic__date-members.html | 8 +- classstdex_1_1parser_1_1basic__date.html | 24 +- ...r_1_1basic__dns__domain__char-members.html | 8 +- ...1_1parser_1_1basic__dns__domain__char.html | 24 +- ...1_1parser_1_1basic__dns__name-members.html | 8 +- classstdex_1_1parser_1_1basic__dns__name.html | 24 +- ...rser_1_1basic__email__address-members.html | 8 +- ...ex_1_1parser_1_1basic__email__address.html | 24 +- ..._1_1parser_1_1basic__emoticon-members.html | 8 +- classstdex_1_1parser_1_1basic__emoticon.html | 24 +- ...stdex_1_1parser_1_1basic__eol-members.html | 8 +- classstdex_1_1parser_1_1basic__eol.html | 24 +- ..._1_1parser_1_1basic__fraction-members.html | 8 +- classstdex_1_1parser_1_1basic__fraction.html | 24 +- ...__declaration__condition__end-members.html | 98 + ...ic__html__declaration__condition__end.html | 145 + ...sic__html__declaration__condition__end.png | Bin 0 -> 1072 bytes ...declaration__condition__start-members.html | 99 + ...__html__declaration__condition__start.html | 181 + ...c__html__declaration__condition__start.png | Bin 0 -> 1076 bytes ...1parser_1_1basic__html__ident-members.html | 98 + ...stdex_1_1parser_1_1basic__html__ident.html | 145 + ...sstdex_1_1parser_1_1basic__html__ident.png | Bin 0 -> 807 bytes ...1_1parser_1_1basic__html__tag-members.html | 104 + classstdex_1_1parser_1_1basic__html__tag.html | 200 + classstdex_1_1parser_1_1basic__html__tag.png | Bin 0 -> 807 bytes ...1parser_1_1basic__html__value-members.html | 99 + ...stdex_1_1parser_1_1basic__html__value.html | 182 + ...sstdex_1_1parser_1_1basic__html__value.png | Bin 0 -> 814 bytes ...tdex_1_1parser_1_1basic__iban-members.html | 8 +- classstdex_1_1parser_1_1basic__iban.html | 24 +- ...x_1_1parser_1_1basic__integer-members.html | 8 +- classstdex_1_1parser_1_1basic__integer.html | 20 +- ...1_1parser_1_1basic__integer10-members.html | 8 +- classstdex_1_1parser_1_1basic__integer10.html | 24 +- ...1parser_1_1basic__integer10ts-members.html | 8 +- ...stdex_1_1parser_1_1basic__integer10ts.html | 24 +- ...1_1parser_1_1basic__integer16-members.html | 8 +- classstdex_1_1parser_1_1basic__integer16.html | 24 +- ...arser_1_1basic__ipv4__address-members.html | 8 +- ...dex_1_1parser_1_1basic__ipv4__address.html | 24 +- ...arser_1_1basic__ipv6__address-members.html | 8 +- ...dex_1_1parser_1_1basic__ipv6__address.html | 24 +- ...1basic__ipv6__scope__id__char-members.html | 8 +- ...arser_1_1basic__ipv6__scope__id__char.html | 24 +- ..._1parser_1_1basic__iterations-members.html | 10 +- ...sstdex_1_1parser_1_1basic__iterations.html | 30 +- ...parser_1_1basic__json__string-members.html | 8 +- ...tdex_1_1parser_1_1basic__json__string.html | 26 +- ..._1parser_1_1basic__mime__type-members.html | 101 + ...sstdex_1_1parser_1_1basic__mime__type.html | 190 + classstdex_1_1parser_1_1basic__mime__type.png | Bin 0 -> 822 bytes ...rser_1_1basic__mixed__numeral-members.html | 8 +- ...ex_1_1parser_1_1basic__mixed__numeral.html | 24 +- ...r_1_1basic__monetary__numeral-members.html | 8 +- ...1_1parser_1_1basic__monetary__numeral.html | 24 +- ...tdex_1_1parser_1_1basic__noop-members.html | 8 +- classstdex_1_1parser_1_1basic__noop.html | 24 +- ...ex_1_1parser_1_1basic__parser-members.html | 8 +- classstdex_1_1parser_1_1basic__parser.html | 146 +- classstdex_1_1parser_1_1basic__parser.png | Bin 33191 -> 51251 bytes ...1parser_1_1basic__permutation-members.html | 10 +- ...stdex_1_1parser_1_1basic__permutation.html | 30 +- ...arser_1_1basic__phone__number-members.html | 8 +- ...dex_1_1parser_1_1basic__phone__number.html | 24 +- ...1_1parser_1_1basic__punct__cu-members.html | 8 +- classstdex_1_1parser_1_1basic__punct__cu.html | 24 +- ...rser_1_1basic__roman__numeral-members.html | 8 +- ...ex_1_1parser_1_1basic__roman__numeral.html | 24 +- ...1_1basic__scientific__numeral-members.html | 8 +- ...1parser_1_1basic__scientific__numeral.html | 24 +- ...dex_1_1parser_1_1basic__score-members.html | 8 +- classstdex_1_1parser_1_1basic__score.html | 24 +- ..._1_1parser_1_1basic__sequence-members.html | 8 +- classstdex_1_1parser_1_1basic__sequence.html | 24 +- ...stdex_1_1parser_1_1basic__set-members.html | 8 +- classstdex_1_1parser_1_1basic__set.html | 24 +- ...arser_1_1basic__si__reference-members.html | 8 +- ...dex_1_1parser_1_1basic__si__reference.html | 24 +- ...sic__si__reference__delimiter-members.html | 8 +- ...er_1_1basic__si__reference__delimiter.html | 24 +- ...1_1basic__si__reference__part-members.html | 8 +- ...1parser_1_1basic__si__reference__part.html | 24 +- ...ser_1_1basic__signed__numeral-members.html | 8 +- ...x_1_1parser_1_1basic__signed__numeral.html | 24 +- ...1_1parser_1_1basic__space__cu-members.html | 8 +- classstdex_1_1parser_1_1basic__space__cu.html | 24 +- ..._1basic__space__or__punct__cu-members.html | 8 +- ...parser_1_1basic__space__or__punct__cu.html | 24 +- ...ex_1_1parser_1_1basic__string-members.html | 10 +- classstdex_1_1parser_1_1basic__string.html | 30 +- ...rser_1_1basic__string__branch-members.html | 8 +- ...ex_1_1parser_1_1basic__string__branch.html | 18 +- ...tdex_1_1parser_1_1basic__time-members.html | 8 +- classstdex_1_1parser_1_1basic__time.html | 24 +- ...stdex_1_1parser_1_1basic__url-members.html | 8 +- classstdex_1_1parser_1_1basic__url.html | 24 +- ...1_1basic__url__password__char-members.html | 8 +- ...1parser_1_1basic__url__password__char.html | 24 +- ...1_1parser_1_1basic__url__path-members.html | 8 +- classstdex_1_1parser_1_1basic__url__path.html | 24 +- ...ser_1_1basic__url__path__char-members.html | 8 +- ...x_1_1parser_1_1basic__url__path__char.html | 24 +- ...1_1basic__url__username__char-members.html | 8 +- ...1parser_1_1basic__url__username__char.html | 24 +- ...tdex_1_1parser_1_1http__agent-members.html | 4 +- classstdex_1_1parser_1_1http__agent.html | 24 +- ..._1_1parser_1_1http__any__type-members.html | 4 +- classstdex_1_1parser_1_1http__any__type.html | 24 +- ...x_1_1parser_1_1http__asterisk-members.html | 4 +- classstdex_1_1parser_1_1http__asterisk.html | 24 +- ...dex_1_1parser_1_1http__cookie-members.html | 4 +- classstdex_1_1parser_1_1http__cookie.html | 24 +- ...er_1_1http__cookie__parameter-members.html | 4 +- ..._1_1parser_1_1http__cookie__parameter.html | 24 +- ...dex_1_1parser_1_1http__header-members.html | 4 +- classstdex_1_1parser_1_1http__header.html | 24 +- ...x_1_1parser_1_1http__language-members.html | 4 +- classstdex_1_1parser_1_1http__language.html | 24 +- ..._1parser_1_1http__line__break-members.html | 4 +- ...sstdex_1_1parser_1_1http__line__break.html | 24 +- ...1parser_1_1http__media__range-members.html | 4 +- ...stdex_1_1parser_1_1http__media__range.html | 24 +- ..._1parser_1_1http__media__type-members.html | 4 +- ...sstdex_1_1parser_1_1http__media__type.html | 24 +- ..._1_1parser_1_1http__parameter-members.html | 4 +- classstdex_1_1parser_1_1http__parameter.html | 24 +- ...x_1_1parser_1_1http__protocol-members.html | 4 +- classstdex_1_1parser_1_1http__protocol.html | 24 +- ...arser_1_1http__quoted__string-members.html | 4 +- ...dex_1_1parser_1_1http__quoted__string.html | 24 +- ...ex_1_1parser_1_1http__request-members.html | 4 +- classstdex_1_1parser_1_1http__request.html | 24 +- ...tdex_1_1parser_1_1http__space-members.html | 4 +- classstdex_1_1parser_1_1http__space.html | 24 +- ...1_1parser_1_1http__text__char-members.html | 4 +- classstdex_1_1parser_1_1http__text__char.html | 24 +- ...tdex_1_1parser_1_1http__token-members.html | 4 +- classstdex_1_1parser_1_1http__token.html | 24 +- ...sstdex_1_1parser_1_1http__url-members.html | 4 +- classstdex_1_1parser_1_1http__url.html | 24 +- ...arser_1_1http__url__parameter-members.html | 4 +- ...dex_1_1parser_1_1http__url__parameter.html | 24 +- ..._1_1parser_1_1http__url__path-members.html | 4 +- classstdex_1_1parser_1_1http__url__path.html | 24 +- ...r_1_1http__url__path__segment-members.html | 4 +- ...1_1parser_1_1http__url__path__segment.html | 24 +- ..._1_1parser_1_1http__url__port-members.html | 4 +- classstdex_1_1parser_1_1http__url__port.html | 24 +- ..._1parser_1_1http__url__server-members.html | 4 +- ...sstdex_1_1parser_1_1http__url__server.html | 24 +- ...tdex_1_1parser_1_1http__value-members.html | 4 +- classstdex_1_1parser_1_1http__value.html | 24 +- ...er_1_1http__value__collection-members.html | 4 +- ..._1_1parser_1_1http__value__collection.html | 8 +- ...dex_1_1parser_1_1http__weight-members.html | 4 +- classstdex_1_1parser_1_1http__weight.html | 24 +- ...rser_1_1http__weighted__value-members.html | 4 +- ...ex_1_1parser_1_1http__weighted__value.html | 24 +- ...1parser_1_1parser__collection-members.html | 8 +- ...stdex_1_1parser_1_1parser__collection.html | 20 +- ...ex_1_1parser_1_1sgml__any__cp-members.html | 10 +- classstdex_1_1parser_1_1sgml__any__cp.html | 30 +- classstdex_1_1parser_1_1sgml__cp-members.html | 6 +- classstdex_1_1parser_1_1sgml__cp.html | 30 +- ...ex_1_1parser_1_1sgml__cp__set-members.html | 12 +- classstdex_1_1parser_1_1sgml__cp__set.html | 36 +- ...er_1_1sgml__dns__domain__char-members.html | 10 +- ..._1_1parser_1_1sgml__dns__domain__char.html | 30 +- ..._1sgml__ipv6__scope__id__char-members.html | 4 +- ...parser_1_1sgml__ipv6__scope__id__char.html | 24 +- ..._1_1parser_1_1sgml__punct__cp-members.html | 10 +- classstdex_1_1parser_1_1sgml__punct__cp.html | 30 +- ..._1_1parser_1_1sgml__space__cp-members.html | 10 +- classstdex_1_1parser_1_1sgml__space__cp.html | 30 +- ...1_1sgml__space__or__punct__cp-members.html | 10 +- ...1parser_1_1sgml__space__or__punct__cp.html | 30 +- ...dex_1_1parser_1_1sgml__string-members.html | 6 +- classstdex_1_1parser_1_1sgml__string.html | 30 +- ..._1_1sgml__url__password__char-members.html | 10 +- ..._1parser_1_1sgml__url__password__char.html | 30 +- ...rser_1_1sgml__url__path__char-members.html | 10 +- ...ex_1_1parser_1_1sgml__url__path__char.html | 30 +- ..._1_1sgml__url__username__char-members.html | 10 +- ..._1parser_1_1sgml__url__username__char.html | 30 +- classstdex_1_1pool-members.html | 2 +- classstdex_1_1pool.html | 2 +- classstdex_1_1progress-members.html | 2 +- classstdex_1_1progress.html | 2 +- classstdex_1_1progress__switcher-members.html | 2 +- classstdex_1_1progress__switcher.html | 2 +- classstdex_1_1ring-members.html | 2 +- classstdex_1_1ring.html | 2 +- classstdex_1_1sha1__hash-members.html | 2 +- classstdex_1_1sha1__hash.html | 2 +- classstdex_1_1spinlock-members.html | 2 +- classstdex_1_1spinlock.html | 2 +- ...ex_1_1stream_1_1async__reader-members.html | 2 +- classstdex_1_1stream_1_1async__reader.html | 2 +- ...ex_1_1stream_1_1async__writer-members.html | 2 +- classstdex_1_1stream_1_1async__writer.html | 2 +- classstdex_1_1stream_1_1basic-members.html | 2 +- classstdex_1_1stream_1_1basic.html | 2 +- ...tdex_1_1stream_1_1basic__file-members.html | 2 +- classstdex_1_1stream_1_1basic__file.html | 2 +- ...stdex_1_1stream_1_1basic__sys-members.html | 2 +- classstdex_1_1stream_1_1basic__sys.html | 2 +- classstdex_1_1stream_1_1buffer-members.html | 2 +- classstdex_1_1stream_1_1buffer.html | 2 +- ...ex_1_1stream_1_1buffered__sys-members.html | 2 +- classstdex_1_1stream_1_1buffered__sys.html | 2 +- classstdex_1_1stream_1_1cache-members.html | 2 +- classstdex_1_1stream_1_1cache.html | 2 +- ...dex_1_1stream_1_1cached__file-members.html | 2 +- classstdex_1_1stream_1_1cached__file.html | 2 +- ...sstdex_1_1stream_1_1converter-members.html | 2 +- classstdex_1_1stream_1_1converter.html | 2 +- ...stdex_1_1stream_1_1diag__file-members.html | 2 +- classstdex_1_1stream_1_1diag__file.html | 2 +- classstdex_1_1stream_1_1fifo-members.html | 2 +- classstdex_1_1stream_1_1fifo.html | 2 +- classstdex_1_1stream_1_1file-members.html | 2 +- classstdex_1_1stream_1_1file.html | 2 +- ...dex_1_1stream_1_1file__window-members.html | 2 +- classstdex_1_1stream_1_1file__window.html | 2 +- classstdex_1_1stream_1_1limiter-members.html | 2 +- classstdex_1_1stream_1_1limiter.html | 2 +- ...dex_1_1stream_1_1memory__file-members.html | 2 +- classstdex_1_1stream_1_1memory__file.html | 2 +- ...stdex_1_1stream_1_1replicator-members.html | 2 +- classstdex_1_1stream_1_1replicator.html | 2 +- ...tream_1_1replicator_1_1worker-members.html | 2 +- ...dex_1_1stream_1_1replicator_1_1worker.html | 2 +- classstdex_1_1stream_1_1socket-members.html | 2 +- classstdex_1_1stream_1_1socket.html | 2 +- classstdex_1_1stream_1_1window-members.html | 2 +- classstdex_1_1stream_1_1window.html | 2 +- classstdex_1_1stream__hasher-members.html | 2 +- classstdex_1_1stream__hasher.html | 2 +- classstdex_1_1sys__object-members.html | 2 +- classstdex_1_1sys__object.html | 2 +- classstdex_1_1user__cancelled-members.html | 2 +- classstdex_1_1user__cancelled.html | 2 +- classstdex_1_1vector__queue-members.html | 2 +- classstdex_1_1vector__queue.html | 2 +- classstdex_1_1watchdog-members.html | 2 +- classstdex_1_1watchdog.html | 2 +- dir_4be4f7b278e009bf0f1906cf31fb73bd.html | 2 +- dir_d44c64559bbebec7f509842c48db8b23.html | 2 +- dir_fca3c47b2ea228727bd6729832f89576.html | 4 +- endian_8hpp_source.html | 2 +- exception_8hpp_source.html | 2 +- files.html | 71 +- functions.html | 11 +- functions_b.html | 3 +- functions_c.html | 8 +- functions_d.html | 4 +- functions_e.html | 7 +- functions_f.html | 6 +- functions_func.html | 8 +- functions_func_b.html | 2 +- functions_func_c.html | 4 +- functions_func_d.html | 2 +- functions_func_e.html | 3 +- functions_func_f.html | 6 +- functions_func_g.html | 2 +- functions_func_h.html | 2 +- functions_func_i.html | 19 +- functions_func_l.html | 3 +- functions_func_m.html | 5 +- functions_func_n.html | 2 +- functions_func_o.html | 2 +- functions_func_p.html | 4 +- functions_func_q.html | 2 +- functions_func_r.html | 5 +- functions_func_s.html | 5 +- functions_func_t.html | 3 +- functions_func_u.html | 2 +- functions_func_v.html | 2 +- functions_func_w.html | 2 +- functions_func_~.html | 2 +- functions_g.html | 2 +- functions_h.html | 2 +- functions_i.html | 21 +- functions_l.html | 3 +- functions_m.html | 25 +- functions_n.html | 4 +- functions_o.html | 2 +- functions_p.html | 5 +- functions_q.html | 2 +- functions_r.html | 5 +- functions_rela.html | 2 +- functions_s.html | 9 +- functions_t.html | 8 +- functions_type.html | 2 +- functions_u.html | 3 +- functions_v.html | 4 +- functions_vars.html | 57 +- functions_w.html | 3 +- functions_~.html | 2 +- hash_8cpp_source.html | 2 +- hash_8hpp_source.html | 2 +- hex_8hpp_source.html | 2 +- hierarchy.html | 313 +- html_8hpp_source.html | 2465 +++ idrec_8hpp_source.html | 2 +- include_2stdex_2compat_8hpp_source.html | 2 +- index.html | 4 +- interval_8hpp_source.html | 2 +- locale_8hpp_source.html | 4 +- mapping_8hpp_source.html | 2 +- math_8cpp_source.html | 2 +- math_8hpp_source.html | 2 +- memory_8hpp_source.html | 2 +- menudata.js | 1 + parser_8cpp_source.html | 568 +- parser_8hpp_source.html | 15681 ++++++++-------- pch_8hpp_source.html | 55 +- pool_8hpp_source.html | 2 +- progress_8hpp_source.html | 2 +- ring_8cpp_source.html | 2 +- ring_8hpp_source.html | 2 +- search/all_0.js | 31 +- search/all_1.js | 178 +- search/all_10.js | 92 +- search/all_11.js | 22 +- search/all_12.js | 4 +- search/all_13.js | 2 +- search/all_14.js | 25 +- search/all_2.js | 33 +- search/all_3.js | 23 +- search/all_4.js | 28 +- search/all_5.js | 6 +- search/all_7.js | 57 +- search/all_8.js | 37 +- search/all_9.js | 5 +- search/all_a.js | 75 +- search/all_b.js | 4 +- search/all_d.js | 37 +- search/all_f.js | 13 +- search/classes_1.js | 167 +- search/classes_10.js | 5 +- search/classes_11.js | 4 + search/classes_12.js | 6 + search/classes_2.js | 5 +- search/classes_3.js | 5 +- search/classes_4.js | 9 +- search/classes_5.js | 5 +- search/classes_6.js | 31 +- search/classes_7.js | 34 +- search/classes_8.js | 7 +- search/classes_9.js | 6 +- search/classes_a.js | 7 +- search/classes_b.js | 7 +- search/classes_c.js | 10 +- search/classes_d.js | 24 +- search/classes_e.js | 23 +- search/classes_f.js | 4 +- search/functions_0.js | 14 +- search/functions_10.js | 21 +- search/functions_11.js | 7 +- search/functions_2.js | 2 +- search/functions_4.js | 3 +- search/functions_5.js | 2 +- search/functions_8.js | 19 +- search/functions_9.js | 5 +- search/functions_a.js | 9 +- search/functions_d.js | 14 +- search/functions_f.js | 7 +- search/searchdata.js | 4 +- search/variables_0.js | 9 +- search/variables_1.js | 5 +- search/variables_10.js | 3 +- search/variables_11.js | 4 +- search/variables_12.js | 6 + search/variables_2.js | 12 +- search/variables_3.js | 2 +- search/variables_4.js | 10 +- search/variables_7.js | 2 +- search/variables_9.js | 61 +- search/variables_a.js | 2 +- search/variables_c.js | 11 +- search/variables_e.js | 8 +- search/variables_f.js | 5 +- sgml_8cpp_source.html | 36 +- sgml_8hpp_source.html | 979 +- sgml__unicode_8hpp_source.html | 2 +- socket_8hpp_source.html | 2 +- spinlock_8hpp_source.html | 2 +- stream_8cpp_source.html | 2 +- stream_8hpp_source.html | 4 +- string_8hpp_source.html | 1803 +- ...stdex_1_1chrono_1_1aosn__date-members.html | 2 +- structstdex_1_1chrono_1_1aosn__date.html | 2 +- ..._1_1chrono_1_1aosn__timestamp-members.html | 2 +- structstdex_1_1chrono_1_1aosn__timestamp.html | 2 +- ...stdex_1_1free__locale__delete-members.html | 2 +- structstdex_1_1free__locale__delete.html | 2 +- ...ex_1_1html_1_1element__traits-members.html | 108 + structstdex_1_1html_1_1element__traits.html | 864 + structstdex_1_1html_1_1entity-members.html | 91 + structstdex_1_1html_1_1entity.html | 112 + ...ex_1_1html_1_1inserted__token-members.html | 93 + structstdex_1_1html_1_1inserted__token.html | 119 + structstdex_1_1interval-members.html | 2 +- structstdex_1_1interval.html | 2 +- structstdex_1_1mapping-members.html | 2 +- structstdex_1_1mapping.html | 2 +- structstdex_1_1no__delete-members.html | 2 +- structstdex_1_1no__delete.html | 2 +- ..._1_1no__delete_3_01_t_0f_0e_4-members.html | 2 +- structstdex_1_1no__delete_3_01_t_0f_0e_4.html | 2 +- ..._1_1parser_1_1html__attribute-members.html | 91 + structstdex_1_1parser_1_1html__attribute.html | 111 + ...1parser_1_1http__factor__more-members.html | 2 +- ...stdex_1_1parser_1_1http__factor__more.html | 4 +- ...stream_1_1buffer_1_1buffer__t-members.html | 2 +- ...tdex_1_1stream_1_1buffer_1_1buffer__t.html | 2 +- ..._1_1stream_1_1fifo_1_1node__t-members.html | 2 +- structstdex_1_1stream_1_1fifo_1_1node__t.html | 2 +- structstdex_1_1sys__info__t-members.html | 2 +- structstdex_1_1sys__info__t.html | 2 +- sys__info_8hpp_source.html | 2 +- system_8hpp_source.html | 2 +- unicode_8cpp_source.html | 4 +- unicode_8hpp_source.html | 1082 +- unionstdex_1_1md2__t-members.html | 2 +- unionstdex_1_1md2__t.html | 2 +- unionstdex_1_1sha256__t-members.html | 2 +- unionstdex_1_1sha256__t.html | 2 +- unionstdex_1_1sha__t-members.html | 2 +- unionstdex_1_1sha__t.html | 2 +- uuid_8hpp_source.html | 2 +- vector__queue_8hpp_source.html | 2 +- watchdog_8cpp_source.html | 2 +- watchdog_8hpp_source.html | 2 +- windows_8h_source.html | 2 +- 541 files changed, 25342 insertions(+), 12611 deletions(-) create mode 100644 classstdex_1_1html_1_1comment-members.html create mode 100644 classstdex_1_1html_1_1comment.html create mode 100644 classstdex_1_1html_1_1comment.png create mode 100644 classstdex_1_1html_1_1declaration-members.html create mode 100644 classstdex_1_1html_1_1declaration.html create mode 100644 classstdex_1_1html_1_1declaration.png create mode 100644 classstdex_1_1html_1_1document-members.html create mode 100644 classstdex_1_1html_1_1document.html create mode 100644 classstdex_1_1html_1_1element-members.html create mode 100644 classstdex_1_1html_1_1element.html create mode 100644 classstdex_1_1html_1_1element.png create mode 100644 classstdex_1_1html_1_1element__end-members.html create mode 100644 classstdex_1_1html_1_1element__end.html create mode 100644 classstdex_1_1html_1_1element__end.png create mode 100644 classstdex_1_1html_1_1element__start-members.html create mode 100644 classstdex_1_1html_1_1element__start.html create mode 100644 classstdex_1_1html_1_1element__start.png create mode 100644 classstdex_1_1html_1_1instruction-members.html create mode 100644 classstdex_1_1html_1_1instruction.html create mode 100644 classstdex_1_1html_1_1instruction.png create mode 100644 classstdex_1_1html_1_1parser-members.html create mode 100644 classstdex_1_1html_1_1parser.html create mode 100644 classstdex_1_1html_1_1sequence-members.html create mode 100644 classstdex_1_1html_1_1sequence.html create mode 100644 classstdex_1_1html_1_1sequence.png create mode 100644 classstdex_1_1html_1_1starting__token-members.html create mode 100644 classstdex_1_1html_1_1starting__token.html create mode 100644 classstdex_1_1html_1_1starting__token.png create mode 100644 classstdex_1_1html_1_1text__token-members.html create mode 100644 classstdex_1_1html_1_1text__token.html create mode 100644 classstdex_1_1html_1_1text__token.png create mode 100644 classstdex_1_1html_1_1token-members.html create mode 100644 classstdex_1_1html_1_1token.html create mode 100644 classstdex_1_1html_1_1token.png create mode 100644 classstdex_1_1html_1_1url__token-members.html create mode 100644 classstdex_1_1html_1_1url__token.html create mode 100644 classstdex_1_1html_1_1url__token.png create mode 100644 classstdex_1_1parser_1_1basic__css__cdc-members.html create mode 100644 classstdex_1_1parser_1_1basic__css__cdc.html create mode 100644 classstdex_1_1parser_1_1basic__css__cdc.png create mode 100644 classstdex_1_1parser_1_1basic__css__cdo-members.html create mode 100644 classstdex_1_1parser_1_1basic__css__cdo.html create mode 100644 classstdex_1_1parser_1_1basic__css__cdo.png create mode 100644 classstdex_1_1parser_1_1basic__css__comment-members.html create mode 100644 classstdex_1_1parser_1_1basic__css__comment.html create mode 100644 classstdex_1_1parser_1_1basic__css__comment.png create mode 100644 classstdex_1_1parser_1_1basic__css__import-members.html create mode 100644 classstdex_1_1parser_1_1basic__css__import.html create mode 100644 classstdex_1_1parser_1_1basic__css__import.png create mode 100644 classstdex_1_1parser_1_1basic__css__string-members.html create mode 100644 classstdex_1_1parser_1_1basic__css__string.html create mode 100644 classstdex_1_1parser_1_1basic__css__string.png create mode 100644 classstdex_1_1parser_1_1basic__css__uri-members.html create mode 100644 classstdex_1_1parser_1_1basic__css__uri.html create mode 100644 classstdex_1_1parser_1_1basic__css__uri.png create mode 100644 classstdex_1_1parser_1_1basic__html__declaration__condition__end-members.html create mode 100644 classstdex_1_1parser_1_1basic__html__declaration__condition__end.html create mode 100644 classstdex_1_1parser_1_1basic__html__declaration__condition__end.png create mode 100644 classstdex_1_1parser_1_1basic__html__declaration__condition__start-members.html create mode 100644 classstdex_1_1parser_1_1basic__html__declaration__condition__start.html create mode 100644 classstdex_1_1parser_1_1basic__html__declaration__condition__start.png create mode 100644 classstdex_1_1parser_1_1basic__html__ident-members.html create mode 100644 classstdex_1_1parser_1_1basic__html__ident.html create mode 100644 classstdex_1_1parser_1_1basic__html__ident.png create mode 100644 classstdex_1_1parser_1_1basic__html__tag-members.html create mode 100644 classstdex_1_1parser_1_1basic__html__tag.html create mode 100644 classstdex_1_1parser_1_1basic__html__tag.png create mode 100644 classstdex_1_1parser_1_1basic__html__value-members.html create mode 100644 classstdex_1_1parser_1_1basic__html__value.html create mode 100644 classstdex_1_1parser_1_1basic__html__value.png create mode 100644 classstdex_1_1parser_1_1basic__mime__type-members.html create mode 100644 classstdex_1_1parser_1_1basic__mime__type.html create mode 100644 classstdex_1_1parser_1_1basic__mime__type.png create mode 100644 html_8hpp_source.html create mode 100644 search/classes_11.js create mode 100644 search/classes_12.js create mode 100644 search/variables_12.js create mode 100644 structstdex_1_1html_1_1element__traits-members.html create mode 100644 structstdex_1_1html_1_1element__traits.html create mode 100644 structstdex_1_1html_1_1entity-members.html create mode 100644 structstdex_1_1html_1_1entity.html create mode 100644 structstdex_1_1html_1_1inserted__token-members.html create mode 100644 structstdex_1_1html_1_1inserted__token.html create mode 100644 structstdex_1_1parser_1_1html__attribute-members.html create mode 100644 structstdex_1_1parser_1_1html__attribute.html diff --git a/_unit_tests_2compat_8hpp_source.html b/_unit_tests_2compat_8hpp_source.html index da82d8fde..064b838ea 100644 --- a/_unit_tests_2compat_8hpp_source.html +++ b/_unit_tests_2compat_8hpp_source.html @@ -170,7 +170,7 @@ $(document).ready(function() { init_codefold(0); }); diff --git a/annotated.html b/annotated.html index c35c87886..cdfb0becc 100644 --- a/annotated.html +++ b/annotated.html @@ -79,166 +79,196 @@ $(function() {  Nchrono  Caosn_dateAOsn date  Caosn_timestampAOsn timestamp - Nidrec - CrecordHelper class for read/write of records to/from memory - Nparser - Cbasic_angleTest for angle in d°mm'ss.dddd form - Cbasic_any_cuTest for any code unit - Cbasic_bolTest for beginning of line - Cbasic_branchTest for any - Cbasic_chemical_formulaTest for chemical formula - 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 - Cbasic
+ Nhtml + CcommentHTML comment + CdeclarationHTML declaration + CdocumentHTML document + CelementHTML element <.../> + Celement_endEnding tag of an HTML element </...> + Celement_startStarting tag of an HTML element <...> + Celement_traitsDescribes attributes associated with a HTML element + CentityHTML entity + Cinserted_tokenInserted HTML token + CinstructionHTML instruction + CparserHTML parser + CsequenceBase class for HTML sequences + Cstarting_tokenToken representing start HTML tag + Ctext_tokenToken representing part of HTML text + CtokenHTML token base class + Curl_tokenHTTP token representing an URL + Nidrec + CrecordHelper class for read/write of records to/from memory + Nparser + Cbasic_angleTest for angle in d°mm'ss.dddd form + Cbasic_any_cuTest for any code unit + Cbasic_bolTest for beginning of line + Cbasic_branchTest for any + Cbasic_chemical_formulaTest for chemical formula + Cbasic_creditor_referenceTest for Creditor Reference + Cbasic_css_cdcLegacy CSS comment end --> + Cbasic_css_cdoLegacy CSS comment start <!-- + Cbasic_css_commentCSS comment + Cbasic_css_importCSS import directive + Cbasic_css_stringCSS string + Cbasic_css_uriURI in CSS + 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_html_declaration_condition_endEnd of condition ...]]> + Cbasic_html_declaration_condition_startStart of condition <![condition[... + Cbasic_html_identContiguous sequence of characters representing name of element, attribute etc + Cbasic_html_tagTag + Cbasic_html_valueOptionally-quoted string representing value of an attribute + 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_mime_typeMIME content type + 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 + Chtml_attributeTag attribute + 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 + Cbasic

‍UTF-8 byte-order-mark

- Cbasic_fileBasic seekable stream operations - Cbasic_sysOS data stream (file, pipe, socket...) - CbufferBuffered read/write stream - Cbuffer_t - Cbuffered_sysBuffered OS data stream (file, pipe, socket...) - CcacheCached file - Ccached_fileCached file-system file - CconverterModifies data on the fly when reading from/writing to a source stream. Could also be used to modify read/write boundaries like FIFO queues, async read/write, buffering etc - Cdiag_fileCompares multiple files to perform the same - CfifoIn-memory FIFO queue - Cnode_t - CfileFile-system file - Cfile_windowLimits file reading/writing to a predefined window - ClimiterLimits reading from/writing to stream to a predefined number of bytes - Cmemory_fileIn-memory file - CreplicatorReplicates writing of the same data to multiple streams - Cworker - CsocketSocket stream - CwindowLimits reading from/writing to stream to a predefined window - Cbase64_decBase64 decoding session - Cbase64_encBase64 encoding session - Cbase64_readerConverts from Base64 when reading from a stream - Cbase64_writerConverts to Base64 when writing to a stream - Cbasic_hashBasic hashing operations - Cblock_hashHashing in blocks - Ccharset_encoderEncoding converter context - Ccrc32_hashHashes as CRC32 - Cfree_locale_deleteDeleter for unique_ptr using free_locale - Cglobal_progressGlobal progress indicator base class - Chex_decHexadecimal decoding session - Chex_encHexadecimal encoding session - CintervalNumerical interval - Clazy_progressLazy progress indicator base class - CmappingMaps index in source string to index in destination string - Cmd2_tMD2 hash value - Cmd5_hashHashes as MD5 - Cno_deleteNoop deleter - Cno_delete< T[]>Noop array deleter - CpoolPer-NUMA pool of items - CprogressProgress indicator base class - Cprogress_switcherProgress indicator switcher - CringRing buffer - Csha1_hashHashes as SHA1 - Csha256_tSHA256 hash value - Csha_tSHA hash value - CspinlockSpin-lock - Cstream_hasherHashes read to or write from data of the stream - Csys_info_tSystem information - Csys_objectOperating system object (file, pipe, anything with an OS handle etc.) - Cuser_cancelledUser cancelled exception - Cvector_queueHelper class to allow limited size FIFO queues implemented as vector of elements - CwatchdogTriggers callback if not reset frequently enough + Cbasic_fileBasic seekable stream operations + Cbasic_sysOS data stream (file, pipe, socket...) + CbufferBuffered read/write stream + Cbuffer_t + Cbuffered_sysBuffered OS data stream (file, pipe, socket...) + CcacheCached file + Ccached_fileCached file-system file + CconverterModifies data on the fly when reading from/writing to a source stream. Could also be used to modify read/write boundaries like FIFO queues, async read/write, buffering etc + Cdiag_fileCompares multiple files to perform the same + CfifoIn-memory FIFO queue + Cnode_t + CfileFile-system file + Cfile_windowLimits file reading/writing to a predefined window + ClimiterLimits reading from/writing to stream to a predefined number of bytes + Cmemory_fileIn-memory file + CreplicatorReplicates writing of the same data to multiple streams + Cworker + CsocketSocket stream + CwindowLimits reading from/writing to stream to a predefined window + Cbase64_decBase64 decoding session + Cbase64_encBase64 encoding session + Cbase64_readerConverts from Base64 when reading from a stream + Cbase64_writerConverts to Base64 when writing to a stream + Cbasic_hashBasic hashing operations + Cblock_hashHashing in blocks + Ccharset_encoderEncoding converter context + Ccrc32_hashHashes as CRC32 + Cfree_locale_deleteDeleter for unique_ptr using free_locale + Cglobal_progressGlobal progress indicator base class + Chex_decHexadecimal decoding session + Chex_encHexadecimal encoding session + CintervalNumerical interval + Clazy_progressLazy progress indicator base class + CmappingMaps index in source string to index in destination string + Cmd2_tMD2 hash value + Cmd5_hashHashes as MD5 + Cno_deleteNoop deleter + Cno_delete< T[]>Noop array deleter + CpoolPer-NUMA pool of items + CprogressProgress indicator base class + Cprogress_switcherProgress indicator switcher + CringRing buffer + Csha1_hashHashes as SHA1 + Csha256_tSHA256 hash value + Csha_tSHA hash value + CspinlockSpin-lock + Cstream_hasherHashes read to or write from data of the stream + Csys_info_tSystem information + Csys_objectOperating system object (file, pipe, anything with an OS handle etc.) + Cuser_cancelledUser cancelled exception + Cvector_queueHelper class to allow limited size FIFO queues implemented as vector of elements + CwatchdogTriggers callback if not reset frequently enough diff --git a/base64_8hpp_source.html b/base64_8hpp_source.html index 402ab864f..b59ed440d 100644 --- a/base64_8hpp_source.html +++ b/base64_8hpp_source.html @@ -95,445 +95,444 @@ $(document).ready(function() { init_codefold(0); });
11#include <string>
12#include <vector>
13
-
14
-
15namespace stdex
-
16{
-
18 inline const char base64_enc_lookup[64] = {
-
19 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',
-
20 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f',
-
21 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
-
22 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/'
-
23 };
-
24
-
25 inline const uint8_t base64_dec_lookup[256] = {
-
26 /* 0 1 2 3 4 5 6 7 8 9 A B C D E F */
-
27 /* 0 */ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
-
28 /* 1 */ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
-
29 /* 2 */ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 62, 255, 255, 255, 63,
-
30 /* 3 */ 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 255, 255, 255, 64, 255, 255,
-
31 /* 4 */ 255, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
-
32 /* 5 */ 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 255, 255, 255, 255, 255,
-
33 /* 6 */ 255, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
-
34 /* 7 */ 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 255, 255, 255, 255, 255,
-
35 /* 8 */ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
-
36 /* 9 */ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
-
37 /* A */ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
-
38 /* B */ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
-
39 /* C */ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
-
40 /* D */ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
-
41 /* E */ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
-
42 /* F */ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255
-
43 };
-
45
-
- -
50 {
-
51 public:
-
-
55 base64_enc() noexcept : m_num(0)
-
56 {
-
57 m_buf[0] = 0;
-
58 m_buf[1] = 0;
-
59 m_buf[2] = 0;
-
60 }
+
14namespace stdex
+
15{
+
17 inline const char base64_enc_lookup[64] = {
+
18 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',
+
19 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f',
+
20 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
+
21 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/'
+
22 };
+
23
+
24 inline const uint8_t base64_dec_lookup[256] = {
+
25 /* 0 1 2 3 4 5 6 7 8 9 A B C D E F */
+
26 /* 0 */ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
+
27 /* 1 */ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
+
28 /* 2 */ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 62, 255, 255, 255, 63,
+
29 /* 3 */ 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 255, 255, 255, 64, 255, 255,
+
30 /* 4 */ 255, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
+
31 /* 5 */ 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 255, 255, 255, 255, 255,
+
32 /* 6 */ 255, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
+
33 /* 7 */ 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 255, 255, 255, 255, 255,
+
34 /* 8 */ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
+
35 /* 9 */ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
+
36 /* A */ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
+
37 /* B */ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
+
38 /* C */ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
+
39 /* D */ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
+
40 /* E */ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
+
41 /* F */ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255
+
42 };
+
44
+
+ +
49 {
+
50 public:
+
+
54 base64_enc() noexcept : m_num(0)
+
55 {
+
56 m_buf[0] = 0;
+
57 m_buf[1] = 0;
+
58 m_buf[2] = 0;
+
59 }
-
61
-
70 template<class _Elem, class _Traits, class _Ax>
-
-
71 void encode(_Inout_ std::basic_string<_Elem, _Traits, _Ax> &out, _In_bytecount_(size) const void *data, _In_ size_t size, _In_opt_ bool is_last = true)
-
72 {
-
73 _Assume_(data || !size);
-
74
-
75 // Preallocate output
-
76 out.reserve(out.size() + enc_size(size));
-
77
-
78 // Convert data character by character.
-
79 for (size_t i = 0;; i++) {
-
80 if (m_num >= 3) {
-
81 encode(out);
-
82 m_num = 0;
-
83 }
-
84
-
85 if (i >= size)
-
86 break;
-
87
-
88 m_buf[m_num++] = reinterpret_cast<const uint8_t*>(data)[i];
-
89 }
-
90
-
91 // If this is the last block, flush the buffer.
-
92 if (is_last && m_num) {
-
93 encode(out, m_num);
-
94 m_num = 0;
-
95 }
-
96 }
+
60
+
69 template<class _Elem, class _Traits, class _Ax>
+
+
70 void encode(_Inout_ std::basic_string<_Elem, _Traits, _Ax> &out, _In_bytecount_(size) const void *data, _In_ size_t size, _In_opt_ bool is_last = true)
+
71 {
+
72 _Assume_(data || !size);
+
73
+
74 // Preallocate output
+
75 out.reserve(out.size() + enc_size(size));
+
76
+
77 // Convert data character by character.
+
78 for (size_t i = 0;; i++) {
+
79 if (m_num >= 3) {
+
80 encode(out);
+
81 m_num = 0;
+
82 }
+
83
+
84 if (i >= size)
+
85 break;
+
86
+
87 m_buf[m_num++] = reinterpret_cast<const uint8_t*>(data)[i];
+
88 }
+
89
+
90 // If this is the last block, flush the buffer.
+
91 if (is_last && m_num) {
+
92 encode(out, m_num);
+
93 m_num = 0;
+
94 }
+
95 }
-
97
-
-
101 void clear() noexcept
-
102 {
-
103 m_num = 0;
-
104 }
+
96
+
+
100 void clear() noexcept
+
101 {
+
102 m_num = 0;
+
103 }
-
105
-
-
113 size_t enc_size(_In_ size_t size) const noexcept
-
114 {
-
115 return ((m_num + size + 2)/3)*4;
-
116 }
+
104
+
+
112 size_t enc_size(_In_ size_t size) const noexcept
+
113 {
+
114 return ((m_num + size + 2)/3)*4;
+
115 }
-
117
-
118 protected:
-
122 template<class _Elem, class _Traits, class _Ax>
-
-
123 void encode(_Inout_ std::basic_string<_Elem, _Traits, _Ax> &out)
-
124 {
-
125 out += base64_enc_lookup[ m_buf[0] >> 2 ];
-
126 out += base64_enc_lookup[((m_buf[0] << 4) | (m_buf[1] >> 4)) & 0x3f];
-
127 out += base64_enc_lookup[((m_buf[1] << 2) | (m_buf[2] >> 6)) & 0x3f];
-
128 out += base64_enc_lookup[ m_buf[2] & 0x3f];
-
129 }
+
116
+
117 protected:
+
121 template<class _Elem, class _Traits, class _Ax>
+
+
122 void encode(_Inout_ std::basic_string<_Elem, _Traits, _Ax> &out)
+
123 {
+
124 out += base64_enc_lookup[ m_buf[0] >> 2 ];
+
125 out += base64_enc_lookup[((m_buf[0] << 4) | (m_buf[1] >> 4)) & 0x3f];
+
126 out += base64_enc_lookup[((m_buf[1] << 2) | (m_buf[2] >> 6)) & 0x3f];
+
127 out += base64_enc_lookup[ m_buf[2] & 0x3f];
+
128 }
-
130
-
134 template<class _Elem, class _Traits, class _Ax>
-
-
135 void encode(_Inout_ std::basic_string<_Elem, _Traits, _Ax> &out, _In_ size_t size)
-
136 {
-
137 if (size > 0) {
-
138 out += base64_enc_lookup[m_buf[0] >> 2];
-
139 if (size > 1) {
-
140 out += base64_enc_lookup[((m_buf[0] << 4) | (m_buf[1] >> 4)) & 0x3f];
-
141 if (size > 2) {
-
142 out += base64_enc_lookup[((m_buf[1] << 2) | (m_buf[2] >> 6)) & 0x3f];
-
143 out += base64_enc_lookup[m_buf[2] & 0x3f];
-
144 } else {
-
145 out += base64_enc_lookup[(m_buf[1] << 2) & 0x3f];
-
146 out += '=';
-
147 }
-
148 } else {
-
149 out += base64_enc_lookup[(m_buf[0] << 4) & 0x3f];
+
129
+
133 template<class _Elem, class _Traits, class _Ax>
+
+
134 void encode(_Inout_ std::basic_string<_Elem, _Traits, _Ax> &out, _In_ size_t size)
+
135 {
+
136 if (size > 0) {
+
137 out += base64_enc_lookup[m_buf[0] >> 2];
+
138 if (size > 1) {
+
139 out += base64_enc_lookup[((m_buf[0] << 4) | (m_buf[1] >> 4)) & 0x3f];
+
140 if (size > 2) {
+
141 out += base64_enc_lookup[((m_buf[1] << 2) | (m_buf[2] >> 6)) & 0x3f];
+
142 out += base64_enc_lookup[m_buf[2] & 0x3f];
+
143 } else {
+
144 out += base64_enc_lookup[(m_buf[1] << 2) & 0x3f];
+
145 out += '=';
+
146 }
+
147 } else {
+
148 out += base64_enc_lookup[(m_buf[0] << 4) & 0x3f];
+
149 out += '=';
150 out += '=';
-
151 out += '=';
-
152 }
-
153 } else {
+
151 }
+
152 } else {
+
153 out += '=';
154 out += '=';
155 out += '=';
156 out += '=';
-
157 out += '=';
-
158 }
-
159 }
+
157 }
+
158 }
-
160
-
161 protected:
-
162 uint8_t m_buf[3];
-
163 size_t m_num;
-
164 };
+
159
+
160 protected:
+
161 uint8_t m_buf[3];
+
162 size_t m_num;
+
163 };
-
165
-
- -
170 {
-
171 public:
-
172 base64_writer(_Inout_ stdex::stream::basic& source, _In_ size_t max_blocks = 19) :
- -
174 m_max_blocks(max_blocks),
-
175 m_num_blocks(0)
-
176 {}
-
177
-
178 virtual ~base64_writer()
-
179 {
-
180 // Flush the buffer.
-
181 if (m_num) {
-
182 if (++m_num_blocks > m_max_blocks) {
-
183 *m_source << '\n';
-
184 m_num_blocks = 1;
-
185 }
-
186 encode(m_num);
-
187 }
-
188 }
-
189
-
-
190 virtual _Success_(return != 0) size_t write(
-
191 _In_reads_bytes_opt_(length) const void* data, _In_ size_t length)
-
192 {
-
193 _Assume_(data || !length);
-
194 for (size_t i = 0;; i++) {
-
195 if (m_num >= 3) {
-
196 if (++m_num_blocks > m_max_blocks) {
-
197 *m_source << '\n';
-
198 m_num_blocks = 1;
-
199 }
-
200 encode();
-
201 if (!m_source->ok()) _Unlikely_ {
-
202 m_state = m_source->state();
-
203 return length - i;
-
204 }
-
205 m_num = 0;
-
206 }
-
207 if (i >= length) {
-
208 m_state = stdex::stream::state_t::ok;
-
209 return length;
-
210 }
-
211 m_buf[m_num++] = reinterpret_cast<const uint8_t*>(data)[i];
-
212 }
-
213 }
+
164
+
+ +
169 {
+
170 public:
+
171 base64_writer(_Inout_ stdex::stream::basic& source, _In_ size_t max_blocks = 19) :
+ +
173 m_max_blocks(max_blocks),
+
174 m_num_blocks(0)
+
175 {}
+
176
+
177 virtual ~base64_writer()
+
178 {
+
179 // Flush the buffer.
+
180 if (m_num) {
+
181 if (++m_num_blocks > m_max_blocks) {
+
182 *m_source << '\n';
+
183 m_num_blocks = 1;
+
184 }
+
185 encode(m_num);
+
186 }
+
187 }
+
188
+
+
189 virtual _Success_(return != 0) size_t write(
+
190 _In_reads_bytes_opt_(length) const void* data, _In_ size_t length)
+
191 {
+
192 _Assume_(data || !length);
+
193 for (size_t i = 0;; i++) {
+
194 if (m_num >= 3) {
+
195 if (++m_num_blocks > m_max_blocks) {
+
196 *m_source << '\n';
+
197 m_num_blocks = 1;
+
198 }
+
199 encode();
+
200 if (!m_source->ok()) _Unlikely_ {
+
201 m_state = m_source->state();
+
202 return length - i;
+
203 }
+
204 m_num = 0;
+
205 }
+
206 if (i >= length) {
+
207 m_state = stdex::stream::state_t::ok;
+
208 return length;
+
209 }
+
210 m_buf[m_num++] = reinterpret_cast<const uint8_t*>(data)[i];
+
211 }
+
212 }
-
214
-
215 protected:
-
-
219 void encode()
-
220 {
-
221 char out[4];
-
222 out[0] = base64_enc_lookup[ m_buf[0] >> 2 ];
-
223 out[1] = base64_enc_lookup[((m_buf[0] << 4) | (m_buf[1] >> 4)) & 0x3f];
-
224 out[2] = base64_enc_lookup[((m_buf[1] << 2) | (m_buf[2] >> 6)) & 0x3f];
-
225 out[3] = base64_enc_lookup[ m_buf[2] & 0x3f];
-
226 m_source->write_array(out, sizeof(*out), _countof(out));
-
227 }
+
213
+
214 protected:
+
+
218 void encode()
+
219 {
+
220 char out[4];
+
221 out[0] = base64_enc_lookup[ m_buf[0] >> 2 ];
+
222 out[1] = base64_enc_lookup[((m_buf[0] << 4) | (m_buf[1] >> 4)) & 0x3f];
+
223 out[2] = base64_enc_lookup[((m_buf[1] << 2) | (m_buf[2] >> 6)) & 0x3f];
+
224 out[3] = base64_enc_lookup[ m_buf[2] & 0x3f];
+
225 m_source->write_array(out, sizeof(*out), _countof(out));
+
226 }
-
228
-
-
232 void encode(_In_ size_t size)
-
233 {
-
234 char out[4];
-
235 if (size > 0) {
-
236 out[0] = base64_enc_lookup[m_buf[0] >> 2];
-
237 if (size > 1) {
-
238 out[1] = base64_enc_lookup[((m_buf[0] << 4) | (m_buf[1] >> 4)) & 0x3f];
-
239 if (size > 2) {
-
240 out[2] = base64_enc_lookup[((m_buf[1] << 2) | (m_buf[2] >> 6)) & 0x3f];
-
241 out[3] = base64_enc_lookup[m_buf[2] & 0x3f];
-
242 } else {
-
243 out[2] = base64_enc_lookup[(m_buf[1] << 2) & 0x3f];
-
244 out[3] = '=';
-
245 }
-
246 } else {
-
247 out[1] = base64_enc_lookup[(m_buf[0] << 4) & 0x3f];
-
248 out[2] = '=';
-
249 out[3] = '=';
-
250 }
-
251 } else {
-
252 out[0] = '=';
-
253 out[1] = '=';
-
254 out[2] = '=';
-
255 out[3] = '=';
-
256 }
-
257 m_source->write_array(out, sizeof(*out), _countof(out));
-
258 }
+
227
+
+
231 void encode(_In_ size_t size)
+
232 {
+
233 char out[4];
+
234 if (size > 0) {
+
235 out[0] = base64_enc_lookup[m_buf[0] >> 2];
+
236 if (size > 1) {
+
237 out[1] = base64_enc_lookup[((m_buf[0] << 4) | (m_buf[1] >> 4)) & 0x3f];
+
238 if (size > 2) {
+
239 out[2] = base64_enc_lookup[((m_buf[1] << 2) | (m_buf[2] >> 6)) & 0x3f];
+
240 out[3] = base64_enc_lookup[m_buf[2] & 0x3f];
+
241 } else {
+
242 out[2] = base64_enc_lookup[(m_buf[1] << 2) & 0x3f];
+
243 out[3] = '=';
+
244 }
+
245 } else {
+
246 out[1] = base64_enc_lookup[(m_buf[0] << 4) & 0x3f];
+
247 out[2] = '=';
+
248 out[3] = '=';
+
249 }
+
250 } else {
+
251 out[0] = '=';
+
252 out[1] = '=';
+
253 out[2] = '=';
+
254 out[3] = '=';
+
255 }
+
256 m_source->write_array(out, sizeof(*out), _countof(out));
+
257 }
-
259
-
260 protected:
-
261 size_t
-
262 m_max_blocks,
- -
264 };
+
258
+
259 protected:
+
260 size_t
+
261 m_max_blocks,
+ +
263 };
-
265
-
- -
270 {
-
271 public:
-
-
275 base64_dec() noexcept : m_num(0)
-
276 {
-
277 m_buf[0] = 0;
-
278 m_buf[1] = 0;
-
279 m_buf[2] = 0;
-
280 m_buf[3] = 0;
-
281 }
+
264
+
+ +
269 {
+
270 public:
+
+
274 base64_dec() noexcept : m_num(0)
+
275 {
+
276 m_buf[0] = 0;
+
277 m_buf[1] = 0;
+
278 m_buf[2] = 0;
+
279 m_buf[3] = 0;
+
280 }
-
282
-
291 template<class _Ty, class _Ax, class _Tchr>
-
-
292 void decode(_Inout_ std::vector<_Ty, _Ax> &out, _Out_ bool &is_last, _In_z_count_(size) const _Tchr *data, _In_ size_t size)
-
293 {
-
294 is_last = false;
-
295
-
296 // Trim data size to first terminator.
-
297 for (size_t k = 0; k < size; k++)
-
298 if (!data[k]) { size = k; break; }
-
299
-
300 // Preallocate output
-
301 out.reserve(out.size() + dec_size(size));
-
302
-
303 for (size_t i = 0;; i++) {
-
304 if (m_num >= 4) {
-
305 // Buffer full; decode it.
-
306 size_t nibbles = decode(out);
-
307 if (nibbles < 3) {
-
308 is_last = true;
-
309 break;
-
310 }
-
311 }
-
312
-
313 if (i >= size)
-
314 break;
-
315
-
316 int x = data[i];
-
317 if ((m_buf[m_num] = x < _countof(base64_dec_lookup) ? base64_dec_lookup[x] : 255) != 255)
-
318 m_num++;
-
319 }
-
320 }
+
281
+
290 template<class _Ty, class _Ax, class _Tchr>
+
+
291 void decode(_Inout_ std::vector<_Ty, _Ax> &out, _Out_ bool &is_last, _In_z_count_(size) const _Tchr *data, _In_ size_t size)
+
292 {
+
293 is_last = false;
+
294
+
295 // Trim data size to first terminator.
+
296 for (size_t k = 0; k < size; k++)
+
297 if (!data[k]) { size = k; break; }
+
298
+
299 // Preallocate output
+
300 out.reserve(out.size() + dec_size(size));
+
301
+
302 for (size_t i = 0;; i++) {
+
303 if (m_num >= 4) {
+
304 // Buffer full; decode it.
+
305 size_t nibbles = decode(out);
+
306 if (nibbles < 3) {
+
307 is_last = true;
+
308 break;
+
309 }
+
310 }
+
311
+
312 if (i >= size)
+
313 break;
+
314
+
315 int x = data[i];
+
316 if ((m_buf[m_num] = x < _countof(base64_dec_lookup) ? base64_dec_lookup[x] : 255) != 255)
+
317 m_num++;
+
318 }
+
319 }
-
321
-
-
325 void clear() noexcept
-
326 {
-
327 m_num = 0;
-
328 }
+
320
+
+
324 void clear() noexcept
+
325 {
+
326 m_num = 0;
+
327 }
-
329
-
-
337 size_t dec_size(_In_ size_t size) const noexcept
-
338 {
-
339 return ((m_num + size + 3)/4)*3;
-
340 }
+
328
+
+
336 size_t dec_size(_In_ size_t size) const noexcept
+
337 {
+
338 return ((m_num + size + 3)/4)*3;
+
339 }
-
341
-
342 protected:
-
346 template<class _Ty, class _Ax>
-
-
347 size_t decode(_Inout_ std::vector<_Ty, _Ax> &out)
-
348 {
-
349 m_num = 0;
-
350 out.push_back((_Ty)(((m_buf[0] << 2) | (m_buf[1] >> 4)) & 0xff));
-
351 if (m_buf[2] < 64) {
-
352 out.push_back((_Ty)(((m_buf[1] << 4) | (m_buf[2] >> 2)) & 0xff));
-
353 if (m_buf[3] < 64) {
-
354 out.push_back((_Ty)(((m_buf[2] << 6) | m_buf[3]) & 0xff));
-
355 return 3;
-
356 } else
-
357 return 2;
-
358 } else
-
359 return 1;
-
360 }
+
340
+
341 protected:
+
345 template<class _Ty, class _Ax>
+
+
346 size_t decode(_Inout_ std::vector<_Ty, _Ax> &out)
+
347 {
+
348 m_num = 0;
+
349 out.push_back((_Ty)(((m_buf[0] << 2) | (m_buf[1] >> 4)) & 0xff));
+
350 if (m_buf[2] < 64) {
+
351 out.push_back((_Ty)(((m_buf[1] << 4) | (m_buf[2] >> 2)) & 0xff));
+
352 if (m_buf[3] < 64) {
+
353 out.push_back((_Ty)(((m_buf[2] << 6) | m_buf[3]) & 0xff));
+
354 return 3;
+
355 } else
+
356 return 2;
+
357 } else
+
358 return 1;
+
359 }
-
361
-
362 protected:
-
363 uint8_t m_buf[4];
-
364 size_t m_num;
-
365 };
+
360
+
361 protected:
+
362 uint8_t m_buf[4];
+
363 size_t m_num;
+
364 };
-
366
-
367#ifdef _MSC_VER
-
368#pragma warning(push)
-
369#pragma warning(disable: 26495)
-
370#endif
-
371
-
- -
376 {
-
377 public:
-
378 base64_reader(_Inout_ stdex::stream::basic& source) :
- -
380 m_temp_off(0),
-
381 m_temp_len(0)
-
382 {}
-
383
-
384#pragma warning(suppress: 6101) // See [1] below
-
-
385 virtual _Success_(return != 0 || length == 0) size_t read(
-
386 _Out_writes_bytes_to_opt_(length, return) void* data, _In_ size_t length)
-
387 {
-
388 _Assume_(data || !length);
-
389 for (size_t to_read = length;;) {
-
390 if (m_temp_len >= to_read) {
-
391 memcpy(data, m_temp + m_temp_off, to_read);
-
392 m_temp_off += to_read;
-
393 m_temp_len -= to_read;
-
394 m_state = stdex::stream::state_t::ok;
-
395 return length;
-
396 }
-
397 if (m_temp_len) {
-
398 memcpy(data, m_temp + m_temp_off, m_temp_len);
-
399 reinterpret_cast<uint8_t*&>(data) += m_temp_len;
-
400 to_read -= m_temp_len;
-
401 m_temp_off = 0;
-
402 m_temp_len = 0;
-
403 }
-
404 // Read one Base64 block (4 chars)
-
405 while (m_num < 4) {
-
406 uint8_t x;
-
407 *m_source >> x;
-
408 if (!m_source->ok()) _Unlikely_ {
-
409 m_state = m_source->state();
-
410 return length - to_read; // [1] Code analysis misses `length - to_read` bytes were written to data in previous loop iterations.
-
411 }
-
412 if ((m_buf[m_num] = base64_dec_lookup[x]) != 255)
-
413 m_num++;
-
414 }
-
415 decode();
-
416 if (m_temp_len < 3 && to_read >= 3) {
-
417 // If Base64 indicates end of data, truncate read to hint the client, end of Base64 data has been reached.
-
418 memcpy(data, m_temp + m_temp_off, m_temp_len);
-
419 m_temp_off = 0;
-
420 m_temp_len = 0;
-
421 to_read -= m_temp_len;
-
422 m_state = stdex::stream::state_t::ok;
-
423 return length - to_read; // [1] Code analysis misses `length - to_read` bytes were written to data in previous loop iterations.
-
424 }
-
425 }
-
426 }
+
365
+
366#ifdef _MSC_VER
+
367#pragma warning(push)
+
368#pragma warning(disable: 26495)
+
369#endif
+
370
+
+ +
375 {
+
376 public:
+
377 base64_reader(_Inout_ stdex::stream::basic& source) :
+ +
379 m_temp_off(0),
+
380 m_temp_len(0)
+
381 {}
+
382
+
383#pragma warning(suppress: 6101) // See [1] below
+
+
384 virtual _Success_(return != 0 || length == 0) size_t read(
+
385 _Out_writes_bytes_to_opt_(length, return) void* data, _In_ size_t length)
+
386 {
+
387 _Assume_(data || !length);
+
388 for (size_t to_read = length;;) {
+
389 if (m_temp_len >= to_read) {
+
390 memcpy(data, m_temp + m_temp_off, to_read);
+
391 m_temp_off += to_read;
+
392 m_temp_len -= to_read;
+
393 m_state = stdex::stream::state_t::ok;
+
394 return length;
+
395 }
+
396 if (m_temp_len) {
+
397 memcpy(data, m_temp + m_temp_off, m_temp_len);
+
398 reinterpret_cast<uint8_t*&>(data) += m_temp_len;
+
399 to_read -= m_temp_len;
+
400 m_temp_off = 0;
+
401 m_temp_len = 0;
+
402 }
+
403 // Read one Base64 block (4 chars)
+
404 while (m_num < 4) {
+
405 uint8_t x;
+
406 *m_source >> x;
+
407 if (!m_source->ok()) _Unlikely_ {
+
408 m_state = m_source->state();
+
409 return length - to_read; // [1] Code analysis misses `length - to_read` bytes were written to data in previous loop iterations.
+
410 }
+
411 if ((m_buf[m_num] = base64_dec_lookup[x]) != 255)
+
412 m_num++;
+
413 }
+
414 decode();
+
415 if (m_temp_len < 3 && to_read >= 3) {
+
416 // If Base64 indicates end of data, truncate read to hint the client, end of Base64 data has been reached.
+
417 memcpy(data, m_temp + m_temp_off, m_temp_len);
+
418 m_temp_off = 0;
+
419 m_temp_len = 0;
+
420 to_read -= m_temp_len;
+
421 m_state = stdex::stream::state_t::ok;
+
422 return length - to_read; // [1] Code analysis misses `length - to_read` bytes were written to data in previous loop iterations.
+
423 }
+
424 }
+
425 }
-
427
-
428 protected:
-
-
432 void decode()
-
433 {
-
434 m_num = 0;
-
435 m_temp_off = 0;
-
436 m_temp[0] = ((m_buf[0] << 2) | (m_buf[1] >> 4)) & 0xff;
-
437 if (m_buf[2] < 64) {
-
438 m_temp[1] = ((m_buf[1] << 4) | (m_buf[2] >> 2)) & 0xff;
-
439 if (m_buf[3] < 64) {
-
440 m_temp[2] = ((m_buf[2] << 6) | m_buf[3]) & 0xff;
-
441 m_temp_len = 3;
-
442 } else
-
443 m_temp_len = 2;
-
444 } else
-
445 m_temp_len = 1;
-
446 }
+
426
+
427 protected:
+
+
431 void decode()
+
432 {
+
433 m_num = 0;
+
434 m_temp_off = 0;
+
435 m_temp[0] = ((m_buf[0] << 2) | (m_buf[1] >> 4)) & 0xff;
+
436 if (m_buf[2] < 64) {
+
437 m_temp[1] = ((m_buf[1] << 4) | (m_buf[2] >> 2)) & 0xff;
+
438 if (m_buf[3] < 64) {
+
439 m_temp[2] = ((m_buf[2] << 6) | m_buf[3]) & 0xff;
+
440 m_temp_len = 3;
+
441 } else
+
442 m_temp_len = 2;
+
443 } else
+
444 m_temp_len = 1;
+
445 }
-
447
-
448 protected:
-
449 char m_temp[3];
-
450 size_t
- - -
453 };
+
446
+
447 protected:
+
448 char m_temp[3];
+
449 size_t
+ + +
452 };
-
454
-
455#ifdef _MSC_VER
-
456#pragma warning(pop)
-
457#endif
-
458}
-
Base64 decoding session.
Definition base64.hpp:270
-
size_t m_num
Number of bytes used in m_buf
Definition base64.hpp:364
-
base64_dec() noexcept
Constructs blank decoding session.
Definition base64.hpp:275
-
void decode(std::vector< _Ty, _Ax > &out, bool &is_last, const _Tchr *data, size_t size)
Decodes one block of information, and appends it to the output.
Definition base64.hpp:292
-
size_t dec_size(size_t size) const noexcept
Returns maximum decoded size.
Definition base64.hpp:337
-
size_t decode(std::vector< _Ty, _Ax > &out)
Decodes one complete internal buffer of data.
Definition base64.hpp:347
-
void clear() noexcept
Resets decoding session.
Definition base64.hpp:325
-
uint8_t m_buf[4]
Internal buffer.
Definition base64.hpp:363
-
Base64 encoding session.
Definition base64.hpp:50
-
void encode(std::basic_string< _Elem, _Traits, _Ax > &out, const void *data, size_t size, bool is_last=true)
Encodes one block of information, and appends it to the output.
Definition base64.hpp:71
-
void encode(std::basic_string< _Elem, _Traits, _Ax > &out)
Encodes one complete internal buffer of data.
Definition base64.hpp:123
-
size_t m_num
Number of bytes used in m_buf
Definition base64.hpp:163
-
uint8_t m_buf[3]
Internal buffer.
Definition base64.hpp:162
-
void encode(std::basic_string< _Elem, _Traits, _Ax > &out, size_t size)
Encodes partial internal buffer of data.
Definition base64.hpp:135
-
base64_enc() noexcept
Constructs blank encoding session.
Definition base64.hpp:55
-
void clear() noexcept
Resets encoding session.
Definition base64.hpp:101
-
size_t enc_size(size_t size) const noexcept
Returns maximum encoded size.
Definition base64.hpp:113
-
Converts from Base64 when reading from a stream.
Definition base64.hpp:376
-
void decode()
Decodes one complete internal buffer of data.
Definition base64.hpp:432
-
char m_temp[3]
Temporary buffer.
Definition base64.hpp:449
-
size_t m_temp_len
Number of bytes of data in m_temp
Definition base64.hpp:452
-
virtual size_t read(_Out_writes_bytes_to_opt_(length, return) void *data, size_t length)
Reads block of data from the stream.
Definition base64.hpp:385
-
size_t m_temp_off
Index of data start in m_temp
Definition base64.hpp:451
-
Converts to Base64 when writing to a stream.
Definition base64.hpp:170
-
size_t m_num_blocks
‍Maximum number of Base64 blocks (4 chars) to write without a line break (SIZE_MAX no line breaks)
Definition base64.hpp:263
-
void encode()
Encodes one complete internal buffer of data.
Definition base64.hpp:219
-
void encode(size_t size)
Encodes partial internal buffer of data.
Definition base64.hpp:232
-
virtual size_t write(_In_reads_bytes_opt_(length) const void *data, size_t length)
Writes block of data to the stream.
Definition base64.hpp:190
+
453
+
454#ifdef _MSC_VER
+
455#pragma warning(pop)
+
456#endif
+
457}
+
Base64 decoding session.
Definition base64.hpp:269
+
size_t m_num
Number of bytes used in m_buf
Definition base64.hpp:363
+
base64_dec() noexcept
Constructs blank decoding session.
Definition base64.hpp:274
+
void decode(std::vector< _Ty, _Ax > &out, bool &is_last, const _Tchr *data, size_t size)
Decodes one block of information, and appends it to the output.
Definition base64.hpp:291
+
size_t dec_size(size_t size) const noexcept
Returns maximum decoded size.
Definition base64.hpp:336
+
size_t decode(std::vector< _Ty, _Ax > &out)
Decodes one complete internal buffer of data.
Definition base64.hpp:346
+
void clear() noexcept
Resets decoding session.
Definition base64.hpp:324
+
uint8_t m_buf[4]
Internal buffer.
Definition base64.hpp:362
+
Base64 encoding session.
Definition base64.hpp:49
+
void encode(std::basic_string< _Elem, _Traits, _Ax > &out, const void *data, size_t size, bool is_last=true)
Encodes one block of information, and appends it to the output.
Definition base64.hpp:70
+
void encode(std::basic_string< _Elem, _Traits, _Ax > &out)
Encodes one complete internal buffer of data.
Definition base64.hpp:122
+
size_t m_num
Number of bytes used in m_buf
Definition base64.hpp:162
+
uint8_t m_buf[3]
Internal buffer.
Definition base64.hpp:161
+
void encode(std::basic_string< _Elem, _Traits, _Ax > &out, size_t size)
Encodes partial internal buffer of data.
Definition base64.hpp:134
+
base64_enc() noexcept
Constructs blank encoding session.
Definition base64.hpp:54
+
void clear() noexcept
Resets encoding session.
Definition base64.hpp:100
+
size_t enc_size(size_t size) const noexcept
Returns maximum encoded size.
Definition base64.hpp:112
+
Converts from Base64 when reading from a stream.
Definition base64.hpp:375
+
void decode()
Decodes one complete internal buffer of data.
Definition base64.hpp:431
+
char m_temp[3]
Temporary buffer.
Definition base64.hpp:448
+
size_t m_temp_len
Number of bytes of data in m_temp
Definition base64.hpp:451
+
virtual size_t read(_Out_writes_bytes_to_opt_(length, return) void *data, size_t length)
Reads block of data from the stream.
Definition base64.hpp:384
+
size_t m_temp_off
Index of data start in m_temp
Definition base64.hpp:450
+
Converts to Base64 when writing to a stream.
Definition base64.hpp:169
+
size_t m_num_blocks
‍Maximum number of Base64 blocks (4 chars) to write without a line break (SIZE_MAX no line breaks)
Definition base64.hpp:262
+
void encode()
Encodes one complete internal buffer of data.
Definition base64.hpp:218
+
void encode(size_t size)
Encodes partial internal buffer of data.
Definition base64.hpp:231
+
virtual size_t write(_In_reads_bytes_opt_(length) const void *data, size_t length)
Writes block of data to the stream.
Definition base64.hpp:189
‍UTF-8 byte-order-mark
Definition stream.hpp:79
bool ok() const
Returns true if the stream state is clean i.e. previous operation was succesful.
Definition stream.hpp:175
state_t state() const
Returns stream state after last operation.
Definition stream.hpp:170
@@ -542,7 +541,7 @@ $(document).ready(function() { init_codefold(0); });
diff --git a/chrono_8hpp_source.html b/chrono_8hpp_source.html index 0ae9bd115..480f359bc 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 58bf12df4..f7b4081dc 100644 --- a/classes.html +++ b/classes.html @@ -73,53 +73,59 @@ $(function() {
Class Index
-
A | B | C | D | F | G | H | I | L | M | N | P | R | S | U | V | W
+
A | B | C | D | E | F | G | H | I | L | M | N | P | R | S | T | U | V | W
A
aosn_date (stdex::chrono)
aosn_timestamp (stdex::chrono)
async_reader (stdex::stream)
async_writer (stdex::stream)
B
-
base64_dec (stdex)
base64_enc (stdex)
base64_reader (stdex)
base64_writer (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_hash (stdex)
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)
block_hash (stdex)
buffer (stdex::stream)
buffer::buffer_t (stdex::stream)
buffered_sys (stdex::stream)
+
base64_dec (stdex)
base64_enc (stdex)
base64_reader (stdex)
base64_writer (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_css_cdc (stdex::parser)
basic_css_cdo (stdex::parser)
basic_css_comment (stdex::parser)
basic_css_import (stdex::parser)
basic_css_string (stdex::parser)
basic_css_uri (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_hash (stdex)
basic_html_declaration_condition_end (stdex::parser)
basic_html_declaration_condition_start (stdex::parser)
basic_html_ident (stdex::parser)
basic_html_tag (stdex::parser)
basic_html_value (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_mime_type (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)
block_hash (stdex)
buffer (stdex::stream)
buffer::buffer_t (stdex::stream)
buffered_sys (stdex::stream)
C
-
cache (stdex::stream)
cached_file (stdex::stream)
charset_encoder (stdex)
converter (stdex::stream)
crc32_hash (stdex)
+
cache (stdex::stream)
cached_file (stdex::stream)
charset_encoder (stdex)
comment (stdex::html)
converter (stdex::stream)
crc32_hash (stdex)
D
-
diag_file (stdex::stream)
+
declaration (stdex::html)
diag_file (stdex::stream)
document (stdex::html)
+
E
+
element (stdex::html)
element_end (stdex::html)
element_start (stdex::html)
element_traits (stdex::html)
entity (stdex::html)
+
F
fifo (stdex::stream)
file (stdex::stream)
file_window (stdex::stream)
free_locale_delete (stdex)
-
+
G
global_progress (stdex)
-
-
H
-
hex_dec (stdex)
hex_enc (stdex)
http_agent (stdex::parser)
http_any_type (stdex::parser)
http_asterisk (stdex::parser)
http_cookie (stdex::parser)
http_cookie_parameter (stdex::parser)
http_factor_more (stdex::parser)
http_header (stdex::parser)
http_language (stdex::parser)
http_line_break (stdex::parser)
http_media_range (stdex::parser)
http_media_type (stdex::parser)
http_parameter (stdex::parser)
http_protocol (stdex::parser)
http_quoted_string (stdex::parser)
http_request (stdex::parser)
http_space (stdex::parser)
http_text_char (stdex::parser)
http_token (stdex::parser)
http_url (stdex::parser)
http_url_parameter (stdex::parser)
http_url_path (stdex::parser)
http_url_path_segment (stdex::parser)
http_url_port (stdex::parser)
http_url_server (stdex::parser)
http_value (stdex::parser)
http_value_collection (stdex::parser)
http_weight (stdex::parser)
http_weighted_value (stdex::parser)
-
I
-
interval (stdex)
+
H
+
hex_dec (stdex)
hex_enc (stdex)
html_attribute (stdex::parser)
http_agent (stdex::parser)
http_any_type (stdex::parser)
http_asterisk (stdex::parser)
http_cookie (stdex::parser)
http_cookie_parameter (stdex::parser)
http_factor_more (stdex::parser)
http_header (stdex::parser)
http_language (stdex::parser)
http_line_break (stdex::parser)
http_media_range (stdex::parser)
http_media_type (stdex::parser)
http_parameter (stdex::parser)
http_protocol (stdex::parser)
http_quoted_string (stdex::parser)
http_request (stdex::parser)
http_space (stdex::parser)
http_text_char (stdex::parser)
http_token (stdex::parser)
http_url (stdex::parser)
http_url_parameter (stdex::parser)
http_url_path (stdex::parser)
http_url_path_segment (stdex::parser)
http_url_port (stdex::parser)
http_url_server (stdex::parser)
http_value (stdex::parser)
http_value_collection (stdex::parser)
http_weight (stdex::parser)
http_weighted_value (stdex::parser)
+
I
+
inserted_token (stdex::html)
instruction (stdex::html)
interval (stdex)
+
L
lazy_progress (stdex)
limiter (stdex::stream)
-
+
M
mapping (stdex)
md2_t (stdex)
md5_hash (stdex)
memory_file (stdex::stream)
-
+
N
no_delete (stdex)
no_delete< T[]> (stdex)
fifo::node_t (stdex::stream)
-
-
P
-
parser_collection (stdex::parser)
pool (stdex)
progress (stdex)
progress_switcher (stdex)
+
P
+
parser (stdex::html)
parser_collection (stdex::parser)
pool (stdex)
progress (stdex)
progress_switcher (stdex)
+
R
record (stdex::idrec)
replicator (stdex::stream)
ring (stdex)
-
+
S
-
sgml_any_cp (stdex::parser)
sgml_cp (stdex::parser)
sgml_cp_set (stdex::parser)
sgml_dns_domain_char (stdex::parser)
sgml_ipv6_scope_id_char (stdex::parser)
sgml_punct_cp (stdex::parser)
sgml_space_cp (stdex::parser)
sgml_space_or_punct_cp (stdex::parser)
sgml_string (stdex::parser)
sgml_url_password_char (stdex::parser)
sgml_url_path_char (stdex::parser)
sgml_url_username_char (stdex::parser)
sha1_hash (stdex)
sha256_t (stdex)
sha_t (stdex)
socket (stdex::stream)
spinlock (stdex)
stream_hasher (stdex)
sys_info_t (stdex)
sys_object (stdex)
+
sequence (stdex::html)
sgml_any_cp (stdex::parser)
sgml_cp (stdex::parser)
sgml_cp_set (stdex::parser)
sgml_dns_domain_char (stdex::parser)
sgml_ipv6_scope_id_char (stdex::parser)
sgml_punct_cp (stdex::parser)
sgml_space_cp (stdex::parser)
sgml_space_or_punct_cp (stdex::parser)
sgml_string (stdex::parser)
sgml_url_password_char (stdex::parser)
sgml_url_path_char (stdex::parser)
sgml_url_username_char (stdex::parser)
sha1_hash (stdex)
sha256_t (stdex)
sha_t (stdex)
socket (stdex::stream)
spinlock (stdex)
starting_token (stdex::html)
stream_hasher (stdex)
sys_info_t (stdex)
sys_object (stdex)
+
+
T
+
text_token (stdex::html)
token (stdex::html)
U
-
user_cancelled (stdex)
+
url_token (stdex::html)
user_cancelled (stdex)
V
vector_queue (stdex)
@@ -130,7 +136,7 @@ $(function() {
diff --git a/classstdex_1_1base64__dec-members.html b/classstdex_1_1base64__dec-members.html index 91257e53f..faa8c60f5 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 2eefdc366..b18ac7ae6 100644 --- a/classstdex_1_1base64__dec.html +++ b/classstdex_1_1base64__dec.html @@ -239,7 +239,7 @@ template<class _Ty , class _Ax , class _Tchr >
diff --git a/classstdex_1_1base64__enc-members.html b/classstdex_1_1base64__enc-members.html index 1f6b69bbf..04bb6994c 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 6a6db1ac2..6a353e610 100644 --- a/classstdex_1_1base64__enc.html +++ b/classstdex_1_1base64__enc.html @@ -244,7 +244,7 @@ template<class _Elem , class _Traits , class _Ax >
diff --git a/classstdex_1_1base64__reader-members.html b/classstdex_1_1base64__reader-members.html index 02b92c905..7403eb133 100644 --- a/classstdex_1_1base64__reader-members.html +++ b/classstdex_1_1base64__reader-members.html @@ -162,7 +162,7 @@ $(function() {
diff --git a/classstdex_1_1base64__reader.html b/classstdex_1_1base64__reader.html index 1a488c441..5d431ce3c 100644 --- a/classstdex_1_1base64__reader.html +++ b/classstdex_1_1base64__reader.html @@ -443,7 +443,7 @@ size_t m_num
diff --git a/classstdex_1_1base64__writer-members.html b/classstdex_1_1base64__writer-members.html index eff8ce327..36c89a845 100644 --- a/classstdex_1_1base64__writer-members.html +++ b/classstdex_1_1base64__writer-members.html @@ -164,7 +164,7 @@ $(function() {
diff --git a/classstdex_1_1base64__writer.html b/classstdex_1_1base64__writer.html index fbee76be8..23b82a85f 100644 --- a/classstdex_1_1base64__writer.html +++ b/classstdex_1_1base64__writer.html @@ -450,7 +450,7 @@ size_t m_num
diff --git a/classstdex_1_1basic__hash-members.html b/classstdex_1_1basic__hash-members.html index a9a611e62..6e92a1ca6 100644 --- a/classstdex_1_1basic__hash-members.html +++ b/classstdex_1_1basic__hash-members.html @@ -90,7 +90,7 @@ $(function() {
diff --git a/classstdex_1_1basic__hash.html b/classstdex_1_1basic__hash.html index 66fafa243..bb9d72343 100644 --- a/classstdex_1_1basic__hash.html +++ b/classstdex_1_1basic__hash.html @@ -255,7 +255,7 @@ template<class T >
diff --git a/classstdex_1_1block__hash-members.html b/classstdex_1_1block__hash-members.html index 25a581c69..748a6a10c 100644 --- a/classstdex_1_1block__hash-members.html +++ b/classstdex_1_1block__hash-members.html @@ -94,7 +94,7 @@ $(function() {
diff --git a/classstdex_1_1block__hash.html b/classstdex_1_1block__hash.html index 2acace648..8acabbfa5 100644 --- a/classstdex_1_1block__hash.html +++ b/classstdex_1_1block__hash.html @@ -245,7 +245,7 @@ template<class T >
diff --git a/classstdex_1_1charset__encoder-members.html b/classstdex_1_1charset__encoder-members.html index 458b5c6f8..7baaf6b5d 100644 --- a/classstdex_1_1charset__encoder-members.html +++ b/classstdex_1_1charset__encoder-members.html @@ -102,7 +102,7 @@ $(function() { diff --git a/classstdex_1_1charset__encoder.html b/classstdex_1_1charset__encoder.html index 9ff815e9b..8b4be0ce9 100644 --- a/classstdex_1_1charset__encoder.html +++ b/classstdex_1_1charset__encoder.html @@ -607,7 +607,7 @@ template<class _Traits_to = std::char_traits<T_to>, class _Alloc_to = diff --git a/classstdex_1_1crc32__hash-members.html b/classstdex_1_1crc32__hash-members.html index c4610215a..bb83a7d04 100644 --- a/classstdex_1_1crc32__hash-members.html +++ b/classstdex_1_1crc32__hash-members.html @@ -90,7 +90,7 @@ $(function() { diff --git a/classstdex_1_1crc32__hash.html b/classstdex_1_1crc32__hash.html index 5f366c3b2..b8c91014c 100644 --- a/classstdex_1_1crc32__hash.html +++ b/classstdex_1_1crc32__hash.html @@ -245,7 +245,7 @@ crc32_t m_value diff --git a/classstdex_1_1global__progress-members.html b/classstdex_1_1global__progress-members.html index 3466e0a0e..e09929c51 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 86a2e273a..d1dae4ab3 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 ed0dd542d..3ab097423 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 d0bf99320..ab5406051 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 6174a7efe..b0e077fe3 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 f8f3c4f50..937343c78 100644 --- a/classstdex_1_1hex__enc.html +++ b/classstdex_1_1hex__enc.html @@ -198,7 +198,7 @@ template<class _Elem , class _Traits , class _Ax > diff --git a/classstdex_1_1html_1_1comment-members.html b/classstdex_1_1html_1_1comment-members.html new file mode 100644 index 000000000..46b05a048 --- /dev/null +++ b/classstdex_1_1html_1_1comment-members.html @@ -0,0 +1,96 @@ + + + + + + + +stdex: Member List + + + + + + + + + +
+
+ + + + + + +
+
stdex +
+
Additional custom or not Standard C++ covered algorithms
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
stdex::html::comment Member List
+
+
+ +

This is the complete list of members for stdex::html::comment, including all inherited members.

+ + + + + + + + +
comment(stdex::parser::basic_html_tag< T > &&tag, sequence *parent=nullptr) (defined in stdex::html::comment)stdex::html::commentinline
contentstdex::html::comment
intervalstdex::html::sequence
parentstdex::html::sequence
sequence(stdex::parser::html_sequence_t _type=stdex::parser::html_sequence_t::unknown, size_t start=0, size_t end=0, sequence *_parent=nullptr) (defined in stdex::html::sequence)stdex::html::sequenceinline
typestdex::html::sequence
~sequence() (defined in stdex::html::sequence)stdex::html::sequenceinlinevirtual
+ + + + diff --git a/classstdex_1_1html_1_1comment.html b/classstdex_1_1html_1_1comment.html new file mode 100644 index 000000000..e0a6ebeff --- /dev/null +++ b/classstdex_1_1html_1_1comment.html @@ -0,0 +1,141 @@ + + + + + + + +stdex: stdex::html::comment Class Reference + + + + + + + + + +
+
+ + + + + + +
+
stdex +
+
Additional custom or not Standard C++ covered algorithms
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
stdex::html::comment Class Reference
+
+
+ +

HTML comment. + More...

+ +

#include <stdex/html.hpp>

+
+Inheritance diagram for stdex::html::comment:
+
+
+ + +stdex::html::sequence + +
+ + + + + + + + +

+Public Member Functions

+template<class T >
 comment (stdex::parser::basic_html_tag< T > &&tag, sequence *parent=nullptr)
 
- Public Member Functions inherited from stdex::html::sequence
sequence (stdex::parser::html_sequence_t _type=stdex::parser::html_sequence_t::unknown, size_t start=0, size_t end=0, sequence *_parent=nullptr)
 
+ + + + + + + + + + + + + + +

+Public Attributes

+stdex::interval< size_t > content
 Comment content position in source.
 
- Public Attributes inherited from stdex::html::sequence
+stdex::parser::html_sequence_t type
 Sequence type. Enum is used for performance reasons (vs. dynamic_cast)
 
+stdex::interval< size_t > interval
 Sequence position in source.
 
+sequenceparent
 Parent sequence.
 
+

Detailed Description

+

HTML comment.

+

The documentation for this class was generated from the following file: +
+ + + + diff --git a/classstdex_1_1html_1_1comment.png b/classstdex_1_1html_1_1comment.png new file mode 100644 index 0000000000000000000000000000000000000000..94239e1f5c1b9fe1ff3d89ab5a283256ff2f53a9 GIT binary patch literal 534 zcmeAS@N?(olHy`uVBq!ia0vp^jX)g0!3-ohWuCnNQqloFA+G=b{|7Q(y!l$%e`vXd zfo6fk^fNCG95?_J51w>+1xR&CkY6wZkPimtOtY^rFfcCkba4!+V0=6GVjr_2hwH;x zCV&2muV3BQu<7>6ZJlS^SXM0-f40J+c4?58<*N{e2Mg34g;-eLNHJV%IvK&iu>J33 zjvZ-_|6LaPzOU9-R({s945ieUmsYy^u}^*34B<`)mQoEo^6xhy=I$6+1V`0zk@n&+wHt3+*I58aMky$ zx*&FMRi-_WKK7?nY+B`CJ-Bu3gWiunfxK+x2UVl;+)Bh59?Y%#?LCp@=lvNh@-6{h zn(A{qUZ~a!2+Dqa%+h~6v*j_1=mUd8l}&rNJtwe$kb}#yNeY}0^iP`6_;aATn4skg zpp@dlik_WKC++nd4%>A%WN*KB{@PEux3#O+KX$$>;+t}4_cqhCI<=i@>#pap=qy_H zGt%YkH>>5Qx6f26f6;VenxE36na3eIN1(f9o5@E_i(4D>^Oat_tW)L45dXQl`oXjJ z*A51CD($&BZI-Lk?n + + + + + + +stdex: Member List + + + + + + + + + +
+
+ + + + + + +
+
stdex +
+
Additional custom or not Standard C++ covered algorithms
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
stdex::html::declaration Member List
+
+
+ +

This is the complete list of members for stdex::html::declaration, including all inherited members.

+ + + + + + + + + +
attributesstdex::html::declaration
declaration(stdex::parser::basic_html_tag< T > &&tag, sequence *parent=nullptr) (defined in stdex::html::declaration)stdex::html::declarationinline
intervalstdex::html::sequence
namestdex::html::declaration
parentstdex::html::sequence
sequence(stdex::parser::html_sequence_t _type=stdex::parser::html_sequence_t::unknown, size_t start=0, size_t end=0, sequence *_parent=nullptr) (defined in stdex::html::sequence)stdex::html::sequenceinline
typestdex::html::sequence
~sequence() (defined in stdex::html::sequence)stdex::html::sequenceinlinevirtual
+ + + + diff --git a/classstdex_1_1html_1_1declaration.html b/classstdex_1_1html_1_1declaration.html new file mode 100644 index 000000000..a27a67efd --- /dev/null +++ b/classstdex_1_1html_1_1declaration.html @@ -0,0 +1,145 @@ + + + + + + + +stdex: stdex::html::declaration Class Reference + + + + + + + + + +
+
+ + + + + + +
+
stdex +
+
Additional custom or not Standard C++ covered algorithms
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
stdex::html::declaration Class Reference
+
+
+ +

HTML declaration. + More...

+ +

#include <stdex/html.hpp>

+
+Inheritance diagram for stdex::html::declaration:
+
+
+ + +stdex::html::sequence + +
+ + + + + + + + +

+Public Member Functions

+template<class T >
 declaration (stdex::parser::basic_html_tag< T > &&tag, sequence *parent=nullptr)
 
- Public Member Functions inherited from stdex::html::sequence
sequence (stdex::parser::html_sequence_t _type=stdex::parser::html_sequence_t::unknown, size_t start=0, size_t end=0, sequence *_parent=nullptr)
 
+ + + + + + + + + + + + + + + + + +

+Public Attributes

+stdex::interval< size_t > name
 Declaration name position in source.
 
+std::vector< stdex::parser::html_attributeattributes
 Declaration attribute positions in source.
 
- Public Attributes inherited from stdex::html::sequence
+stdex::parser::html_sequence_t type
 Sequence type. Enum is used for performance reasons (vs. dynamic_cast)
 
+stdex::interval< size_t > interval
 Sequence position in source.
 
+sequenceparent
 Parent sequence.
 
+

Detailed Description

+

HTML declaration.

+

The documentation for this class was generated from the following file: +
+ + + + diff --git a/classstdex_1_1html_1_1declaration.png b/classstdex_1_1html_1_1declaration.png new file mode 100644 index 0000000000000000000000000000000000000000..739a31ce78c9613b9194e2d486d9534152e5d1b4 GIT binary patch literal 627 zcmeAS@N?(olHy`uVBq!ia0vp^T|gYb!3-on{*jdjQqloFA+G=b{|7Q(y!l$%e`vXd zfo6fk^fNCG95?_J51w>+1yGK&B*-tA0mugfbEer>7#JA;dAc};R4~4s`?~M70#D0v z;gz$#*FU<7EM+4cRJ9%W}IvEH$?>v+XW?SpfVZ|G)JJ&~5XP+|7h zwM;TgBA*x5_8k0dmNv!k%dN`~gqF-~-5%kbx&GOYCrxd!SDI`2m$pq`Ah`7X?toWs z?k{~?(&GG@_0*o{Pc3VL#q*zZE!CBrymotFaAu|B`l6?WhfZ@ziASlvS=7|lxn|zH zFaghh{05D89>(!2hZ|0>oH6s+b@^t9FpR5>|S zW6~3&DZe%z1BOM@{1Th0>CF3^l{_a)dDUE;cKl`Rt=czx_y3wBw>)_EitegCzxs?9 z9W|eBbZ>FXl{LB|L7Vr5s`0G6DRA}I>qDQX)J|CV!{oZm-IHx8&yr)yzh|juYs|e} z;K-b3d+>aKSIGGb?^bP#U#wH3bN9Z@)Q1*MlU}NNd7Rag_m0+7%YNuz{FHf0mE&u! zPd?ly-(<4J3Qv6`t({TnIO$8bmxyPPYM07RA=gPU)eBu*au(L--7V~D%HsVAOdbrL Lu6{1-oD!M<8hRjH literal 0 HcmV?d00001 diff --git a/classstdex_1_1html_1_1document-members.html b/classstdex_1_1html_1_1document-members.html new file mode 100644 index 000000000..f9c70f9fc --- /dev/null +++ b/classstdex_1_1html_1_1document-members.html @@ -0,0 +1,113 @@ + + + + + + + +stdex: Member List + + + + + + + + + +
+
+ + + + + + +
+
stdex +
+
Additional custom or not Standard C++ covered algorithms
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
stdex::html::document< _Elem, _Traits, _Alloc > Member List
+
+
+ +

This is the complete list of members for stdex::html::document< _Elem, _Traits, _Alloc >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + +
active_element() conststdex::html::document< _Elem, _Traits, _Alloc >inlineprotected
append(_In_reads_or_z_opt_(num_chars) const _Elem *source, size_t num_chars=SIZE_MAX)stdex::html::document< _Elem, _Traits, _Alloc >inline
assign(_In_reads_or_z_opt_(num_chars) const _Elem *source, size_t num_chars=SIZE_MAX)stdex::html::document< _Elem, _Traits, _Alloc >inline
clear()stdex::html::document< _Elem, _Traits, _Alloc >inline
document() (defined in stdex::html::document< _Elem, _Traits, _Alloc >)stdex::html::document< _Elem, _Traits, _Alloc >inline
finalize()stdex::html::document< _Elem, _Traits, _Alloc >inline
m_any_char (defined in stdex::html::document< _Elem, _Traits, _Alloc >)stdex::html::document< _Elem, _Traits, _Alloc >protected
m_charsetstdex::html::document< _Elem, _Traits, _Alloc >protected
m_condition_end (defined in stdex::html::document< _Elem, _Traits, _Alloc >)stdex::html::document< _Elem, _Traits, _Alloc >protected
m_condition_start (defined in stdex::html::document< _Elem, _Traits, _Alloc >)stdex::html::document< _Elem, _Traits, _Alloc >protected
m_element_stackstdex::html::document< _Elem, _Traits, _Alloc >protected
m_entitiesstdex::html::document< _Elem, _Traits, _Alloc >protected
m_is_cdatastdex::html::document< _Elem, _Traits, _Alloc >protected
m_is_rcdatastdex::html::document< _Elem, _Traits, _Alloc >protected
m_is_special_elementstdex::html::document< _Elem, _Traits, _Alloc >protected
m_num_invalid_conditionsstdex::html::document< _Elem, _Traits, _Alloc >protected
m_num_parsedstdex::html::document< _Elem, _Traits, _Alloc >protected
m_num_valid_conditionsstdex::html::document< _Elem, _Traits, _Alloc >protected
m_sequencesstdex::html::document< _Elem, _Traits, _Alloc >protected
m_sourcestdex::html::document< _Elem, _Traits, _Alloc >protected
m_tag (defined in stdex::html::document< _Elem, _Traits, _Alloc >)stdex::html::document< _Elem, _Traits, _Alloc >protected
parser< _Elem, _Traits, _Alloc > (defined in stdex::html::document< _Elem, _Traits, _Alloc >)stdex::html::document< _Elem, _Traits, _Alloc >friend
replace_entities(_In_reads_or_z_opt_(num_chars) const _Elem *input, size_t num_chars) conststdex::html::document< _Elem, _Traits, _Alloc >inlineprotected
source() conststdex::html::document< _Elem, _Traits, _Alloc >inline
+ + + + diff --git a/classstdex_1_1html_1_1document.html b/classstdex_1_1html_1_1document.html new file mode 100644 index 000000000..8e308bc20 --- /dev/null +++ b/classstdex_1_1html_1_1document.html @@ -0,0 +1,203 @@ + + + + + + + +stdex: stdex::html::document< _Elem, _Traits, _Alloc > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
stdex +
+
Additional custom or not Standard C++ covered algorithms
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
stdex::html::document< _Elem, _Traits, _Alloc > Class Template Reference
+
+
+ +

HTML document. + More...

+ +

#include <stdex/html.hpp>

+ + + + + + + + + + + + + + + + + +

+Public Member Functions

+void clear ()
 Empties document.
 
+void append (_In_reads_or_z_opt_(num_chars) const _Elem *source, size_t num_chars=SIZE_MAX)
 Parses HTML source code by chunks.
 
+void finalize ()
 Finalizes document when no more appending is planned.
 
+void assign (_In_reads_or_z_opt_(num_chars) const _Elem *source, size_t num_chars=SIZE_MAX)
 Parses HTML document source code.
 
+const std::basic_string< _Elem, _Traits, _Alloc > & source () const
 Returns document HTML source code.
 
+ + + + + + + +

+Protected Member Functions

+element_startactive_element () const
 Returns starting tag of currently active element or nullptr if no element is known to be started.
 
+std::basic_string< _Elem, _Traits, _Alloc > replace_entities (_In_reads_or_z_opt_(num_chars) const _Elem *input, size_t num_chars) const
 Replaces entities with their content.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Protected Attributes

+std::basic_string< _Elem, _Traits, _Alloc > m_source
 Document HTML source code.
 
+size_t m_num_parsed
 Number of characters already parsed.
 
+stdex::charset_id m_charset
 Document charset.
 
+size_t m_num_valid_conditions
 Number of started valid conditions.
 
+size_t m_num_invalid_conditions
 Number of started invalid conditions.
 
+bool m_is_cdata
 Inside of CDATA?
 
+bool m_is_rcdata
 Inside of RCDATA?
 
+stdex::parser::basic_html_declaration_condition_start< _Elem > m_condition_start
 
+stdex::parser::basic_html_declaration_condition_end< _Elem > m_condition_end
 
+stdex::parser::basic_any_cu< _Elem > m_any_char
 
+std::vector< std::unique_ptr< entity< _Elem, _Traits, _Alloc > > > m_entities
 Array of entities.
 
+stdex::parser::basic_html_tag< _Elem > m_tag
 
+sequence_store m_sequences
 Store of sequences.
 
+std::vector< element_start * > m_element_stack
 LIFO stack of started elements.
 
+bool m_is_special_element
 Inside of a special element (<SCRIPT>, <STYLE>, ...)?
 
+ + + +

+Friends

+class parser< _Elem, _Traits, _Alloc >
 
+

Detailed Description

+
template<class _Elem, class _Traits = std::char_traits<_Elem>, class _Alloc = std::allocator<_Elem>>
+class stdex::html::document< _Elem, _Traits, _Alloc >

HTML document.

+

The documentation for this class was generated from the following file: +
+ + + + diff --git a/classstdex_1_1html_1_1element-members.html b/classstdex_1_1html_1_1element-members.html new file mode 100644 index 000000000..31807f222 --- /dev/null +++ b/classstdex_1_1html_1_1element-members.html @@ -0,0 +1,99 @@ + + + + + + + +stdex: Member List + + + + + + + + + +
+
+ + + + + + +
+
stdex +
+
Additional custom or not Standard C++ covered algorithms
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
stdex::html::element Member List
+
+
+ +

This is the complete list of members for stdex::html::element, including all inherited members.

+ + + + + + + + + + + +
attributesstdex::html::element
codestdex::html::element
element(stdex::parser::basic_html_tag< T > &&tag, const T *src, sequence *parent=nullptr) (defined in stdex::html::element)stdex::html::elementinline
element_code(_In_reads_z_(num_chars) const T *name, size_t num_chars) (defined in stdex::html::element)stdex::html::elementinlinestatic
intervalstdex::html::sequence
namestdex::html::element
parentstdex::html::sequence
sequence(stdex::parser::html_sequence_t _type=stdex::parser::html_sequence_t::unknown, size_t start=0, size_t end=0, sequence *_parent=nullptr) (defined in stdex::html::sequence)stdex::html::sequenceinline
typestdex::html::sequence
~sequence() (defined in stdex::html::sequence)stdex::html::sequenceinlinevirtual
+ + + + diff --git a/classstdex_1_1html_1_1element.html b/classstdex_1_1html_1_1element.html new file mode 100644 index 000000000..115690a2a --- /dev/null +++ b/classstdex_1_1html_1_1element.html @@ -0,0 +1,158 @@ + + + + + + + +stdex: stdex::html::element Class Reference + + + + + + + + + +
+
+ + + + + + +
+
stdex +
+
Additional custom or not Standard C++ covered algorithms
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+ +
+ +

HTML element <.../> + More...

+ +

#include <stdex/html.hpp>

+
+Inheritance diagram for stdex::html::element:
+
+
+ + +stdex::html::sequence +stdex::html::element_start + +
+ + + + + + + + +

+Public Member Functions

+template<class T >
 element (stdex::parser::basic_html_tag< T > &&tag, const T *src, sequence *parent=nullptr)
 
- Public Member Functions inherited from stdex::html::sequence
sequence (stdex::parser::html_sequence_t _type=stdex::parser::html_sequence_t::unknown, size_t start=0, size_t end=0, sequence *_parent=nullptr)
 
+ + + + +

+Static Public Member Functions

+template<class T >
static element_t element_code (_In_reads_z_(num_chars) const T *name, size_t num_chars)
 
+ + + + + + + + + + + + + + + + + + + + +

+Public Attributes

+element_t code
 Element code.
 
+stdex::interval< size_t > name
 Element name position in source.
 
+std::vector< stdex::parser::html_attributeattributes
 Element attribute positions in source.
 
- Public Attributes inherited from stdex::html::sequence
+stdex::parser::html_sequence_t type
 Sequence type. Enum is used for performance reasons (vs. dynamic_cast)
 
+stdex::interval< size_t > interval
 Sequence position in source.
 
+sequenceparent
 Parent sequence.
 
+

Detailed Description

+

HTML element <.../>

+

The documentation for this class was generated from the following file: +
+ + + + diff --git a/classstdex_1_1html_1_1element.png b/classstdex_1_1html_1_1element.png new file mode 100644 index 0000000000000000000000000000000000000000..1ae1be13aeda14f5e3f3442d061ea23cac2d952d GIT binary patch literal 929 zcmeAS@N?(olHy`uVBq!ia0vp^Q-QdHgBeKPG>NnTQqloFA+G=b{|7Q(y!l$%e`vXd zfo6fk^fNCG95?_J51w>+1yGK&B*-tA0mugfbEer>7#Ns!JY5_^Dj46+eVF$|fv4qo zv&hfC^M71&V6wOuTb_S)vAXv>UQV-r2Fw0-2YE&MX{hX+F{w)>*-L9u&r8LrKKzpw zTTb4m?745@eP`8bww3noo2=x5-`}5o{$Zho??c@cx`pSi=bKi1*pYu?q0px2^O`B! z3qx+UnwV9@=of#eb@yNSEOgymKRqWYPvAKueKR3tC!|9A#Ps>m);6?@%wz)tn4=OL!TkU7i$jdz;d= zNg>u(nj*4;p31T`teC{bkmRMs(4o1KL1EbvriK~#1^&Rsne}DgLe=Je6^UB8^m;UYjDI?c@S)gv;{KeXTYV3tq ztdg=_By=^;cKM1jY4@qMCdN`R&k{mISF49yKa{N6cD8cCyE$EcX>zMpx%vAS+=^aZ zGhx-P?*|sH3)kP{`1H+LoiD4x{2qMycaPJmHg#8QXx=wr^%wUKM$4~0m2*zEByCyS ziT@U>R^1PWJ5Y7%sw^MtsU0V>m>T#qnH!#NQMtNpZO2xXt9)A(uFVRmWM@=ZMcD7i zDqj9yuC;W^`3!9!!O^M$42_8?-~gA@nklE^UaYouvAhI-#`@L4C;z#=I&T)Y$o3UbD%kzUfL(bhhbP0l+XkK0KT)5 literal 0 HcmV?d00001 diff --git a/classstdex_1_1html_1_1element__end-members.html b/classstdex_1_1html_1_1element__end-members.html new file mode 100644 index 000000000..741e6fa5c --- /dev/null +++ b/classstdex_1_1html_1_1element__end-members.html @@ -0,0 +1,98 @@ + + + + + + + +stdex: Member List + + + + + + + + + +
+
+ + + + + + +
+
stdex +
+
Additional custom or not Standard C++ covered algorithms
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
stdex::html::element_end Member List
+
+
+ +

This is the complete list of members for stdex::html::element_end, including all inherited members.

+ + + + + + + + + + +
codestdex::html::element_end
element_end(stdex::parser::basic_html_tag< T > &&tag, const T *src, sequence *parent=nullptr, element_start *_start=nullptr) (defined in stdex::html::element_end)stdex::html::element_endinline
intervalstdex::html::sequence
namestdex::html::element_end
parentstdex::html::sequence
sequence(stdex::parser::html_sequence_t _type=stdex::parser::html_sequence_t::unknown, size_t start=0, size_t end=0, sequence *_parent=nullptr) (defined in stdex::html::sequence)stdex::html::sequenceinline
startstdex::html::element_end
typestdex::html::sequence
~sequence() (defined in stdex::html::sequence)stdex::html::sequenceinlinevirtual
+ + + + diff --git a/classstdex_1_1html_1_1element__end.html b/classstdex_1_1html_1_1element__end.html new file mode 100644 index 000000000..f36310282 --- /dev/null +++ b/classstdex_1_1html_1_1element__end.html @@ -0,0 +1,149 @@ + + + + + + + +stdex: stdex::html::element_end Class Reference + + + + + + + + + +
+
+ + + + + + +
+
stdex +
+
Additional custom or not Standard C++ covered algorithms
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
stdex::html::element_end Class Reference
+
+
+ +

Ending tag of an HTML element </...> + More...

+ +

#include <stdex/html.hpp>

+
+Inheritance diagram for stdex::html::element_end:
+
+
+ + +stdex::html::sequence + +
+ + + + + + + + +

+Public Member Functions

+template<class T >
 element_end (stdex::parser::basic_html_tag< T > &&tag, const T *src, sequence *parent=nullptr, element_start *_start=nullptr)
 
- Public Member Functions inherited from stdex::html::sequence
sequence (stdex::parser::html_sequence_t _type=stdex::parser::html_sequence_t::unknown, size_t start=0, size_t end=0, sequence *_parent=nullptr)
 
+ + + + + + + + + + + + + + + + + + + + +

+Public Attributes

+element_t code
 Element code.
 
+stdex::interval< size_t > name
 Element name position in source.
 
+element_startstart
 Corresponding starting tag.
 
- Public Attributes inherited from stdex::html::sequence
+stdex::parser::html_sequence_t type
 Sequence type. Enum is used for performance reasons (vs. dynamic_cast)
 
+stdex::interval< size_t > interval
 Sequence position in source.
 
+sequenceparent
 Parent sequence.
 
+

Detailed Description

+

Ending tag of an HTML element </...>

+

The documentation for this class was generated from the following file: +
+ + + + diff --git a/classstdex_1_1html_1_1element__end.png b/classstdex_1_1html_1_1element__end.png new file mode 100644 index 0000000000000000000000000000000000000000..e1e5769b4a040a01a1c5cf6670f094bedb8cd393 GIT binary patch literal 649 zcmV;40(Sk0P)vTJr#LVva2S`&=)l0h|Ns9}lGCUF000SeQchC<|NsC0|NsC0Hv*f~0006M zNklJzbsqQ27`z_mbEGlFea6AX$jPSg7CRxeM{^|E%>Qu1scONW zA=U5_G$QqLH&V?Wwf9omVH6;(HE`?l#r=8MOH+H3wwQmM+G_5Hd)iCy%DXpi+|X-m z=f(|*ru+Bk#*ySt>ifS~iA0i-e$T&MlKfXnB$AA@C(>~o$5sM>pV12d_R@Yxuh(`= z`yrh~yD@Euls66lVkHs)L`oz8h?GbG5Gj!WAW|X$K%_(hfJli10Fe?203sz407Ob8 z0Em=G01)ZFMlv(oOE5{=Nr@y$krGLgB27s3#m96OXUFh-Upc( zFHP+&*8(urhdww3+>maup%^H{%H00000NkvXXu0mjfZca0& literal 0 HcmV?d00001 diff --git a/classstdex_1_1html_1_1element__start-members.html b/classstdex_1_1html_1_1element__start-members.html new file mode 100644 index 000000000..b1f6a993f --- /dev/null +++ b/classstdex_1_1html_1_1element__start-members.html @@ -0,0 +1,101 @@ + + + + + + + +stdex: Member List + + + + + + + + + +
+
+ + + + + + +
+
stdex +
+
Additional custom or not Standard C++ covered algorithms
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
stdex::html::element_start Member List
+
+
+ +

This is the complete list of members for stdex::html::element_start, including all inherited members.

+ + + + + + + + + + + + + +
attributesstdex::html::element
codestdex::html::element
element(stdex::parser::basic_html_tag< T > &&tag, const T *src, sequence *parent=nullptr) (defined in stdex::html::element)stdex::html::elementinline
element_code(_In_reads_z_(num_chars) const T *name, size_t num_chars) (defined in stdex::html::element)stdex::html::elementinlinestatic
element_start(stdex::parser::basic_html_tag< T > &&tag, const T *src, sequence *parent=nullptr, sequence *_end=nullptr) (defined in stdex::html::element_start)stdex::html::element_startinline
endstdex::html::element_start
intervalstdex::html::sequence
namestdex::html::element
parentstdex::html::sequence
sequence(stdex::parser::html_sequence_t _type=stdex::parser::html_sequence_t::unknown, size_t start=0, size_t end=0, sequence *_parent=nullptr) (defined in stdex::html::sequence)stdex::html::sequenceinline
typestdex::html::sequence
~sequence() (defined in stdex::html::sequence)stdex::html::sequenceinlinevirtual
+ + + + diff --git a/classstdex_1_1html_1_1element__start.html b/classstdex_1_1html_1_1element__start.html new file mode 100644 index 000000000..4fd1c7374 --- /dev/null +++ b/classstdex_1_1html_1_1element__start.html @@ -0,0 +1,168 @@ + + + + + + + +stdex: stdex::html::element_start Class Reference + + + + + + + + + +
+
+ + + + + + +
+
stdex +
+
Additional custom or not Standard C++ covered algorithms
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
stdex::html::element_start Class Reference
+
+
+ +

Starting tag of an HTML element <...> + More...

+ +

#include <stdex/html.hpp>

+
+Inheritance diagram for stdex::html::element_start:
+
+
+ + +stdex::html::element +stdex::html::sequence + +
+ + + + + + + + + + + + +

+Public Member Functions

+template<class T >
 element_start (stdex::parser::basic_html_tag< T > &&tag, const T *src, sequence *parent=nullptr, sequence *_end=nullptr)
 
- Public Member Functions inherited from stdex::html::element
+template<class T >
 element (stdex::parser::basic_html_tag< T > &&tag, const T *src, sequence *parent=nullptr)
 
- Public Member Functions inherited from stdex::html::sequence
sequence (stdex::parser::html_sequence_t _type=stdex::parser::html_sequence_t::unknown, size_t start=0, size_t end=0, sequence *_parent=nullptr)
 
+ + + + + + + + + + + + + + + + + + + + + + + + +

+Public Attributes

+sequenceend
 Corresponding ending tag of type element_end; When element is ended by a start of another element, this points to the another element start.
 
- Public Attributes inherited from stdex::html::element
+element_t code
 Element code.
 
+stdex::interval< size_t > name
 Element name position in source.
 
+std::vector< stdex::parser::html_attributeattributes
 Element attribute positions in source.
 
- Public Attributes inherited from stdex::html::sequence
+stdex::parser::html_sequence_t type
 Sequence type. Enum is used for performance reasons (vs. dynamic_cast)
 
+stdex::interval< size_t > interval
 Sequence position in source.
 
+sequenceparent
 Parent sequence.
 
+ + + + + +

+Additional Inherited Members

- Static Public Member Functions inherited from stdex::html::element
+template<class T >
static element_t element_code (_In_reads_z_(num_chars) const T *name, size_t num_chars)
 
+

Detailed Description

+

Starting tag of an HTML element <...>

+

The documentation for this class was generated from the following file: +
+ + + + diff --git a/classstdex_1_1html_1_1element__start.png b/classstdex_1_1html_1_1element__start.png new file mode 100644 index 0000000000000000000000000000000000000000..298b88b45e2492204bac24d40f2c6867fea7cd99 GIT binary patch literal 924 zcmeAS@N?(olHy`uVBq!ia0vp^Q-QdHgBeKPG>NnTQqloFA+G=b{|7Q(y!l$%e`vXd zfo6fk^fNCG95?_J51w>+1yGK&B*-tA0mugfbEer>7#Nt4OOSA9Q~p>wUpm; zt*_eizDZwr|H^6IHoEaK-M_5o_LbY;FQr zU3IOGuWT|~w#~Zfc0cwlo*wd7>$;z{_+&QeL)mW}LglXp1|`p*o3MTR=1+#JjQ?=F zT6rs9{OZnKOR_%a?Z3K1dhfzr;Ym?*!>?=J33uM^UAFmW-??qG=RFYr^{SHPvh|JU zbH4t3!dJ%4Yi?AW#6pjU3_dQ|Fk86`YYD8-u5z?J-gBGdCIGt3ZS~_>NnoLT~jmR zRl)j3-`MqWKiICOUw^ySktjpzO#Dk;^w_u6R+&}a&W6o?18DJ z3wFi0-(R-pnca<)b7!rk<(vu`%1p=Qa7%Aebw6c%Ik;C4o#%+U|)5c z({II@y|2p6NYxCdc$I`=!q5k0o;@s)6~4!PC{xWt~$(69E6E%`N}{ literal 0 HcmV?d00001 diff --git a/classstdex_1_1html_1_1instruction-members.html b/classstdex_1_1html_1_1instruction-members.html new file mode 100644 index 000000000..4d64da6da --- /dev/null +++ b/classstdex_1_1html_1_1instruction-members.html @@ -0,0 +1,96 @@ + + + + + + + +stdex: Member List + + + + + + + + + +
+
+ + + + + + +
+
stdex +
+
Additional custom or not Standard C++ covered algorithms
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
stdex::html::instruction Member List
+
+
+ +

This is the complete list of members for stdex::html::instruction, including all inherited members.

+ + + + + + + + +
contentstdex::html::instruction
instruction(stdex::parser::basic_html_tag< T > &&tag, sequence *parent=nullptr) (defined in stdex::html::instruction)stdex::html::instructioninline
intervalstdex::html::sequence
parentstdex::html::sequence
sequence(stdex::parser::html_sequence_t _type=stdex::parser::html_sequence_t::unknown, size_t start=0, size_t end=0, sequence *_parent=nullptr) (defined in stdex::html::sequence)stdex::html::sequenceinline
typestdex::html::sequence
~sequence() (defined in stdex::html::sequence)stdex::html::sequenceinlinevirtual
+ + + + diff --git a/classstdex_1_1html_1_1instruction.html b/classstdex_1_1html_1_1instruction.html new file mode 100644 index 000000000..9a397b49e --- /dev/null +++ b/classstdex_1_1html_1_1instruction.html @@ -0,0 +1,141 @@ + + + + + + + +stdex: stdex::html::instruction Class Reference + + + + + + + + + +
+
+ + + + + + +
+
stdex +
+
Additional custom or not Standard C++ covered algorithms
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
stdex::html::instruction Class Reference
+
+
+ +

HTML instruction. + More...

+ +

#include <stdex/html.hpp>

+
+Inheritance diagram for stdex::html::instruction:
+
+
+ + +stdex::html::sequence + +
+ + + + + + + + +

+Public Member Functions

+template<class T >
 instruction (stdex::parser::basic_html_tag< T > &&tag, sequence *parent=nullptr)
 
- Public Member Functions inherited from stdex::html::sequence
sequence (stdex::parser::html_sequence_t _type=stdex::parser::html_sequence_t::unknown, size_t start=0, size_t end=0, sequence *_parent=nullptr)
 
+ + + + + + + + + + + + + + +

+Public Attributes

+stdex::interval< size_t > content
 Instruction content position in source.
 
- Public Attributes inherited from stdex::html::sequence
+stdex::parser::html_sequence_t type
 Sequence type. Enum is used for performance reasons (vs. dynamic_cast)
 
+stdex::interval< size_t > interval
 Sequence position in source.
 
+sequenceparent
 Parent sequence.
 
+

Detailed Description

+

HTML instruction.

+

The documentation for this class was generated from the following file: +
+ + + + diff --git a/classstdex_1_1html_1_1instruction.png b/classstdex_1_1html_1_1instruction.png new file mode 100644 index 0000000000000000000000000000000000000000..c9a941b9b99f8f8263cbcbdb3b019f55b9634557 GIT binary patch literal 590 zcmeAS@N?(olHy`uVBq!ia0vp^tw0>W!3-oBzPn8VlF|V_A+G=b{|7Q(y!l$%e`vXd zfo6fk^fNCG95?_J51w>+1yGK&B*-tA0mugfbEer>7#J9Ddb&7(d86s`pQM|opsM@7()`2t;Rot=DjI*~aZOX*N*aaZ+Go(w`G2Cmpry6XZ8u!d>s`c + + + + + + +stdex: Member List + + + + + + + + + +
+
+ + + + + + +
+
stdex +
+
Additional custom or not Standard C++ covered algorithms
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
stdex::html::parser< _Elem, _Traits, _Alloc > Member List
+
+
+ +

This is the complete list of members for stdex::html::parser< _Elem, _Traits, _Alloc >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
append_inserted_tokens(std::basic_string< _Elem, _Traits, _Alloc > &source, inserted_token_list &inserted_tokens, size_t word_index, bool after_word, token_list &active_tokens)stdex::html::parser< _Elem, _Traits, _Alloc >inline
append_token(std::unique_ptr< T > &&token)stdex::html::parser< _Elem, _Traits, _Alloc >inlineprotected
append_token(std::unique_ptr< T > &&token, std::basic_string< _Elem, _Traits, _Alloc > &source)stdex::html::parser< _Elem, _Traits, _Alloc >inlineprotected
end_tokens(std::basic_string< _Elem, _Traits, _Alloc > &source, token_list &active_tokens, const token_list &new_tokens)stdex::html::parser< _Elem, _Traits, _Alloc >inline
link(std::basic_string< _Elem, _Traits, _Alloc > &source, const text_token< _Elem, _Traits, _Alloc > *t)stdex::html::parser< _Elem, _Traits, _Alloc >inlinestatic
m_any_char (defined in stdex::html::parser< _Elem, _Traits, _Alloc >)stdex::html::parser< _Elem, _Traits, _Alloc >protected
m_css_cdc (defined in stdex::html::parser< _Elem, _Traits, _Alloc >)stdex::html::parser< _Elem, _Traits, _Alloc >protected
m_css_cdo (defined in stdex::html::parser< _Elem, _Traits, _Alloc >)stdex::html::parser< _Elem, _Traits, _Alloc >protected
m_css_comment (defined in stdex::html::parser< _Elem, _Traits, _Alloc >)stdex::html::parser< _Elem, _Traits, _Alloc >protected
m_css_import (defined in stdex::html::parser< _Elem, _Traits, _Alloc >)stdex::html::parser< _Elem, _Traits, _Alloc >protected
m_css_string (defined in stdex::html::parser< _Elem, _Traits, _Alloc >)stdex::html::parser< _Elem, _Traits, _Alloc >protected
m_css_uri (defined in stdex::html::parser< _Elem, _Traits, _Alloc >)stdex::html::parser< _Elem, _Traits, _Alloc >protected
m_documentstdex::html::parser< _Elem, _Traits, _Alloc >protected
m_offsetstdex::html::parser< _Elem, _Traits, _Alloc >protected
m_parse_framesstdex::html::parser< _Elem, _Traits, _Alloc >protected
m_progressstdex::html::parser< _Elem, _Traits, _Alloc >protected
m_sourcestdex::html::parser< _Elem, _Traits, _Alloc >protected
m_tokensstdex::html::parser< _Elem, _Traits, _Alloc >protected
m_urlstdex::html::parser< _Elem, _Traits, _Alloc >protected
make_absolute_url(std::basic_string< _Elem, _Traits, _Alloc > &rel)stdex::html::parser< _Elem, _Traits, _Alloc >inline
merge(token_list &a, const token_list &b)stdex::html::parser< _Elem, _Traits, _Alloc >inlinestatic
parse()stdex::html::parser< _Elem, _Traits, _Alloc >inline
parse(const sequence_store::const_iterator &end, uint32_t text_type=0)stdex::html::parser< _Elem, _Traits, _Alloc >inlineprotected
parse_css(size_t start, size_t end)stdex::html::parser< _Elem, _Traits, _Alloc >inlineprotected
parser(const document< _Elem, _Traits, _Alloc > &document, _In_reads_or_z_opt_(num_chars) const stdex::schar_t *url=nullptr, size_t num_chars=0, bool parse_frames=false, stdex::progress< size_t > *progress=nullptr) (defined in stdex::html::parser< _Elem, _Traits, _Alloc >)stdex::html::parser< _Elem, _Traits, _Alloc >inline
start_tokens(std::basic_string< _Elem, _Traits, _Alloc > &source, token_list &active_tokens, const token_list &new_tokens, token_list::const_iterator from)stdex::html::parser< _Elem, _Traits, _Alloc >inlinestatic
tokens() conststdex::html::parser< _Elem, _Traits, _Alloc >inline
+ + + + diff --git a/classstdex_1_1html_1_1parser.html b/classstdex_1_1html_1_1parser.html new file mode 100644 index 000000000..e9b745127 --- /dev/null +++ b/classstdex_1_1html_1_1parser.html @@ -0,0 +1,624 @@ + + + + + + + +stdex: stdex::html::parser< _Elem, _Traits, _Alloc > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
stdex +
+
Additional custom or not Standard C++ covered algorithms
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
stdex::html::parser< _Elem, _Traits, _Alloc > Class Template Reference
+
+
+ +

HTML parser. + More...

+ + + + + + + + + + + + + + + + + + + +

+Public Member Functions

parser (const document< _Elem, _Traits, _Alloc > &document, _In_reads_or_z_opt_(num_chars) const stdex::schar_t *url=nullptr, size_t num_chars=0, bool parse_frames=false, stdex::progress< size_t > *progress=nullptr)
 
+text_token< _Elem, _Traits, _Alloc > * parse ()
 Parses HTML document.
 
token_list::const_iterator end_tokens (std::basic_string< _Elem, _Traits, _Alloc > &source, token_list &active_tokens, const token_list &new_tokens)
 Pops ending tokens from the active token list and append their tags to the source code string.
 
void append_inserted_tokens (std::basic_string< _Elem, _Traits, _Alloc > &source, inserted_token_list &inserted_tokens, size_t word_index, bool after_word, token_list &active_tokens)
 Adds matching inserted tokens before/after the given word in source code.
 
+void make_absolute_url (std::basic_string< _Elem, _Traits, _Alloc > &rel)
 Converts URL to absolute.
 
+const token_vector & tokens () const
 Returns collection of tokens.
 
+ + + + + + + + + + +

+Static Public Member Functions

static void link (std::basic_string< _Elem, _Traits, _Alloc > &source, const text_token< _Elem, _Traits, _Alloc > *t)
 Rebuilds HTML source code from the token tree.
 
static void start_tokens (std::basic_string< _Elem, _Traits, _Alloc > &source, token_list &active_tokens, const token_list &new_tokens, token_list::const_iterator from)
 Pushes tokens to the active token list and appends their tags to the source code string.
 
static void merge (token_list &a, const token_list &b)
 Adds tokens from list b to list a creating an union.
 
+ + + + + + + + + + + + + + + +

+Protected Member Functions

template<class T >
T * append_token (std::unique_ptr< T > &&token)
 Adds token to the collection.
 
template<class T >
size_t append_token (std::unique_ptr< T > &&token, std::basic_string< _Elem, _Traits, _Alloc > &source)
 Adds token to the collection and appends its tag to the source code string.
 
text_token< _Elem, _Traits, _Alloc > * parse (const sequence_store::const_iterator &end, uint32_t text_type=0)
 Recursively parses HTML document.
 
+text_token< _Elem, _Traits, _Alloc > * parse_css (size_t start, size_t end)
 Parses CSS.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Protected Attributes

+const document< _Elem, _Traits, _Alloc > & m_document
 Document being analyzed.
 
+const stdex::sys_string m_url
 Absolute document URL.
 
+const bool m_parse_frames
 Parse frames.
 
+stdex::progress< size_t > * m_progress
 Progress indicator.
 
+const _Elem * m_source
 HTML source code.
 
+token_vector m_tokens
 HTML token storage.
 
+sequence_store::const_iterator m_offset
 Index of active section.
 
+stdex::parser::basic_css_cdo< _Elem > m_css_cdo
 
+stdex::parser::basic_css_cdc< _Elem > m_css_cdc
 
+stdex::parser::basic_css_comment< _Elem > m_css_comment
 
+stdex::parser::basic_css_string< _Elem > m_css_string
 
+stdex::parser::basic_css_uri< _Elem > m_css_uri
 
+stdex::parser::basic_css_import< _Elem > m_css_import
 
+stdex::parser::basic_any_cu< _Elem > m_any_char
 
+

Detailed Description

+
template<class _Elem, class _Traits, class _Alloc>
+class stdex::html::parser< _Elem, _Traits, _Alloc >

HTML parser.

+

Member Function Documentation

+ +

◆ append_inserted_tokens()

+ +
+
+
+template<class _Elem , class _Traits , class _Alloc >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void stdex::html::parser< _Elem, _Traits, _Alloc >::append_inserted_tokens (std::basic_string< _Elem, _Traits, _Alloc > & source,
inserted_token_list & inserted_tokens,
size_t word_index,
bool after_word,
token_list & active_tokens 
)
+
+inline
+
+ +

Adds matching inserted tokens before/after the given word in source code.

+
Parameters
+ + + + + + +
[in,out]sourceSource code
[in,out]inserted_tokensList of tokens to insert. The tokens are removed from the list once inserted.
[in]word_indexWord index
[in]after_wordfalse if source code is before the word; true if after the word
[in,out]active_tokensStack of active tokens
+
+
+ +
+
+ +

◆ append_token() [1/2]

+ +
+
+
+template<class _Elem , class _Traits , class _Alloc >
+
+template<class T >
+ + + + + +
+ + + + + + + + +
T * stdex::html::parser< _Elem, _Traits, _Alloc >::append_token (std::unique_ptr< T > && token)
+
+inlineprotected
+
+ +

Adds token to the collection.

+
Parameters
+ + +
[in]tokenToken
+
+
+
Returns
Pointer to the token for non-owning references
+ +
+
+ +

◆ append_token() [2/2]

+ +
+
+
+template<class _Elem , class _Traits , class _Alloc >
+
+template<class T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
size_t stdex::html::parser< _Elem, _Traits, _Alloc >::append_token (std::unique_ptr< T > && token,
std::basic_string< _Elem, _Traits, _Alloc > & source 
)
+
+inlineprotected
+
+ +

Adds token to the collection and appends its tag to the source code string.

+
Parameters
+ + + +
[in]tokenToken
[in,out]sourceSource code
+
+
+
Returns
Number of code units appended to the source code
+ +
+
+ +

◆ end_tokens()

+ +
+
+
+template<class _Elem , class _Traits , class _Alloc >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
token_list::const_iterator stdex::html::parser< _Elem, _Traits, _Alloc >::end_tokens (std::basic_string< _Elem, _Traits, _Alloc > & source,
token_list & active_tokens,
const token_list & new_tokens 
)
+
+inline
+
+ +

Pops ending tokens from the active token list and append their tags to the source code string.

+
Parameters
+ + + + +
[in,out]sourceSource code
[in,out]active_tokensStack of active tokens
[in]new_tokensDesired stack of active tokens
+
+
+
Returns
Position in new_tokens specifying where the cut was made
+ +
+
+ +

◆ link()

+ +
+
+
+template<class _Elem , class _Traits , class _Alloc >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
static void stdex::html::parser< _Elem, _Traits, _Alloc >::link (std::basic_string< _Elem, _Traits, _Alloc > & source,
const text_token< _Elem, _Traits, _Alloc > * t 
)
+
+inlinestatic
+
+ +

Rebuilds HTML source code from the token tree.

+
Parameters
+ + + +
[in,out]sourceString to append source code to
[in]tDocument root token
+
+
+ +
+
+ +

◆ merge()

+ +
+
+
+template<class _Elem , class _Traits , class _Alloc >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
static void stdex::html::parser< _Elem, _Traits, _Alloc >::merge (token_list & a,
const token_list & b 
)
+
+inlinestatic
+
+ +

Adds tokens from list b to list a creating an union.

+
Parameters
+ + + +
[in,out]aToken list to merge b into
[in]bToken list to merge to a
+
+
+ +
+
+ +

◆ parse()

+ +
+
+
+template<class _Elem , class _Traits , class _Alloc >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
text_token< _Elem, _Traits, _Alloc > * stdex::html::parser< _Elem, _Traits, _Alloc >::parse (const sequence_store::const_iterator & end,
uint32_t text_type = 0 
)
+
+inlineprotected
+
+ +

Recursively parses HTML document.

+
Parameters
+ + + +
[in]endParse sequences on [m_offset, end) interval
[in]text_typeText flags of the sequences being parsed
+
+
+
Returns
Token represening sequences parsed
+ +
+
+ +

◆ start_tokens()

+ +
+
+
+template<class _Elem , class _Traits , class _Alloc >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
static void stdex::html::parser< _Elem, _Traits, _Alloc >::start_tokens (std::basic_string< _Elem, _Traits, _Alloc > & source,
token_list & active_tokens,
const token_list & new_tokens,
token_list::const_iterator from 
)
+
+inlinestatic
+
+ +

Pushes tokens to the active token list and appends their tags to the source code string.

+
Parameters
+ + + + + +
[in,out]sourceSource code
[in,out]active_tokensStack of active tokens
[in]new_tokensNew tokens to add
[in]fromToken from new_tokens to start adding at
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classstdex_1_1html_1_1sequence-members.html b/classstdex_1_1html_1_1sequence-members.html new file mode 100644 index 000000000..ffd2e3e31 --- /dev/null +++ b/classstdex_1_1html_1_1sequence-members.html @@ -0,0 +1,94 @@ + + + + + + + +stdex: Member List + + + + + + + + + +
+
+ + + + + + +
+
stdex +
+
Additional custom or not Standard C++ covered algorithms
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
stdex::html::sequence Member List
+
+
+ +

This is the complete list of members for stdex::html::sequence, including all inherited members.

+ + + + + + +
intervalstdex::html::sequence
parentstdex::html::sequence
sequence(stdex::parser::html_sequence_t _type=stdex::parser::html_sequence_t::unknown, size_t start=0, size_t end=0, sequence *_parent=nullptr) (defined in stdex::html::sequence)stdex::html::sequenceinline
typestdex::html::sequence
~sequence() (defined in stdex::html::sequence)stdex::html::sequenceinlinevirtual
+ + + + diff --git a/classstdex_1_1html_1_1sequence.html b/classstdex_1_1html_1_1sequence.html new file mode 100644 index 000000000..e69f45f67 --- /dev/null +++ b/classstdex_1_1html_1_1sequence.html @@ -0,0 +1,136 @@ + + + + + + + +stdex: stdex::html::sequence Class Reference + + + + + + + + + +
+
+ + + + + + +
+
stdex +
+
Additional custom or not Standard C++ covered algorithms
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
stdex::html::sequence Class Reference
+
+
+ +

Base class for HTML sequences. + More...

+ +

#include <stdex/html.hpp>

+
+Inheritance diagram for stdex::html::sequence:
+
+
+ + +stdex::html::comment +stdex::html::declaration +stdex::html::element +stdex::html::element_end +stdex::html::instruction +stdex::html::element_start + +
+ + + + +

+Public Member Functions

sequence (stdex::parser::html_sequence_t _type=stdex::parser::html_sequence_t::unknown, size_t start=0, size_t end=0, sequence *_parent=nullptr)
 
+ + + + + + + + + + +

+Public Attributes

+stdex::parser::html_sequence_t type
 Sequence type. Enum is used for performance reasons (vs. dynamic_cast)
 
+stdex::interval< size_t > interval
 Sequence position in source.
 
+sequenceparent
 Parent sequence.
 
+

Detailed Description

+

Base class for HTML sequences.

+

The documentation for this class was generated from the following file: +
+ + + + diff --git a/classstdex_1_1html_1_1sequence.png b/classstdex_1_1html_1_1sequence.png new file mode 100644 index 0000000000000000000000000000000000000000..889d204e8681106c1987570a20273faaf0626887 GIT binary patch literal 2057 zcmb_dYgAKL7Um&Fc}3PJfrN)$#Hu4hV2qF=LV0C~7G$7}%2OTAE zpS{2Hm+-JZSee7kjf{+}a3MhvMnD?MubHgf%mtMmr2dIkrCueT#*0AB;!}&MM8&9Z_qrg zapZx$T$mr;wh3pR|0K5*Q{Pvh9)1wNuL(>{M1q;_&xVwlsTkc9YHe_fFjZLV*E!WS z=@pgjm*Xvw67`ptALl)hVoeT(&)te?<|kCYsGiWehi3h5-CANPBL0zPtDs~nF4d&& z*t>Bw-M%euK;flh3*19t*-r|V$q7T;n}{&c-ER#MjXfjyxa#G{^|JLWmohQ5?gy;v zSREZBDX4Dj1_Y!N6IfT6=EtPIO=|-;OspvO;+fO_ky72b@0f`>w|)t>){bA%yk6Ch zP*2tPrnmJxc_l=L(%3fPbLtr0H-2YU5_UVsudw9#dp>QehVf|@C5=o2BpY+?N(Z{xcTg}1U3?25Zg&G&AU zw^K~aw(>xUJ9OI@x~5-^q<2kM ziqpHuhm|>8O*BV!{sD18v^m^G<{gEjaGk4f zRNl$B)jjkoBv^@C-Crj{PMwq;5a3gT7{J%hh60TPap2l3QKfeH8sx*COjXVxQp1QA z_c`2U5n|On+m{Xp{VnAULp2PPehXW)c0;) zy1HC3dT-{qPvW_ULe1va^P9G~cIhLgl^~{u&`fTAE#b=BMPqb3Mt8k^f0KtUXCa-B zV06dXEc~eBt}d5LDn`|#I=6PoO(i*!JWG98Q=3t!ay~ftHK#8vkkH}giNj~lQZHu3 zp2&54lX`&@U*(6E=6)_oRtq1Ck4f(pamKbssRtuDgxcQtunm|YuD~yD;rJP&DErKR zie*?`07orTj4kFRKY}%QNT--tR2pU$Dy}27SQ87jAXpzi-jR~4A}T`fwk5yFvpM5` zeN;_>E)B%Eu1!;0C zfpGJMsPN+B;zUkpH)l3_`!_DYytq?|ZOSNK&f$Vz_Z4v<8VJ@>5HtN^eRwT)Ok12W zq={A!B&@GJ*Q-{0Z@gEPoqY9QmV#g*?1wIVf|6A|>BpdHU!K?}B7t^3K23Y}mviA=AR|51O1Z3|9>L>{D_)E~H zg%E>6m*Q6c1bCEJ-Vqrj$)Ig!O;Pq9cRX=7vSrew!D+`r$vo+-3$uU8a51>j?R@dF z%Nrf>UzOF1hdbW24N-u#!5xtq*I2bgj2pBkob%!&eb09Dgh6A7EnxKu2A+9#^I`5L zf5q6vTBsw6DdUw1M_k+xhW&Qc_SrPR9bzz4_gXH7+IDuFCVTMbz-_riT`7y?IFWi} ziv)wPD-wekTnpfbTYm{Ldy~bvp%EI1H;Z_$y@mO$a O8{vY(f;a)^KmRwxSM`bj literal 0 HcmV?d00001 diff --git a/classstdex_1_1html_1_1starting__token-members.html b/classstdex_1_1html_1_1starting__token-members.html new file mode 100644 index 000000000..8b5e06222 --- /dev/null +++ b/classstdex_1_1html_1_1starting__token-members.html @@ -0,0 +1,105 @@ + + + + + + + +stdex: Member List + + + + + + + + + +
+
+ + + + + + +
+
stdex +
+
Additional custom or not Standard C++ covered algorithms
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
stdex::html::starting_token< _Elem, _Traits, _Alloc > Member List
+
+
+ +

This is the complete list of members for stdex::html::starting_token< _Elem, _Traits, _Alloc >, including all inherited members.

+ + + + + + + + + + + + + + + + + +
append_tag(std::basic_string< char, _Traits, _Alloc > &str) conststdex::html::tokeninline
append_tag(std::basic_string< wchar_t, _Traits, _Alloc > &str) conststdex::html::tokeninline
datastdex::html::token
end_sequencestdex::html::starting_token< _Elem, _Traits, _Alloc >
mappingstdex::html::text_token< _Elem, _Traits, _Alloc >
namestdex::html::starting_token< _Elem, _Traits, _Alloc >
parse_tag(const T *str, size_t &offset) (defined in stdex::html::token)stdex::html::tokeninlinestatic
parser< _Elem, _Traits, _Alloc > (defined in stdex::html::starting_token< _Elem, _Traits, _Alloc >)stdex::html::starting_token< _Elem, _Traits, _Alloc >friend
sequencestdex::html::token
starting_token(_In_reads_or_z_opt_(num_chars_text) const _Elem *_text=nullptr, size_t num_chars_text=0, _In_reads_or_z_opt_(num_chars_name) const _Elem *_name=nullptr, size_t num_chars_name=0, uint32_t text_type=0, stdex::html::sequence *sequence=nullptr, stdex::html::sequence *_end_sequence=nullptr, uintptr_t data=0) (defined in stdex::html::starting_token< _Elem, _Traits, _Alloc >)stdex::html::starting_token< _Elem, _Traits, _Alloc >inlineprotected
textstdex::html::text_token< _Elem, _Traits, _Alloc >
text_token(token_t type=token_t::complete, _In_reads_or_z_opt_(num_chars) const _Elem *_text=nullptr, size_t num_chars=0, uint32_t _text_type=0, stdex::html::sequence *sequence=nullptr, uintptr_t data=0) (defined in stdex::html::text_token< _Elem, _Traits, _Alloc >)stdex::html::text_token< _Elem, _Traits, _Alloc >inlineprotected
text_typestdex::html::text_token< _Elem, _Traits, _Alloc >
token(token_t _type=token_t::root, sequence *_sequence=nullptr, uintptr_t _data=0) (defined in stdex::html::token)stdex::html::tokeninlineprotected
typestdex::html::token
~token() (defined in stdex::html::token)stdex::html::tokeninlinevirtual
+ + + + diff --git a/classstdex_1_1html_1_1starting__token.html b/classstdex_1_1html_1_1starting__token.html new file mode 100644 index 000000000..d05a7cb64 --- /dev/null +++ b/classstdex_1_1html_1_1starting__token.html @@ -0,0 +1,187 @@ + + + + + + + +stdex: stdex::html::starting_token< _Elem, _Traits, _Alloc > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
stdex +
+
Additional custom or not Standard C++ covered algorithms
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
stdex::html::starting_token< _Elem, _Traits, _Alloc > Class Template Reference
+
+
+ +

Token representing start HTML tag. + More...

+ +

#include <stdex/html.hpp>

+
+Inheritance diagram for stdex::html::starting_token< _Elem, _Traits, _Alloc >:
+
+
+ + +stdex::html::text_token< _Elem, _Traits, _Alloc > +stdex::html::token + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Attributes

+std::basic_string< _Elem, _Traits, _Alloc > name
 Element name allowing later recreation of ending </tag>
 
+stdex::html::sequenceend_sequence
 Ending tag sequence.
 
- Public Attributes inherited from stdex::html::text_token< _Elem, _Traits, _Alloc >
+std::basic_string< _Elem, _Traits, _Alloc > text
 Token text.
 
+uint32_t text_type
 Mask of text_type_flag_t to specify text content.
 
+stdex::mapping_vector< size_t > mapping
 Mapping between source and text positions.
 
- Public Attributes inherited from stdex::html::token
+token_t type
 Token type.
 
+sequencesequence
 Pointer to the sequence this token represents or nullptr when it doesn't trivially represent one sequence.
 
+uintptr_t data
 Any user-supplied data.
 
+ + + + + + + + + +

+Protected Member Functions

starting_token (_In_reads_or_z_opt_(num_chars_text) const _Elem *_text=nullptr, size_t num_chars_text=0, _In_reads_or_z_opt_(num_chars_name) const _Elem *_name=nullptr, size_t num_chars_name=0, uint32_t text_type=0, stdex::html::sequence *sequence=nullptr, stdex::html::sequence *_end_sequence=nullptr, uintptr_t data=0)
 
- Protected Member Functions inherited from stdex::html::text_token< _Elem, _Traits, _Alloc >
text_token (token_t type=token_t::complete, _In_reads_or_z_opt_(num_chars) const _Elem *_text=nullptr, size_t num_chars=0, uint32_t _text_type=0, stdex::html::sequence *sequence=nullptr, uintptr_t data=0)
 
- Protected Member Functions inherited from stdex::html::token
token (token_t _type=token_t::root, sequence *_sequence=nullptr, uintptr_t _data=0)
 
+ + + +

+Friends

+class parser< _Elem, _Traits, _Alloc >
 
+ + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Member Functions inherited from stdex::html::token
template<class _Traits = std::char_traits<char>, class _Alloc = std::allocator<char>>
size_t append_tag (std::basic_string< char, _Traits, _Alloc > &str) const
 Appends token tag to the source code.
 
template<class _Traits = std::char_traits<wchar_t>, class _Alloc = std::allocator<wchar_t>>
size_t append_tag (std::basic_string< wchar_t, _Traits, _Alloc > &str) const
 Appends token tag to the source code.
 
- Static Public Member Functions inherited from stdex::html::token
+template<class T >
static tokenparse_tag (const T *str, size_t &offset)
 
+

Detailed Description

+
template<class _Elem, class _Traits = std::char_traits<_Elem>, class _Alloc = std::allocator<_Elem>>
+class stdex::html::starting_token< _Elem, _Traits, _Alloc >

Token representing start HTML tag.

+

The documentation for this class was generated from the following file: +
+ + + + diff --git a/classstdex_1_1html_1_1starting__token.png b/classstdex_1_1html_1_1starting__token.png new file mode 100644 index 0000000000000000000000000000000000000000..3c979aa9519d5d0cf4af81cb10000725a8a46979 GIT binary patch literal 1782 zcmcJQX;4#F6vrPjNJXhFq9}+_Aqs+6jheEnh~b4r4QP}_Isy*?iQz$r$fmeqXDa%D zUW8m_-07U$a--5*I#Vu%k#u< znwpxhyg%}^6kA)6K=Jbju=$rkoX6<|fca;@-8%zL>J1laXs?|X%_rSBo$*fBynfWz zOvEkZC!4SqN?Lig?2bc|p|I3Z=op!P1#f%B`oy_l5GD(At#AJeC$DnyaUjD&p{Nky z9);lt{THBXsL1o&$ven^Zr#oa246Gw0T2CtE#vNe&6{Cq2RqGrFn%fp1vl_Zy(v-J zu2~~%E^Xp*bbUUExGgh-%fhJA2*&uH201fKi*h`%}8S&p$VeR-ounLa<(lQg6UDE)}1Jch012~>YIYRCcc%u|E`T?yD;MkzTGR+4F3dM{9tIan#E z`s1)uP-anGmtD`%ne*D7gNx-QM-Ur5?~DVxG^R-P>wvZDY~Dar8qbmk=LYnue4PHf z(Smg3ZAno_FEvrw&95@hCI|70nzzgG#dX75j-ArZ#xU>vZDz8f*&XC*hG<>rC+~G# zjE&667s_rgZtPr``ezR`$a4APMqSg&dz)sCGndAt_b_LYLct&jymeps&1?6Lgl!NjYK;li;1o+OD64sWhwJvdA*a3B+?|R)i^u)dRN7i}aeX)!g)f`as=kFj)$%<V7LfevPb z#wWun*PMWw#m*=umW~zQisf@gwT7rJI9m{(XxM~%wQw~sN)j53w#lf^4CvrzdKml6 zVAM-!K=&>+pp&uqJ*^#=&7qKYl5MBXhC|D)v6HO&^V!(T{K~1Q{SH~n-J|GL3l+>P z*dg5=33XP)96^g)y0Q9n?DM232y*2s70xTeXa;V%Nqr zgwkr&o)p1?wsM+s)L+o$82w=8_DCa|x(b3e`fg{HZzWV+f0!VzgrG#T#{DdgYp7AL zBPt(7%|r79TxT0e4L5Lt3CpQRSB6mBkmTCu0@YAIW~ygnpNaiY0O;wryJFXG8UFxq#d?4M literal 0 HcmV?d00001 diff --git a/classstdex_1_1html_1_1text__token-members.html b/classstdex_1_1html_1_1text__token-members.html new file mode 100644 index 000000000..c148b4ddc --- /dev/null +++ b/classstdex_1_1html_1_1text__token-members.html @@ -0,0 +1,102 @@ + + + + + + + +stdex: Member List + + + + + + + + + +
+
+ + + + + + +
+
stdex +
+
Additional custom or not Standard C++ covered algorithms
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
stdex::html::text_token< _Elem, _Traits, _Alloc > Member List
+
+
+ +

This is the complete list of members for stdex::html::text_token< _Elem, _Traits, _Alloc >, including all inherited members.

+ + + + + + + + + + + + + + +
append_tag(std::basic_string< char, _Traits, _Alloc > &str) conststdex::html::tokeninline
append_tag(std::basic_string< wchar_t, _Traits, _Alloc > &str) conststdex::html::tokeninline
datastdex::html::token
mappingstdex::html::text_token< _Elem, _Traits, _Alloc >
parse_tag(const T *str, size_t &offset) (defined in stdex::html::token)stdex::html::tokeninlinestatic
parser< _Elem, _Traits, _Alloc > (defined in stdex::html::text_token< _Elem, _Traits, _Alloc >)stdex::html::text_token< _Elem, _Traits, _Alloc >friend
sequencestdex::html::token
textstdex::html::text_token< _Elem, _Traits, _Alloc >
text_token(token_t type=token_t::complete, _In_reads_or_z_opt_(num_chars) const _Elem *_text=nullptr, size_t num_chars=0, uint32_t _text_type=0, stdex::html::sequence *sequence=nullptr, uintptr_t data=0) (defined in stdex::html::text_token< _Elem, _Traits, _Alloc >)stdex::html::text_token< _Elem, _Traits, _Alloc >inlineprotected
text_typestdex::html::text_token< _Elem, _Traits, _Alloc >
token(token_t _type=token_t::root, sequence *_sequence=nullptr, uintptr_t _data=0) (defined in stdex::html::token)stdex::html::tokeninlineprotected
typestdex::html::token
~token() (defined in stdex::html::token)stdex::html::tokeninlinevirtual
+ + + + diff --git a/classstdex_1_1html_1_1text__token.html b/classstdex_1_1html_1_1text__token.html new file mode 100644 index 000000000..7a0d5863e --- /dev/null +++ b/classstdex_1_1html_1_1text__token.html @@ -0,0 +1,174 @@ + + + + + + + +stdex: stdex::html::text_token< _Elem, _Traits, _Alloc > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
stdex +
+
Additional custom or not Standard C++ covered algorithms
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
stdex::html::text_token< _Elem, _Traits, _Alloc > Class Template Reference
+
+
+ +

Token representing part of HTML text. + More...

+ +

#include <stdex/html.hpp>

+
+Inheritance diagram for stdex::html::text_token< _Elem, _Traits, _Alloc >:
+
+
+ + +stdex::html::token +stdex::html::starting_token< _Elem, _Traits, _Alloc > + +
+ + + + + + + + + + + + + + + + + + + + + +

+Public Attributes

+std::basic_string< _Elem, _Traits, _Alloc > text
 Token text.
 
+uint32_t text_type
 Mask of text_type_flag_t to specify text content.
 
+stdex::mapping_vector< size_t > mapping
 Mapping between source and text positions.
 
- Public Attributes inherited from stdex::html::token
+token_t type
 Token type.
 
+sequencesequence
 Pointer to the sequence this token represents or nullptr when it doesn't trivially represent one sequence.
 
+uintptr_t data
 Any user-supplied data.
 
+ + + + + + +

+Protected Member Functions

text_token (token_t type=token_t::complete, _In_reads_or_z_opt_(num_chars) const _Elem *_text=nullptr, size_t num_chars=0, uint32_t _text_type=0, stdex::html::sequence *sequence=nullptr, uintptr_t data=0)
 
- Protected Member Functions inherited from stdex::html::token
token (token_t _type=token_t::root, sequence *_sequence=nullptr, uintptr_t _data=0)
 
+ + + +

+Friends

+class parser< _Elem, _Traits, _Alloc >
 
+ + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Member Functions inherited from stdex::html::token
template<class _Traits = std::char_traits<char>, class _Alloc = std::allocator<char>>
size_t append_tag (std::basic_string< char, _Traits, _Alloc > &str) const
 Appends token tag to the source code.
 
template<class _Traits = std::char_traits<wchar_t>, class _Alloc = std::allocator<wchar_t>>
size_t append_tag (std::basic_string< wchar_t, _Traits, _Alloc > &str) const
 Appends token tag to the source code.
 
- Static Public Member Functions inherited from stdex::html::token
+template<class T >
static tokenparse_tag (const T *str, size_t &offset)
 
+

Detailed Description

+
template<class _Elem, class _Traits = std::char_traits<_Elem>, class _Alloc = std::allocator<_Elem>>
+class stdex::html::text_token< _Elem, _Traits, _Alloc >

Token representing part of HTML text.

+

The documentation for this class was generated from the following file: +
+ + + + diff --git a/classstdex_1_1html_1_1text__token.png b/classstdex_1_1html_1_1text__token.png new file mode 100644 index 0000000000000000000000000000000000000000..3d5cf93f84e79ef6f04fcfeba8766905bf6e26c9 GIT binary patch literal 1536 zcmb`HYgCd47{{?@nm3MJHB-+BkGV8b^VS7d;pjC(L(PJenq5q%)5;13akX_Q%@)ig zNja-`nKC0w^mqZ?tX#t|FYs30QzJywgjWPaM>}Wd)V^-dhv)j`f6nuJp36}LyuHmD z8w3Jj5A4Pf5eN&6IcHigHv8|=O03PnB`P8&Y++%+oW2`}Gq3$#7QD$T-KnVUU2}7@ zxgX8yx@Vp(Jwqf!Bh2;R7PN@ljX+rD0k|D8=PlGF>a-E><(7FDSHLF9dl$X!gN##i z$Nk&KEAHISKhb+Q`o&ZcDP?bRrR>5Nz-6>EhykVn3TuQdMnChU1FUuxy>Mt3(Vfk0 z%`|58?`P$dXgvTd29CvAk>m^s2U7JnD<;WORu$Uys!rZoqLxg54qyfg#aFs-zgkbs zn@<*!K&<>){85OFHeoR{GM|E)ta{itI(V#qWqj6ka6mB%2is-y?=5seujkxnGQIfy zEz2n)kO9SAC#}5`s@4(f9?KxG!b7RkBgZmwumujsx0=$iY4BX600S6$K9(G5V4-;* zL@M{NXq`o9JwF;a-5(F9)JfC>GQDqIRX@5L=8w(K_RB z-$xp*FsJHtLKC)WdmZ%HXdoxKw7O466Wxw=(b2F_GSr z<`Z2%Pu`Mpx_8L~g}3t_B3Joy7#BXPNP0vM@yRb2tkbDN4lOUpfp*|gYV>>zezNqIkrsE!exiB|h z!PPOD{y}2G#U91rT=lY!R%&`mUb!GqC^a@sP=ca2WveA19(St_4!Cg;XO}^~)-qTF ztBqr1+7Ms;R#QA~HNZ7Wp(JXlsOgPJptO_fj0Z8Ep8MXcRctGBGnR|ReYNof`c=2P zO1i!2484%KDs>*?l8$p8K6)(0R~OJ1kZ)2|38)5xspns~)i%;ce#Oc`M##ak`m^Kwdr3DHkv- zI=}Pv|A@$^?{OvEV~aNe|(&Z5x$)}%fRW~=8@1O%^qVkNq+3c zADq9X4LIFqygQWDt~AxsfzEt|xD;$>iD@@S-}+M|Bb5s`j;99p@Fzm{JY{u1AM2o{ zR7Xs+YE2JC@|qYJ6Zld8@6ffH2&C^#cIP1Jny zfGn*XNKQZQ@_t^d;z}P)GH^j=w)d(PrfV;o*@P)qsRJkmf literal 0 HcmV?d00001 diff --git a/classstdex_1_1html_1_1token-members.html b/classstdex_1_1html_1_1token-members.html new file mode 100644 index 000000000..555040a16 --- /dev/null +++ b/classstdex_1_1html_1_1token-members.html @@ -0,0 +1,98 @@ + + + + + + + +stdex: Member List + + + + + + + + + +
+
+ + + + + + +
+
stdex +
+
Additional custom or not Standard C++ covered algorithms
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
stdex::html::token Member List
+
+
+ +

This is the complete list of members for stdex::html::token, including all inherited members.

+ + + + + + + + + + +
append_tag(std::basic_string< char, _Traits, _Alloc > &str) conststdex::html::tokeninline
append_tag(std::basic_string< wchar_t, _Traits, _Alloc > &str) conststdex::html::tokeninline
datastdex::html::token
parse_tag(const T *str, size_t &offset) (defined in stdex::html::token)stdex::html::tokeninlinestatic
parser (defined in stdex::html::token)stdex::html::tokenfriend
sequencestdex::html::token
token(token_t _type=token_t::root, sequence *_sequence=nullptr, uintptr_t _data=0) (defined in stdex::html::token)stdex::html::tokeninlineprotected
typestdex::html::token
~token() (defined in stdex::html::token)stdex::html::tokeninlinevirtual
+ + + + diff --git a/classstdex_1_1html_1_1token.html b/classstdex_1_1html_1_1token.html new file mode 100644 index 000000000..cf9ba5b21 --- /dev/null +++ b/classstdex_1_1html_1_1token.html @@ -0,0 +1,237 @@ + + + + + + + +stdex: stdex::html::token Class Reference + + + + + + + + + +
+
+ + + + + + +
+
stdex +
+
Additional custom or not Standard C++ covered algorithms
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+ +
+ +

HTML token base class. + More...

+ +

#include <stdex/html.hpp>

+
+Inheritance diagram for stdex::html::token:
+
+
+ + +stdex::html::text_token< _Elem, std::char_traits< _Elem >, std::allocator< _Elem > > +stdex::html::text_token< _Elem, _Traits, _Alloc > +stdex::html::url_token< _Elem, _Traits, _Alloc > +stdex::html::starting_token< _Elem, _Traits, _Alloc > + +
+ + + + + + + + + + +

+Public Member Functions

template<class _Traits = std::char_traits<char>, class _Alloc = std::allocator<char>>
size_t append_tag (std::basic_string< char, _Traits, _Alloc > &str) const
 Appends token tag to the source code.
 
template<class _Traits = std::char_traits<wchar_t>, class _Alloc = std::allocator<wchar_t>>
size_t append_tag (std::basic_string< wchar_t, _Traits, _Alloc > &str) const
 Appends token tag to the source code.
 
+ + + + +

+Static Public Member Functions

+template<class T >
static tokenparse_tag (const T *str, size_t &offset)
 
+ + + + + + + + + + +

+Public Attributes

+token_t type
 Token type.
 
+sequencesequence
 Pointer to the sequence this token represents or nullptr when it doesn't trivially represent one sequence.
 
+uintptr_t data
 Any user-supplied data.
 
+ + + +

+Protected Member Functions

token (token_t _type=token_t::root, sequence *_sequence=nullptr, uintptr_t _data=0)
 
+ + + + +

+Friends

+template<class _Elem , class _Traits , class _Alloc >
class parser
 
+

Detailed Description

+

HTML token base class.

+

Member Function Documentation

+ +

◆ append_tag() [1/2]

+ +
+
+
+template<class _Traits = std::char_traits<char>, class _Alloc = std::allocator<char>>
+ + + + + +
+ + + + + + + + +
size_t stdex::html::token::append_tag (std::basic_string< char, _Traits, _Alloc > & str) const
+
+inline
+
+ +

Appends token tag to the source code.

+
Parameters
+ + +
[in,out]strSource code
+
+
+
Returns
Number of code units appended
+ +
+
+ +

◆ append_tag() [2/2]

+ +
+
+
+template<class _Traits = std::char_traits<wchar_t>, class _Alloc = std::allocator<wchar_t>>
+ + + + + +
+ + + + + + + + +
size_t stdex::html::token::append_tag (std::basic_string< wchar_t, _Traits, _Alloc > & str) const
+
+inline
+
+ +

Appends token tag to the source code.

+
Parameters
+ + +
[in,out]strSource code
+
+
+
Returns
Number of code units appended
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classstdex_1_1html_1_1token.png b/classstdex_1_1html_1_1token.png new file mode 100644 index 0000000000000000000000000000000000000000..520c7d71665a9041d4b26e8b18ef7a2653df0996 GIT binary patch literal 3088 zcmc&$dsLH07NX-x zC}}GpQLKrkkS-OY!4UBU5izBtd?-isU3FAyxiUBSSRq`(L&z6Bz1Cfzl7R`*i-P1TGpR^) z=SSB*d1Qi5FseWM422HJVf=~7P=16ETpq3tAznUotRpZcD5fLOYt5Q9n>lIm72j8+ z#v?meCrKoq46J`^-Tdo_1uia8ovg%))Fr#g5I48-9}q&n)_|+7L5mhGizgSwSETM( zkPgD@Hj<2%&ogb`oFfD3Zu+3`?+_^#o0YOaX}mg0no;L|ZAui|RmBI|O)8Tf z#`a>PfhKx8;G+#=Q&QtA2Gg;Th^F()BPiEW@6;cdk7>=$P}SsAVp{8P3d$}L@7Ybi z*6e+=JHA6QLfW{LSZS>wx^?pB&Mido2>U0$*1BbJ4pYZwPUJFcI^aa&2U1199kXTz zaf(t+nC@LUv*Ij0tuPaV5TX?h1I?`J=JuO@{Je9r4xYe#ljo|7>AEL@wiBY=)JC-b;_K82;?H9p$R4^K1Rv8}EP$Rs@0D z^tC{wt#y8pvknO2&{N}2O8+eq!7&|sz@QC&Ndg zh1j)Yu|Il?vIQtGf-Ww_?RH%xQbJm^V{Lh${b;O1QLk6}INY%7Ami^g`?&*0{k zch!CYTwKC_nT0P;o88I*@5|~1n^LV-*Ss01L6za_H=M2Ad$PU$$)}u;J(0jC4_@w1 zUA*Uvdv(UeFLG-F=HGbq7rRgpx5V|=f%|r00(U++{e)d;M;8=Zjh;KDK`tx+H-digNvRRV5U( zfR>WGKnY#4hn__RtwdAXgE+JlY{Gq1fFN!Q3JI{#R0Lt3ulS`MD2v2m^1V@=#|Qfe zrV|g36EoJKV1W#4<1ZHS^Rn>q{ua@}A=QV57gu4S63?=i__iTM#dwof^)3J(4oMol z03|kgxa#o0ogg$-+m(zZMu@DRa%{sZlb9{7WF!B`q_>Asn=4no65ksw`4M61Kv1#erh*2qqYZ*Com5M^ zO(lBq8YpJ-$?X#sAw* zb((8_v1%$QFQlvoADvQd^Q9Ga6^7odQZb*V)LWc)73{`S1k5*zf(xdh2i8w}7X0Ju%o^LYqJypXxbJLa5 zDs_S^PAtn>7(ifK>*1lXC9ek5%y~-Z2&AN=wJb$o}i4D zd@Dg><$ykv59Ll@Jl%7yyHYBv_j0q&d?VBBrtURqqI>zo!}GjV8(-{uh@l{ztAjJU><$bfq&J2#7OB#@1k z#|&*>;nd`ZXcPB&?X>nxz1In@c(~=b8TnPOkYhD8+}*}}keP9dBI6b7Q*XzN=e`Wp zLJOy#Z@cA1$E+qWS`6VT%9K!0avmya45dL;(;x1d*+*%gTG?9^7(CcNalN4g3SL7W zgyj^Wv0Px^8Wk)fg`)DbY+Nk0B*!s*mMJ&M~iRD+BtrQqodhGZ0q-^(|pRQ(sqA>(;l4II>wGQ*Wvf**H;D z!X-2@X|zmJDAy*rR#8ev$54|tz)^3*4r6`A723JFd;y+d%ne|ZXQ{(2z*YAOgJ#$m zlghiL%=2^yeL3(zKG*W1K&!X56?;|jc@h3ci{xAMG1Ouet8v<5zL>4aiqIO^tHjkN zR-^gPlp|EA4L?g@=&rg8JulXuWDj+A9-x2l>_YRjSN^338h?G&AbkaY9sH>B6Ar!< zcrIEf?S}iHG(Ye}y@G_P;qx+wrNsm+d`PiAOY3}mXQ%p$89G(F0nI# zoIE6C#$4;!PYpL_2~=EPvC3Zd`&tqqQib1sg<`Fz2qFdg*pljqH1Jlhc>SGhKBL#=%TwY+0|S_0)qVB>JN?JtSipYf_+AQyd z6^@)q7TC!~^Ykw)7`uJ#6^S7{VZc}kaNj$i=Dpu@GO1i%R68B_d00Y!UMJz9uUMGW z%-bZGE`3jWj#b8dHmuIk4?KTgssAYnMjg`45-c8AvJ2}yx64B?CQs+hsKzS}Mw>Ur zvif?lqZJ~k;XD8Nx0jg*?ued8pb~5UDPBywN*zKtPBPYqU_dWIC2vR@^eq|w?RywJ g`=~*>cHZJqxVM@8uA$rta(5@xcJ#K|t%pee0Ng|);Q#;t literal 0 HcmV?d00001 diff --git a/classstdex_1_1html_1_1url__token-members.html b/classstdex_1_1html_1_1url__token-members.html new file mode 100644 index 000000000..f96663c8a --- /dev/null +++ b/classstdex_1_1html_1_1url__token-members.html @@ -0,0 +1,101 @@ + + + + + + + +stdex: Member List + + + + + + + + + +
+
+ + + + + + +
+
stdex +
+
Additional custom or not Standard C++ covered algorithms
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
stdex::html::url_token< _Elem, _Traits, _Alloc > Member List
+
+
+ +

This is the complete list of members for stdex::html::url_token< _Elem, _Traits, _Alloc >, including all inherited members.

+ + + + + + + + + + + + + +
append_tag(std::basic_string< char, _Traits, _Alloc > &str) conststdex::html::tokeninline
append_tag(std::basic_string< wchar_t, _Traits, _Alloc > &str) conststdex::html::tokeninline
datastdex::html::token
encodingstdex::html::url_token< _Elem, _Traits, _Alloc >
parse_tag(const T *str, size_t &offset) (defined in stdex::html::token)stdex::html::tokeninlinestatic
parser< _Elem, _Traits, _Alloc > (defined in stdex::html::url_token< _Elem, _Traits, _Alloc >)stdex::html::url_token< _Elem, _Traits, _Alloc >friend
sequencestdex::html::token
token(token_t _type=token_t::root, sequence *_sequence=nullptr, uintptr_t _data=0) (defined in stdex::html::token)stdex::html::tokeninlineprotected
typestdex::html::token
urlstdex::html::url_token< _Elem, _Traits, _Alloc >
url_token(_In_reads_or_z_opt_(num_chars) const _Elem *_url=nullptr, size_t num_chars=0, token_url_t _encoding=token_url_t::plain, stdex::html::sequence *sequence=nullptr, uintptr_t data=0) (defined in stdex::html::url_token< _Elem, _Traits, _Alloc >)stdex::html::url_token< _Elem, _Traits, _Alloc >inlineprotected
~token() (defined in stdex::html::token)stdex::html::tokeninlinevirtual
+ + + + diff --git a/classstdex_1_1html_1_1url__token.html b/classstdex_1_1html_1_1url__token.html new file mode 100644 index 000000000..06ee4abdf --- /dev/null +++ b/classstdex_1_1html_1_1url__token.html @@ -0,0 +1,169 @@ + + + + + + + +stdex: stdex::html::url_token< _Elem, _Traits, _Alloc > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
stdex +
+
Additional custom or not Standard C++ covered algorithms
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
stdex::html::url_token< _Elem, _Traits, _Alloc > Class Template Reference
+
+
+ +

HTTP token representing an URL. + More...

+ +

#include <stdex/html.hpp>

+
+Inheritance diagram for stdex::html::url_token< _Elem, _Traits, _Alloc >:
+
+
+ + +stdex::html::token + +
+ + + + + + + + + + + + + + + + + + +

+Public Attributes

+std::basic_string< _Elem, _Traits, _Alloc > url
 URL.
 
+token_url_t encoding
 URL encoding.
 
- Public Attributes inherited from stdex::html::token
+token_t type
 Token type.
 
+sequencesequence
 Pointer to the sequence this token represents or nullptr when it doesn't trivially represent one sequence.
 
+uintptr_t data
 Any user-supplied data.
 
+ + + + + + +

+Protected Member Functions

url_token (_In_reads_or_z_opt_(num_chars) const _Elem *_url=nullptr, size_t num_chars=0, token_url_t _encoding=token_url_t::plain, stdex::html::sequence *sequence=nullptr, uintptr_t data=0)
 
- Protected Member Functions inherited from stdex::html::token
token (token_t _type=token_t::root, sequence *_sequence=nullptr, uintptr_t _data=0)
 
+ + + +

+Friends

+class parser< _Elem, _Traits, _Alloc >
 
+ + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Member Functions inherited from stdex::html::token
template<class _Traits = std::char_traits<char>, class _Alloc = std::allocator<char>>
size_t append_tag (std::basic_string< char, _Traits, _Alloc > &str) const
 Appends token tag to the source code.
 
template<class _Traits = std::char_traits<wchar_t>, class _Alloc = std::allocator<wchar_t>>
size_t append_tag (std::basic_string< wchar_t, _Traits, _Alloc > &str) const
 Appends token tag to the source code.
 
- Static Public Member Functions inherited from stdex::html::token
+template<class T >
static tokenparse_tag (const T *str, size_t &offset)
 
+

Detailed Description

+
template<class _Elem, class _Traits = std::char_traits<_Elem>, class _Alloc = std::allocator<_Elem>>
+class stdex::html::url_token< _Elem, _Traits, _Alloc >

HTTP token representing an URL.

+

The documentation for this class was generated from the following file: +
+ + + + diff --git a/classstdex_1_1html_1_1url__token.png b/classstdex_1_1html_1_1url__token.png new file mode 100644 index 0000000000000000000000000000000000000000..87c579b2868e117c06ba31e3e24479b247792193 GIT binary patch literal 912 zcmeAS@N?(olHy`uVBq!ia0y~yU=#(i12~w0B*P`a-9S=0z$e7@|Ns9$=8HF9OZyKk zw=mEwkeGhv#eo9{fa1ZEF0TN}ah3%61v3EoU|`NP`w9aCv$Us+V@L(#+qrM^UR&_6 zx*vBay!XG;e1mNFqNy>@-|fl}*RfbB9K6Z$*RRu?bi6m}c=L#PYN>qH(4I6!6AAwm z)6V^&u6gXqv%gKHfRocs21y=t(;uZ4o_F9vb#{-jZm6zf{VJe!zIPm8Un{-YG>6{i~deHuXHGskJ6qm!J*Q>WM^h^_ zk&?0JHqU3>yRFEiclTSJ`k>0q$uV1m-tU>Iz5Mc%NmDo8%B+gvzW&^6bM=>xHo1*u z(#kyVqO~tytx1gkdE=DL->p;2f1irG@`p#N+Uo7*>eHQ5E7*>1e)M#s(DfUYhi>y3 zu3PXtQRMrE>tTBH9Jl@5{PTnBf8W^e5jWfZG|$sFc~Sf;=)U~2+k79ppLONd3nPaz jjLomTc57Hq{eOmw^PlI))lLfm<{bu4S3j3^P6 diff --git a/classstdex_1_1idrec_1_1record.html b/classstdex_1_1idrec_1_1record.html index f63dcf953..0b51a2769 100644 --- a/classstdex_1_1idrec_1_1record.html +++ b/classstdex_1_1idrec_1_1record.html @@ -837,7 +837,7 @@ template<class T , class T_ID , const T_ID ID, class T_SIZE , T_SIZE ALIGN> diff --git a/classstdex_1_1lazy__progress-members.html b/classstdex_1_1lazy__progress-members.html index 95da7515f..83e1b74b8 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 c224e5ae7..ae2e315e9 100644 --- a/classstdex_1_1lazy__progress.html +++ b/classstdex_1_1lazy__progress.html @@ -279,7 +279,7 @@ template<class T > diff --git a/classstdex_1_1md5__hash-members.html b/classstdex_1_1md5__hash-members.html index f06f3feb0..c420b83d7 100644 --- a/classstdex_1_1md5__hash-members.html +++ b/classstdex_1_1md5__hash-members.html @@ -93,7 +93,7 @@ $(function() { diff --git a/classstdex_1_1md5__hash.html b/classstdex_1_1md5__hash.html index e207a98d6..186444907 100644 --- a/classstdex_1_1md5__hash.html +++ b/classstdex_1_1md5__hash.html @@ -259,7 +259,7 @@ uint32_t m_temp [16] diff --git a/classstdex_1_1parser_1_1basic__angle-members.html b/classstdex_1_1parser_1_1basic__angle-members.html index 376b05bd8..7e6b05e5b 100644 --- a/classstdex_1_1parser_1_1basic__angle-members.html +++ b/classstdex_1_1parser_1_1basic__angle-members.html @@ -88,18 +88,18 @@ $(function() { intervalstdex::parser::basic_parser< T > invalidate() (defined in stdex::parser::basic_angle< T >)stdex::parser::basic_angle< 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_angle< T >)stdex::parser::basic_angle< 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 + match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::basic_angle< T >)stdex::parser::basic_angle< T >inlinevirtual + match(const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inline minute (defined in stdex::parser::basic_angle< T >)stdex::parser::basic_angle< T > minute_separator (defined in stdex::parser::basic_angle< T >)stdex::parser::basic_angle< 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 + search(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inline second (defined in stdex::parser::basic_angle< T >)stdex::parser::basic_angle< T > second_separator (defined in stdex::parser::basic_angle< T >)stdex::parser::basic_angle< T > ~basic_parser() (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inlinevirtual diff --git a/classstdex_1_1parser_1_1basic__angle.html b/classstdex_1_1parser_1_1basic__angle.html index 5a6294b6b..14c1fe0ae 100644 --- a/classstdex_1_1parser_1_1basic__angle.html +++ b/classstdex_1_1parser_1_1basic__angle.html @@ -101,21 +101,21 @@ Public Member Functions  basic_angle (const std::shared_ptr< basic_integer10< T > > &_degree, const std::shared_ptr< basic_parser< T > > &_degree_separator, const std::shared_ptr< basic_integer10< T > > &_minute, const std::shared_ptr< basic_parser< T > > &_minute_separator, const std::shared_ptr< basic_integer10< T > > &_second, const std::shared_ptr< basic_parser< T > > &_second_separator, const std::shared_ptr< basic_parser< T > > &_decimal, 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 bool match (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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) -  - + +bool search (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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) -  +bool match (const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) +  @@ -186,8 +186,8 @@ template<clas - -

◆ match()

+ +

◆ match()

@@ -213,7 +213,7 @@ template<clas
- + @@ -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 1324ece04..afe263e5b 100644 --- a/classstdex_1_1parser_1_1basic__any__cu-members.html +++ b/classstdex_1_1parser_1_1basic__any__cu-members.html @@ -85,14 +85,14 @@ $(function() { - - - + + +

Public Attributes

size_t end = (size_t)-1, end = SIZE_MAX,
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_any_cu< T >)stdex::parser::basic_any_cu< 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
match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::basic_any_cu< T >)stdex::parser::basic_any_cu< T >inlinevirtual
match(const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, 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_MAX, 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__any__cu.html b/classstdex_1_1parser_1_1basic__any__cu.html index c914e25d8..e24648b1b 100644 --- a/classstdex_1_1parser_1_1basic__any__cu.html +++ b/classstdex_1_1parser_1_1basic__any__cu.html @@ -100,19 +100,19 @@ Public Member Functions  basic_any_cu (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 bool match (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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) -  - + +bool search (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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) -  +bool match (const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) +  virtual void invalidate ()   @@ -133,8 +133,8 @@ std::locale m_locale
template<class T>
class stdex::parser::basic_any_cu< T >

Test for any code unit.

Member Function Documentation

- -

◆ match()

+ +

◆ match()

@@ -160,7 +160,7 @@ template<clas size_t  - end = (size_t)-1, + end = SIZE_MAX, @@ -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 50782a087..34840c484 100644 --- a/classstdex_1_1parser_1_1basic__bol-members.html +++ b/classstdex_1_1parser_1_1basic__bol-members.html @@ -86,14 +86,14 @@ $(function() { invalidate() (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inlinevirtual m_invert (defined in stdex::parser::basic_bol< T >)stdex::parser::basic_bol< T >protected 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_bol< T >)stdex::parser::basic_bol< 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 + match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::basic_bol< T >)stdex::parser::basic_bol< T >inlinevirtual + match(const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, 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_MAX, 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__bol.html b/classstdex_1_1parser_1_1basic__bol.html index 915b23654..1319c9c59 100644 --- a/classstdex_1_1parser_1_1basic__bol.html +++ b/classstdex_1_1parser_1_1basic__bol.html @@ -101,19 +101,19 @@ Public Member Functions  basic_bol (bool invert=false)   -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 bool match (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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) -  - + +bool search (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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) -  +bool match (const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) +  virtual void invalidate ()   @@ -140,8 +140,8 @@ Additional Inherited Members
template<class T>
class stdex::parser::basic_bol< T >

Test for beginning of line.

Member Function Documentation

- -

◆ match()

+ +

◆ match()

@@ -167,7 +167,7 @@ template<clas size_t  - end = (size_t)-1, + end = SIZE_MAX, @@ -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 d3a2e74ca..358e3b23b 100644 --- a/classstdex_1_1parser_1_1basic__branch-members.html +++ b/classstdex_1_1parser_1_1basic__branch-members.html @@ -89,17 +89,17 @@ $(function() { invalidate() (defined in stdex::parser::basic_branch< T >)stdex::parser::basic_branch< T >inlinevirtual m_collection (defined in stdex::parser::parser_collection< T >)stdex::parser::parser_collection< T >protected 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_branch< T >)stdex::parser::basic_branch< 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 + match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::basic_branch< T >)stdex::parser::basic_branch< T >inlinevirtual + match(const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inline parser_collection(const std::locale &locale) (defined in stdex::parser::parser_collection< T >)stdex::parser::parser_collection< T >inlineprotected parser_collection(const std::shared_ptr< basic_parser< T > > *el, size_t count, const std::locale &locale=std::locale()) (defined in stdex::parser::parser_collection< T >)stdex::parser::parser_collection< T >inline parser_collection(std::vector< std::shared_ptr< basic_parser< T > > > &&collection, const std::locale &locale=std::locale()) (defined in stdex::parser::parser_collection< T >)stdex::parser::parser_collection< 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 + search(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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__branch.html b/classstdex_1_1parser_1_1basic__branch.html index cde9b3a04..df05d4023 100644 --- a/classstdex_1_1parser_1_1basic__branch.html +++ b/classstdex_1_1parser_1_1basic__branch.html @@ -107,8 +107,8 @@ Public Member Functions  basic_branch (std::vector< std::shared_ptr< basic_parser< T > > > &&collection, 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 bool match (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) +  virtual void invalidate ()   - Public Member Functions inherited from stdex::parser::parser_collection< T > @@ -122,13 +122,13 @@ Public Member Functions  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) -  - + +bool search (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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) -  +bool match (const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) +  @@ -195,8 +195,8 @@ template<clas - -

◆ match()

+ +

◆ match()

@@ -222,7 +222,7 @@ template<clas
- + @@ -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 b37c5eca9..f3cc98910 100644 --- a/classstdex_1_1parser_1_1basic__chemical__formula-members.html +++ b/classstdex_1_1parser_1_1basic__chemical__formula-members.html @@ -90,14 +90,14 @@ $(function() { - - - + + +

Public Attributes

size_t end = (size_t)-1, end = SIZE_MAX,
m_element (defined in stdex::parser::basic_chemical_formula< T >)stdex::parser::basic_chemical_formula< T >protected
m_locale (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >protected
m_sign (defined in stdex::parser::basic_chemical_formula< T >)stdex::parser::basic_chemical_formula< 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_chemical_formula< T >)stdex::parser::basic_chemical_formula< 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
match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::basic_chemical_formula< T >)stdex::parser::basic_chemical_formula< T >inlinevirtual
match(const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, 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_MAX, 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__chemical__formula.html b/classstdex_1_1parser_1_1basic__chemical__formula.html index 74e9bedda..1e89a93ef 100644 --- a/classstdex_1_1parser_1_1basic__chemical__formula.html +++ b/classstdex_1_1parser_1_1basic__chemical__formula.html @@ -100,23 +100,23 @@ Inheritance diagram for stdex::parser::basic_chemical_formula< T >:

Public Member Functions

basic_chemical_formula (const std::shared_ptr< basic_parser< T > > &element, const std::shared_ptr< basic_parser< T > > &digit, const std::shared_ptr< basic_parser< T > > &sign, const std::locale &locale=std::locale()) + basic_chemical_formula (const std::shared_ptr< basic_parser< T > > &element, const std::shared_ptr< basic_parser< T > > &digit, const std::shared_ptr< basic_parser< T > > &sign, 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 bool match (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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) -  - + +bool search (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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) -  +bool match (const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) +  @@ -181,8 +181,8 @@ template<clas - -

◆ match()

+ +

◆ match()

@@ -208,7 +208,7 @@ template<clas
- + @@ -239,7 +239,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__creditor__reference-members.html b/classstdex_1_1parser_1_1basic__creditor__reference-members.html index 3a92b36d5..b563e77b1 100644 --- a/classstdex_1_1parser_1_1basic__creditor__reference-members.html +++ b/classstdex_1_1parser_1_1basic__creditor__reference-members.html @@ -88,15 +88,15 @@ $(function() { - - + + - +

Public Attributes

size_t end = (size_t)-1, end = SIZE_MAX,
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
match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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_MAX, 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
search(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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 index 8a2d4728b..fcf6758a8 100644 --- a/classstdex_1_1parser_1_1basic__creditor__reference.html +++ b/classstdex_1_1parser_1_1basic__creditor__reference.html @@ -102,21 +102,21 @@ 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 bool match (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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) -  - + +bool search (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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) -  +bool match (const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) +  @@ -182,8 +182,8 @@ template<clas - -

◆ match()

+ +

◆ match()

@@ -209,7 +209,7 @@ template<clas
- + @@ -240,7 +240,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__css__cdc-members.html b/classstdex_1_1parser_1_1basic__css__cdc-members.html new file mode 100644 index 000000000..c7e84dd5c --- /dev/null +++ b/classstdex_1_1parser_1_1basic__css__cdc-members.html @@ -0,0 +1,98 @@ + + + + + + + +stdex: Member List + + + + + + + + + +
+
+

Public Attributes

size_t end = (size_t)-1, end = SIZE_MAX,
+ + + + + +
+
stdex +
+
Additional custom or not Standard C++ covered algorithms
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + + +
+
stdex::parser::basic_css_cdc< T > Member List
+
+
+ +

This is the complete list of members for stdex::parser::basic_css_cdc< 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
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_opt_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_multiline) (defined in stdex::parser::basic_css_cdc< T >)stdex::parser::basic_css_cdc< T >inlinevirtual
match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)=0 (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >pure virtual
match(const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, 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_MAX, 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__css__cdc.html b/classstdex_1_1parser_1_1basic__css__cdc.html new file mode 100644 index 000000000..3155193e4 --- /dev/null +++ b/classstdex_1_1parser_1_1basic__css__cdc.html @@ -0,0 +1,145 @@ + + + + + + + +stdex: stdex::parser::basic_css_cdc< T > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
stdex +
+
Additional custom or not Standard C++ covered algorithms
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
stdex::parser::basic_css_cdc< T > Class Template Reference
+
+
+ +

Legacy CSS comment end --> + More...

+ +

#include <stdex/parser.hpp>

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

+Public Member Functions

+virtual bool match (_In_reads_or_z_opt_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_multiline)
 
- 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_MAX, int flags=match_default)
 
+virtual bool match (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)=0
 
+template<class _Traits , class _Ax >
bool match (const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
+virtual void invalidate ()
 
+ + + + + + + + +

+Additional Inherited Members

- Public Attributes inherited from stdex::parser::basic_parser< T >
+stdex::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_css_cdc< T >

Legacy CSS comment end -->

+

The documentation for this class was generated from the following file: +
+ + + + diff --git a/classstdex_1_1parser_1_1basic__css__cdc.png b/classstdex_1_1parser_1_1basic__css__cdc.png new file mode 100644 index 0000000000000000000000000000000000000000..f06fbbfa35d7eed75c1b27e9f64abc4dd856fdf9 GIT binary patch literal 769 zcmeAS@N?(olHy`uVBq!ia0vp^XMs3?gBeKn&SE?Uq@)9ULR|m<{|{uoc=NTi|Il&^ z1I+@7>1SRXIB)e3b!kG%{H%*CpPeVI zU-|Sw?egvRlh%CAm6}u&e!NchEL*K={8ryxSG~ov|F4y;H*>ywS*EIV#%=%K)zj1_ z>~!gKm^CS@FunEccL`_H4Ho;2>wg}<^rK^S#-&TV{l6zDi4Q}Y`oFkc zvmKsIy0#(mfa_NKhQsO~AMCdL^!?E8o9}nby!_3z=$NP3?B-8(Z!TP(Q}&`iB~b3% z1(nM9`TsgWnJ`>fPK?lpHBKCf5{e#|6lR%By0ToYSLLgw zyRdY=@HUw}&$d`^TN2w@Z8$%RhETs_iufCK5a$yEa&xn z#n$qLn~wdTx^&)G4&MnyoidI_s#hOLL4wyHU&AAHrEXf7W9XHxEXT<)KV)y2p30ha z^;6{x)f!icPmD_Pjgd4 zKVSWVf7ezCt_?60FW#b9Z<~J~Xql(<#>fMEh3Xmfrq%z<`!*x<*_PU^b5=|``)tb| zL+dZMEqy2Xec9RHq4Kx2&awE5>i+bJON#&QFIV=g&A#Lj1Pm&mzr$t;I7ztvXV~&) W)r;;>ODSMtW$<+Mb6Mw<&;$Tey=$ic literal 0 HcmV?d00001 diff --git a/classstdex_1_1parser_1_1basic__css__cdo-members.html b/classstdex_1_1parser_1_1basic__css__cdo-members.html new file mode 100644 index 000000000..72b4d9505 --- /dev/null +++ b/classstdex_1_1parser_1_1basic__css__cdo-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_css_cdo< T > Member List
+
+
+ +

This is the complete list of members for stdex::parser::basic_css_cdo< 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
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_opt_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_multiline) (defined in stdex::parser::basic_css_cdo< T >)stdex::parser::basic_css_cdo< T >inlinevirtual
match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)=0 (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >pure virtual
match(const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, 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_MAX, 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__css__cdo.html b/classstdex_1_1parser_1_1basic__css__cdo.html new file mode 100644 index 000000000..5d9c21914 --- /dev/null +++ b/classstdex_1_1parser_1_1basic__css__cdo.html @@ -0,0 +1,145 @@ + + + + + + + +stdex: stdex::parser::basic_css_cdo< T > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
stdex +
+
Additional custom or not Standard C++ covered algorithms
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
stdex::parser::basic_css_cdo< T > Class Template Reference
+
+
+ +

Legacy CSS comment start <!-- + More...

+ +

#include <stdex/parser.hpp>

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

+Public Member Functions

+virtual bool match (_In_reads_or_z_opt_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_multiline)
 
- 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_MAX, int flags=match_default)
 
+virtual bool match (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)=0
 
+template<class _Traits , class _Ax >
bool match (const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
+virtual void invalidate ()
 
+ + + + + + + + +

+Additional Inherited Members

- Public Attributes inherited from stdex::parser::basic_parser< T >
+stdex::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_css_cdo< T >

Legacy CSS comment start <!--

+

The documentation for this class was generated from the following file: +
+ + + + diff --git a/classstdex_1_1parser_1_1basic__css__cdo.png b/classstdex_1_1parser_1_1basic__css__cdo.png new file mode 100644 index 0000000000000000000000000000000000000000..064d03cb6fc7ab9726658d831e2fd914263b3621 GIT binary patch literal 766 zcmVvTJr#LVva2S`&=)l0h|Ns9}lGCUF000SeQchC<|NsC0|NsC0Hv*f~0007s zNklrqJ-D3=mW3hi{@$$pc)Hkl7NmF+s?k>eu%uU;BT}^B| z<#{}_Y*RPUIybGPi7#A-X1C-~Wlz_&h~3iMi&q^%)he1z7N~DWy`lA~H69I(+3q8n zlXx$kO(1hgbJ#3U-RgP+4qu4}-&1r}6NEYSc z3{8^v_34kuN8|mBX8)#-LF40WNYbq)4N3acq#;S4T4|PLSw;~6d_flg7)C?UTrMNw z3`MiT41_Zl&CF>4;8l|b0DNlF0Dw&nkovh7p1!4WdaSNj^1cB*~{Ln%H=ouovL9pxse1gGrLn z7ilEvc^yUSQzn`X^~$?y>$}yr`$+p1RFk|GP#x1-+BdaD|b-c>ONbF`rPc-}sn zAmx%bq~61drtRsue*eAM?@TwR?X%@Xm25Vr<%L<-Z|5{gI??AoB9inM`UTC=m;9bZ wlFs%2o{c2=)})anpPDq13;+NC07*qoM6N<$f)rkD_W%F@ literal 0 HcmV?d00001 diff --git a/classstdex_1_1parser_1_1basic__css__comment-members.html b/classstdex_1_1parser_1_1basic__css__comment-members.html new file mode 100644 index 000000000..cffca0a7e --- /dev/null +++ b/classstdex_1_1parser_1_1basic__css__comment-members.html @@ -0,0 +1,99 @@ + + + + + + + +stdex: Member List + + + + + + + + + +
+
+ + + + + + +
+
stdex +
+
Additional custom or not Standard C++ covered algorithms
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
stdex::parser::basic_css_comment< T > Member List
+
+
+ +

This is the complete list of members for stdex::parser::basic_css_comment< 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
contentstdex::parser::basic_css_comment< T >
intervalstdex::parser::basic_parser< T >
invalidate() (defined in stdex::parser::basic_css_comment< T >)stdex::parser::basic_css_comment< T >inlinevirtual
m_locale (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >protected
match(_In_reads_or_z_opt_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_multiline) (defined in stdex::parser::basic_css_comment< T >)stdex::parser::basic_css_comment< T >inlinevirtual
match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)=0 (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >pure virtual
match(const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, 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_MAX, 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__css__comment.html b/classstdex_1_1parser_1_1basic__css__comment.html new file mode 100644 index 000000000..ef1850937 --- /dev/null +++ b/classstdex_1_1parser_1_1basic__css__comment.html @@ -0,0 +1,182 @@ + + + + + + + +stdex: stdex::parser::basic_css_comment< T > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
stdex +
+
Additional custom or not Standard C++ covered algorithms
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
stdex::parser::basic_css_comment< T > Class Template Reference
+
+
+ +

CSS comment. + More...

+ +

#include <stdex/parser.hpp>

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

+Public Member Functions

+virtual bool match (_In_reads_or_z_opt_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_multiline)
 
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_MAX, int flags=match_default)
 
+virtual bool match (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)=0
 
+template<class _Traits , class _Ax >
bool match (const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
+ + + + + + + + +

+Public Attributes

+stdex::interval< size_tcontent
 content position in source
 
- Public Attributes inherited from stdex::parser::basic_parser< T >
+stdex::interval< size_tinterval
 Region of the last match.
 
+ + + + +

+Additional Inherited Members

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

Detailed Description

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

CSS comment.

+

Member Function Documentation

+ +

◆ invalidate()

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

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

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classstdex_1_1parser_1_1basic__css__comment.png b/classstdex_1_1parser_1_1basic__css__comment.png new file mode 100644 index 0000000000000000000000000000000000000000..6adc3f9279b9bf2a2cd6c9920c3a2a01f23a8ce9 GIT binary patch literal 822 zcmeAS@N?(olHy`uVBq!ia0vp^FM&9KgBeJk)>)JTq@)9ULR|m<{|{uoc=NTi|Il&^ z1I+@7>1SRXIB)VBBztPrqV$L^%Wp`O^`4<2C zw@RkMT9;!EyNa$nS|uEP?=jEO11b6M|J*!0InMnf@5_yAPUZZbpt5J}%jl;8&u{xz zzCW+H^B3#u+%LbH<~wSC@~wCg4Pu34q-J?T+-D80^=HGn6dM z^N3#`7qDA#uA{Z%+xC(taSR#0%_0o9E-A1!Y%}p-T%gMv#E{`ljL?sHP8vIc>J4+A#a&?N=|m zi~nEi>pvO*43c$xYjbbcM?9|2yBXJ`ZK;)ZLtOXdDbvgeYh>n$PMNY;EPU>bPjcxR zY`2=4rc65|G&gs5{?x+>?^XAB>aJ8J^t(5%(TsW>X$ignv}+{|GQ-7&0y(YU*>r&)Hu3uPp$uVi#5;g-QAz+;@zb8 z{Z`PQ3++3@9oNk``04-ecuCJ)*ZS*JR9`Os#e2zgz6g6^?!+bOQt4Wrz{v0l0;WD- iAf;UraC+fb&)~>(@bnwwKRbaboWax8&t;ucLK6UNcas_b literal 0 HcmV?d00001 diff --git a/classstdex_1_1parser_1_1basic__css__import-members.html b/classstdex_1_1parser_1_1basic__css__import-members.html new file mode 100644 index 000000000..0355b4a3d --- /dev/null +++ b/classstdex_1_1parser_1_1basic__css__import-members.html @@ -0,0 +1,99 @@ + + + + + + + +stdex: Member List + + + + + + + + + +
+
+ + + + + + +
+
stdex +
+
Additional custom or not Standard C++ covered algorithms
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
stdex::parser::basic_css_import< T > Member List
+
+
+ +

This is the complete list of members for stdex::parser::basic_css_import< 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
contentstdex::parser::basic_css_import< T >
intervalstdex::parser::basic_parser< T >
invalidate() (defined in stdex::parser::basic_css_import< T >)stdex::parser::basic_css_import< T >inlinevirtual
m_locale (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >protected
match(_In_reads_or_z_opt_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_multiline) (defined in stdex::parser::basic_css_import< T >)stdex::parser::basic_css_import< T >inlinevirtual
match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)=0 (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >pure virtual
match(const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, 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_MAX, 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__css__import.html b/classstdex_1_1parser_1_1basic__css__import.html new file mode 100644 index 000000000..a791cb80c --- /dev/null +++ b/classstdex_1_1parser_1_1basic__css__import.html @@ -0,0 +1,182 @@ + + + + + + + +stdex: stdex::parser::basic_css_import< T > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
stdex +
+
Additional custom or not Standard C++ covered algorithms
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
stdex::parser::basic_css_import< T > Class Template Reference
+
+
+ +

CSS import directive. + More...

+ +

#include <stdex/parser.hpp>

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

+Public Member Functions

+virtual bool match (_In_reads_or_z_opt_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_multiline)
 
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_MAX, int flags=match_default)
 
+virtual bool match (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)=0
 
+template<class _Traits , class _Ax >
bool match (const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
+ + + + + + + + +

+Public Attributes

+stdex::interval< size_tcontent
 content position in source
 
- Public Attributes inherited from stdex::parser::basic_parser< T >
+stdex::interval< size_tinterval
 Region of the last match.
 
+ + + + +

+Additional Inherited Members

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

Detailed Description

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

CSS import directive.

+

Member Function Documentation

+ +

◆ invalidate()

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

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

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classstdex_1_1parser_1_1basic__css__import.png b/classstdex_1_1parser_1_1basic__css__import.png new file mode 100644 index 0000000000000000000000000000000000000000..fe7d9538a4c7b6a05dc2e4c88e2d1a0653b7dabe GIT binary patch literal 805 zcmV+=1KRwFP)vTJr#LVva2S`&=)l0h|Ns9}lGCUF000SeQchC<|NsC0|NsC0Hv*f~00088 zNkl2AXy5QK-Z6wUiTaec#b#A%$ST13Uv=J2o|$L24lX`1>JCX(z?1C1oT zX`qp$H?`4%d649Lsu|oj-Tp|jssBME$-BDrt)eZn_Aryayv1}B1CzzP@{13P);O3Av@?#1{V^mtv9W4v=m(?Y)^(Y!`4-nEwB-Me-ig=&U8W{mmk?6Vmy24{y}X2_-=$)voO z{7Le;KK*0$7e9XgjJ9Tp{cMorCpC7BB)w^%k)$^bG?MhD8Eu-TsY?OC_w)dOKGiSU z|t0|0LtXaL|%0}TMYX`lgsHw`oZ@TP$V z0Nymv0Kl6D8UT3HKm!188fXCU0fi7kpF)tN9yQP;$(sh6BzaSYwpVWB)(n1OdNI^? z@A*)YjJ}8_NuN>SUY#zYE!->otfg&xPd}X7xBC8AI?9&n(A6;3<9eUH`~Nf4&AmEn zxkb;>f)vZ?s-UEtZ+n=We#}%3+y{@mINs=QCG)eNN jfhI}bG^2$OLYMjhd62bF;|?-(00000NkvXXu0mjf|Co%T literal 0 HcmV?d00001 diff --git a/classstdex_1_1parser_1_1basic__css__string-members.html b/classstdex_1_1parser_1_1basic__css__string-members.html new file mode 100644 index 000000000..1c76e4158 --- /dev/null +++ b/classstdex_1_1parser_1_1basic__css__string-members.html @@ -0,0 +1,99 @@ + + + + + + + +stdex: Member List + + + + + + + + + +
+
+ + + + + + +
+
stdex +
+
Additional custom or not Standard C++ covered algorithms
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
stdex::parser::basic_css_string< T > Member List
+
+
+ +

This is the complete list of members for stdex::parser::basic_css_string< 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
contentstdex::parser::basic_css_string< T >
intervalstdex::parser::basic_parser< T >
invalidate() (defined in stdex::parser::basic_css_string< T >)stdex::parser::basic_css_string< T >inlinevirtual
m_locale (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >protected
match(_In_reads_or_z_opt_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_multiline) (defined in stdex::parser::basic_css_string< T >)stdex::parser::basic_css_string< T >inlinevirtual
match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)=0 (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >pure virtual
match(const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, 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_MAX, 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__css__string.html b/classstdex_1_1parser_1_1basic__css__string.html new file mode 100644 index 000000000..1d90f531a --- /dev/null +++ b/classstdex_1_1parser_1_1basic__css__string.html @@ -0,0 +1,182 @@ + + + + + + + +stdex: stdex::parser::basic_css_string< T > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
stdex +
+
Additional custom or not Standard C++ covered algorithms
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
stdex::parser::basic_css_string< T > Class Template Reference
+
+
+ +

CSS string. + More...

+ +

#include <stdex/parser.hpp>

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

+Public Member Functions

+virtual bool match (_In_reads_or_z_opt_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_multiline)
 
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_MAX, int flags=match_default)
 
+virtual bool match (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)=0
 
+template<class _Traits , class _Ax >
bool match (const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
+ + + + + + + + +

+Public Attributes

+stdex::interval< size_tcontent
 content position in source
 
- Public Attributes inherited from stdex::parser::basic_parser< T >
+stdex::interval< size_tinterval
 Region of the last match.
 
+ + + + +

+Additional Inherited Members

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

Detailed Description

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

CSS string.

+

Member Function Documentation

+ +

◆ invalidate()

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

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

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classstdex_1_1parser_1_1basic__css__string.png b/classstdex_1_1parser_1_1basic__css__string.png new file mode 100644 index 0000000000000000000000000000000000000000..0cc625dec18fc74b30aaef0ef30cdf6b55df1a05 GIT binary patch literal 808 zcmeAS@N?(olHy`uVBq!ia0vp^*MT^IgBeKf6%%+4q@)9ULR|m<{|{uoc=NTi|Il&^ z1I+@7>1SRXIB)k`)!OmkNKOa(U}8$SRE)|?_vUVuzZuiDMeJ36 z&Wz%FXI=Yu;*-9*L#~s`OCN1N`qk&iq~6H$$K(IrxoPuX>iGQUPPUg#Vr78)Rwm}vM$*6JAb ze|hi16@qWy3%kZ!{3}QKy`2L{)y;_Wo7!v`6^&*{o%mulyN4#8)vmw7;72`r`}X zHNop7S9@=W+v#S@!r(6z!|=epnVaEHMge1kJg*+Zhs6h38R|@SFdXP-6KD8w@c|P9 z&^$CnJ5~xfy$Il#bY(8vbd{eMA52oQH;O4Nn7#GsgH4yeHZEpQ{yKSy)Bh8yp3}c9 zo4hRYQI(Valg;yr*VoP59-fp`C$_n2S>`SapT|?)t@AhODXC&)BKC%0D@Y@N-)73t`x?sM} z`B|C$iccqV7uvM%?5>cNj(P1>r8PfuR@y%4(uK8rE5JGHSW#z>2hTC2?+FQI|=lWG(n6Cha`TfaVcYtAjSR^R(m#3}C z)9kw|y1xcY^7}Hif0D}GOVxpYnzA*GpM9FYHY7D{65o@Y{e25mmzK49Pui1F;5i8x kn4X^&&(v-a_;p#nZuX|zL2fY-z%FVdQ&MBb@03=X_l>h($ literal 0 HcmV?d00001 diff --git a/classstdex_1_1parser_1_1basic__css__uri-members.html b/classstdex_1_1parser_1_1basic__css__uri-members.html new file mode 100644 index 000000000..55f0e3165 --- /dev/null +++ b/classstdex_1_1parser_1_1basic__css__uri-members.html @@ -0,0 +1,99 @@ + + + + + + + +stdex: Member List + + + + + + + + + +
+
+ + + + + + +
+
stdex +
+
Additional custom or not Standard C++ covered algorithms
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
stdex::parser::basic_css_uri< T > Member List
+
+
+ +

This is the complete list of members for stdex::parser::basic_css_uri< 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
contentstdex::parser::basic_css_uri< T >
intervalstdex::parser::basic_parser< T >
invalidate() (defined in stdex::parser::basic_css_uri< T >)stdex::parser::basic_css_uri< T >inlinevirtual
m_locale (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >protected
match(_In_reads_or_z_opt_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_multiline) (defined in stdex::parser::basic_css_uri< T >)stdex::parser::basic_css_uri< T >inlinevirtual
match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)=0 (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >pure virtual
match(const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, 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_MAX, 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__css__uri.html b/classstdex_1_1parser_1_1basic__css__uri.html new file mode 100644 index 000000000..a51f7376e --- /dev/null +++ b/classstdex_1_1parser_1_1basic__css__uri.html @@ -0,0 +1,182 @@ + + + + + + + +stdex: stdex::parser::basic_css_uri< T > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
stdex +
+
Additional custom or not Standard C++ covered algorithms
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
stdex::parser::basic_css_uri< T > Class Template Reference
+
+
+ +

URI in CSS. + More...

+ +

#include <stdex/parser.hpp>

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

+Public Member Functions

+virtual bool match (_In_reads_or_z_opt_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_multiline)
 
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_MAX, int flags=match_default)
 
+virtual bool match (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)=0
 
+template<class _Traits , class _Ax >
bool match (const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
+ + + + + + + + +

+Public Attributes

+stdex::interval< size_tcontent
 content position in source
 
- Public Attributes inherited from stdex::parser::basic_parser< T >
+stdex::interval< size_tinterval
 Region of the last match.
 
+ + + + +

+Additional Inherited Members

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

Detailed Description

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

URI in CSS.

+

Member Function Documentation

+ +

◆ invalidate()

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

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

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classstdex_1_1parser_1_1basic__css__uri.png b/classstdex_1_1parser_1_1basic__css__uri.png new file mode 100644 index 0000000000000000000000000000000000000000..d2e551a72e6cee7fee05733003d0cabc4c042d81 GIT binary patch literal 773 zcmV+g1N!`lP)vTJr#LVva2S`&=)l0h|Ns9}lGCUF000SeQchC<|NsC0|NsC0Hv*f~0007z zNklvF3w420LqOlIHzi4TN}E!hy#6-P1;lKh!k4qkUU|B^b9zX5xJVzpPTL=V8 z__l}p*q_<3>F0rutCC|$sRqZolHV$4nx=*Cn&ZfyOKUe;hc?fBEciq8H&t0w9Oj7k zI3D(#D5l0`dF zcS-VC@BS#f&);V_*6;GSbA0+fNHV562T8_J=OD>A8aakx7`|Ts@V|8ffD7m%9Jkvw zKrX^DVq5~`DjdCD0YD^m4giRw&H(^%)HwhkjyeYb#8Kw}fH>+L01!u=0|4Tva{xdb zbq)ZCqs{>Uanv~gAdWf*0Gw1xDP2HFlJxcJ9Fi1AokNo1$Z;%#m)Tkle(2P`wp1rc zGWtahNqUExzB9)Jc_$q;&CUJt#c_TfFOO-Vo@tui9p-U9+--IFpSLALmOT|~e#R_RhGw^B)p2aI1!d7Ix&_DP*6+=EHwRXaYE$ETCy1-?HZr$pZnPO! zCC8FZ4UTmszg5mOO$*=khK}MYhv;tNS9$JZ!5^Z(smh`iGUhV&Hsr4)NisTrA4$q> z+k(w=mkl1>Meb|)kxRpK`LRYwvtF&glZ(){X6senk~Mv@UTu45m8S=FSCWnu`OE(a zj=gX4(TXG;=`Y@gBt=!{kfb>39Fi1ABS%UpeZT$zOERVFsZR4-00000NkvXXu0mjf DHa>5v literal 0 HcmV?d00001 diff --git a/classstdex_1_1parser_1_1basic__cu-members.html b/classstdex_1_1parser_1_1basic__cu-members.html index 9ad5abd4f..53190c6a5 100644 --- a/classstdex_1_1parser_1_1basic__cu-members.html +++ b/classstdex_1_1parser_1_1basic__cu-members.html @@ -87,14 +87,14 @@ $(function() { m_chr (defined in stdex::parser::basic_cu< T >)stdex::parser::basic_cu< T >protected m_invert (defined in stdex::parser::basic_cu< T >)stdex::parser::basic_cu< T >protected 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_cu< T >)stdex::parser::basic_cu< 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 + match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::basic_cu< T >)stdex::parser::basic_cu< T >inlinevirtual + match(const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, 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_MAX, 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__cu.html b/classstdex_1_1parser_1_1basic__cu.html index a0a617ddd..652d1ceba 100644 --- a/classstdex_1_1parser_1_1basic__cu.html +++ b/classstdex_1_1parser_1_1basic__cu.html @@ -101,19 +101,19 @@ Public Member Functions  basic_cu (T chr, bool invert=false, 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 bool match (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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) -  - + +bool search (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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) -  +bool match (const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) +  virtual void invalidate ()   @@ -143,8 +143,8 @@ Additional Inherited Members
template<class T>
class stdex::parser::basic_cu< T >

Test for specific code unit.

Member Function Documentation

- -

◆ match()

+ +

◆ match()

@@ -170,7 +170,7 @@ template<clas size_t  - end = (size_t)-1, + end = SIZE_MAX, @@ -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 a45a060b6..d3f1636f0 100644 --- a/classstdex_1_1parser_1_1basic__cu__set-members.html +++ b/classstdex_1_1parser_1_1basic__cu__set-members.html @@ -80,7 +80,7 @@ $(function() {

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

- + @@ -89,14 +89,14 @@ $(function() { - - - + + +
basic_cu_set(_In_reads_or_z_(count) const T *set, size_t count=(size_t) -1, bool invert=false, const std::locale &locale=std::locale()) (defined in stdex::parser::basic_cu_set< T >)stdex::parser::basic_cu_set< T >inline
basic_cu_set(_In_reads_or_z_(count) const T *set, size_t count=SIZE_MAX, bool invert=false, const std::locale &locale=std::locale()) (defined in stdex::parser::basic_cu_set< T >)stdex::parser::basic_cu_set< T >inline
basic_parser(const std::locale &locale=std::locale()) (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inline
basic_set(bool invert=false, const std::locale &locale=std::locale()) (defined in stdex::parser::basic_set< T >)stdex::parser::basic_set< T >inline
hit_offset (defined in stdex::parser::basic_set< T >)stdex::parser::basic_set< T >
m_invert (defined in stdex::parser::basic_set< T >)stdex::parser::basic_set< T >protected
m_locale (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >protected
m_set (defined in stdex::parser::basic_cu_set< T >)stdex::parser::basic_cu_set< 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_cu_set< T >)stdex::parser::basic_cu_set< 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
match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::basic_cu_set< T >)stdex::parser::basic_cu_set< T >inlinevirtual
match(const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, 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_MAX, 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__cu__set.html b/classstdex_1_1parser_1_1basic__cu__set.html index c8ba17721..07101a9e4 100644 --- a/classstdex_1_1parser_1_1basic__cu__set.html +++ b/classstdex_1_1parser_1_1basic__cu__set.html @@ -99,11 +99,11 @@ Inheritance diagram for stdex::parser::basic_cu_set< T >: - - - - + + + + @@ -114,13 +114,13 @@ Public Member Functions - - - + + - - + +

Public Member Functions

basic_cu_set (_In_reads_or_z_(count) const T *set, size_t count=(size_t) -1, bool invert=false, 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)
 
basic_cu_set (_In_reads_or_z_(count) const T *set, size_t count=SIZE_MAX, bool invert=false, 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_MAX, int flags=match_default)
 
- Public Member Functions inherited from stdex::parser::basic_set< T >
 basic_set (bool invert=false, const std::locale &locale=std::locale())
 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)
 
+
+bool search (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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)
 
bool match (const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
@@ -152,8 +152,8 @@ Additional Inherited Members
template<class T>
class stdex::parser::basic_cu_set< T >

Test for any code unit from a given string of code units.

Member Function Documentation

- -

◆ match()

+ +

◆ match()

@@ -179,7 +179,7 @@ template<clas
- + @@ -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 522cf2161..696e5721a 100644 --- a/classstdex_1_1parser_1_1basic__date-members.html +++ b/classstdex_1_1parser_1_1basic__date-members.html @@ -91,16 +91,16 @@ $(function() { - - + + - +

Protected Attributes

size_t end = (size_t)-1, end = SIZE_MAX,
m_locale (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >protected
m_separator (defined in stdex::parser::basic_date< T >)stdex::parser::basic_date< T >protected
m_space (defined in stdex::parser::basic_date< T >)stdex::parser::basic_date< 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_date< T >)stdex::parser::basic_date< 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
match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::basic_date< T >)stdex::parser::basic_date< T >inlinevirtual
match(const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inline
month (defined in stdex::parser::basic_date< T >)stdex::parser::basic_date< 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
search(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inline
year (defined in stdex::parser::basic_date< T >)stdex::parser::basic_date< T >
~basic_parser() (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inlinevirtual
diff --git a/classstdex_1_1parser_1_1basic__date.html b/classstdex_1_1parser_1_1basic__date.html index 3edfdaa46..c9277b0f5 100644 --- a/classstdex_1_1parser_1_1basic__date.html +++ b/classstdex_1_1parser_1_1basic__date.html @@ -103,21 +103,21 @@ Public Member Functions  basic_date (int format_mask, const std::shared_ptr< basic_integer< T > > &_day, const std::shared_ptr< basic_integer< T > > &_month, const std::shared_ptr< basic_integer< T > > &_year, const std::shared_ptr< basic_set< T > > &separator, 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 bool match (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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) -  - + +bool search (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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) -  +bool match (const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) +  @@ -194,8 +194,8 @@ template<clas - -

◆ match()

+ +

◆ match()

@@ -221,7 +221,7 @@ template<clas
- + @@ -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 d448a042e..9ce81a7e3 100644 --- a/classstdex_1_1parser_1_1basic__dns__domain__char-members.html +++ b/classstdex_1_1parser_1_1basic__dns__domain__char-members.html @@ -87,14 +87,14 @@ $(function() { - - - + + +

Public Attributes

size_t end = (size_t)-1, end = SIZE_MAX,
invalidate() (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inlinevirtual
m_allow_idn (defined in stdex::parser::basic_dns_domain_char< T >)stdex::parser::basic_dns_domain_char< T >protected
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_dns_domain_char< T >)stdex::parser::basic_dns_domain_char< 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
match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::basic_dns_domain_char< T >)stdex::parser::basic_dns_domain_char< T >inlinevirtual
match(const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, 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_MAX, 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__dns__domain__char.html b/classstdex_1_1parser_1_1basic__dns__domain__char.html index 75952ed0a..a11a5f21b 100644 --- a/classstdex_1_1parser_1_1basic__dns__domain__char.html +++ b/classstdex_1_1parser_1_1basic__dns__domain__char.html @@ -102,19 +102,19 @@ Public Member Functions  basic_dns_domain_char (bool allow_idn, 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 bool match (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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) -  - + +bool search (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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) -  +bool match (const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) +  virtual void invalidate ()   @@ -145,8 +145,8 @@ std::locale m_locale
template<class T>
class stdex::parser::basic_dns_domain_char< T >

Test for valid DNS domain character.

Member Function Documentation

- -

◆ match()

+ +

◆ match()

@@ -172,7 +172,7 @@ template<clas size_t  - end = (size_t)-1, + end = SIZE_MAX, @@ -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 d5291d0f0..eb530a280 100644 --- a/classstdex_1_1parser_1_1basic__dns__name-members.html +++ b/classstdex_1_1parser_1_1basic__dns__name-members.html @@ -88,14 +88,14 @@ $(function() { m_domain_char (defined in stdex::parser::basic_dns_name< T >)stdex::parser::basic_dns_name< T >protected m_locale (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >protected m_separator (defined in stdex::parser::basic_dns_name< T >)stdex::parser::basic_dns_name< 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_dns_name< T >)stdex::parser::basic_dns_name< 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 + match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::basic_dns_name< T >)stdex::parser::basic_dns_name< T >inlinevirtual + match(const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, 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_MAX, 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__dns__name.html b/classstdex_1_1parser_1_1basic__dns__name.html index 11220b8cf..f6203604c 100644 --- a/classstdex_1_1parser_1_1basic__dns__name.html +++ b/classstdex_1_1parser_1_1basic__dns__name.html @@ -101,19 +101,19 @@ Public Member Functions  basic_dns_name (bool allow_absolute, const std::shared_ptr< basic_dns_domain_char< T > > &domain_char, const std::shared_ptr< basic_parser< T > > &separator, 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 bool match (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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) -  - + +bool search (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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) -  +bool match (const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) +  virtual void invalidate ()   @@ -147,8 +147,8 @@ Additional Inherited Members
template<class T>
class stdex::parser::basic_dns_name< T >

Test for DNS domain/hostname.

Member Function Documentation

- -

◆ match()

+ +

◆ match()

@@ -174,7 +174,7 @@ template<clas size_t  - end = (size_t)-1, + end = SIZE_MAX, @@ -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 f72dfe8ff..3ae47c739 100644 --- a/classstdex_1_1parser_1_1basic__email__address-members.html +++ b/classstdex_1_1parser_1_1basic__email__address-members.html @@ -91,15 +91,15 @@ $(function() { m_ip_lbracket (defined in stdex::parser::basic_email_address< T >)stdex::parser::basic_email_address< T >protected m_ip_rbracket (defined in stdex::parser::basic_email_address< T >)stdex::parser::basic_email_address< T >protected 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_email_address< T >)stdex::parser::basic_email_address< 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 + match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::basic_email_address< T >)stdex::parser::basic_email_address< T >inlinevirtual + match(const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, 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_MAX, int flags=match_default) (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inline username (defined in stdex::parser::basic_email_address< T >)stdex::parser::basic_email_address< T > ~basic_parser() (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inlinevirtual
diff --git a/classstdex_1_1parser_1_1basic__email__address.html b/classstdex_1_1parser_1_1basic__email__address.html index 101b9b089..18061d506 100644 --- a/classstdex_1_1parser_1_1basic__email__address.html +++ b/classstdex_1_1parser_1_1basic__email__address.html @@ -102,21 +102,21 @@ Public Member Functions  basic_email_address (const std::shared_ptr< basic_parser< T > > &_username, const std::shared_ptr< basic_parser< T > > &at, const std::shared_ptr< basic_parser< T > > &ip_lbracket, const std::shared_ptr< basic_parser< T > > &ip_rbracket, const std::shared_ptr< basic_parser< T > > &_ipv4_host, const std::shared_ptr< basic_parser< T > > &_ipv6_host, const std::shared_ptr< basic_parser< T > > &_dns_host, 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 bool match (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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) -  - + +bool search (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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) -  +bool match (const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) +  @@ -187,8 +187,8 @@ template<clas - -

◆ match()

+ +

◆ match()

@@ -214,7 +214,7 @@ template<clas
- + @@ -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 d20b9d4fe..677bed5ce 100644 --- a/classstdex_1_1parser_1_1basic__emoticon-members.html +++ b/classstdex_1_1parser_1_1basic__emoticon-members.html @@ -88,16 +88,16 @@ $(function() { - - + + - +

Public Attributes

size_t end = (size_t)-1, end = SIZE_MAX,
intervalstdex::parser::basic_parser< T >
invalidate() (defined in stdex::parser::basic_emoticon< T >)stdex::parser::basic_emoticon< 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_emoticon< T >)stdex::parser::basic_emoticon< 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
match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::basic_emoticon< T >)stdex::parser::basic_emoticon< T >inlinevirtual
match(const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inline
mouthstdex::parser::basic_emoticon< T >
nosestdex::parser::basic_emoticon< 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
search(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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__emoticon.html b/classstdex_1_1parser_1_1basic__emoticon.html index d7cf1de39..f2628d27f 100644 --- a/classstdex_1_1parser_1_1basic__emoticon.html +++ b/classstdex_1_1parser_1_1basic__emoticon.html @@ -101,21 +101,21 @@ Public Member Functions  basic_emoticon (const std::shared_ptr< basic_parser< T > > &_emoticon, const std::shared_ptr< basic_parser< T > > &_apex, const std::shared_ptr< basic_parser< T > > &_eyes, const std::shared_ptr< basic_parser< T > > &_nose, const std::shared_ptr< basic_set< T > > &_mouth, 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 bool match (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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) -  - + +bool search (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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) -  +bool match (const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) +  @@ -185,8 +185,8 @@ template<clas - -

◆ match()

+ +

◆ match()

@@ -212,7 +212,7 @@ template<clas
- + @@ -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 4fff3e9f9..c4852a848 100644 --- a/classstdex_1_1parser_1_1basic__eol-members.html +++ b/classstdex_1_1parser_1_1basic__eol-members.html @@ -86,14 +86,14 @@ $(function() { - - - + + +

Public Attributes

size_t end = (size_t)-1, end = SIZE_MAX,
invalidate() (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inlinevirtual
m_invert (defined in stdex::parser::basic_eol< T >)stdex::parser::basic_eol< T >protected
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_eol< T >)stdex::parser::basic_eol< 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
match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::basic_eol< T >)stdex::parser::basic_eol< T >inlinevirtual
match(const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, 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_MAX, 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__eol.html b/classstdex_1_1parser_1_1basic__eol.html index 070b61533..2c8f82c66 100644 --- a/classstdex_1_1parser_1_1basic__eol.html +++ b/classstdex_1_1parser_1_1basic__eol.html @@ -101,19 +101,19 @@ Public Member Functions  basic_eol (bool invert=false)   -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 bool match (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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) -  - + +bool search (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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) -  +bool match (const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) +  virtual void invalidate ()   @@ -140,8 +140,8 @@ Additional Inherited Members
template<class T>
class stdex::parser::basic_eol< T >

Test for end of line.

Member Function Documentation

- -

◆ match()

+ +

◆ match()

@@ -167,7 +167,7 @@ template<clas size_t  - end = (size_t)-1, + end = SIZE_MAX, @@ -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 358941738..49475463e 100644 --- a/classstdex_1_1parser_1_1basic__fraction-members.html +++ b/classstdex_1_1parser_1_1basic__fraction-members.html @@ -87,15 +87,15 @@ $(function() { intervalstdex::parser::basic_parser< T > invalidate() (defined in stdex::parser::basic_fraction< T >)stdex::parser::basic_fraction< 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_fraction< T >)stdex::parser::basic_fraction< 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 + match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::basic_fraction< T >)stdex::parser::basic_fraction< T >inlinevirtual + match(const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inline numerator (defined in stdex::parser::basic_fraction< T >)stdex::parser::basic_fraction< 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 + search(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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__fraction.html b/classstdex_1_1parser_1_1basic__fraction.html index d18d2d1b6..a917a26e6 100644 --- a/classstdex_1_1parser_1_1basic__fraction.html +++ b/classstdex_1_1parser_1_1basic__fraction.html @@ -101,21 +101,21 @@ Public Member Functions  basic_fraction (const std::shared_ptr< basic_parser< T > > &_numerator, const std::shared_ptr< basic_parser< T > > &_fraction_line, const std::shared_ptr< basic_parser< T > > &_denominator, 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 bool match (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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) -  - + +bool search (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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) -  +bool match (const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) +  @@ -174,8 +174,8 @@ template<clas - -

◆ match()

+ +

◆ match()

@@ -201,7 +201,7 @@ template<clas
- + @@ -232,7 +232,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__html__declaration__condition__end-members.html b/classstdex_1_1parser_1_1basic__html__declaration__condition__end-members.html new file mode 100644 index 000000000..04df24787 --- /dev/null +++ b/classstdex_1_1parser_1_1basic__html__declaration__condition__end-members.html @@ -0,0 +1,98 @@ + + + + + + + +stdex: Member List + + + + + + + + + +
+
+

Public Attributes

size_t end = (size_t)-1, end = SIZE_MAX,
+ + + + + +
+
stdex +
+
Additional custom or not Standard C++ covered algorithms
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + + +
+
stdex::parser::basic_html_declaration_condition_end< T > Member List
+
+
+ +

This is the complete list of members for stdex::parser::basic_html_declaration_condition_end< 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
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_opt_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_multiline) (defined in stdex::parser::basic_html_declaration_condition_end< T >)stdex::parser::basic_html_declaration_condition_end< T >inlinevirtual
match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)=0 (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >pure virtual
match(const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, 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_MAX, 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__html__declaration__condition__end.html b/classstdex_1_1parser_1_1basic__html__declaration__condition__end.html new file mode 100644 index 000000000..8d073647c --- /dev/null +++ b/classstdex_1_1parser_1_1basic__html__declaration__condition__end.html @@ -0,0 +1,145 @@ + + + + + + + +stdex: stdex::parser::basic_html_declaration_condition_end< T > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
stdex +
+
Additional custom or not Standard C++ covered algorithms
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
stdex::parser::basic_html_declaration_condition_end< T > Class Template Reference
+
+
+ +

End of condition ...]]> + More...

+ +

#include <stdex/parser.hpp>

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

+Public Member Functions

+virtual bool match (_In_reads_or_z_opt_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_multiline)
 
- 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_MAX, int flags=match_default)
 
+virtual bool match (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)=0
 
+template<class _Traits , class _Ax >
bool match (const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
+virtual void invalidate ()
 
+ + + + + + + + +

+Additional Inherited Members

- Public Attributes inherited from stdex::parser::basic_parser< T >
+stdex::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_html_declaration_condition_end< T >

End of condition ...]]>

+

The documentation for this class was generated from the following file: +
+ + + + diff --git a/classstdex_1_1parser_1_1basic__html__declaration__condition__end.png b/classstdex_1_1parser_1_1basic__html__declaration__condition__end.png new file mode 100644 index 0000000000000000000000000000000000000000..5b12b44c4126a2f3fcd2b2ecbfd95ab16e2d9809 GIT binary patch literal 1072 zcmeAS@N?(olHy`uVBq!ia0y~yU3f*F8(FfeDDeT9L6dAFyFV@L(#+qpLiP8EqSU-L+2W=i8}hORqkl^ z8q@rBUVrtMmd)OFdR6T1*j~RCktOe2<{hbi#pRpg`8)lV_e#r$w=65FZQ^X4?;ovx zCb=tj+e6*`wdp&XzZ+F+i>q#X^-}l0ncPV&+ZWT+PYUnZ|7>!Z$0xP(qE`1UU)w31 z+}{!b^!thT+^Q%48)5{75$9RU=L*l~#4KM|ia9HyJUICHJ?x>L~HWp{2f z$KASbr?&@jWx&KFt?eVZl2>@7ry?BA?8~5?@Yb9eDbtqC%2hJEi6q_-6H$j zuHd%&--t55$EQL}H@@XjU+I}FdRH;TR)gg1STQ^^2?U@}f{QDo* z+h18fZg9!geEuprYssWjb7lY&&Cy@Qxdk>_CzmYTyz#oBu-Je`qJt2?(`Si zD%-dJxmLK-2$+ISPdB`^DnIY%UpFb8hl`{4efd|F_wJRN*X=#Kp6YMe;;Rz+^2fC4 zON7^5pR%NWioIfq-TT?h|DqPE#6J2RSa+*_4KOO6^aXfwsl04}MU6^}*Cb`dkV!H# jTb4};nh@lr_lKQ%uGkW*{gc{(d7Hu0)z4*}Q$iB}1wr&m literal 0 HcmV?d00001 diff --git a/classstdex_1_1parser_1_1basic__html__declaration__condition__start-members.html b/classstdex_1_1parser_1_1basic__html__declaration__condition__start-members.html new file mode 100644 index 000000000..1800a3762 --- /dev/null +++ b/classstdex_1_1parser_1_1basic__html__declaration__condition__start-members.html @@ -0,0 +1,99 @@ + + + + + + + +stdex: Member List + + + + + + + + + +
+
+ + + + + + +
+
stdex +
+
Additional custom or not Standard C++ covered algorithms
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
stdex::parser::basic_html_declaration_condition_start< T > Member List
+
+
+ +

This is the complete list of members for stdex::parser::basic_html_declaration_condition_start< 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
condition (defined in stdex::parser::basic_html_declaration_condition_start< T >)stdex::parser::basic_html_declaration_condition_start< T >
intervalstdex::parser::basic_parser< T >
invalidate() (defined in stdex::parser::basic_html_declaration_condition_start< T >)stdex::parser::basic_html_declaration_condition_start< T >inlinevirtual
m_locale (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >protected
match(_In_reads_or_z_opt_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_multiline) (defined in stdex::parser::basic_html_declaration_condition_start< T >)stdex::parser::basic_html_declaration_condition_start< T >inlinevirtual
match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)=0 (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >pure virtual
match(const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, 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_MAX, 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__html__declaration__condition__start.html b/classstdex_1_1parser_1_1basic__html__declaration__condition__start.html new file mode 100644 index 000000000..c5568bcac --- /dev/null +++ b/classstdex_1_1parser_1_1basic__html__declaration__condition__start.html @@ -0,0 +1,181 @@ + + + + + + + +stdex: stdex::parser::basic_html_declaration_condition_start< T > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
stdex +
+
Additional custom or not Standard C++ covered algorithms
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
stdex::parser::basic_html_declaration_condition_start< T > Class Template Reference
+
+
+ +

Start of condition <![condition[... + More...

+ +

#include <stdex/parser.hpp>

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

+Public Member Functions

+virtual bool match (_In_reads_or_z_opt_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_multiline)
 
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_MAX, int flags=match_default)
 
+virtual bool match (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)=0
 
+template<class _Traits , class _Ax >
bool match (const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
+ + + + + + + +

+Public Attributes

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

+Additional Inherited Members

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

Detailed Description

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

Start of condition <![condition[...

+

Member Function Documentation

+ +

◆ invalidate()

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

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

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classstdex_1_1parser_1_1basic__html__declaration__condition__start.png b/classstdex_1_1parser_1_1basic__html__declaration__condition__start.png new file mode 100644 index 0000000000000000000000000000000000000000..8da40efe2c92ac295d50ff7d84ed4b1b8cb14b6b GIT binary patch literal 1076 zcmeAS@N?(olHy`uVBq!ia0y~yU3f*F8(FfeDDeT9L6dB3NNV@L(#+qt(VtcRGCqqn_!#x8DAxW& z$o@O)>({sKOS@6Z7x7O2c=fW&F4H#M@>!z!`|7LZS=re>&eu0qb*FzkHNUj#u=xYN z<+~dW7U#yU>UZ9`wY)Z5__klA-1!s6*YAbBxBR{JvZ*Z3oIKsskXYk4QAgj+-Pe7+ zBl}&=+Itfh-}-zjZ(SLCxvkamwAZqhww>P})Xq8)^i6%M<*J{zwyuBpA^7LR?_V_T zCGTH;d!_WVzi$J*!|vVAnWq<)bN%w3dWrs&(0Nn8dwybh&%P^Ez%%a2Nx$bJTjsG% z`V-wz3-te=w%|#B?1lY2FHJ`Yj>(rHLB-8b!4}UTz|bK5P=q1o=P$063=cdlSQ*0A zmMV%e$Z#%ac;G9+$`F4@li`PuALD`P1zZfkKxO!#I)|x2AE>7Wq{JJjgGx%|o|r71 z(ljNgh}m-zlV_3A9Ir|G4?`vat(o-1+hVFpywvj7XZvmYnMz8VPv*>DEI8?v(bc%P z4@S>QQZC=p$^Yp&=^?+>RF&q%!JfO007aifFL!6`x;*{E&0j}W=j~j_?)UZd-(TkY zpRI#L?`yyHt5m1NChzTeyMA3n+I{9JdTGy14u5}o=JVX1HILSxy}PXDy@}`2De68! znoqarXseDT; z|Kv{TZP=&dzT#r)u30y}sj9EkOqRZTebJnbV?Nva5;v$^eVXy)LE+o9JhN{P-pt;< zZC*#*m1{w6S4|JE3p*>i+`Hx1%`APM?(DrRaCN=j{7GukKBWgsNw$WS@+G#lz}d za~~z%yT53<%C7A<_r!}O?UsA;*Vd8O?9=W&@oDw3<~MhDUgBH->EFo{T0isi)<3QF zw0ih?-lQ+@KS}#N-*b8ICx0o`m&*I(k0$=R0gRH=Mz o!1UqyDYa-;ke8#EX5~luf^(9B(@~ literal 0 HcmV?d00001 diff --git a/classstdex_1_1parser_1_1basic__html__ident-members.html b/classstdex_1_1parser_1_1basic__html__ident-members.html new file mode 100644 index 000000000..5b98b96c7 --- /dev/null +++ b/classstdex_1_1parser_1_1basic__html__ident-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_html_ident< T > Member List
+
+
+ +

This is the complete list of members for stdex::parser::basic_html_ident< 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
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_opt_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::basic_html_ident< T >)stdex::parser::basic_html_ident< T >inlinevirtual
match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)=0 (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >pure virtual
match(const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, 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_MAX, 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__html__ident.html b/classstdex_1_1parser_1_1basic__html__ident.html new file mode 100644 index 000000000..8cf498f2c --- /dev/null +++ b/classstdex_1_1parser_1_1basic__html__ident.html @@ -0,0 +1,145 @@ + + + + + + + +stdex: stdex::parser::basic_html_ident< T > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
stdex +
+
Additional custom or not Standard C++ covered algorithms
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
stdex::parser::basic_html_ident< T > Class Template Reference
+
+
+ +

Contiguous sequence of characters representing name of element, attribute etc. + More...

+ +

#include <stdex/parser.hpp>

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

+Public Member Functions

+virtual bool match (_In_reads_or_z_opt_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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_MAX, int flags=match_default)
 
+virtual bool match (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)=0
 
+template<class _Traits , class _Ax >
bool match (const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
+virtual void invalidate ()
 
+ + + + + + + + +

+Additional Inherited Members

- Public Attributes inherited from stdex::parser::basic_parser< T >
+stdex::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_html_ident< T >

Contiguous sequence of characters representing name of element, attribute etc.

+

The documentation for this class was generated from the following file: +
+ + + + diff --git a/classstdex_1_1parser_1_1basic__html__ident.png b/classstdex_1_1parser_1_1basic__html__ident.png new file mode 100644 index 0000000000000000000000000000000000000000..fce32790be57c1905d4a1f73ab936b5f98d82ba5 GIT binary patch literal 807 zcmeAS@N?(olHy`uVBq!ia0vp^*MK;HgBeH$U8%kaq@)9ULR|m<{|{uoc=NTi|Il&^ z1I+@7>1SRXIB)6P2wO{sq@*0O_ zo0wTIO^LWYea6?y?w1-en|t?kO}7(UT_w3XqL6p$g?8^U@8HYZyuyWV`&G)GUvvM8 z_lC*dGm_t~-`rICWl7-9rLSfk)!R7lXmNJAE`OM>Rp0(uoc%Y0=5^JY6)$a#ynfoJLaIL{?4JJz zm7g*H|E7QWU!P}xG|Ko;ow~=T|0aIjD$y4YD4h&5+2FBB^lSt$2<~z+>|4st@MXE( zM!9~yoxhIET3Pkvl}L7q6GMhOGdDxj#RE(YK=lj@M0s@>GF*uf+Obr?>4iVXq${)8 zrm1XQ)TrvY_C(^_-rFm-GPJHWid;2+?GdSOd(=JM;*U&HS-d=AzO>G@LwlOeN99D@ z%3Ivt{_S6+m6!L`Qr;Q2c3w`pUx#W)22*)9^vSv>MOJ)BAL7j%Vrwa5> zzIXY0Q{%)Gt>2o{YM;vQS^L;3)cB!cx>x?j^J#~+*u1Wq#F@NrMbb|n2}jkXMH3&W zzTBDjf41kP@-N(LOxZg)TAq2@KDJ(#--Tu?hCs>_{K^#PN#HWl4kI9 L^>bP0l+XkKA7g(Z literal 0 HcmV?d00001 diff --git a/classstdex_1_1parser_1_1basic__html__tag-members.html b/classstdex_1_1parser_1_1basic__html__tag-members.html new file mode 100644 index 000000000..31c72cd28 --- /dev/null +++ b/classstdex_1_1parser_1_1basic__html__tag-members.html @@ -0,0 +1,104 @@ + + + + + + + +stdex: Member List + + + + + + + + + +
+
+ + + + + + +
+
stdex +
+
Additional custom or not Standard C++ covered algorithms
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
stdex::parser::basic_html_tag< T > Member List
+
+
+ +

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

+ + + + + + + + + + + + + + + + +
attributesstdex::parser::basic_html_tag< T >
basic_html_tag(const std::locale &locale=std::locale()) (defined in stdex::parser::basic_html_tag< T >)stdex::parser::basic_html_tag< T >inline
basic_parser(const std::locale &locale=std::locale()) (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inline
intervalstdex::parser::basic_parser< T >
invalidate() (defined in stdex::parser::basic_html_tag< T >)stdex::parser::basic_html_tag< T >inlinevirtual
m_ident (defined in stdex::parser::basic_html_tag< T >)stdex::parser::basic_html_tag< T >protected
m_locale (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >protected
m_value (defined in stdex::parser::basic_html_tag< T >)stdex::parser::basic_html_tag< T >protected
match(_In_reads_or_z_opt_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_multiline) (defined in stdex::parser::basic_html_tag< T >)stdex::parser::basic_html_tag< T >inlinevirtual
match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)=0 (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >pure virtual
match(const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inline
namestdex::parser::basic_html_tag< T >
search(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inline
typestdex::parser::basic_html_tag< T >
~basic_parser() (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inlinevirtual
+ + + + diff --git a/classstdex_1_1parser_1_1basic__html__tag.html b/classstdex_1_1parser_1_1basic__html__tag.html new file mode 100644 index 000000000..506055eb5 --- /dev/null +++ b/classstdex_1_1parser_1_1basic__html__tag.html @@ -0,0 +1,200 @@ + + + + + + + +stdex: stdex::parser::basic_html_tag< T > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
stdex +
+
Additional custom or not Standard C++ covered algorithms
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
stdex::parser::basic_html_tag< T > Class Template Reference
+
+
+ +

Tag. + More...

+ +

#include <stdex/parser.hpp>

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

+Public Member Functions

basic_html_tag (const std::locale &locale=std::locale())
 
+virtual bool match (_In_reads_or_z_opt_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_multiline)
 
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_MAX, int flags=match_default)
 
+virtual bool match (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)=0
 
+template<class _Traits , class _Ax >
bool match (const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
+ + + + + + + + + + + + + + +

+Public Attributes

+html_sequence_t type
 tag type
 
+stdex::interval< size_tname
 tag name position in source
 
+std::vector< html_attributeattributes
 tag attributes
 
- Public Attributes inherited from stdex::parser::basic_parser< T >
+stdex::interval< size_tinterval
 Region of the last match.
 
+ + + + + + + + +

+Protected Attributes

+basic_html_ident< T > m_ident
 
+basic_html_value< T > m_value
 
- Protected Attributes inherited from stdex::parser::basic_parser< T >
+std::locale m_locale
 
+

Detailed Description

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

Tag.

+

Member Function Documentation

+ +

◆ invalidate()

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

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

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classstdex_1_1parser_1_1basic__html__tag.png b/classstdex_1_1parser_1_1basic__html__tag.png new file mode 100644 index 0000000000000000000000000000000000000000..ce4175a6ae217b19b02c259242f2103c0a6d7cfa GIT binary patch literal 807 zcmeAS@N?(olHy`uVBq!ia0vp^XMi|>gBeIBMP&T|QqloFA+G=b{|7Q(y!l$%e`vXd zfo6fk^fNCG95?_J51w>+1yGK&B*-tA0mugfbEer>7#Nr~dAc};R4~4s`?~M70#8eO zXUN&#_8&cGvE=CaUS3yb+0hlaQ{piDv7gVXPW4-$vrfo>9_L9 z^C86__Fn$$K51#4WSh$V(A(?VZ%&whXZ1GA>bq4DzrTO`xSe;3ZRq9Yhp+5=`(DjQ zA=uJ@>7~~iS!v_s%6@4Lp0gige|p!;sqt@@QCk;NSTSpcg^%xjE#JBM`=4yJ-<};_ ze(#jQW`pC=s}Iak&Ybpkn0ZY%6z`5o_lSFJfQ!AkzsL$%8cX5 z3bQ6AgiR~VXlt5zlZWBgl@`VZV3;s0aQBs9co8Vf#!y9+&^yf*0XM-WmEMJ%%AU4a zhdhG%PbKsnyWU{R?i!!EF{FNLt8%&Lq|5q;JSJT}Zm{+t%jSu8h2goi)pz}3P=a=w zTlDpJr`~k>FP;7od%9xsyq3Dv^JLIoauRLo43Hg%UrRoS3ThQS{7R^I|q1)7f*i zmx_oUuQBtU{b^Zmj#zv>tD4#_{!KGgVqd&o->*`;?EAET+%vAR?=gIl96TxNmwetb xPQ8;;tqmq!*{ar~@^u9`cv?9XTO7aeAKSiC_SA~SuD~SC;OXk;vd$@?2>>~kcA)?O literal 0 HcmV?d00001 diff --git a/classstdex_1_1parser_1_1basic__html__value-members.html b/classstdex_1_1parser_1_1basic__html__value-members.html new file mode 100644 index 000000000..b51582b51 --- /dev/null +++ b/classstdex_1_1parser_1_1basic__html__value-members.html @@ -0,0 +1,99 @@ + + + + + + + +stdex: Member List + + + + + + + + + +
+
+ + + + + + +
+
stdex +
+
Additional custom or not Standard C++ covered algorithms
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
stdex::parser::basic_html_value< T > Member List
+
+
+ +

This is the complete list of members for stdex::parser::basic_html_value< 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
contentstdex::parser::basic_html_value< T >
intervalstdex::parser::basic_parser< T >
invalidate() (defined in stdex::parser::basic_html_value< T >)stdex::parser::basic_html_value< T >inlinevirtual
m_locale (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >protected
match(_In_reads_or_z_opt_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::basic_html_value< T >)stdex::parser::basic_html_value< T >inlinevirtual
match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)=0 (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >pure virtual
match(const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, 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_MAX, 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__html__value.html b/classstdex_1_1parser_1_1basic__html__value.html new file mode 100644 index 000000000..3ee0ac4a2 --- /dev/null +++ b/classstdex_1_1parser_1_1basic__html__value.html @@ -0,0 +1,182 @@ + + + + + + + +stdex: stdex::parser::basic_html_value< T > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
stdex +
+
Additional custom or not Standard C++ covered algorithms
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
stdex::parser::basic_html_value< T > Class Template Reference
+
+
+ +

Optionally-quoted string representing value of an attribute. + More...

+ +

#include <stdex/parser.hpp>

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

+Public Member Functions

+virtual bool match (_In_reads_or_z_opt_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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_MAX, int flags=match_default)
 
+virtual bool match (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)=0
 
+template<class _Traits , class _Ax >
bool match (const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
+ + + + + + + + +

+Public Attributes

+stdex::interval< size_tcontent
 content position in source
 
- Public Attributes inherited from stdex::parser::basic_parser< T >
+stdex::interval< size_tinterval
 Region of the last match.
 
+ + + + +

+Additional Inherited Members

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

Detailed Description

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

Optionally-quoted string representing value of an attribute.

+

Member Function Documentation

+ +

◆ invalidate()

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

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

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classstdex_1_1parser_1_1basic__html__value.png b/classstdex_1_1parser_1_1basic__html__value.png new file mode 100644 index 0000000000000000000000000000000000000000..4e95044eb0e7555eadb275418f46bb5cf3301699 GIT binary patch literal 814 zcmV+}1JV46P)vTJr#LVva2S`&=)l0h|Ns9}lGCUF000SeQchC<|NsC0|NsC0Hv*f~0008H zNklc(!bFlI%F#%& zH#r(f_NF#kFc*^in`#F4O}8IOHuW1clDw-+-zwU&9qXRVS{%0f)NdZ&`uk;>C`YQH zt6}WF?RN_;kg@Ghfi&&B+n1Tl`BvxOvxq3r%!g>9 zUHIMqYJrUHe4#BP*-6NEqj`*8JZmk#yJzi4g=&R7-WcoGIcFI!G1^)s_S_)JPs+a0$ z0D6<70YGnZGyv#Ljs^g|$w^OSC-Rf=9q*`E%u{XK|5yRQ|U-GH1U2B?a1!UAzxRPlv!`z%A|}G zyOXUa-?t*7l}^U{J+x{O)q)h;>14}DcCzxfR*#W_Osn$O(BivmHQ=4IcBEFd zLLTO^?45JALdJF2&_;zkYe*9<7ErS;Nol(%{*v@uxBu-V>3jMG+FA)Jdw)GCNiWO4 snk4lmN0X%9is_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 + match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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_MAX, 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_MAX, 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 index 1a35b60ad..b766c2371 100644 --- a/classstdex_1_1parser_1_1basic__iban.html +++ b/classstdex_1_1parser_1_1basic__iban.html @@ -102,21 +102,21 @@ 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 bool match (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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) -  - + +bool search (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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) -  +bool match (const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) +  @@ -186,8 +186,8 @@ template<clas - -

◆ match()

+ +

◆ match()

@@ -213,7 +213,7 @@ template<clas
- + @@ -244,7 +244,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__integer-members.html b/classstdex_1_1parser_1_1basic__integer-members.html index df75411f5..9fdd34323 100644 --- a/classstdex_1_1parser_1_1basic__integer-members.html +++ b/classstdex_1_1parser_1_1basic__integer-members.html @@ -85,15 +85,15 @@ $(function() { - - - + + +

Public Attributes

size_t end = (size_t)-1, end = SIZE_MAX,
intervalstdex::parser::basic_parser< T >
invalidate() (defined in stdex::parser::basic_integer< T >)stdex::parser::basic_integer< 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)=0 (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >pure virtual
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
match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)=0 (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >pure virtual
match(const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, 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_MAX, int flags=match_default) (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inline
valuestdex::parser::basic_integer< T >
~basic_parser() (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inlinevirtual
diff --git a/classstdex_1_1parser_1_1basic__integer.html b/classstdex_1_1parser_1_1basic__integer.html index 14d23835c..804e6d4d5 100644 --- a/classstdex_1_1parser_1_1basic__integer.html +++ b/classstdex_1_1parser_1_1basic__integer.html @@ -111,16 +111,16 @@ Public Member Functions  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) -  - -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)=0 -  - + +bool search (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) +  + +virtual bool match (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)=0 +  + 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) -  +bool match (const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) +  @@ -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 93c48d836..863d77507 100644 --- a/classstdex_1_1parser_1_1basic__integer10-members.html +++ b/classstdex_1_1parser_1_1basic__integer10-members.html @@ -96,15 +96,15 @@ $(function() { - - - + + +

Public Attributes

m_digit_8 (defined in stdex::parser::basic_integer10< T >)stdex::parser::basic_integer10< T >protected
m_digit_9 (defined in stdex::parser::basic_integer10< T >)stdex::parser::basic_integer10< T >protected
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_integer10< T >)stdex::parser::basic_integer10< 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
match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::basic_integer10< T >)stdex::parser::basic_integer10< T >inlinevirtual
match(const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, 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_MAX, int flags=match_default) (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inline
valuestdex::parser::basic_integer< T >
~basic_parser() (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inlinevirtual
diff --git a/classstdex_1_1parser_1_1basic__integer10.html b/classstdex_1_1parser_1_1basic__integer10.html index 230cddc6d..89fc9db99 100644 --- a/classstdex_1_1parser_1_1basic__integer10.html +++ b/classstdex_1_1parser_1_1basic__integer10.html @@ -102,8 +102,8 @@ Public Member Functions  basic_integer10 (const std::shared_ptr< basic_parser< T > > &digit_0, const std::shared_ptr< basic_parser< T > > &digit_1, const std::shared_ptr< basic_parser< T > > &digit_2, const std::shared_ptr< basic_parser< T > > &digit_3, const std::shared_ptr< basic_parser< T > > &digit_4, const std::shared_ptr< basic_parser< T > > &digit_5, const std::shared_ptr< basic_parser< T > > &digit_6, const std::shared_ptr< basic_parser< T > > &digit_7, const std::shared_ptr< basic_parser< T > > &digit_8, const std::shared_ptr< basic_parser< T > > &digit_9, 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 bool match (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) +  - Public Member Functions inherited from stdex::parser::basic_integer< T >  basic_integer (const std::locale &locale=std::locale()) @@ -114,13 +114,13 @@ Public Member Functions  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) -  - + +bool search (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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) -  +bool match (const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) +  @@ -176,8 +176,8 @@ Additional Inherited Members
template<class T>
class stdex::parser::basic_integer10< T >

Test for decimal integer.

Member Function Documentation

- -

◆ match()

+ +

◆ match()

@@ -203,7 +203,7 @@ template<clas
- + @@ -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 be1b30bca..8b58f9d58 100644 --- a/classstdex_1_1parser_1_1basic__integer10ts-members.html +++ b/classstdex_1_1parser_1_1basic__integer10ts-members.html @@ -90,15 +90,15 @@ $(function() { - - - + + +

Protected Attributes

size_t end = (size_t)-1, end = SIZE_MAX,
m_digits (defined in stdex::parser::basic_integer10ts< T >)stdex::parser::basic_integer10ts< T >protected
m_locale (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >protected
m_separator (defined in stdex::parser::basic_integer10ts< T >)stdex::parser::basic_integer10ts< 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_integer10ts< T >)stdex::parser::basic_integer10ts< 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
match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::basic_integer10ts< T >)stdex::parser::basic_integer10ts< T >inlinevirtual
match(const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, 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_MAX, int flags=match_default) (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inline
valuestdex::parser::basic_integer< T >
~basic_parser() (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inlinevirtual
diff --git a/classstdex_1_1parser_1_1basic__integer10ts.html b/classstdex_1_1parser_1_1basic__integer10ts.html index deaf028be..5beef5d5a 100644 --- a/classstdex_1_1parser_1_1basic__integer10ts.html +++ b/classstdex_1_1parser_1_1basic__integer10ts.html @@ -103,8 +103,8 @@ Public Member Functions  basic_integer10ts (const std::shared_ptr< basic_integer10< T > > &digits, const std::shared_ptr< basic_set< T > > &separator, 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 bool match (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) +  virtual void invalidate ()   - Public Member Functions inherited from stdex::parser::basic_integer< T > @@ -115,13 +115,13 @@ Public Member Functions  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) -  - + +bool search (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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) -  +bool match (const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) +  @@ -190,8 +190,8 @@ template<clas - -

◆ match()

+ +

◆ match()

@@ -217,7 +217,7 @@ template<clas
- + @@ -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 78a7e4e7a..8958a3e6d 100644 --- a/classstdex_1_1parser_1_1basic__integer16-members.html +++ b/classstdex_1_1parser_1_1basic__integer16-members.html @@ -102,15 +102,15 @@ $(function() { - - - + + +

Public Attributes

size_t end = (size_t)-1, end = SIZE_MAX,
m_digit_8 (defined in stdex::parser::basic_integer16< T >)stdex::parser::basic_integer16< T >protected
m_digit_9 (defined in stdex::parser::basic_integer16< T >)stdex::parser::basic_integer16< T >protected
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_integer16< T >)stdex::parser::basic_integer16< 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
match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::basic_integer16< T >)stdex::parser::basic_integer16< T >inlinevirtual
match(const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, 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_MAX, int flags=match_default) (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inline
valuestdex::parser::basic_integer< T >
~basic_parser() (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inlinevirtual
diff --git a/classstdex_1_1parser_1_1basic__integer16.html b/classstdex_1_1parser_1_1basic__integer16.html index dae02a2e0..9bd233a31 100644 --- a/classstdex_1_1parser_1_1basic__integer16.html +++ b/classstdex_1_1parser_1_1basic__integer16.html @@ -102,8 +102,8 @@ Public Member Functions  basic_integer16 (const std::shared_ptr< basic_parser< T > > &digit_0, const std::shared_ptr< basic_parser< T > > &digit_1, const std::shared_ptr< basic_parser< T > > &digit_2, const std::shared_ptr< basic_parser< T > > &digit_3, const std::shared_ptr< basic_parser< T > > &digit_4, const std::shared_ptr< basic_parser< T > > &digit_5, const std::shared_ptr< basic_parser< T > > &digit_6, const std::shared_ptr< basic_parser< T > > &digit_7, const std::shared_ptr< basic_parser< T > > &digit_8, const std::shared_ptr< basic_parser< T > > &digit_9, const std::shared_ptr< basic_parser< T > > &digit_10, const std::shared_ptr< basic_parser< T > > &digit_11, const std::shared_ptr< basic_parser< T > > &digit_12, const std::shared_ptr< basic_parser< T > > &digit_13, const std::shared_ptr< basic_parser< T > > &digit_14, const std::shared_ptr< basic_parser< T > > &digit_15, 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 bool match (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) +  - Public Member Functions inherited from stdex::parser::basic_integer< T >  basic_integer (const std::locale &locale=std::locale()) @@ -114,13 +114,13 @@ Public Member Functions  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) -  - + +bool search (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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) -  +bool match (const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) +  @@ -194,8 +194,8 @@ Additional Inherited Members
template<class T>
class stdex::parser::basic_integer16< T >

Test for hexadecimal integer.

Member Function Documentation

- -

◆ match()

+ +

◆ match()

@@ -221,7 +221,7 @@ template<clas
- + @@ -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 8e7184450..66a0ba9eb 100644 --- a/classstdex_1_1parser_1_1basic__ipv4__address-members.html +++ b/classstdex_1_1parser_1_1basic__ipv4__address-members.html @@ -97,15 +97,15 @@ $(function() { - - - + + +

Protected Attributes

size_t end = (size_t)-1, end = SIZE_MAX,
m_digit_9 (defined in stdex::parser::basic_ipv4_address< T >)stdex::parser::basic_ipv4_address< T >protected
m_locale (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >protected
m_separator (defined in stdex::parser::basic_ipv4_address< T >)stdex::parser::basic_ipv4_address< 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_ipv4_address< T >)stdex::parser::basic_ipv4_address< 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
match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::basic_ipv4_address< T >)stdex::parser::basic_ipv4_address< T >inlinevirtual
match(const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, 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_MAX, int flags=match_default) (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inline
valuestdex::parser::basic_ipv4_address< T >
~basic_parser() (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inlinevirtual
diff --git a/classstdex_1_1parser_1_1basic__ipv4__address.html b/classstdex_1_1parser_1_1basic__ipv4__address.html index ef8e90b70..5634b590c 100644 --- a/classstdex_1_1parser_1_1basic__ipv4__address.html +++ b/classstdex_1_1parser_1_1basic__ipv4__address.html @@ -102,21 +102,21 @@ Public Member Functions  basic_ipv4_address (const std::shared_ptr< basic_parser< T > > &digit_0, const std::shared_ptr< basic_parser< T > > &digit_1, const std::shared_ptr< basic_parser< T > > &digit_2, const std::shared_ptr< basic_parser< T > > &digit_3, const std::shared_ptr< basic_parser< T > > &digit_4, const std::shared_ptr< basic_parser< T > > &digit_5, const std::shared_ptr< basic_parser< T > > &digit_6, const std::shared_ptr< basic_parser< T > > &digit_7, const std::shared_ptr< basic_parser< T > > &digit_8, const std::shared_ptr< basic_parser< T > > &digit_9, const std::shared_ptr< basic_parser< T > > &separator, 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 bool match (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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) -  - + +bool search (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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) -  +bool match (const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) +  @@ -207,8 +207,8 @@ template<clas - -

◆ match()

+ +

◆ match()

@@ -234,7 +234,7 @@ template<clas
- + @@ -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 4c7f5715f..fbfebc371 100644 --- a/classstdex_1_1parser_1_1basic__ipv6__address-members.html +++ b/classstdex_1_1parser_1_1basic__ipv6__address-members.html @@ -104,16 +104,16 @@ $(function() { - - + + - +

Public Attributes

size_t end = (size_t)-1, end = SIZE_MAX,
m_locale (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >protected
m_scope_id_separator (defined in stdex::parser::basic_ipv6_address< T >)stdex::parser::basic_ipv6_address< T >protected
m_separator (defined in stdex::parser::basic_ipv6_address< T >)stdex::parser::basic_ipv6_address< 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_ipv6_address< T >)stdex::parser::basic_ipv6_address< 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
match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::basic_ipv6_address< T >)stdex::parser::basic_ipv6_address< T >inlinevirtual
match(const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inline
scope_idstdex::parser::basic_ipv6_address< 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
search(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inline
valuestdex::parser::basic_ipv6_address< T >
~basic_parser() (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inlinevirtual
diff --git a/classstdex_1_1parser_1_1basic__ipv6__address.html b/classstdex_1_1parser_1_1basic__ipv6__address.html index 17b980308..50ace439f 100644 --- a/classstdex_1_1parser_1_1basic__ipv6__address.html +++ b/classstdex_1_1parser_1_1basic__ipv6__address.html @@ -102,21 +102,21 @@ Public Member Functions  basic_ipv6_address (const std::shared_ptr< basic_parser< T > > &digit_0, const std::shared_ptr< basic_parser< T > > &digit_1, const std::shared_ptr< basic_parser< T > > &digit_2, const std::shared_ptr< basic_parser< T > > &digit_3, const std::shared_ptr< basic_parser< T > > &digit_4, const std::shared_ptr< basic_parser< T > > &digit_5, const std::shared_ptr< basic_parser< T > > &digit_6, const std::shared_ptr< basic_parser< T > > &digit_7, const std::shared_ptr< basic_parser< T > > &digit_8, const std::shared_ptr< basic_parser< T > > &digit_9, const std::shared_ptr< basic_parser< T > > &digit_10, const std::shared_ptr< basic_parser< T > > &digit_11, const std::shared_ptr< basic_parser< T > > &digit_12, const std::shared_ptr< basic_parser< T > > &digit_13, const std::shared_ptr< basic_parser< T > > &digit_14, const std::shared_ptr< basic_parser< T > > &digit_15, const std::shared_ptr< basic_parser< T > > &separator, const std::shared_ptr< basic_parser< T > > &scope_id_separator=nullptr, const std::shared_ptr< basic_parser< T > > &_scope_id=nullptr, 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 bool match (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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) -  - + +bool search (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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) -  +bool match (const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) +  @@ -232,8 +232,8 @@ template<clas - -

◆ match()

+ +

◆ match()

@@ -259,7 +259,7 @@ template<clas
- + @@ -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 272a2fe52..5253f6afc 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 @@ -85,14 +85,14 @@ $(function() { - - - + + +

Public Attributes

size_t end = (size_t)-1, end = SIZE_MAX,
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_ipv6_scope_id_char< T >)stdex::parser::basic_ipv6_scope_id_char< 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
match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::basic_ipv6_scope_id_char< T >)stdex::parser::basic_ipv6_scope_id_char< T >inlinevirtual
match(const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, 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_MAX, 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__ipv6__scope__id__char.html b/classstdex_1_1parser_1_1basic__ipv6__scope__id__char.html index dd340356d..8088b8b60 100644 --- a/classstdex_1_1parser_1_1basic__ipv6__scope__id__char.html +++ b/classstdex_1_1parser_1_1basic__ipv6__scope__id__char.html @@ -100,19 +100,19 @@ Public Member Functions  basic_ipv6_scope_id_char (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 bool match (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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) -  - + +bool search (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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) -  +bool match (const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) +  virtual void invalidate ()   @@ -133,8 +133,8 @@ std::locale m_locale
template<class T>
class stdex::parser::basic_ipv6_scope_id_char< T >

Test for valid IPv6 address scope ID character.

Member Function Documentation

- -

◆ match()

+ +

◆ match()

@@ -160,7 +160,7 @@ template<clas size_t  - end = (size_t)-1, + end = SIZE_MAX, @@ -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 373b3241d..654ca6a19 100644 --- a/classstdex_1_1parser_1_1basic__iterations-members.html +++ b/classstdex_1_1parser_1_1basic__iterations-members.html @@ -80,7 +80,7 @@ $(function() {

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

- + @@ -89,14 +89,14 @@ $(function() { - - - + + +
basic_iterations(const std::shared_ptr< basic_parser< T > > &el, size_t min_iterations=0, size_t max_iterations=(size_t) -1, bool greedy=true) (defined in stdex::parser::basic_iterations< T >)stdex::parser::basic_iterations< T >inline
basic_iterations(const std::shared_ptr< basic_parser< T > > &el, size_t min_iterations=0, size_t max_iterations=SIZE_MAX, bool greedy=true) (defined in stdex::parser::basic_iterations< T >)stdex::parser::basic_iterations< T >inline
basic_parser(const std::locale &locale=std::locale()) (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< 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
m_max_iterationsstdex::parser::basic_iterations< T >protected
m_min_iterationsstdex::parser::basic_iterations< 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_iterations< T >)stdex::parser::basic_iterations< 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
match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::basic_iterations< T >)stdex::parser::basic_iterations< T >inlinevirtual
match(const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, 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_MAX, 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__iterations.html b/classstdex_1_1parser_1_1basic__iterations.html index 5e73d24a7..27a5797bc 100644 --- a/classstdex_1_1parser_1_1basic__iterations.html +++ b/classstdex_1_1parser_1_1basic__iterations.html @@ -98,22 +98,22 @@ Inheritance diagram for stdex::parser::basic_iterations< T >: - - - - + + + + - - - + + - - + + @@ -153,8 +153,8 @@ Additional Inherited Members
template<class T>
class stdex::parser::basic_iterations< T >

Test for repeating.

Member Function Documentation

- -

◆ match()

+ +

◆ match()

@@ -180,7 +180,7 @@ template<clas
- + @@ -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 b36c762e0..eea0b3b8c 100644 --- a/classstdex_1_1parser_1_1basic__json__string-members.html +++ b/classstdex_1_1parser_1_1basic__json__string-members.html @@ -96,15 +96,15 @@ $(function() { - - - + + +

Public Member Functions

basic_iterations (const std::shared_ptr< basic_parser< T > > &el, size_t min_iterations=0, size_t max_iterations=(size_t) -1, bool greedy=true)
 
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)
 
basic_iterations (const std::shared_ptr< basic_parser< T > > &el, size_t min_iterations=0, size_t max_iterations=SIZE_MAX, bool greedy=true)
 
virtual bool match (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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)
 
+
+bool search (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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)
 
bool match (const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
virtual void invalidate ()
 
size_t end = (size_t)-1, end = SIZE_MAX,
m_quote (defined in stdex::parser::basic_json_string< T >)stdex::parser::basic_json_string< T >protected
m_sol (defined in stdex::parser::basic_json_string< T >)stdex::parser::basic_json_string< T >protected
m_uni (defined in stdex::parser::basic_json_string< T >)stdex::parser::basic_json_string< 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_json_string< T >)stdex::parser::basic_json_string< 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
match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::basic_json_string< T >)stdex::parser::basic_json_string< T >inlinevirtual
match(const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, 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_MAX, int flags=match_default) (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inline
value (defined in stdex::parser::basic_json_string< T >)stdex::parser::basic_json_string< T >
~basic_parser() (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inlinevirtual
diff --git a/classstdex_1_1parser_1_1basic__json__string.html b/classstdex_1_1parser_1_1basic__json__string.html index 6acf17d28..9dc1618f2 100644 --- a/classstdex_1_1parser_1_1basic__json__string.html +++ b/classstdex_1_1parser_1_1basic__json__string.html @@ -100,23 +100,23 @@ Inheritance diagram for stdex::parser::basic_json_string< T >:

Public Member Functions

basic_json_string (const std::shared_ptr< basic_parser< T > > &quote, const std::shared_ptr< basic_parser< T > > &chr, const std::shared_ptr< basic_parser< T > > &escape, const std::shared_ptr< basic_parser< T > > &sol, const std::shared_ptr< basic_parser< T > > &bs, const std::shared_ptr< basic_parser< T > > &ff, const std::shared_ptr< basic_parser< T > > &lf, const std::shared_ptr< basic_parser< T > > &cr, const std::shared_ptr< basic_parser< T > > &htab, const std::shared_ptr< basic_parser< T > > &uni, const std::shared_ptr< basic_integer16< T > > &hex, const std::locale &locale=std::locale()) + basic_json_string (const std::shared_ptr< basic_parser< T > > &quote, const std::shared_ptr< basic_parser< T > > &chr, const std::shared_ptr< basic_parser< T > > &escape, const std::shared_ptr< basic_parser< T > > &sol, const std::shared_ptr< basic_parser< T > > &bs, const std::shared_ptr< basic_parser< T > > &ff, const std::shared_ptr< basic_parser< T > > &lf, const std::shared_ptr< basic_parser< T > > &cr, const std::shared_ptr< basic_parser< T > > &htab, const std::shared_ptr< basic_parser< T > > &uni, const std::shared_ptr< basic_integer16< T > > &hex, 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 bool match (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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) -  - + +bool search (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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) -  +bool match (const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) +  @@ -202,8 +202,8 @@ template<clas - -

◆ match()

+ +

◆ match()

@@ -229,7 +229,7 @@ template<clas
- + @@ -260,7 +260,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__mime__type-members.html b/classstdex_1_1parser_1_1basic__mime__type-members.html new file mode 100644 index 000000000..e99a5c433 --- /dev/null +++ b/classstdex_1_1parser_1_1basic__mime__type-members.html @@ -0,0 +1,101 @@ + + + + + + + +stdex: Member List + + + + + + + + + +
+
+

Public Attributes

size_t end = (size_t)-1, end = SIZE_MAX,
+ + + + + +
+
stdex +
+
Additional custom or not Standard C++ covered algorithms
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + + +
+
stdex::parser::basic_mime_type< T > Member List
+
+
+ +

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

+ + + + + + + + + + + + + +
base_typestdex::parser::basic_mime_type< T >
basic_parser(const std::locale &locale=std::locale()) (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inline
charsetstdex::parser::basic_mime_type< T >
intervalstdex::parser::basic_parser< T >
invalidate() (defined in stdex::parser::basic_mime_type< T >)stdex::parser::basic_mime_type< T >inlinevirtual
m_locale (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >protected
match(_In_reads_or_z_opt_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_multiline) (defined in stdex::parser::basic_mime_type< T >)stdex::parser::basic_mime_type< T >inlinevirtual
match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)=0 (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >pure virtual
match(const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, 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_MAX, int flags=match_default) (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inline
sub_typestdex::parser::basic_mime_type< T >
~basic_parser() (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inlinevirtual
+ + + + diff --git a/classstdex_1_1parser_1_1basic__mime__type.html b/classstdex_1_1parser_1_1basic__mime__type.html new file mode 100644 index 000000000..210d9cc56 --- /dev/null +++ b/classstdex_1_1parser_1_1basic__mime__type.html @@ -0,0 +1,190 @@ + + + + + + + +stdex: stdex::parser::basic_mime_type< T > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
stdex +
+
Additional custom or not Standard C++ covered algorithms
+
+
+ + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+ +
stdex::parser::basic_mime_type< T > Class Template Reference
+
+
+ +

MIME content type. + More...

+ +

#include <stdex/parser.hpp>

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

+Public Member Functions

+virtual bool match (_In_reads_or_z_opt_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_multiline)
 
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_MAX, int flags=match_default)
 
+virtual bool match (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)=0
 
+template<class _Traits , class _Ax >
bool match (const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
+ + + + + + + + + + + + + + +

+Public Attributes

+stdex::interval< size_tbase_type
 basic type position in source
 
+stdex::interval< size_tsub_type
 sub-type position in source
 
+stdex::interval< size_tcharset
 charset position in source
 
- Public Attributes inherited from stdex::parser::basic_parser< T >
+stdex::interval< size_tinterval
 Region of the last match.
 
+ + + + +

+Additional Inherited Members

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

Detailed Description

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

MIME content type.

+

Member Function Documentation

+ +

◆ invalidate()

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

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

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classstdex_1_1parser_1_1basic__mime__type.png b/classstdex_1_1parser_1_1basic__mime__type.png new file mode 100644 index 0000000000000000000000000000000000000000..47d3601fa46e9dfde293c3b733ca8b04359bb49e GIT binary patch literal 822 zcmeAS@N?(olHy`uVBq!ia0vp^H-R{SgBeIJzON7hq@)9ULR|m<{|{uoc=NTi|Il&^ z1I+@7>1SRXIB)1%a0C zO(v_p*FXB|YwrH$$j!N|hKtnLtWx)}S=Af*UcR!_U}8$UREo;YX>5|7+m>2I7Ramo zoax1O-gmqGq%|+gPk4M zU8=JWTDiWSo^!>GA;Y(shvC*G1?GlrCMOsc=<*sdWOx%JRIyIL=|vF7q$>;AW~yvm z>ZsYjf8C-_Xdchz=&Qiw|QhVXBZr*C}A*>8aoy7L`> zuc$0jJYCFlV%htNteR%OkL6gbyL4u$a-I^mP4UjPHU7(0d$a9qg4ky>WJfA}_DkD( z?10Pc=|4{DT&dh0!mgR0y6M%XJ#Q@^`Y%3xaoc;=P04C?r~5>ld%ug$)Mh_9(_-0V z;hA5)xy*uudFHK69X)4qU;nlJoNc#$R`u1tw%kEE&llCOo-~^Ae2c`dPb*k8Gb7vn z$ku(IC;NO=gf##4h#aj*6oo^4zTHJJLTFa5-|Ao0zmT=d;cK4ceZ=$uuq!RD_ zj@!Z-onC1xe%r5d_sakM>F>flC*{48HS)}IZ}yo44CKj6wwX+B6>#eR#r$^t7J>Et Sg%Q9M&fw|l=d#Wzp$PzKs)>UD literal 0 HcmV?d00001 diff --git a/classstdex_1_1parser_1_1basic__mixed__numeral-members.html b/classstdex_1_1parser_1_1basic__mixed__numeral-members.html index 8ece30033..94b47082b 100644 --- a/classstdex_1_1parser_1_1basic__mixed__numeral-members.html +++ b/classstdex_1_1parser_1_1basic__mixed__numeral-members.html @@ -88,17 +88,17 @@ $(function() { invalidate() (defined in stdex::parser::basic_mixed_numeral< T >)stdex::parser::basic_mixed_numeral< T >inlinevirtual m_locale (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >protected m_space (defined in stdex::parser::basic_mixed_numeral< T >)stdex::parser::basic_mixed_numeral< 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_mixed_numeral< T >)stdex::parser::basic_mixed_numeral< 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 + match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::basic_mixed_numeral< T >)stdex::parser::basic_mixed_numeral< T >inlinevirtual + match(const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inline negative_signstdex::parser::basic_mixed_numeral< T > positive_signstdex::parser::basic_mixed_numeral< 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 + search(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inline special_signstdex::parser::basic_mixed_numeral< T > ~basic_parser() (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inlinevirtual diff --git a/classstdex_1_1parser_1_1basic__mixed__numeral.html b/classstdex_1_1parser_1_1basic__mixed__numeral.html index af797ef1e..eb188be9f 100644 --- a/classstdex_1_1parser_1_1basic__mixed__numeral.html +++ b/classstdex_1_1parser_1_1basic__mixed__numeral.html @@ -102,21 +102,21 @@ Public Member Functions  basic_mixed_numeral (const std::shared_ptr< basic_parser< T > > &_positive_sign, const std::shared_ptr< basic_parser< T > > &_negative_sign, const std::shared_ptr< basic_parser< T > > &_special_sign, const std::shared_ptr< basic_parser< T > > &_integer, const std::shared_ptr< basic_parser< T > > &space, const std::shared_ptr< basic_parser< T > > &_fraction, 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 bool match (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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) -  - + +bool search (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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) -  +bool match (const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) +  @@ -189,8 +189,8 @@ template<clas - -

◆ match()

+ +

◆ match()

@@ -216,7 +216,7 @@ template<clas
- + @@ -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 41a71be18..ddeb900ce 100644 --- a/classstdex_1_1parser_1_1basic__monetary__numeral-members.html +++ b/classstdex_1_1parser_1_1basic__monetary__numeral-members.html @@ -89,17 +89,17 @@ $(function() { - - + + - +

Public Attributes

size_t end = (size_t)-1, end = SIZE_MAX,
intervalstdex::parser::basic_parser< T >
invalidate() (defined in stdex::parser::basic_monetary_numeral< T >)stdex::parser::basic_monetary_numeral< 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_monetary_numeral< T >)stdex::parser::basic_monetary_numeral< 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
match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::basic_monetary_numeral< T >)stdex::parser::basic_monetary_numeral< T >inlinevirtual
match(const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inline
negative_signstdex::parser::basic_monetary_numeral< T >
positive_signstdex::parser::basic_monetary_numeral< 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
search(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inline
special_signstdex::parser::basic_monetary_numeral< T >
~basic_parser() (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inlinevirtual
diff --git a/classstdex_1_1parser_1_1basic__monetary__numeral.html b/classstdex_1_1parser_1_1basic__monetary__numeral.html index e7003b242..2e1ef1f52 100644 --- a/classstdex_1_1parser_1_1basic__monetary__numeral.html +++ b/classstdex_1_1parser_1_1basic__monetary__numeral.html @@ -101,21 +101,21 @@ Public Member Functions  basic_monetary_numeral (const std::shared_ptr< basic_parser< T > > &_positive_sign, const std::shared_ptr< basic_parser< T > > &_negative_sign, const std::shared_ptr< basic_parser< T > > &_special_sign, const std::shared_ptr< basic_parser< T > > &_currency, const std::shared_ptr< basic_parser< T > > &_integer, const std::shared_ptr< basic_parser< T > > &_decimal_separator, const std::shared_ptr< basic_parser< T > > &_decimal, 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 bool match (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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) -  - + +bool search (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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) -  +bool match (const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) +  @@ -193,8 +193,8 @@ template<clas - -

◆ match()

+ +

◆ match()

@@ -220,7 +220,7 @@ template<clas
- + @@ -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 ac35a1693..8dbca0f46 100644 --- a/classstdex_1_1parser_1_1basic__noop-members.html +++ b/classstdex_1_1parser_1_1basic__noop-members.html @@ -84,14 +84,14 @@ $(function() { - - - + + +

Public Attributes

size_t end = (size_t)-1, end = SIZE_MAX,
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_noop< T >)stdex::parser::basic_noop< 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
match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::basic_noop< T >)stdex::parser::basic_noop< T >inlinevirtual
match(const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, 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_MAX, 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__noop.html b/classstdex_1_1parser_1_1basic__noop.html index 25759362e..984026c28 100644 --- a/classstdex_1_1parser_1_1basic__noop.html +++ b/classstdex_1_1parser_1_1basic__noop.html @@ -97,19 +97,19 @@ Inheritance diagram for stdex::parser::basic_noop< T >: - - + + - - - + + - - + + @@ -130,8 +130,8 @@ std::locale  - + @@ -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 b3ee1fee3..6e742e6c2 100644 --- a/classstdex_1_1parser_1_1basic__parser-members.html +++ b/classstdex_1_1parser_1_1basic__parser-members.html @@ -84,14 +84,14 @@ $(function() { - - - + + +

Public Member Functions

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 bool match (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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)
 
+
+bool search (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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)
 
bool match (const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
virtual void invalidate ()
 
m_locale
template<class T>
class stdex::parser::basic_noop< T >

"No-op" match

Member Function Documentation

- -

◆ match()

+ +

◆ match()

@@ -157,7 +157,7 @@ template<clas
size_t end = (size_t)-1, end = SIZE_MAX,
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)=0 (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >pure virtual
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
match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)=0 (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >pure virtual
match(const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, 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_MAX, 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__parser.html b/classstdex_1_1parser_1_1basic__parser.html index b26dd05de..908d558ec 100644 --- a/classstdex_1_1parser_1_1basic__parser.html +++ b/classstdex_1_1parser_1_1basic__parser.html @@ -93,57 +93,81 @@ Inheritance diagram for stdex::parser::basic_parser< T >:
-stdex::parser::basic_any_cu< char > -stdex::parser::basic_dns_domain_char< char > -stdex::parser::basic_punct_cu< char > -stdex::parser::basic_set< char > -stdex::parser::basic_space_cu< char > -stdex::parser::basic_space_or_punct_cu< char > -stdex::parser::basic_url_password_char< char > -stdex::parser::basic_url_path_char< char > -stdex::parser::basic_url_username_char< char > -stdex::parser::basic_angle< T > -stdex::parser::basic_any_cu< T > -stdex::parser::basic_bol< T > -stdex::parser::basic_chemical_formula< 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 > +stdex::parser::basic_any_cu< char > +stdex::parser::basic_any_cu< _Elem > +stdex::parser::basic_css_cdc< _Elem > +stdex::parser::basic_css_cdo< _Elem > +stdex::parser::basic_css_comment< _Elem > +stdex::parser::basic_css_import< _Elem > +stdex::parser::basic_css_string< _Elem > +stdex::parser::basic_css_uri< _Elem > +stdex::parser::basic_dns_domain_char< char > +stdex::parser::basic_html_declaration_condition_end< _Elem > +stdex::parser::basic_html_declaration_condition_start< _Elem > +stdex::parser::basic_html_ident< _Elem > +stdex::parser::basic_html_tag< _Elem > +stdex::parser::basic_html_value< _Elem > +stdex::parser::basic_punct_cu< char > +stdex::parser::basic_set< char > +stdex::parser::basic_space_cu< char > +stdex::parser::basic_space_or_punct_cu< char > +stdex::parser::basic_url_password_char< char > +stdex::parser::basic_url_path_char< char > +stdex::parser::basic_url_username_char< char > +stdex::parser::basic_angle< T > +stdex::parser::basic_any_cu< T > +stdex::parser::basic_bol< T > +stdex::parser::basic_chemical_formula< T > +stdex::parser::basic_creditor_reference< T > +stdex::parser::basic_css_cdc< T > +stdex::parser::basic_css_cdo< T > +stdex::parser::basic_css_comment< T > +stdex::parser::basic_css_import< T > +stdex::parser::basic_css_string< T > +stdex::parser::basic_css_uri< 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_html_declaration_condition_end< T > +stdex::parser::basic_html_declaration_condition_start< T > +stdex::parser::basic_html_ident< T > +stdex::parser::basic_html_tag< T > +stdex::parser::basic_html_value< 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_mime_type< 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 >
@@ -152,16 +176,16 @@ Public Member Functions - - - - - + + + + - - + + @@ -188,7 +212,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 bb980f079e1f140d3bb89701d36bc4ecd15c2065..cdff0f799884287b43aeecdf406a001476debb46 100644 GIT binary patch literal 51251 zcmd>nd03NYx_wXH2o>r`r07&Yotfm9HXHEpS-sa5J&K|qMgRz-+{tl8RHOIs9b zs9@MqwMsQWgb0x(iAyOW2~iOu1`-uWkPrfVKnU4>@B6XEI;V54-yi3kt8!g4P-F?; z_k7QC-}iIB-+j8p@70&zdilBMo_iJl(Fgx}?zz7xo_p?ZU%WU6e8z@#1{bKt+xH@Cm!-+k`6 z20s3S_dZK`UfpSq&;RHzM{b|lbRtG({!UW0|2sl6CUfo?8LQ`m*Vn(wF@0`S#aHj_ z1OLl>ZtlEV10u$m@8ZnheV0qZ2482hl1VeUf8?C*ydI&MbV}yo_5bCkuXj0{FJB`N zJ|})9V2(^opx^o~_*SoE1^kIPn(B(26J-^h(rc%SWsnJL3B1tWiBwse%B0d}ak+D( z-nG8+)pay;moCrUz)b13(+!JpTJ?&-CY;&6N?M#15#7*6S~$;jPPBEKK$J`iiSnU^ z!PiBj?u5T-0}_($d7fgW8&C4AL1H}*tgSwKb zQy$j`A>emLClH;@tz=eCpxkz%!}sb{TZ1P>eITg2PBiKvSXACfE`OJHLMISPT9=rZ zUWbPAh}`kAQ=*#S$m&jx+aW&1y;r3R!2L7*1Mn-BSR0%8$w-*2a-b=?Uvgj0jR_(8 z#Wlo{0!}%m%dQnlbRmclTn~==cC1^%hW0OM-RQNgWbzG-W_R>j32uScdN{&V6CmK_ zx&Ph%kjw0?FmP+f;l*9_-@7lCcX6j{ERD&ZQ5n=FW)$A6$(3AN-(LOwK!Z{@mWY%;&_tI%j|S$Ml96#er|4 ziZJu`{=xf(2x?H>%0_Mf=0QpJs%j$6GlXt@;iCF5+kxG072 z1GmL7t20Sflx5@$q}v@Q!Qb`|WMfc1b>T9{!29Z&+9fq7JsbB+!wyhA37z#Ok(c8L zcmT#93)zXn3nY>{+LYQ&Z6k{ZZnbx0Y>K10C54B5U7Pw`KrZ!zUU9yz3A}CFL}w-v z)kPg%{OM?XKy;D|wc8bf9U?9c6Dq3BTiwXt6fci6?hNb?!m%oU6m0 z!p$=$ONOJYlpB^I7@c4}nn?WVzMqJeY`G17#Ea|`;C1+dTRW$2JA5QXUU*v#4}3@T z$#Z)z?9Ds3;)-+Hgz(f)y9mzdUw!G4@Xt4Q{O^C@O;NP0-|Vuv<7UWP z!oc6V9>Gi{$bbLdKvv||htSDl*0|JE4F?oWpGQ4* zY{{q96;=`+@4wleu5JO@kgO0f*lWj?8qvh=v`>0POPU9>83fiz_A$*H>PU+~WqlTS zVjzld(@%C`&coSFoH>OfDzMO!yU8PP2E!cEiKiMlrAYJ;oig#`{ub9JoEzrMj-8YZ=Q&W zkxM|B`RC~pm&t@<)dtN{y(BxkyBvJk?q6CB0$vV$Fs?FIH=5btu6(Y*$N%sL@Bfrh zdT1s}<@qDI(V;Q|?tlP4%!Zee;p9)pX;ng+As#<`0$iE#t3r8Ty$Yvk@5pT=eL}4D z$*iOCiYhxeo+FfNdaZsB*>hq@qqs3vf^`yD)yO`h8|vWqRSU6=6#Yj%bhMh6MNL=p zgR64etGp{V#1!i75%D&e-9@R%?o~eH`XcIjBofOxlshEC$(rwDQ(Sx2bO-&cbsx(V zHsAkHU-K2s)LX)2%=;Q<5?rp%C2mr7sq^B=qib#!0exyLUK z9xd`o_~$?GNrb0%?Gi0{`GvOs{SW+^y7im4ZEjh=^!cLONOTeA1SShUr=T2I-T8y} zxI$gzP!2}Ual5KrW$X#c)k>^8h;#!B1X#*BkWj@&55!KelTJPh<%4KP@Q0529F^dUl*8Isvi!zS2?Ct z=ZU1prRCD1?cAnQ+PSH=GUZ+l&CRbW+9AC&4)OS06Sx9Th0T;<7l^!=tnXIii+sU< zdPOQEE-Az+b{2*aEAVv0Q@4Q69s(&I&I#8~!Hfz!{%10yQf4wLto!}#%<*AUT1O

X1M0Y%J$ASV*clZ zz(KLy&!b+r*VEwb->i_}CdiNV<7een`q|diQ>CVylZy-igNY4c7m-%7t%2Mt|Jqc? z5Y*Mxc~xR`e9_0%`x1D~#1Hp75$wkaQT)(bv}hMXXk=|3*2EecIK^`JVhVyppgz>T zkro;q9aQ2ZA821(b0a|$bnma14ZHD<`LW0cWoJNeSKpLxgp(F6TQ@2;fd*kfEZ1eh zN$aht2B8y7TDD(r+{r8!nL_Q_u}10xR}$U6&Z^qDxo>Q&_Fxfc89)8> zBAelR^$M7+UMczC|DebR0sVE}xxF5L@j9avd*RpMZQ-B(pXvzJ9%*{yfagaOzrvjy zA$&7n$FCDmA1JcBZD1I^4H^XI&_+f2&RSRnmm}IEgCOO;tvxX$6F;4DO)`*jNoz+v z^aI;-v-_i{OXKrFg82kS*t?3{Zhq&>O)EJd?XEaGlXkN}+7-nqyfs*MO`2l>gVta@95ulbDZ_o#peB_<7>POl#wJx0r57E_f@>!O&u} zTQ7(TALOiXWndQ?u+DPF-rNYjQL&G|AysoaRP->_cx4})6dhP94^LLa;tp4X=vHDy ze)R5^uCb^#1`$RsV=Q_(C;*vuHw?j7N!uhfINBI)A5C6%wr*+l(pq&;V(pSN!eM18 zrN~vEOmvZlg}dF8JkKTZtz`O_K-|JU0CyaXTP+=99w=a~YDDirwUfZHmc&sn)k#=X z@6gGHs~4mQbZia>cW9sD!1w=YjGm2-V)2rfUmp8EGJL_8ajzxXXLHMEUI@Mgzs6&V<-DQ4ZFv9;s4w-Ox)^K}}QelmL5`d&bTj7pLfQ(!Qr(CUzEV(H{(( znv##BE$)lmlPzxEOfJU5T+C-kKgeK6tm~Z+@m{&zF{z39GTP;?K_XXzE;p#zqRY+G zx>vbzYVr&7Ys~MEO@`gF8%nL~UU>BDr9he2NG$mKGj5aq;zHTZ9N8Q2b z7SEyxb{E55k!%`F!*?FN7s1~#C=eQ0bB$R6NY7r+!2W$!{{4Odu<03?ubgcms$dI& z5i}dlv?X3*3EdJ*pLT<*Hnf64@J$gT!CEEO?5Ea9U2?c9xZzxHR$Q*HrfJZND{hGb zmne#JRHL2nXjOm1ZW%CAF^vQeh2R2v;i>9|Y&;#8G#mFm2vm~n`Fo4TA_jKfke7+?gR`u5PZYpTzPpD#@&B!q>9 z6$R4`KaD=R9QKt&Wr+H96;l6|IZ`2=Yotf)20g<-s^;ZM;OoxHY9jZ2wyNL0V7o%< zP4cygQOh_N@gt@=gSr<>PQ$F*mA(Sax+23FR?IF*7PGaE29oZOWzx-2>R{5xc6W&>;)r;IRMnM z|AY+v85;%u>~J>lv*7X_Njl$Sn8YgDZKA7+HiN0Zg{a+$6-ZX{M%8 zruOwRrZTi{KtMI8kUTGTPD2SRL? zN|YMC;&Czj=;Yq8n}U>|_(Fq+To6eW6mGms$egIP>=^dHb}P+6))+sDgqgWQfe$Tc zLJ-Bjd=(prsQo_;Oh{QS-+{Kg+YdNI23)<6r7q%~QhgGg+i^)hdWzOa)_vW~ysq0e z-t&v*L)h`kZx|*5sYF$WqskHm;dB*j(VYm3O5(2hxu=|306EszD*6ZR0LKJ2eCiQ2!|NZa%|Kl9O zAMh3bzw|=n%rKWv@w5ra)b$<3AnHVooqTY#0Ox^ZWC#S*gd%WBHaH@fAOMhMcW3Ps z>&`gSC__fqJw5)Q+PNhzL@sPRF@Bn1_)pt=zQzYR0LI z>f9qc>8(|Ey{FIXDqYLt2EvmoHaW@1#D*U8V(msVl1xPI#-cEWSjeUw)8&l}EvSpt zA~%dBI)GI-1)DKQ$OqiQ3>K04FEBaij}VE{8@XB1i6qwSogT^|7$|+KT0}Zd)^{8fOh}dWHzG?si{NbU26>NITei(%6GQ%+Qc7+Z z?c=^Q;H${p!KBs}YE{N221kdp!oC0o&HR0W32=MHZ$Q?BbO?@`GzFV>TW4+FCw_D# z>Vf^w;)l$~qWeLz-%OS9jg)-m`n5#Le%)i0vlct9`&<)6W%hNw6nqRmJS6z=&^jZX zEgzoL$%kk8FP0Av-y=bZORhaFC>YZTzN_s1h zK{SO&b-^)t1(Id=IOZ>Qf>t})d94OKLe`d#(AxzohusZ6X0l5myza_OeXHCD`(asI zxB4;ne4zQf)R}0ebvRxQZN#k-7@3Lr`w(fX@ZowUxX*00=~(v9^zLMMe}@=^Kmj&N z-*XkCbC5H8teXwLZM1}5s5k^Za#d3m=b0mCc0EyjYH6mvEn`IWuxaAU#en336V+-^ z))!J4I-+Jrf2`sni$SyhR+I5apUw>)V0H0MaYOC=WP&hp@Id?037>~XJ^7ZjO!ZlQ zE19~Qa~ogb1SmzrvR1%@UC)YuD28_pB12P{*nOsG`XuUcbMDQa25Ar}X6STXdwT0npmJ1Qjg!0H=9fKS3Vc*Sv<)Z) zeq6|2Dh#}yWoM49ou+CEMMfn<{xW}{V+Mj@STt0)UA(u-av#i);AYW2eqKD71;qEO zcY$6i3RjT_anP9lnmyu=gC;TXtwS=-V5A}=lI*%?sd^0}BIDjjbxuz(e58=PF5}d+ z8Fek@t$KY@X^;Ab`d+N~g0$zB^zb_xb;3BsH0u0LZFYMvCMb1je63tMC=&b84W%%H zFhGHqQ27i@suP@3_cI8&vdIt*8V472m}?oonK!-gCe0KP{_ik~Y3$}0Q$H&1_XH8Wb14(M=? zG1skh!zFlQP>QkEFB!zJy2Wn?CtT&7F(>~^&OBAZcx6xhJ|9ng4b614#L2uw?|vI1 zi1XnMJi}mj)tvPttk1P0MwiYHdnHuJtLt7F6x##}OgA4WbQC4Zv=2~PJb^*TILXe? z%zc6ur~ROFcoayw+8l_a4kD*;Z%!alreW}Qm)>1mBB>vJy)I1YHVGf%nhh%Xi9(^o z{L{qy_uO)I0lG^Uck#qSQEoA4bFG@33d_ zk2bBAY@riTXzPZ7vJ7B{VK*s}bz0>2*dfz8O`2G^?|AR<(e{V+eUhkm|QZU1D#hpumssX*H**cGskQ&z9B!1ffS!y*M zwgl1OD5cYhN>clT;od^Yn|BqG7ZhtBHdvdh>SjqtlSoLwQFrb-F`&;x8FE7jV8~yb z=`--d5?7Yuf@n0Y235j6pshvfPu5pfv2>4c;ZGpnr599Rd9Wf*=#s>;TN~>EM{c@V zyOcwY54c?h1WP(+RDfh1K`njY{c~30i1P*5m{i;Pj6u!U)D%c$mfo@Omq68fyAY@taNAn~b_e_+b!s&9_>o zDC7q4wV>np`+uU8|BMr>o!C&3vWc!~&wr4$%6RxHjl#hXFNWFmJQ(Tafd7hKkEA-V zt9JtCF*m{JrRhyHkLnww(l6ChiX-d`lpO_5cF9J=-qa=ukI(^>U_Zf7y*i0;8zwPs zOHn4}*2ItPdw3g0$Nt)1w87JGy&AR@;wXOa-fg1gcX}pjLSu7%Z4$89>gosmf64GC zbcju{-WaqexGH3C7TQQ866%b4qqF2T81!BnP&~h*^H=M13r2BWhMjpdxUMlidJ-Fa z&`Q>4-)XG_bX|QCc!o;zRNs5EqFP&EFzTv2d#P8qtDBn0Uh9zJeF=~H&l_%|8l!p6 zf`B2J6pA%Ts94k8LSrO(q}xMUeCftW(hBb4{9_*jMZh=BTRIGTFpbtw0ml?VAiH=@ z+KwOa!w9^%?#{H(Bzc(GNv`|_qx1h9d{Nnyo@j$BfN9Mx&$u3L$qzH~4fg6z+=Rr9 zj*&yXhksEjom|SeZVlBfXPaXFl?&jK#88|#gw#nhnuf-bcGXS|e4I@($C@=0HQ^fi zWFjBD_3tAxFxNoVzhX|P>D=Vlu(Ht?CXh4E0&P`b+wwco+l53az&ny1Q)^}MUl}*q z{vGB?uk}cb8%HP)(=%w(!j`-R{c};!o#NHsngWG6c^mP{G zAdt(RRt<+*1foaih&wKI=|F?5J(VPQ0YCgEY+CNYCe-SvJ-!)axmV5rx$t@ckKQeS zaKj89-4DLVTz?mQ0ZfDIK=^G05bTP&0EpGWPYniuh8UvNsdZWi<^3rudCN>CH;n#_ zuh4wC4J4*^XMjUngW%gFBIn$USqmeseJ4)5BJJsji%V~o$IT%wz%YnRKmO$`z_`F$ z0D3{Xe(bezAcE!k+ch?4mTK*-_P^lhSZ!P5d7v5@dxdP-R?iJLqaQoT{^y3(GeQ z`AB2G>0A(JQ@rh0}p+T!Zvf*IG9ye#P2mW6jz8MQE$JRUr|m z$X^=9gXAHf;Tot#sKkQP?C9vec%r?d;X52dx4c6%=i-F*c$dY9Pur!*rA_71ud8vb=ghg(Zw4~zfY6E?h&axLAi@5bc8J`f%udx>3 zZ10JFL>6eNu|N+5D+d!~3&EJpYnVnGzMCq1U?rXp=#WJw7DM1zNMzHPiS7r=RT6DQ z!XCQUzbsi4e^lNW0(mFM3jPYRF>FdR2ZN_lultpd9{5CnTsrs| z_xwyttQR#3+@u6^pliYg2@UWjI&jgtjPgios*yziZRxxNMlbQh-?yc5=h_UFbnulOvIS zQk_t&<9fxnYLE?M4z^`m%>C`E=I@OFM>qg~MYOJScz z3q}d{)t;q}3k|p?vMyw(Tr~mIs>gU=*fa=sinyFZF6qj_bd>Yp;!G|-wA;}Zx5xdn z=~RB?IJFVyGfIz$)E`Fb=eX0B2$qZ93rWBpyO{cg& zE_{g+w)YM5*j+JAvlcPx^e4Mrdmb%1+4*=_Fq-_~%0_f_#es;Vs)-&S(d7xk?ey+> zXzFo8B&~@0L`b1EP^Kvx@OHE*0IHVg;c1$2fNAiT?`2yfy6&Qx!!eUUw|x@-$YuS{rA z`{0_}1;cj7KAv2-5j3IO9#^pFw#P?F)7u^=bbA_QMKxZAavG^eFBKfkqW~!r98iF8 zXJK31TNxjLay>R3)49cQ)*5-!M1bJUQRh=|Km(7Q@w(WF_T)yAAYV6nm)2yU_MqhU zdCNo{zO^;Yf$zszli<3irEkwwGe@W)3T~1QPUNz5W6J?;_qMTfQV(}5#)q>$;P!r? zoG&Cc?IC9Lv;B>&+b*VbE37+m&zO8rO>(Ue_kHa-?U1jz`eRvItzu}Bt$V{1-|KK` z<1S`kaH1D3(X~72&Lj8y&Zc330tPOcmk9u)5{w-_0rGNY^~ZF>G0=acS#*#T)%*%{-FN~4Bm^kP4qk=KHZyg^!9lfegO2W~JC=`&5W)RF3 zNb7J{I)ylDT%u1!SL!y_3IG(P=qcdXWvYJY{6bTVy=IKR%e7P(eOKRiIV>Yr)i2v; ztfzYsZUXLFBxE%Vs@w&aTd{WEsJ+p296gzi1;)y(b~$x>J&JJAGwvGGlE=+%vK_<&D?3vfH{ zXL>|9%rzip)4^hA!D(;LmJvkMuN@8JF{xa5r*%3SNVUSoA{sp zC(?wlcy@OMrTlL9ur-$~6n(K6FVK-wetkA0kT8agBge@}c~?VR{7=o4hV5@k?>~ z=O=W{&Ocyq7r^zkW$H>B6Kk66m4HZ4+j!;2kL}hUinaZ2^lWaij}HX8QVu92Nm122 z-k7s_T1~WnpnhepU@>>2G1h#crrvqs^&f9U;}ADQs}*;>8c+pl?R+^u$c6@qz20@C&U2l+Y#Pu zIFkOBvvx#(TVEd1<+;-CR+4jiwzmgp$0{3gllC`F?kc{y8bsg(+6XxI;p1z--|;5Z zMV`aNC}Cbj0H$DGFxA5T5vKlUjJlNB?KztF9&8teWb$;!xXKb%D1X$KTok zYA|i{bf-&FYnnzBFyaC|CL>NA?ZZqRT5)mW)sN|Z@D4RZQeTY<=#<9bELM)fcE%&M z<@q`oa_L8A;nmb1Nio`P#Sp44n2NY4KHEvN&q}}s5Nm%85Zx`5C)O9Oth`CCjVAVz z^%Ft&BB%m}ntihi9lO9U+^n$NG%k5!)41vExVpF0xRJx$=J-es^4Rb{;e2`pVp_I^ zlC8Q`jT-p6mpRcwf02jb7fO}Gf@FKV6%=63VJpm)m5>qJ0v=Bj6Skxv0-rf<^@fGO zCdV^CUdG0_!zGoY^i;aNVGY8({2fNO4P4g)pDKu(l==x>U+G1aGL^{Iv*kFM%nEd6 z=pr12_^ER`P``tf&wm?tz;J^#*;^856(jg_Qzun0c^DJ_K>a193I{#BSvv6DTP@{O{}`{wYbL8#AO43op1QX!n*L)Q!G6V9VP{ zzz;8geHjkG^!>Wda_vEL(r6eC8SE zcQ8;*YY-K|pn!JeZLuRLw3pjS;z< z*hK4urPvq>p2`?p5T5P@A>@=CA;IQ8m~0FHi9U(J!9Cy^u>Uq#iviE()@LynVrO(F z0%EekEna88oWc0rjU12ILq5SHFA+;i|4Tx}0L*lAM_qj%4Cd7!srdfc^82VGMmbuFT%lq3=D zF7+HSPfq7a0MH!=FRn&T?Z-Krg#*F$768*LxvW0pC8<(cFLSWvwB8#%5nUUd8yt2J z8j~c$TA>92NzkA7phvt2i~K79F}+A+V|1bN4J+}sPlWLC$q){D7DM>d3`<2O-s$8x zN&@L#aFxU>7DTR+pZEBS-vB|^y_F$w$keRuW^um(7}7@GQ%e)4XZ#m{_8g9ZZJ>_Y zeMtb+xPIg{`7|WTy9?!cehZ^T@k~nEt|549E(?jVr7fYqxmm1Io&~Fvo=%=I)iO5q zTY9$=-qFKOf-0vceUt*PI&R{H?UD6`DNrw^zgv(~%gQ!7WE60#XCzSQ1|@)rh;Y@Q z6vFyP!X)iMn23h_VN7p%~|T3_?sQyARM&oQtS(AQ}n286DYp1q=S1z}V~tD<*s> zv?~ws`hYqKWs;JZM@D_$@vI>4aP`0Diw-gKBB`Z4ybCd%x#DYOl>(yV^wbbj6Kci7 z-e}sMvaVqO7*=jb=w3_VIo9W(7-(f+vLp7W!r@^DR%+-c;w-sc&hf2^|J|_>n8b~Yz zttBhnPbp!W+%Nf)>t*}u*3M#%0^V#W7lN3 zf1P}mOnJh{OZpZ&_oQ~5%^)awO9_>A6Jy~sYcIed=|@)&*eWfm)=6E7+Tcrem}iu0T)2iW{6jjG|@< z&ti;%hkx2sZeF&j=~mCfrqL6qVB{5lXxMX9)Stxz#)I1c3r18u)Sn*jbI1qN^#{M7 zu8n*vXfs1<8iSq(+)c^O>7}S09pEU}+E3bc%*g08V3%CyTFcPZ3F`WWt4~tWK0qt; zw?blTDd$O(gM+gs2R)6}FQVEJFC@m6Q}V>r?W%QcR;^T|f*)KZBDW6rN&PMGMcwZF zl7QHOzjBvAtHTF0hA!zn0R|~$xsxH!m!SsBG9dwy#H59{TrbCt=butVxB>mrvdb84 ztoDLb&PYcgMqH83z^pWrLHfR8~n5msm+Lr~TPD|EXj5ay6T2{D`k3HuZ90dSG31vULYVZeVz ze=e^zGq^UcXaxD1P?%E9r+4p$qxT|k6>-D)*%oHHTeW%D32>usKEw%Znny3xPC<@R%EC75t5NscZ)N%IF&_1@N0~&O zkbSI9nF`#E7U`k8(f!*N?naR*)nkr|dpw57iI3N>B&P zh&=>G>=H7in>tUlgt`e{<59aEBHHLHm`NSs+n}vBpLtf}(PJhafgORD8up9VVZZ1M zcoy8lljxZ8B^XnVYgAxNp~Kzor^l2#=$OLmX6b*Ny2hd47E}I81z;~&-l&+?z-OGa z@e5?g$C_=wYAa6h@F|ql?s5_=eA?=j z1V)swekZh9%(8TX`=`Vz7dDGeTET6i9|7s77WRu}GgHd8C#Do~$92QHAlw3Lv?$x= z>ihyFSIX>gO(ZkOg0+@e&>ky!RKKJtzum{v6Ts+RaNh8G2U0E90aIoE0)*3>%Mr;& z16avkOR&S!&wz_MBep1j*$@Y5Kgj3((fdE6dZ>J6I5wDm&IKGxCRDw4!F>Sr*J!|9 z6v{!WTRGAi5+M;I-Cjq+HNM(szTGl5)je|(<-TdiYatcQqTG!ZC^w-z zw`oMVB>zY2{lI&v(W(h*cnU`7-H=RqXBQYg#zA9e3I~N^#>vX$3sToT_!;p2k5;$- zj7s1GJ7$zRwb`;{;A92r=sWOYeE`bf5SC&773`KU;h?qx3?9yMo8~~`ULZsFeM*L| z-6Ufl(ywj=bH<=2d^GP{1k_gLG|FP6tKPFqkFFN`EJe%bl5Cv=H?fAZ%uXKXm&}h% zcT|Lh#jpEZnb(wH^%891tZo?cZv9?c#uFJldXq$O#?7*}SkF0-u`-djP|n#|+R2$j z`ar6b$00zsfNKR)DHUzs$dWfm3)|Nq&|m_I)!BEjFQu)?@fUuHYR{i%5LTp#QK9cu zROowYR_F_nl~a7ef@w$C(T2~ufIsqZGDA?BpvmZD zahHISdGJ5mq3Az0*1rl{XM@=rHSf7lgF05OxH@g#qhDzg&P|WA!!f@db&w&Qf~!4U z&iWBX)H)}8anLs!TL53@GXMpY*;a=1VMsJl_I z58*vF&geP29D(g2czsHUq84i8K=#-S$vweK76EFr@cB~7qeAbgrRO(1)S!3_By`egr~!(# z88txZvM@jiki{S5iI7xv>#3|EPK8`cbP{Cc9}6}nm4HEJa?>*zBt5oq7Y0Av0q;T( zpaJ&-8n9w4!x#Kt`gLIYZ7Fc{0z!!Mps(Kd47vhaOdXwg^Vr9*=-QqG&vVf_5Vhl9 zzH28<0R$EBrsA#~qJ)x11DZ#Xx-$}^L}N!J&Z`2hrhNYtGgZ*7cZoWjBsRZUUErs+~}2!)-c_qM^Izp3kUY!Xy8t7?d0a} z3>#D-z-Me=pUGn0AiPH)SZwZ~!O23Rajz5QkRmaXEhs)_)sA(Nn4v8>`BM~0q-j)_ z0U((8z=V4(Aa^c=!kRadfUxG(NnuURjYGGGjUP7^Kd@oYyk2W6x1Kcq^+94*XxgFi z@2V7ZEq7#Az6gPs>)ccyHt(jP%Mb)4Hn?+Y5K*LeAqr!yc^hv!3?uP8SRJEJM`Aqm zHJr($+d#TC`+*|$Uu~*RfBw&?t{HEf5jjwk???{T`kH%XkQy=k0R>5JK<;a|cDElC!w)gCxqEN}_~hx9NB!#1j#rKs=u(KHzPhNaBr92C`_`9o#6H zFgxNQG*rJcX{i3m0Cmz(eNgtWAv|%D(I?Jb;nUOqesx5-LjsdBQT+%alnqV-_Rp+C zxs5X>)oCZfR@J@5Tg2s`uW#qXI8fIH;I@NRT6mwMoyRZjr{0`8A3Orl#tti`k7@l8uD&h&Nl8-vkmHldMtO-VBc0< zU3&X1>B(0AtFlatZZ~|we*(|EB=g1^ylE4Bq8@|H`4cMTfx?{`oAh81q-I#Ip2hal zZ`Sn`o9$>#uvCT_t|@-(S`73t^uu7p@sLZzfy5(V#34OB;;hu0!1A6HPB$z7fB5`G zFxg(VPq&w(hK%=^*1vin^_=6FEXZc1NAk}PICnjx7RO_kKqZP^%Wc!$7Y zEe?C1lp;C?^y}Y{XUQ^4gTt)1(9=mXE|5=&!{k7?5DqZGWXK%TpkG4iEg)iuiJg?- z=*D_DgF_qat?iaTqZcr3Ri4#)v1d?e5^2^jZ|ooT5|yq!|HrHtbb1CpEmZZ71N829 zL6p6-Q^96w;q(lSkFl7Zok0WH`>ZCk2Q#&}O7B=JN$u3JR4}$uq4`S6BUnE(-ZN7N zmK_7*MPnBTuYbq`8v}_;L3pvI)@u0!abr{V`w0NFi?=h5i7CCx4TbS>*n@l-9LYxj5{qu(`$h3H)j3aehk?0uY;)5BKL1$H`Yd#% z);331nX7Y}n0SIZ)`H_H^d6JMu_YGxk9>YWY?;lyDHvKM)H=2UdhR@wzE%V2EB|OS zYvP`_cvAWr;yqs_l=wzl-|YJ}9WAfcO@?5hWnSBEiP`)J%&D2Dq!+VDm#ss6-b9f= zcs7d{+<~h+(+39WufgSfa~UE@1d?lvIo7hGMuWm(4t!PvkTny4|He{|c1Y1D1JS61 zr<7~}qxBO`j7S_^2tCBcmm}O0k145Xqhs^xs6}RX!X!|L{bst@PT8~sH5*)gQF%`>%{}4ZP33~xX7UgjGf8?y{yQ7S+&T;^7I$mo4kRXa zPiIHNKm;%xS2J}@X15%(3*iXd-`4|q*r!OPx+{=0YXzNKX~HWcixkz4Wqci8S1#1p z@OdDwQlziWj^!26h#vv)(Cw}(_`&mS63n`N{OY!w*8`A3vjSj~uZ#tvdz31PL7Yl( z=N^x3yGEEhn$I8xv}hvvo=qzmL~tGaZmkgyrJgA=EGK%K}Tk zILGi#ccbfQA1=`>?0Fj;can>8GB)Ux-pq8tgQbeg)(_EaL8XQ!z8i0lj{ta^IT{XLQf0Sv+Bo(YlS%)6y zmm5*3o>%kBK5FUal6?KW!hS$evYR_};!sB&s|SaNM{4ZG0=?~Ceig;=qlIHHYOd&U z-HTh_>V|t8cS5HwQreKsx7!`91g}^;8I`&-?E5GUL@2G#s0I#)@|`g~>lo}z;HOwz z!A0RJy(&y1Y?mL@C(FMPEUK~Ub8{BRf3uNH@Px_H)j-{(6&mNqQ6Eqj!7ijf(loS! zviU(5ccM!?ZUV+#CI|WCxoZ_6KuC0i^Og^^BV}hkVMp4USLZ$XaF7&gbCz_jn**&C z4q$3HJd7=-wE$m4EnGF(0?uMfefkMmt(tj4z;~R$(4futv)B%Uf;?r1w2MPj?$L^Y zjbVHPTn|f!JX$eWw}bwP+GI?lKhz5QMVP8q@v%qQvOCq(qV$p9`z%a)(A_UlAfAk4 zTb!hMlQjAv(2f3Q>%1<|2M>tVk5)*+xzT8?04 z3dG(Aw;bIW1MXcPC^CLGmYINkdv?c%kZjTe*RGku2zZcj1-8Q*J*j)22p?7KLxvE(P`p|hFw4Z~ZFqyWe}eHRK>#+F&k zW~9F<-lkd!!~*IIQOQn=3nQw$CqXU1q5x3K8jNP>8fP^a%?cr?HQIC-AAcEC-x*LV z0fJh-u(JWv+%vZ_wtt3(f{xO_)3eoKC+wq3z$HpSaVROEqL!{|6u@vyk2FLfL^_2*s>} zSha137jM?K^PqxYE(7cos_F1VF@jUb&pt_FXY|0IUs5zd<6I%`{V-#Nmj_gI01>Zb zrwplUqv(zrgMnA)=Du04PW|^@8N;Yo=izuyQugp1X`JFf1w@?$NuLDcD-Pa)PKUd{ z0E&*sK+&;3)|zU19n*LfREdY?11{!aaOy`oyu=HD#KVkzR>SerC&E$RcTG@p>It!% zz2Q>@?jSf45VbMV3FU3qwHpCiicB(Kw?RU-vz-y=>YkmoJku13cCdbDX5sBN+*;fYYd+`+N&vhak4cf_K zxf_CK)Nb1)a}yWdvPh0Rp++LBW^Wfa&0pP^1>?m|Y3Eowxxb< zSF2>eQzn5|M)Ypy0p$D+pLLT3d0qtdSg&_2)S};GLoNC(%Z1t&&S!32IsR9hLC1%p zY<^G~laz7*9}hR@-&~7G&gvnUu+b7sFdqZO*9?#8ekRu*ie}axqU4kYO_&D4^IZ_0 z-v%a1!ua8b^IYKeb{5#)K29dQP2g36?QN{;sqO9Wd71jl{mNVISM*1xv}_bhE!%g~ zS~l&bGHVC6Y3L%E@8HbDt-}wuz^qWtkiQ>N{KPWtXm({I`QYegafa9$J@?7>q^^Y6$_wn}{!ei^|-B>9@ON0~BMxybC{X7{~*KQiaGnizWG)y-(Qd0DT-Si?v*0*IY zp*YzBL&@W}rjIkF0`sd4%68Fj>PR0?T~}M2f1`3V3Z*gIQ5qB7gRuTq`JVTx#yJoh zagH+8EEMp7uYA%5yvY|lnKP=nOc2~A_EfAsb4CN{Gt0HW#NDc9=NQ}I#~t-(1oQ|M zoX+m-wH4Md;6G8ME9Q=Vi^?(K;*MEnb2U)Itj_s_tmjeWK#t3vXBAX%4y}P}pX#hH4#Lh2z z6}VtiD-=YtPs9LqC=n!3oDJ$rxI$4=`bAnb#?4`>{7Yc8oSj1*SyTtzL(Fi zd(C2XF@0xv@IuRI^>-$CClO5h_EQr9=Uxst_w}Z7S6NqWU|ot;lu_NyrAFk;(c~KT zo5#f9v@?zx4OVJ0)e9A`~Bb3!rtn`8H&cWz7?&v*vdY=D2u2AVf7_(7woH z$FXH3lKFR5SIp1pmxkmrxjxv`=?K``1Q8>~1n)DS zo|BGkUO^ezZVc>}(2=@v!%yf^&@u+WlYu>LIWyJlPh2z-Un3&^x~Ee9$>5-67klx1 zOsk@%c8Z6!Vd?r-?{-5(S(^Zs`7bc82SMTu?52HJc;eFJR!~g`ub~epQN91hVos?{ ztQ!r%PpC{>rjX3-HA~WBQe<7qIf*!3xWQmGpd)Ug?vMg0?$}9GWAY0CGPl7@+YU1A zS*S5VAKU3DJP-iN91sw9jk!b9G}}RgiMg(kV4{P31-Ij zPC3CCfD_E?UaUd>Dnc?l0MWl1n=`ceX4dCWnL_n~m7f{+SdVyL?!yGZzjZaBeAHAD zWu07k8`I7SMzXsf!bsHxBAP8)R`fq64<_9Lj-WH)p4Gnfy_r6M?EN@7vm+hK@8NFD z;Maf#Wlr!?ZSO-3Gu+^v|44rUtWClV-i=Rf@VfSfYx67a7ovwzRsz6U*jIu4 zsL;hG$+Ks6%e{92ZiHrkQuG^ot7z*HWWb_!jx#D zl~p+{J}A`#Ax(-fP;A+y0&8J#7EnROTNQPs5Lv?6S`_wlhrD2RJ?9R8$D}Y+Ajrec zp_Zn(cb)4gQ(QbVb0h|oNv#EDg{XVwb zw<;g$AW<3cgp~PYatgjmy6=XAN_P}&>G|G=Xgd>}Bu`b}c3Ih2RPX;WeaV#fon)>K z;7tUEHN%{bX@ELzGqcsubwRYm^eHGVAJb{D19}!0%k6~IiSvO9Z{B~1-XBtw02g{u z&*f|g+-Wq<=Ht?j=ji;^Gw1(IMxP8Y{aC_{n2AMQ*pi9%`qnJ40xi@h! z(-&}jP|qxcF&d}qp|?NbhONF@GgjwAC6Ncja^t=JpLH9Fqo7WILdVeH-J`BSNNZW& zNBR2jML7}?da|?LzinT=jGOWBk{*cl+QjMq?muHc5j!=!a0 z$bK8GLqpbbrkZCT&|AM4u`_ ztvPCTR%sn|2MgQB0S?cJBX)(E`tDAhhy@Nqe^IlH(ml3F?;?mfCecV>r{XZ1a z$33RlrLx0Wg%?AP4VA59<>U>F+-!WCZTm=~K2UBnpAMrFP*SBajP*sk)}V8`#ISz5 zaJ$7T#pd0dkWgu0H}zRBT(y#SD;n&KDcWh{XhaBc8G-tQH$DZ6SzkZu zA|?pyu4~p|5+w>H{2A*4Hi3NnM8P`gmm$;vv8Oj*%DAUszS0_ zb6BgM_-_lRvrvMa*2;7%1rY_1t61+4Z~t%M{CkwTc4?VPxq{+7XqAMT)E7^I>CoNN zcCxB3Ee5Z26-SYyf&Sz%g9}Z3vG&Bh=$g_1P@#a-k?~twB-pI04y&YA$|sRbUC^A+ zkt)=Yeb&a{i|;(ONgAQc+IZ5qikyG+p=RW98`szt)#02%q2$M4eQ3cUr<0|*f_JJh zyPORW2u;Ljso%DHn5Jl{rjh6x%jfqizIb%2;Wc1;pEyRMzSI|d6&6S_ z2X#s%FJ-^84Mtz|f7sl)dG^T-S2kV)&S^Z-+aNF@XH4&jnC+ zKnWN9(y_$a3d80smgX=|yR#C*CoDyli8hoU38;cp;LvsFH*K_Tkw<6=3I!5iq6USl zD2kj1Vn*>Z#EgpGY^`MbMtLaX@aD#s;GS4q$Mj;RqTym~i)Yo)SpRf#>^gk?RTKL( zZ<%y+y85UV!AkSP=@cMQBR5vw@|=6dB_qSB)zxW}N5+{ybUYHh!l!<&?QspphuF4a z!RNsw`kuuzok#LFN=^R0whel4>>yGxy_ip@#et1~EcMLjP$|0kuMF>EKq{oIw>93X zj~N2wejr)c_c%VhZuuc^(xMjo0$t-H`s=kq*?ua4G@LMe-&)j|}kWXC(}JV~Q?BsH}}AB=U9&`3zPs){tuw?}E6edI(;DaLt) z}cs=pv% zlk#_6Jv!K|&Ory8KRHb~h29m9a^0`xMyB~^2r9e2!Bq{thqa9H_Q3nb<+F96)@^9( zQ2+^1FVheq@Xp}iM%YO?3)tsI(QH+B6HU8MN{iD@2(`Jg9KKmBUma1825|H~J`|M$ zKKZfcFSLN46%EBW0ul-Up$rOrtwzx__EX3)#HBae0x`Tu_D>%@3XOf;KUH6GGqk}~a{Io!HtN?teK?JHA6%Y5(xQ z*J&!5*Yf5FXAwB?D+t{VZ}BfM2F*5}rjwzBh>0C@~kD8x@vDoEi9}MR$h8Of5 zG23A{zcFJtAEZ~U(MKc2;BkM*o0ylx4Ej+`ZEyP$_l87RY6c6(Vdl@JsEQP-F0nHe zQ%%0&dAjiw|_fOWCc_;UVP{h3r1dtNGaAU5y-g!@#Y1a}W30WIWaBN7CzpAK{M@zIN|7m&h&3nD)@ z06IaGm8DZqh-K`Axms;{ZeqZ@63X+z8Ra>i(vI!4o zXwMiw50(wD=}{Bd^Wx@mRdTpNulyCfM@~!&{7(6wa(wu?chcr|-qp67(kIZ8kY!g_ z_0w+()c=IximPJn;^&#oqtTi+e}Ocoa{TyiTdZT10~qPKn-uv|;;IQ1nlPXC+KQ_c z*+Nr=(bSFsi>^*-t|`{kwfZdY-Rwp8?A#)V!hB`Bq|vJF;)S=yi7S7tJ*Qh|71C*c zLXNyY+W|(*k(a8H6@lzI>#Ii##y-Ll9+*SFGwkfiyTN%viSwyz9VC$IhRVYOWx=JS z06Ee}az{NM0qtJzH9QBGoM5X&%54WXvIjgVLs{I54Te+DBC_zcAp*^R!(t|X{(Hn^ zgp4WrrE4+ux+%tRkkCJRmvXd23OzT9Q_SCuhJ=z+m1TQ@_iG$$U18H6MXDPo0k07& z7}ui6v?q`ipL1kI#;vJywWz_a6DMCK*rMb5-pB>JhFVj!v{Y0vk=~tJ()BOD%-lV+ zb4Ey(Jimd1%@P= z&7`dJng<^tZlf6HXfCltg`iWv^gNi&3 zp1(np-;#gNs4Wn?&k@$ux7I!@3|3g=Zh<9`=(f-11N4~HAR(Cm8L$&qW zZkc_*Oj+!du^FA>{Mr_C{H^?ZUD~doqWuG7h?aZq|B$Qmf|zGzxv%*4fyzvZkT*qEK4a72W-&kunVP#I(Vd zLHKT@v5XRV7$7Ycq(`hU)fxt_d;wY7>obBbX)(vA1lO=w#`ajoT6hz#mwepWIAb7+MGvOZH~NKj;7FBPebo+n zTBTu}w7qK{MoGk$sQra^TZ^n)FwoP$B+fgFKkE#7*6vOc)%A9_h#1C^JsdSQzMGuJ zcUns2KRD9v@Z>-b;kOxUa)1KGN59U4y=4T1c|7>+j#A=I7(@r(w|iJGkgtgh6dUPwn6EG$aM)Gw1=m46sIx!dD+nadd`q5?(*bqRFe(6OqrkHieO33fzlQBoB6dUjB`xu600o>o&zR*D>0M4 zVq@Be?5{$E-mcQ2?Sdt>XA9Ky(({2;Vtm!^KB>qhbmRj15O7koc!t464zf*;e$sS2 z(7q7*htopHJ?F}S=-xW9Gpb}9J-e_zlnm^?7W;&9ETVBuYd zyyAU`L$Tcq{q;~d?VV<99^3{k0u8N2X5#@mXlG73tPms4f%2EX&mmOuxmd~fL$2_; zIP>PTN_aj(P-3_@CcIIfANF7(&+X>3_N1)1jKD+IY$AoBr&Wx8u%^lU%Oo;?X;j>X z|1DtNl@U8%zBIR#W_?$2jI7#Smdi>FX&6a@Ejq?SmQeh!?Rv#sS(4J5-5Bcv4EoGw z@onx}VuiqT@W8hFw5=tEks*vcR|-Y;7ySz(J#%T~_onQ2#cv2|dJpuG&boV9_hSY? zLg&FOW{heCWp@l5I13J@rAFPq?{zGp-nVJ&4Qm+$Xwe4_4X5fa9#bpjX|Sws7ju${ ziteVn)p^fbmt&bT5qjyd0$+5PZiz*Q>2Esi&WREJMSY2Vl%Hfb8uis1QijXqR*y(8 zYS8x@)@L~5D)iRN5w(+w`vT-)6yKfXGjK)^^keV>%Q{|IU@?8y`f*X5NXRH(P>h)! zP4}%pz;_5P%*Gf78O}*RjK+&B0WC|6s(uq9BVGauShiVpdk%J!xtV0G-Yw*wBx5G`b6VG^hzuDnQZg5r8LfkZMu0Sgb zLRX4GA^Mm+%^?yHljJ9~6wEy>v$e?j(9I)zD|!y#AkhJ-OEWJ=SeNC>f10bc#grd}$#!kXneHq&J}kXbr65jwoL} zbP&Twx2VW$mFbRgz?%a-X7VHw&@+hy&^R5^7cAN3s|8 z85A0B(Ok9U$L=*->6=jx1wLnIc-wOPdV6F;eeD<#ju;dzh>ER9$F}DO-&RRKOJs_k zHgo3s(%kEiy~RgP{o_gA?wuevTQBdp7rYp=TCugmp&P2xCFlegeI~)ed_bj`4z=08 z=M95Uu5rw`bv29Ofe9dctQ93bafYOlodz7YPxHRxC50?jt}uRyt;(V41EItSpU@Ks z%{>epw`4fSdp*%PpUB|-UJnePm~=? z+%Ccn#wp8HD4{Fa|F>GwC0O?|j-VmQ-Sh=gE^oa7OO zd%2PQLkq4}0f4^-r6xp#l(w(Hhq@q;vj@WIA_^xFn){|8O;K?k{YA7>oQ)+C*oc#D z9^T8sUX`}ZI(h(Yb*$SFN|pohfnUlrMwsXNWp0r00K!x#q%~3Gg}??Xo#~p}$^CjSra(9i#oTxreEzkZ+HxIY_9Jx`)`Ze#R|Ln{jD7JHU_YQXatPan+BGjV>47< z1WY`KQ2HPOl-{LC>0Ni!i5FC{X`|+aQ8&p-4%pPQi(arv))K9el)+jnp0Ph3?#zaf z>u7N+Mc|q7(*Di{zpKbisx)Do+Dr%;rSDHL9o9F_;pZ)}+NtPiD)+`XwsHIiTkKr& z*KwszO7DyAXM|g7?yR&9U1r%7;GM2FtZ7bdY4m+va2GCu$QXYOsltiIHm2g5@k=t# z;EV;R%X=OMluD?$`k_o6k8_ofVBb}uijS^(8|J`Q1pCSA*$7O=Pj4e1T_i50$VI`} zkWz_W{yY@BmiIsf<`_67p`UyJ8>17tFfjP}3?}AK$HYuNSVhX|Gkt2%8Fq5DUYu=( zCUxd!x(O;!7{F!ONcsKc@n@9ZIiP6WCEGy;pA3AHSF?xxn-CqjzAfj>qkYR1RIJnE zowJSnQXUxH{={wv`5u!PKVw>^fdI#4-s1OXC=pfe4ubLPf` zyHoLv>g`xt$2%v9D1Rw5L+SP_x-bu34Pe;y_&aZ?R)&rs6>KC#Bt=3*#xXvR*#PP; zfTKdkxdQe)mvP1%h|t+6hc*856hcD{=#QF9H0azWMwcR|Zl!++1)x%CI2nlF*{(_XxMs((#xlWMPU*pP-MQ zNnDF!;!6gHF1I$gn|M(|k+&}~2rMF8QJAaOLL4r*9n{+RR-FZN94D{0J-RGwFd44C z|0IgA(?MuD29~(5KW&Li%Ctcq-C^_Ao6cbN1MfORH_s;|@u1w0Rd|-=K z8F;`y-%!sE7}O*Slg;rT)cuqxCPlWcykd85i5?u<{6KoiI%i16lROAJy zM+d5w8O}@;#e^fNq9Cr$eo_7=c2O>W!<-@MzLEIAuTQKfXEHK{40A_WAP<(3iNf41 z^xpaCn`3ZDtv)P)&C@g)u4mZPvO!nwYQFBxc5$WttxWo%NG_3gAsi|BLY zVG5sPbGr0a2vtX5{1Ef56z9Botd8AI;9QH1BTJR-l+qq*m@I%7AGOMw55-!C8X9|r z_f5hz{~f)l{{v<&``}1dC9^7U#-+5JY&vDLbLh_M;=UH68hyxRC}IoAO7mmDZsvo> z=8HBG#4J8&9NVflK}+hQl-`UYcR)+J*df_n(VHk?xzy|OX{MS!ic&@}6tZ@BA@O1) z>}EuYTBMX_;4Fp|?(`3=R_Fsal8$R*AGa3rMyczYEJ@*ZO}F{CDCM25!R-V^`#E=W z)p>S$X`5Ogs;PXGY<0fOT{nH1tG~3-;5((#O<3wg_8=A3pW)7XUnA3)=yq zhxi*e;Wz&Rty_IrQ6Jeqc&-|P2!-S_?a<^D+~;rM>v z-}l3HUGM92>{D;gSuZbq`Gpr=n1%o3bGHcHHCfclqoSGA>pSC zc+L5=_ke?WL?gxxh;inT=pP-ge_x@+{+RoJ^T({r+*)s4e9U1zGmvJ|cd+PtSKH3l zUU4+Sk2K#Nw$w!sR(7VCo7D7vYr2lyNRCVpoWIU($q?5P)pk~Ci)R~)nvEK+x;C>3 z*PBo8&7hl#1-T2#;4`(yCdJJPjwR9eL_ZE{dS6bIsZ9qKNyJ=U#fyh&izN~57Pi{x z$}sCvdIK$SaY?am@RWcrXMZO$ulT-k=zQ1r}j$9>lTg?bD8;>v`9fNp_i!dbBd$O*h8z%W!Fi)Of9D_ zUg)k>e6KMm=L(CzT{!1eW_`Q;djY!d#Mhdggc%ExanY`Eu6fl#t})jx<`^uCu+ly|eLsQ?w zzmK22#&-ULOhzlZ5GUWm-+B5=tt>OpNx*0gO(m_QN^Eqs>SBNRX7QU_86zGiXPSN_ z-_Z6uxjST-lW#w0GbT1RrV>4f^fFewThv-@%MqQJ>lv6T_raY{y1h5LrsZP#o-g44 zZ*eSxpS9*<#vV;c8Sltd7cMSuUEj)Hevw-vB}ql;-QL`{O(&6m{WClU18%89VHqw*70t9zN9xs8?)F~?WHrfq zb0Sox64CvT0YA}wk_jG^SpkAO$CHjKOd$`C^~}9%yeLTjEcj56ys_OrKTd}8;O6f;$IUjt@5R<4Z^Q#mGkM0 z9`x9L>sYqJR*l0uam1H;I(ITg7D1E`AK%V4?+OSbtnA@dd~0L&KZBxhE90!+!Z|0x z2>7VSIhRJ?S)4@v2_=nhZBjgT!1wR-J97zcxc9GH6CP)N-$cHb`TedP5RCgF_Sh&C zAO6q3;T}n-&Rc$Md3DrZ&)@n$_^r)pn-usZ(eHsJyl-tfp8gW`Ur$F}Z{f=qdLihGHA~YV{9)ggkNWm|`j9zi1sJJdhh#do1vr)Vl6${QP)&>)xK0 zpQKW;YLM8+f3%o>J@yA;YW>ZI%%(+yj3LWq7jHAJ=VW;*1#pHxH%h&N-*F4D5z5qitY%XTLe1MpfG5nOK+ zscTOkuAoQWv>N@1?ZE@&GUivpC7v5} zj#sSopH}LBBHoDkWrO++ebj>un@`R>Vi^&g;a95qD~sO1omo1PBw!Vv<5||VU9&8y z-%*(6R@d%C+|3io_;)B?bvFFrLsIk2Q~x+QlYc;fLiUciF1?lR1COwI8-cv#H-itO zhZ^}levrS;4bQ&-zhmy$y;P%UOX6u zK*r5mzGX#q-r0X%?!N)4Q2y`#_I&uCv+n;}#ymNZF?(~EwBTNC1}eh%-J2OfCug3& z`vpX3dViE&EF9U{$O-LM4z+0pY7NJPOHwxANb%;<1u@r(_qeP2O_IT7#MJZ2$7~kd zgX{At!J*0+E9zWYS4vXn23@(MObhpRdv#}9l68S#&$Zrg`?6R{d~=s}-{)|JPgWFU zT}vsh`{9>>Wmdka%DbX6Zd!7DQ~4$y{jnlT*mhv$Wq5ijxW%H6B4r<2y`p!E7KBk- z4|bL(YRWU665RF_8s4}#kumo#XUn!15Phwj&kA2BD!t6Zx3ooWl#oO6@E9gfK#Gp` zqi&DRXI?|GSIa41ubZLzuHK`)zO6)dn5t*K2N`Xl+1C^fKP1gIO%y2i$1x z5?*QH24DYsC35k4=6owk?ZA&v8K^`ZWL76x%YB(fOh76vDo{vD&WLCq&JMm|Or zXs$&1M!!jO+(1p;%%Jd@Ky6g@o{~o5``zI~8Qs{1D^?=8?N`#e z!#-(Hr9I+Xl?l>Ci*Zp-DA@KE7RM5%X1|#Hkshmr1)AaumO^dsKUp2xe>s-%`FxMd ztcsW-W%$dFIDQsOtajHg4@`4ZTE+08JX4`O6LlJ_Jj+pemXr2cW97NHev>O>8eID0XI^SLCrM(;sVqvL}Q z;r7_DGq?*9ibpzvqwLkSTL&m3{rcf<G+2n@dtMD zCHU#^gsy%~vL%Wh@IfMUJyPC*`PtEiCCoV%)11>9EZi3txyLV4YHqja9;I$!IG}Hz zD`}3&Z4X{kF8%6pWZk3LvIaxbDT@sjszTarEUhg^k+zBZ`$&sbANI^WLbHu5>wP;* zX^Jz6`00{47208Vo!zv%K4PQA@tZB*4Xk{eeNyo*JKY$;D({69_Yq2Q2f|T`n}br^ zoP1{9Xo`!7)TOvP#eUm(zQu&<<0mlqZRZHRM}0a%Jw}RtEs7F+_7}A!5XE#g5}kpL7KB``pGSl@M$l1 z-~Y(O@n7e<^K03V-yqGc`-@Lo7G$=~j17O7+s0E}#O}npktHJ4j-p(lUge-)DPJhO|@(3_GJZeJ=_Qc}ua@x83pp;T#w zLeuUb&mx!I+03E4#zd=)R?(}q%h}3nDKkBG#=p^`FyHq;@%d2N(4J;2d42JU*SMmV z#F}CFWGQQcHI+4Y#aU&6L$1N~q_Z97ExfbmSF&s2)uCM=AuUV%V!0I>l!;0QPsfwm zUeE39i!)+E4v|a9(YjitT$eX|#YBxW_osQL9?2z2f8yhMeo1xM?J|_dV;2(p>a`_? z!|uj+U|=XOls2@Di^Kw1^m=tZ1v2In+@P54dyET=aqRg*BN?t{%aO=oURdgSAq& z=0r`g@s#LT%9p%MkL)r}YK)?!OsTOVCG>i!1vJO7XaNMlc1Iao-OGwk|1Iov{E&7n zgzUxB`8ZiPD5S|W)jIA#Q0$(JT1sb_XPs)P=ke;6ODuC4XO-?2$GKP*wY9#BNpil5%`m~( z*qv&=mfjjS{DBXi@eaBHGaSouUWBe5AA;;p_F>3gRxC_ ze};bQ828NBJ3VFN1NiVhG~`VtwPP@C3pV~QkKAa|AH3lRv(l~m)M(ciE~>sIE&tIM&k$_67JbB!oePg6N)x!qrF+5 z`LAljz_+EAf@HpFI8%`_HqRupx{e#Z;%$+eH3?0F?ws1iIKBTx#vTq_s`Si2hN1hr zdt34nWQ_skUyM!LMaTE&kGKVvxKrItL#+l5@x+cYJmVZB&O5;+>i0e8{DN=h|L8Uf zI^MgbZM&3qIZaS)%07Q$c$+ueQtCBPPH>`mU8+KJ+xYVU^dQ+uX%#WWT3<&Qt5o)i zSkT9bO8hM|kVqu5Bz^?mSGxqcR|ZqlPj~G5pngSy{OJDt4d*Kgibo(slRxpb&5YxV zWJK=FBEtQ!zf!hp;#>E14qsC~F5Hz&Rruya{1zBWb?M4Ru%sc8$s_c}9vB)qE)aEv zywNCbxFbvL>93z1pmdgcTICSBxA<-#&5H;Nq-H41qRJm_>QJ#yMj7>0(MASAk0LV| zMWzlSbIw>~+WD;GLwAr5SD|DT*3TcNp=2udf9@i4-y%tMyDwwp_PtsBQiXO-`jx<7 z?xF=Xr~n;*5AO{PProzZl7l`5G-nI?+l<5Vk>3y6$*gJ!%SF$=GVK}T(NpDFU z96C-t0NI#4bOJ+yG+GP^;?{Y%V*sTiGv(rpxW-1!#ed}|StZwu1}EeM(p!>EIE#7qEBfw8lXB-?AMoI&87X>-gPYm9esU)AC-4MXV@Y1X2dUf7r?-WaEvMSCQ(V=% zae|I2Uw1E6pDXkNYX6AnY}}xjE~{RC#q?F2c@Q-N=gD|xNNBXS*KdQ)tv);MSn|3s z-q+}}NZakVCIlF8<{!usir$wt1;D%z&SkW0Yvv0`>SUhKxXis#6WK!=SZD?1X3=)( zPDXNDueB@QlmS0SYkfmo_*$vi#!rx%1{h~?c6uus)5mA>=QWA$TQyPlPsp?fA5^#5 z;eiL3ue|}emvb&a@46Whv8uzd%-l>L84x6}iXn@-@v$tLi0g|7L`FDE%~HQ|XK#;i zmi4AJwnGjhYuOpCrs1;>T0@KgpL^@O8cdb#H_CravSwc8%}8dK9N!u2=8dfTQZt>pE-C33pKJ-qh@gg_FyA{E14Nlzi4}M3|P?)YK6fHx!nX=2Q_Q{!C zSl~Zzu=`e+zl&c&D&-d$L-$BncT4*z0ZMp24EKg^CvHYf=$aH><|tt9eVm7jJKaR- zjlsroQgp_9WvWkE{&g$9s&=D=f7A`L5=D9kDz{Whimu(o5u27PzR$=yv~W(c{I*ku z4N>o<$+EFC8SS89)WRcO*o%c&q5rONbljJHQM3Y2%Z9XQ5PIgqqYp z4bs>$QJ{gFsSdEm;rkIfevyU#c8zP&WPiTMf^ef-${yf|hT8Sv9W6;>KmM#83hh@54Rhg`Pu(~#g zz}rn>(Y~3O!f9{7h*Qs5mgX;RIm)5@bU4#W6*qS)1Q%xn8^E_FqXC?IT+vr~@9sc% zX;Dh1ir60c)mc0myaB(-sN;=?S8Lf6v}X{8oi!J{3b@f32HcC9axA{Y*u*_zV_Q{B zH<$q6Ru%)|69b4(cpz&_-94DcPeNrKUgXQhaqZ!e9aP@{L>qB3|217P1-M&l`|gnc z>i-?8Tf$P#V@V80CxxRNKZF@<9#5_X97=*Ut8$@iy=mjXUH!?RCT1i zhj-$Ct%w6~T8E%liDQ|=H0uM`nYx71Qlhv^+E?At&C$(CgVIK8=r!s0eHwhIW96b} zPu9Nr+!@rp+%!d8cpPebj%2FROJ3QtX3sT?MjQ#NrAdZL*|geePU_3iXhi42Fj7pN z+Tby3I+n8o9C<$JlbE&37-ns2-gRRGfq64~*_`bhvl3y4UVR8V?6hZ(f;pV&?)Lu@ zEJK4aP2v=XSCnj^VuNx1Fs+@UqKwWLQhyzfKm1On{8RXC)P`AD3Dn&oF-F#-kG&DP zwU41&>+hH{@M>oOQX@d~#Ip(3ar*U7143swmW9)nR*4tOntIrFLhIR_*`>+Gmn_8m zois)(Lf(y`Q2S2ZyQ+&6lssnE+4_~iGv#tzVN4rranOkjf?*(%XFo+G>ux>{>S@cB zHnTztGi0pdvi45=$(c04=n&!IjOdZ1xO2JVgRicby4Y~+U@D6wD&*RKs72`e6U!{jv(cKl&rE% zi!Q3Cc*LDmZqlyQ21Twrs#rC+)KB1{yG9mjBSolMwoKqPF>@sfqE0DK7VLFD5#Ml~ zvZax;oqafR`Ra+$Vx$ITG&SV8)d<;6q9q40fJ9#T_y=Qq?MgbF1=ZP(OLo}mbdtZmeD}0JrT$db@Trc&>mT~RGEsHyi&2ED=%eBZHIG} zyuzw+x4Bb%iDYPUh`R;%BQ>~wL}Pus_5H5~K30uR7m;6n5y0n=<>w$0gNe>a#)%50PSKa3U36 z-VpTcgM!?}oWDsi84ib-OJH`>uC7vgTQ=_2oB)!Uytc7j#gP&Mx3g*lhL*vowcXMS z771>u)7hs4WTv#el-i3$Dupi!*sCcykPHd5s%%6`4_`dl=q;;v>$mFeFi6Yo{gve( zMOpLc{aw9X|B%{QMMUHCB+yv&VU1tgVw)=Szu-4FNi!Sg9@nvK77QHT!e~WzrR&z{ zO&#`wM#sG2`N^&1uP0cT7H4Ylh)tCm*v-4d*S0cVHRLRXyyk2zF>LO=y0|ofbqj*? z#?ynuvb!C9HcTkm=E|67Q_7_?^4Ar;A2Fcf#-K(|eRTf^-0lwx(*?97URP0i%?e-g z?7;`J^ui@{PlUD@&qt6fB?fUMffcIq%>hwafXrZn6=TU{G4>cM#@tJYK;9LQ^$X3I zh7w@T;p(pZ?;ZpYMp5gOn*q^vIfn!eSTU}JtXJ1PdjPWDXGMe_Lzc8ydMY4LdLcW4 ztf>?yxxJ|Ie>sfMOBDno{A5Hm)0=_21TBi-JvR3xh0zXg%7h>qM@&o~L&R|ZBlPvB zk&Slna9#quAeUDl=5P(^Y{GBcD3xH`$`Z+;OH(MY7m8qKv4V+KMQw^M{ z(vVIvdM^(yG7P`cA5_!)X89=( zXa6KWpFAHE2{PBu5H|#VkhK*xj?dHxW~}Fis=ltHepfY-p|(0I&!iYjqF5s`mx6_T zuSxdyxg6im6S==BIX%-WsDeI*az5i$MVS1dyqcdjmNggnNM&vq3 z^jGKQaEq%SMa+d@vWzfPiVtVJQg}HHjRjXBWNf*Jkt3gdXrtGlO0WgUI6A7D;;99b z2$#_m1`om5aQVAgbNtIm^wnqaoHs{S{LiWW{+NTaOWi-I5Npq5{J?01w)Q`?sl=Pw zJpE}KTy)Igawe_s2hG;dP`;_&A%kV3N8BT*g2v@o#6ZWGYPgWzyA#b!<4`$OV@jie z>fq2*ssrOGYw;Je>d%*?3TFFL`2jJ+Sa1F=h9TSWx;kbtHZydnMs+W9%EqOFrb^Kx z;Z`n}B~uC>yE9rGicZE1s7etK;2m5ddT{;36?V9BkWv$Dm;IC^i}V+1&JBD&dJr56 ziw9ohn->eU3GFnDiMzOqUpcs%U2UYjB{6pQKpeWN2RG<*L~}HD-Qa)IOyv# z9M2I2a$EZAlJ-}CEvAbUh|SpBy2?76Zj$YEw_3NbBrRy5GUcN?KE}VZ4_gjj_)a;G zz?cS6LoJ3{*;nG5Y>JfI_O5zq3Jd4-y>f|9VX-LV5h$qx)wNqeXdNS4VB?TpqB z;Zk2l<44H8_Zh9~hmfY}RubuNeWrAqB;wi4j56|U9|jT4cH^y`5Vdyb-+WFYRX#QK zoul4I$QvJ#4jo@Z<|E+tw?o@How|&z!>Q8*ea>o4Gz4eP9|WgMsmZ0MdAQ<5dSx7z z{JI;;Y?x0FZ8}dcKVn(sTcGljMC$S<--}$hLA%X z*V{-QbE`U>8omZ=(_D3^xE?T663NloLNy0h-_FOr3cO`F)-{`ikKoF=?~MopAMt+v0VLha<}k9ftl$o_JVOa@b&LUrVF~ zSWyMK0Rhxo(6@dK`4>$O`eaNmBR*Ef8WX6plm|+=->X^*gH_y}?(aI(l@|UZr*Rh6 z!F@>3Z3~)LN!eXXCi_~(<(0J2Zq^;iTVz~GGGB7?<($9fr=wJpFf3@_KBm7|I<=Xj zHtEYhZYo@oG34bsO#J1KA4_&fXK2S{+eEud8e414VZxB~74?GgMTduna#4^jU4} zB7MUxl4PLxQnFPsc@?)SH6?eDt@Pl|>JQeIJH?fi4;XSNk3`O&Fiw7n!Fj)8Q$u5q zO%?G6c*yO(Rz%<6-#hApP^ecyCUyWt+&uPNZF( zC>7G!aFs3tTej&{qN{EN+QlG257=f+?;rA$@A=AoGY~gNplJclHB#)uxi6R~z>YlFoqH=tM_0=`@L@{fW8IH=Y z>*Oo&6%$f^o}*=t1Mjbc**D6M3N6FAt(FycPb=t=AlXtKxSn`lRb5#h9B8pYSA2pL zoyJs^Z`MmNp0;ih=hK%F>c>V4OKh~@i6ah=jLgoypqr(AC)4`P2boO*5qjYZKSq$Qzv~Mg^u1pn`5`UX?wic`Gbadc>IrUb{_x z7eFYT@koR{p5LDo>WnwRI?`d&zcU-R{~It3ee_f~V;Zz*L}+@Sm)H?bLdAWLs+*%5 zXVV5oP~99sJ3>ASwlc!czB)W`O+rL{8=|s=roMSVWfcOI6+K2}1cV+v=_i#Dv~N+fhLg2BZTT&hHKke0PO`okvw&hHK`^j-lC)>t zh*^0YveWUKI+ z?jdlqkn|9O$7+v zpe>X{xafYDqzu%f`!(8>Fef$r43?wh?GGjTsVso6&f~aZRg77if_QhvB=0^~a{Y~~ z%bNDpJUS5%!nb&1Vn}^pJTDk1sESqmS$E#w!jPkGo{nww{PO&%hWAZj;GI@?8i?JfzbZ$U z>% zY1eAnOA_K4;V0fgE&h?wEsV?W;`xIP4Xg0{90zx?->$gXys$qia~k zGjI>+2pf4$xc#Z&IJma6t!=1EKD>kMj0SC3Zk+DE0j8g8y6o9N#7u^zk*sgA7#0by z(12MGJ;5yO&GU2gP|RydN&_=&KeK>o6!r6xi+JN1QH%N=5N}Q)7wNcqyr8AP` zj}D>|JPTAx>v*cA+;yh2`C@9DrjmNuPk3-;%(eB(;WDeCo**7OIWXB6mMx0az=fE< z49yR-fE(>UP4@W*BUwo-3SlIp9ekg+z`3B`6iunFQP}90z^^vJi>^ReFYGfvFJ-xW zYFUoFTV3sQK6&txfL|-kM~n@kHRx`z6k2cChNEkpgNJMW2^VJ&M3<*%BbWI4%$hV^ zH(m1t_IrCz{+r1SW?ENJR2;YH)%wLd*TmBY>zYKczb_EkV_DO?2UD(7@5qf~3QWV2 zxE8A&{&9mtZ#hkKp5e_`8*81|hm~l%U6@%YDLi*bW?!(w+sXqegp-KX!S5T$1*%{} z+n_F?;fjvzToc}?#&jq9m{LMdEGK>v5l%5Ya;ZD~w%WBRm{4m-g^h6v($E!Jv&OcB z3ept2h;?uMLd>_?L+S;j-rMXy`UcH5F*ZQc;$iBu<)Qs5`rO4c>B4@JN1U~Zo>;!@6{ELv+O%}W)P zadeLs@4Oa0%dENO)t9Yiwwe;%?n6Sg!br3X^B}&TDlcmj^uEPt{RHlYIe zx(v^?gBMi<7lpqFWGH$eahR#|D*?$}-IxmHtw|Ni4628g!t1814y(DF87G0e_{|wx z5*jCN&vlP$rFfpX4tKVwILaJ*-`s!iC^OJ}5jlcmO9`ru_^CoX!}oI0O>kQG`>NpqBZd#_ut z0jf8}jkTG7Y>F~PX!QU0HYL@0g1B&7yeQ#TM<%BNlj-r`wkERS0hCTBYb70!3A86+ zq$$9e_%PCl+KiOgq7gmO_sg`P35jRmuZfR3Hd+unhkukdu~tNlZUn|p)tHbh&srfn zjiI5+f#A4MvNK>Hb06EY)e%Vd30$1?RgepCY@}Rnww0^jEXa^@HC5ZP!ino)-Ys23 zw?ptSzgQG;=2&;*ljHKE_SwPpXA_U^M_k!KZ=d;+Zg@oxZz34nL%E4=cl0fz2uu*c z^S~XNq6=o`GBT>&)W3WoelXD6awrl&nDU0%$;qwrLal>K+VlKZ3s`_&VlFRRV`Ue> z z?6W{3b4r6j=jKPN5aCleFST7g2h z$*$_Eat#`)7oem^x7^A&!Aw)|oY6Bo59;+S`p7%5Br#>xY|4@Z`Eaf$SzMeZNaHnj zcTw)C4kXXUM**xnu_A_bO13j+DjaC7YhT$Ftxi7|tGjy@CY|MI(s`UAZRkof zMbqr*gV~BlH)Bd$dQv>Xy)4p7Jwn%*-ensCtOXTeuChRvOcbFTfXuy>>wl-iDvG5M zySF*T>PDS4q>VuWRtCMXGjR_$q63y>Z&8a&4tjA!#3e;U^8&Ln8)Om;C^rjj&Kpq)Y{1X?*Ti1J>} zjnx!6q@&ru=q4G5E`q+r0`x7Wj;9vR<;jQFQy2Z{`o?Yp$w3xaRD4fGZ_00{5-v*vAU)VQ%FF|CnkP_2YJ<9u zW8>h;ycl}5abBg-Tt4V}7TfYsIC1p{z`|fkbS|oN*j=)-AnE>KSAJ$8Q5nTV>Uqz} z2wllOoFx-A(?p5$BMYO#Rqh3=EZr2r){DN#qE!3A+FkfWp|<)OtI*=;iT&G;M+a;-g6TR|pYw@)(Y@7n*Roz&EN+Gas&Le#(Bkj~Tki$#=?-$7$U#(A- z1r#sRH}^NCJAB(}0#z<~XcS%a+8&sf_{4_yEnQHL?-KF``|H-p7Yv*T!Za+a2~H@S zG&4TXu6uIzCuN4pioPmJ-bEcj_L9Ulw7K{zXvJu``&h|sahMCm5fkjOjQQ)Kq#M5z zrFhAt-P5-sX$qi^gnIyUj|2<6>79JHIko0JbL7 zhAC4XKCr2B7*QFPRv}UQd0RI3t5#!Z6OFYby_JY|7RP6h7)V~YD{#f1U0}z{@1I6M zU^htu`#W3CA3^bFjoQ6BSiJ}ecFs&h-LU+G!bl!zu`r4ZHUYrR_56ODd(t*->nQQt zTlPnJOy{wWUiE&a=u-C`C*5WS85IwyW5nJF%Sy@)B#~0O*1Za&hoLfMhDUgT!7f*Q zb$ryl4x{e7xzg&%QJ4A!nKplv_HCQkl_ggcNWX?%*_I=kwU4vQep)ssSxMiIjkZak zLXf~{JG#Vp@UHPo@McLXrs!X*AJye~LMwMC*L6%)5HbaFDJ+W>uns$I^ytY2KbGwr z^*l_MQicj7n{AJ$&~!#dE80*@tj}yb^PP@GY*0sk&KOw+Z%u%MN(2sm13~zlaCQ!p zmO-`7)U^gmlkrh?^=)ol;4q3c4(jNv0bP+FEWX)#GW88Fh65CUn8gwUu}8>K#;zy= z*!tHoc;#lx_>vE}2qpB;2BVY)gD#HyQdn&BfXX*R-8Xd8BgLjzuyD@ErWB0R>v+}H zp&OK<9n)jRxD{|ulkqb47+s1E;!O9=ssjxRd7F6070GC4yK^~PRGJgI_X*Ht&yuA0 z{tX1_D}ql3_--n*MWM4xH8LB~M36K(n(W;v27W;LNGyS@!gIr$}1s|37yX&^MF2aUD3!Xj;Sxs(NgVTxL~p9USz4@ zQG4oVWw?&M<2g=`l$VH@KEW4BNKvS!Ml!EdzgRkT=ho`X5kq4^qE5eNwnM4)Z2*@B zYKuJd``#mrUf)6#wVQ1JjyF+IPge^)-9psUx#RdN@fD~9k9%E75DEqdjHOlEF%4ip~_ygM)pnNH72c?3SA!H$L@O#*QT)>M61!LVW-IuRq&6BIIE}|4b z5Fu^L>Z>T4Xp$J)D*9!3ECg?}xv?E+`==D*W?Y@hlfoh$T&JXdo|> zRy{7y^T_6XxP8NRLzA&(P|^baqZU>PNsW8!62JJ3(JF+3G`!-e-5)<1C9U*?zF|Hr zJ}4%3X;)iHnhW#a+l8&tB7uT?MM2W1zP9nx1wp8!TJD6E#BWs->I80D9Cx;<5JQT+ zqzy|ibq{LL)~s<=&J)En<)w}wS9c_D-wYiF{4BIU)~@hk;II&Sm(9J@i9+b?)DZd* z+B5EsF&yOiF@xIYHh~nMZP51grt!^Hl~Xt}QjsWwwz7+ND*s=vy1xA8H1s<}B{(XUWmr zBqf>Wk({PzX+opIsmW-2bJT`Hc)WswxdwDQvQr{dkqTFj(&16F6WyzbMH@|E-w7={ z9XToBOEBOAI3eR67mwuz*zwE6T{6%i?GeJoE%{>pI_QmR|Qu{1+Z}lZ6tx8 zV7^>dN;Gc}j9QcpMbpQHqrVSH6-AeAPc%g-27Z$UY$t-jBsuCh@`ECM@J+@Q3u>iJ^-u7r@g-54w4KNn{(&fQM3RD`Cce^q+SU)m{?{%}ydUy)+@k9t) zk>YSVMh`KAs*1$BdI0we!HyiFdaT{>CSOE!0D@5HR%$*=^Jb7UOWj6K8yN5L&Y>QU z`TWE)XR!wq;v*S&l6)PkEJv*&c% zM!q&_H!vl?lK1AHvP>=$pHuH)x<0W*i3wRt_l0}95qkFaC7w_OF_U)sr&@44+;7-b2yg)w6>I#db< zO4bj@BeVrY=$Fq=gc5}liyi4q+Q1c7a@r^}r$>5UaAjb$GTVcPA9_K=46lMMN_m=~ z*;#Ei!B$&c{L`Mh3GO42oRs6L!<>%X+;VGvb;mcDj#{qD#()}^ZP+%s&hOW8Els+o z$IgO$VA|NBe{Lf|SM|tC5;pbl83*fP!(W+;&etRmU)K>64R<-1 ziUtCsJlOjZ7MS&q$&RJ$LCvoNDa1|Ui z5=D1+i_)|rYR(Dm_sW6FsF52w9_%zd_Wj^0h!pbcEU1r8^AlT#|9vr2#ifndXS>HH zDL%mjU$AvvR|2+FQegxf71B4=PRR99dv038tP)z9k)M^(KZMpdT@5=EBR+p@=`=P$ z|7rXUhSyK@1)2Q)jBwNmw9bGKNz8-z)G_0s4_hw>Yaxq~7S4#s@G4-39Zw&*kl5OC zcL3N1ZNg#98iOw9KH+dMc??qfDZ_=7Y1|pUmvS1ZT%^VZAx?9QsyzaR=Jvs$-&vCH zy;skP!LLHQc53p|{<$;KcFr>Pv?n&N$IQ^CSd#PSP4#<@Ab2{S>mjEd1A|BNgE%ZJ z7Nfl+-|@Yq!kaSd!AB4N@m=jsE8iS7hR(ncRsF93?zvHZgg*tYR)(ZW8%UkQsoXDF z7Op#_j8^QiQX!-|E0YUG;_8MqcpCE22tBEYIF~T$=$zh)S!axIl*b`Tcne(YaZLKz zi1nX_5>B0@gfZ{&Uk?WY*B13}xJo!!b{ly;*us1hsV=R+@xawM6pR>QDlo#KPcgz{ z7UcYI!qw)4nwoa2?kx^#9Moxm4Xq4+09+@u(mI=el^Sam@)TS{aCEbg)a@G1^v+8_ zc;#y-3{84pLsQt-R;FR@==lrfcY)lkwXz*L*c^F6s*d^w?FOWb+K+F1mi@RwfZ30~ zm2W5zPoRbtNSU2-^Km3_!F@HRs5d2_SOjF5?qH`dh`~wCn64flzr6>HK`F7Ie7K$= zTXW6$buHWaBUen2ogSg;SJPya(X*21gHu@Gq`C=je0G;;8}mDBN;@0`l3n``%)n|F zHkvGc&SBaa|7CW6_%&AOFqwQ=7Z!!`Yq9o7^ZyG>0p8o2K>-n({xX|WfVUo!E$-$ z)a7z;3Tir)f|h!pKo1kfDPjF6C0rX!Fi2xV4s|%@168MM3vy4ZEl;bi0y@Sb+O_xX zMp^HHLsGZP7)?h3nywXSISD-wP6@ z@@b>Hb15jKKv7*ce}Ptt?atY=b#FBVFNoK8d<6~QOzN1eLBWKrfjG7!Z>{Wn^e=w{ zJ(dMw)W<+Ex;8%b+>epJk)xvm8f*tg*Le4Wmy6oto0@NGJc_;>QC6jZmkUdqG;~Ax zRz9XN5Ik-54PCrrJknczK7mJncYHth!=BpHN$>Dt_pQMY={0$)M$Ln!VrRxDdZI6GGb#)Qa`pOj#QEK z^>AERSMwpcA9QMw8n6+4(K;J!M6-~MX!jGlBFILxvHGU*H}Ju@s`!JPbX<{Ne*n%r z7{j5}M?p_u_>ht=@S8N{PKmM~YL(jDp%`}#y3zuRtW5f|<8ZRKkd=McfgdTr_3$sIRqG;LWISCxUiT-}5pS{&5 zxoD`Hhc)>~6ky(ng2$&~^-5&qbQpl=&vB+ed8yeS9iP$m^zj)B%ARq226%|(3$bwW zh#mD1oox5*+2SzuKdb{vNMu84ioaE|1Zh=-m{uhP9iFl4?+>4dt%XG~wc7(3CsQI4 z&6KU8cH?^FkOxA!|MKh%q`b43RNlSKmJyWmQfjQC@{$+7c@>s?=Se6so-)QdsbLGF z>|&-<2XEDNK{HsTfTk}p>qw1YxaD)S4W|vl7vuV+8GM_%gq?0adGwZ0h#UGlvFEjnhy&c`ELFBI><- z5UTVqXc~SZ-_$PR2f;N0V=AMAu|*70md{}vwNs6)nGWg9nT5$g#ZR5Y7OTFO zX`j)^zl+Ea@}z$O__g@|4TLPz@8UFqg?*pi0I#V)0@E@N;JHxnX@O>JV3&I&^Yr6` zCC(b2!|pk?9ZQ7v#^q7W1~KZ!dM+c407r`1Ox0B1nCi>TgYzbLWIfEtJpzIW+UJ;B zstTJy&%t?D*KnF|QJb-j&0PajE($dO;G2TADsg&{sz;~0q~ic0}WZin9r1>#A4i%+e1DPWxrBu z*1-`@n8j2oan#WVGpHR@Evy*dL=PY^+dBI0D;3>+LOVGL2PsvTkkt*2$z32Yz>PfB*LhrkSoHPOp_5hmwKd-uevaw+MJ$(r9Ky*QL|B|Qi2^2Xq}(1Ht}GG(jAw$j@NPBx6E8$5mPEdNXVP$B$oCd zcRh1sTOTGpNZZZ^_`Y=UP{{W}VywT2;<$y81Gyy?jz1-uV$0X=z>}m82e6ZZm>(V4 zomi?FJfFSsV3}AMEC}F3JE(YPq8$YFfnf_E#L_h_``Xs|1wO3450-#M8v8*_()ncM zc1B)X-@cvR!-_tb^;HdSm~;dkhv6<~I91^{96m04Jg8<}cy8)~Q&W~#*WQjO9|$I-@%g;#ks-H}j|vCog~t8;AM28s<`Xn1rB zcRq0l%N}GWG_G!DA?Gt9Y9}FBpQH6QNu!mqS9>wITLOzk`dl=Yg+lRg7}37s3|H;R z&9+4LsA7Ri7%4xco?T`=JQPdq9DZb=tArlpbC|B#VNn_))jUF1C-}kXIJwb0a3x)} zD(0=j}c2A&2Y+aw16A z>>K9(bAS+F!FeUYtzUV8_ett+>ws0eH$p=^1T~4t`yod5jfd{CG<;%(EjR1S3pzW_ zo#ghsb%n#53~#1EL@hur+*~ZQocH!zPG{QC5sWTgERlYsL562pa0SOTRkQ;jh!KRq zLyua$EP#xE1Q^(^5uHGe-npt9KPRp8B6OmM$E;v(nEyhV`&0GaR*TPHfERwF_s6*( I?K<>-01)0Xa{vGU diff --git a/classstdex_1_1parser_1_1basic__permutation-members.html b/classstdex_1_1parser_1_1basic__permutation-members.html index b0204627c..4004b3cb8 100644 --- a/classstdex_1_1parser_1_1basic__permutation-members.html +++ b/classstdex_1_1parser_1_1basic__permutation-members.html @@ -87,18 +87,18 @@ $(function() {

- - - + + + - +
 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)
 
-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)=0
 
+
+bool search (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
+virtual bool match (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)=0
 
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)
 
bool match (const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
virtual void invalidate ()
 
invalidate() (defined in stdex::parser::parser_collection< T >)stdex::parser::parser_collection< T >inlinevirtual
m_collection (defined in stdex::parser::parser_collection< T >)stdex::parser::parser_collection< T >protected
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_permutation< T >)stdex::parser::basic_permutation< 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
match_recursively(_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_permutation< T >)stdex::parser::basic_permutation< T >inlineprotected
match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::basic_permutation< T >)stdex::parser::basic_permutation< T >inlinevirtual
match(const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inline
match_recursively(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::basic_permutation< T >)stdex::parser::basic_permutation< T >inlineprotected
parser_collection(const std::locale &locale) (defined in stdex::parser::parser_collection< T >)stdex::parser::parser_collection< T >inlineprotected
parser_collection(const std::shared_ptr< basic_parser< T > > *el, size_t count, const std::locale &locale=std::locale()) (defined in stdex::parser::parser_collection< T >)stdex::parser::parser_collection< T >inline
parser_collection(std::vector< std::shared_ptr< basic_parser< T > > > &&collection, const std::locale &locale=std::locale()) (defined in stdex::parser::parser_collection< T >)stdex::parser::parser_collection< 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
search(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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__permutation.html b/classstdex_1_1parser_1_1basic__permutation.html index 7b819f56e..133a078f8 100644 --- a/classstdex_1_1parser_1_1basic__permutation.html +++ b/classstdex_1_1parser_1_1basic__permutation.html @@ -105,8 +105,8 @@ Public Member Functions  basic_permutation (std::vector< std::shared_ptr< basic_parser< T > > > &&collection, 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 bool match (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) +  - Public Member Functions inherited from stdex::parser::parser_collection< T >  parser_collection (const std::shared_ptr< basic_parser< T > > *el, size_t count, const std::locale &locale=std::locale()) @@ -120,19 +120,19 @@ Public Member Functions  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) -  - + +bool search (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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) -  +bool match (const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) +  - - + + @@ -158,8 +158,8 @@ std::locale  - + @@ -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 33a414965..120eb6091 100644 --- a/classstdex_1_1parser_1_1basic__phone__number-members.html +++ b/classstdex_1_1parser_1_1basic__phone__number-members.html @@ -91,15 +91,15 @@ $(function() { - - - + + +

Protected Member Functions

-bool match_recursively (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
+bool match_recursively (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
- Protected Member Functions inherited from stdex::parser::parser_collection< T >
 parser_collection (const std::locale &locale)
m_locale
template<class T>
class stdex::parser::basic_permutation< T >

Test for permutation.

Member Function Documentation

- -

◆ match()

+ +

◆ match()

@@ -185,7 +185,7 @@ template<clas
size_t end = (size_t)-1, end = SIZE_MAX,
m_rparenthesis (defined in stdex::parser::basic_phone_number< T >)stdex::parser::basic_phone_number< T >protected
m_separator (defined in stdex::parser::basic_phone_number< T >)stdex::parser::basic_phone_number< T >protected
m_space (defined in stdex::parser::basic_phone_number< T >)stdex::parser::basic_phone_number< 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_phone_number< T >)stdex::parser::basic_phone_number< 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
match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::basic_phone_number< T >)stdex::parser::basic_phone_number< T >inlinevirtual
match(const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, 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_MAX, int flags=match_default) (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inline
valuestdex::parser::basic_phone_number< T >
~basic_parser() (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inlinevirtual
diff --git a/classstdex_1_1parser_1_1basic__phone__number.html b/classstdex_1_1parser_1_1basic__phone__number.html index 21c1f81a6..ec9507b71 100644 --- a/classstdex_1_1parser_1_1basic__phone__number.html +++ b/classstdex_1_1parser_1_1basic__phone__number.html @@ -102,21 +102,21 @@ Public Member Functions  basic_phone_number (const std::shared_ptr< basic_parser< T > > &digit, const std::shared_ptr< basic_parser< T > > &plus_sign, const std::shared_ptr< basic_set< T > > &lparenthesis, const std::shared_ptr< basic_set< T > > &rparenthesis, const std::shared_ptr< basic_parser< T > > &separator, 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 bool match (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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) -  - + +bool search (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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) -  +bool match (const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) +  @@ -188,8 +188,8 @@ template<clas - -

◆ match()

+ +

◆ match()

@@ -215,7 +215,7 @@ template<clas
- + @@ -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 1b2e12884..4a9d2ea7f 100644 --- a/classstdex_1_1parser_1_1basic__punct__cu-members.html +++ b/classstdex_1_1parser_1_1basic__punct__cu-members.html @@ -86,14 +86,14 @@ $(function() { - - - + + +

Public Attributes

size_t end = (size_t)-1, end = SIZE_MAX,
invalidate() (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inlinevirtual
m_invert (defined in stdex::parser::basic_punct_cu< T >)stdex::parser::basic_punct_cu< T >protected
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_punct_cu< T >)stdex::parser::basic_punct_cu< 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
match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::basic_punct_cu< T >)stdex::parser::basic_punct_cu< T >inlinevirtual
match(const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, 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_MAX, 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__punct__cu.html b/classstdex_1_1parser_1_1basic__punct__cu.html index cf011b5ce..89f42fcea 100644 --- a/classstdex_1_1parser_1_1basic__punct__cu.html +++ b/classstdex_1_1parser_1_1basic__punct__cu.html @@ -101,19 +101,19 @@ Public Member Functions  basic_punct_cu (bool invert=false, 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 bool match (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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) -  - + +bool search (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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) -  +bool match (const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) +  virtual void invalidate ()   @@ -140,8 +140,8 @@ Additional Inherited Members
template<class T>
class stdex::parser::basic_punct_cu< T >

Test for any punctuation code unit.

Member Function Documentation

- -

◆ match()

+ +

◆ match()

@@ -167,7 +167,7 @@ template<clas size_t  - end = (size_t)-1, + end = SIZE_MAX, @@ -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 574709a6f..2905a0e65 100644 --- a/classstdex_1_1parser_1_1basic__roman__numeral-members.html +++ b/classstdex_1_1parser_1_1basic__roman__numeral-members.html @@ -95,15 +95,15 @@ $(function() { m_digit_500 (defined in stdex::parser::basic_roman_numeral< T >)stdex::parser::basic_roman_numeral< T >protected m_digit_5000 (defined in stdex::parser::basic_roman_numeral< T >)stdex::parser::basic_roman_numeral< T >protected 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_roman_numeral< T >)stdex::parser::basic_roman_numeral< 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 + match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::basic_roman_numeral< T >)stdex::parser::basic_roman_numeral< T >inlinevirtual + match(const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, 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_MAX, int flags=match_default) (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inline valuestdex::parser::basic_integer< T > ~basic_parser() (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inlinevirtual
diff --git a/classstdex_1_1parser_1_1basic__roman__numeral.html b/classstdex_1_1parser_1_1basic__roman__numeral.html index 2f94d64e5..37db8fda5 100644 --- a/classstdex_1_1parser_1_1basic__roman__numeral.html +++ b/classstdex_1_1parser_1_1basic__roman__numeral.html @@ -102,8 +102,8 @@ Public Member Functions  basic_roman_numeral (const std::shared_ptr< basic_parser< T > > &digit_1, const std::shared_ptr< basic_parser< T > > &digit_5, const std::shared_ptr< basic_parser< T > > &digit_10, const std::shared_ptr< basic_parser< T > > &digit_50, const std::shared_ptr< basic_parser< T > > &digit_100, const std::shared_ptr< basic_parser< T > > &digit_500, const std::shared_ptr< basic_parser< T > > &digit_1000, const std::shared_ptr< basic_parser< T > > &digit_5000, const std::shared_ptr< basic_parser< T > > &digit_10000, 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 bool match (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) +  - Public Member Functions inherited from stdex::parser::basic_integer< T >  basic_integer (const std::locale &locale=std::locale()) @@ -114,13 +114,13 @@ Public Member Functions  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) -  - + +bool search (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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) -  +bool match (const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) +  @@ -173,8 +173,8 @@ Additional Inherited Members
template<class T>
class stdex::parser::basic_roman_numeral< T >

Test for Roman numeral.

Member Function Documentation

- -

◆ match()

+ +

◆ match()

@@ -200,7 +200,7 @@ template<clas
- + @@ -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 5e2b3440a..45541597c 100644 --- a/classstdex_1_1parser_1_1basic__scientific__numeral-members.html +++ b/classstdex_1_1parser_1_1basic__scientific__numeral-members.html @@ -90,20 +90,20 @@ $(function() { - - + + - +

Protected Attributes

size_t end = (size_t)-1, end = SIZE_MAX,
intervalstdex::parser::basic_parser< T >
invalidate() (defined in stdex::parser::basic_scientific_numeral< T >)stdex::parser::basic_scientific_numeral< 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_scientific_numeral< T >)stdex::parser::basic_scientific_numeral< 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
match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::basic_scientific_numeral< T >)stdex::parser::basic_scientific_numeral< T >inlinevirtual
match(const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inline
negative_exp_signstdex::parser::basic_scientific_numeral< T >
negative_signstdex::parser::basic_scientific_numeral< T >
positive_exp_signstdex::parser::basic_scientific_numeral< T >
positive_signstdex::parser::basic_scientific_numeral< 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
search(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inline
special_signstdex::parser::basic_scientific_numeral< T >
valuestdex::parser::basic_scientific_numeral< T >
~basic_parser() (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inlinevirtual
diff --git a/classstdex_1_1parser_1_1basic__scientific__numeral.html b/classstdex_1_1parser_1_1basic__scientific__numeral.html index 79ee41831..2156ae013 100644 --- a/classstdex_1_1parser_1_1basic__scientific__numeral.html +++ b/classstdex_1_1parser_1_1basic__scientific__numeral.html @@ -101,21 +101,21 @@ Public Member Functions  basic_scientific_numeral (const std::shared_ptr< basic_parser< T > > &_positive_sign, const std::shared_ptr< basic_parser< T > > &_negative_sign, const std::shared_ptr< basic_parser< T > > &_special_sign, const std::shared_ptr< basic_integer< T > > &_integer, const std::shared_ptr< basic_parser< T > > &_decimal_separator, const std::shared_ptr< basic_integer< T > > &_decimal, const std::shared_ptr< basic_parser< T > > &_exponent_symbol, const std::shared_ptr< basic_parser< T > > &_positive_exp_sign, const std::shared_ptr< basic_parser< T > > &_negative_exp_sign, const std::shared_ptr< basic_integer< T > > &_exponent, 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 bool match (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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) -  - + +bool search (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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) -  +bool match (const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) +  @@ -209,8 +209,8 @@ template<clas - -

◆ match()

+ +

◆ match()

@@ -236,7 +236,7 @@ template<clas
- + @@ -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 56de4dae6..a310c46ce 100644 --- a/classstdex_1_1parser_1_1basic__score-members.html +++ b/classstdex_1_1parser_1_1basic__score-members.html @@ -88,15 +88,15 @@ $(function() { - - - + + +

Public Attributes

size_t end = (size_t)-1, end = SIZE_MAX,
invalidate() (defined in stdex::parser::basic_score< T >)stdex::parser::basic_score< T >inlinevirtual
m_locale (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >protected
m_space (defined in stdex::parser::basic_score< T >)stdex::parser::basic_score< 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_score< T >)stdex::parser::basic_score< 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
match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::basic_score< T >)stdex::parser::basic_score< T >inlinevirtual
match(const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, 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_MAX, int flags=match_default) (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inline
separator (defined in stdex::parser::basic_score< T >)stdex::parser::basic_score< T >
~basic_parser() (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inlinevirtual
diff --git a/classstdex_1_1parser_1_1basic__score.html b/classstdex_1_1parser_1_1basic__score.html index 0b2e0dded..ee6b5e889 100644 --- a/classstdex_1_1parser_1_1basic__score.html +++ b/classstdex_1_1parser_1_1basic__score.html @@ -102,21 +102,21 @@ Public Member Functions  basic_score (const std::shared_ptr< basic_parser< T > > &_home, const std::shared_ptr< basic_parser< T > > &_separator, const std::shared_ptr< basic_parser< T > > &_guest, 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 bool match (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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) -  - + +bool search (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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) -  +bool match (const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) +  @@ -178,8 +178,8 @@ template<clas - -

◆ match()

+ +

◆ match()

@@ -205,7 +205,7 @@ template<clas
- + @@ -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 b0c23c467..f1c27c88f 100644 --- a/classstdex_1_1parser_1_1basic__sequence-members.html +++ b/classstdex_1_1parser_1_1basic__sequence-members.html @@ -87,17 +87,17 @@ $(function() { - - + + - +

Public Attributes

size_t end = (size_t)-1, end = SIZE_MAX,
invalidate() (defined in stdex::parser::parser_collection< T >)stdex::parser::parser_collection< T >inlinevirtual
m_collection (defined in stdex::parser::parser_collection< T >)stdex::parser::parser_collection< T >protected
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_sequence< T >)stdex::parser::basic_sequence< 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
match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::basic_sequence< T >)stdex::parser::basic_sequence< T >inlinevirtual
match(const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inline
parser_collection(const std::locale &locale) (defined in stdex::parser::parser_collection< T >)stdex::parser::parser_collection< T >inlineprotected
parser_collection(const std::shared_ptr< basic_parser< T > > *el, size_t count, const std::locale &locale=std::locale()) (defined in stdex::parser::parser_collection< T >)stdex::parser::parser_collection< T >inline
parser_collection(std::vector< std::shared_ptr< basic_parser< T > > > &&collection, const std::locale &locale=std::locale()) (defined in stdex::parser::parser_collection< T >)stdex::parser::parser_collection< 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
search(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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__sequence.html b/classstdex_1_1parser_1_1basic__sequence.html index 4b0ad4527..1fa71cc17 100644 --- a/classstdex_1_1parser_1_1basic__sequence.html +++ b/classstdex_1_1parser_1_1basic__sequence.html @@ -104,8 +104,8 @@ Public Member Functions  basic_sequence (std::vector< std::shared_ptr< basic_parser< T > > > &&collection, 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 bool match (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) +  - Public Member Functions inherited from stdex::parser::parser_collection< T >  parser_collection (const std::shared_ptr< basic_parser< T > > *el, size_t count, const std::locale &locale=std::locale()) @@ -119,13 +119,13 @@ Public Member Functions  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) -  - + +bool search (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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) -  +bool match (const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) +  @@ -151,8 +151,8 @@ std::locale  - + @@ -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 55b0c49eb..d560266db 100644 --- a/classstdex_1_1parser_1_1basic__set-members.html +++ b/classstdex_1_1parser_1_1basic__set-members.html @@ -87,14 +87,14 @@ $(function() { - - - + + +

Additional Inherited Members

m_locale
template<class T>
class stdex::parser::basic_sequence< T >

Test for sequence.

Member Function Documentation

- -

◆ match()

+ +

◆ match()

@@ -178,7 +178,7 @@ template<clas
size_t end = (size_t)-1, end = SIZE_MAX,
invalidate() (defined in stdex::parser::basic_set< T >)stdex::parser::basic_set< T >inlinevirtual
m_invert (defined in stdex::parser::basic_set< T >)stdex::parser::basic_set< T >protected
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)=0 (defined in stdex::parser::basic_set< T >)stdex::parser::basic_set< T >pure virtual
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
match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)=0 (defined in stdex::parser::basic_set< T >)stdex::parser::basic_set< T >pure virtual
match(const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, 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_MAX, 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__set.html b/classstdex_1_1parser_1_1basic__set.html index b8b1cefa3..8134b4988 100644 --- a/classstdex_1_1parser_1_1basic__set.html +++ b/classstdex_1_1parser_1_1basic__set.html @@ -98,21 +98,21 @@ Public Member Functions  basic_set (bool invert=false, 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)=0 -  +virtual bool match (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)=0 +  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) -  - + +bool search (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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) -  +bool match (const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) +  @@ -165,8 +165,8 @@ template<clas - -

◆ match()

+ +

◆ match()

@@ -192,7 +192,7 @@ template<clas
- + @@ -223,7 +223,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__si__reference-members.html b/classstdex_1_1parser_1_1basic__si__reference-members.html index 07a18c2d9..7c27ed142 100644 --- a/classstdex_1_1parser_1_1basic__si__reference-members.html +++ b/classstdex_1_1parser_1_1basic__si__reference-members.html @@ -91,18 +91,18 @@ $(function() { - - + + - +

Public Attributes

size_t end = (size_t) -1, end = SIZE_MAX,
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
match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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_MAX, 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
search(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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 index f4bd81fe0..d97b9fbf1 100644 --- a/classstdex_1_1parser_1_1basic__si__reference.html +++ b/classstdex_1_1parser_1_1basic__si__reference.html @@ -103,21 +103,21 @@ 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 bool match (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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) -  - + +bool search (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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) -  +bool match (const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) +  @@ -207,8 +207,8 @@ template<clas - -

◆ match()

+ +

◆ match()

@@ -234,7 +234,7 @@ template<clas
- + @@ -265,7 +265,7 @@ template<clas diff --git a/classstdex_1_1parser_1_1basic__si__reference__delimiter-members.html b/classstdex_1_1parser_1_1basic__si__reference__delimiter-members.html index dec680231..24f81e85d 100644 --- a/classstdex_1_1parser_1_1basic__si__reference__delimiter-members.html +++ b/classstdex_1_1parser_1_1basic__si__reference__delimiter-members.html @@ -85,14 +85,14 @@ $(function() { - - - + + +

Public Attributes

size_t end = (size_t)-1, end = SIZE_MAX,
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
match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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_MAX, 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_MAX, 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 index b92105507..528cbf63f 100644 --- a/classstdex_1_1parser_1_1basic__si__reference__delimiter.html +++ b/classstdex_1_1parser_1_1basic__si__reference__delimiter.html @@ -100,19 +100,19 @@ 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) -  +virtual bool match (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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) -  - + +bool search (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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) -  +bool match (const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) +  virtual void invalidate ()   @@ -134,8 +134,8 @@ std::locale m_locale

Test for SI Reference delimiter.

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

Member Function Documentation

- -

◆ match()

+ +

◆ match()

@@ -161,7 +161,7 @@ template<clas size_t  - end = (size_t)-1, + end = SIZE_MAX, @@ -192,7 +192,7 @@ template<clas
diff --git a/classstdex_1_1parser_1_1basic__si__reference__part-members.html b/classstdex_1_1parser_1_1basic__si__reference__part-members.html index 543e9a5cd..ae5162c5d 100644 --- a/classstdex_1_1parser_1_1basic__si__reference__part-members.html +++ b/classstdex_1_1parser_1_1basic__si__reference__part-members.html @@ -85,14 +85,14 @@ $(function() { 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 + match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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_MAX, 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_MAX, 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 index a3e637f04..b3eb2b608 100644 --- a/classstdex_1_1parser_1_1basic__si__reference__part.html +++ b/classstdex_1_1parser_1_1basic__si__reference__part.html @@ -100,19 +100,19 @@ 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) -  +virtual bool match (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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) -  - + +bool search (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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) -  +bool match (const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) +  virtual void invalidate ()   @@ -134,8 +134,8 @@ std::locale m_locale

Test for SI Reference part.

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

Member Function Documentation

- -

◆ match()

+ +

◆ match()

@@ -161,7 +161,7 @@ template<clas size_t  - end = (size_t)-1, + end = SIZE_MAX, @@ -192,7 +192,7 @@ template<clas
diff --git a/classstdex_1_1parser_1_1basic__signed__numeral-members.html b/classstdex_1_1parser_1_1basic__signed__numeral-members.html index d4aa6fa68..bd2ed06bd 100644 --- a/classstdex_1_1parser_1_1basic__signed__numeral-members.html +++ b/classstdex_1_1parser_1_1basic__signed__numeral-members.html @@ -85,18 +85,18 @@ $(function() { intervalstdex::parser::basic_parser< T > invalidate() (defined in stdex::parser::basic_signed_numeral< T >)stdex::parser::basic_signed_numeral< 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_signed_numeral< T >)stdex::parser::basic_signed_numeral< 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 + match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::basic_signed_numeral< T >)stdex::parser::basic_signed_numeral< T >inlinevirtual + match(const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inline negative_signstdex::parser::basic_signed_numeral< T > numberstdex::parser::basic_signed_numeral< T > positive_signstdex::parser::basic_signed_numeral< 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 + search(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inline special_signstdex::parser::basic_signed_numeral< T > ~basic_parser() (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inlinevirtual
diff --git a/classstdex_1_1parser_1_1basic__signed__numeral.html b/classstdex_1_1parser_1_1basic__signed__numeral.html index 3fb24dd69..c75b9feb5 100644 --- a/classstdex_1_1parser_1_1basic__signed__numeral.html +++ b/classstdex_1_1parser_1_1basic__signed__numeral.html @@ -101,21 +101,21 @@ Public Member Functions  basic_signed_numeral (const std::shared_ptr< basic_parser< T > > &_positive_sign, const std::shared_ptr< basic_parser< T > > &_negative_sign, const std::shared_ptr< basic_parser< T > > &_special_sign, const std::shared_ptr< basic_parser< T > > &_number, 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 bool match (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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) -  - + +bool search (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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) -  +bool match (const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) +  @@ -181,8 +181,8 @@ template<clas - -

◆ match()

+ +

◆ match()

@@ -208,7 +208,7 @@ template<clas
- + @@ -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 c286d87cd..edb3f6e73 100644 --- a/classstdex_1_1parser_1_1basic__space__cu-members.html +++ b/classstdex_1_1parser_1_1basic__space__cu-members.html @@ -86,14 +86,14 @@ $(function() { - - - + + +

Public Attributes

size_t end = (size_t)-1, end = SIZE_MAX,
invalidate() (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inlinevirtual
m_invert (defined in stdex::parser::basic_space_cu< T >)stdex::parser::basic_space_cu< T >protected
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_space_cu< T >)stdex::parser::basic_space_cu< 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
match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::basic_space_cu< T >)stdex::parser::basic_space_cu< T >inlinevirtual
match(const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, 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_MAX, 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__space__cu.html b/classstdex_1_1parser_1_1basic__space__cu.html index 00581e753..9977d431c 100644 --- a/classstdex_1_1parser_1_1basic__space__cu.html +++ b/classstdex_1_1parser_1_1basic__space__cu.html @@ -101,19 +101,19 @@ Public Member Functions  basic_space_cu (bool invert=false, 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 bool match (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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) -  - + +bool search (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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) -  +bool match (const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) +  virtual void invalidate ()   @@ -140,8 +140,8 @@ Additional Inherited Members
template<class T>
class stdex::parser::basic_space_cu< T >

Test for any space code unit.

Member Function Documentation

- -

◆ match()

+ +

◆ match()

@@ -167,7 +167,7 @@ template<clas size_t  - end = (size_t)-1, + end = SIZE_MAX, @@ -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 acb6af2d7..f26063b26 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 @@ -86,14 +86,14 @@ $(function() { invalidate() (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inlinevirtual m_invert (defined in stdex::parser::basic_space_or_punct_cu< T >)stdex::parser::basic_space_or_punct_cu< T >protected 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_space_or_punct_cu< T >)stdex::parser::basic_space_or_punct_cu< 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 + match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::basic_space_or_punct_cu< T >)stdex::parser::basic_space_or_punct_cu< T >inlinevirtual + match(const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, 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_MAX, 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__space__or__punct__cu.html b/classstdex_1_1parser_1_1basic__space__or__punct__cu.html index 8249462d7..3d13ee932 100644 --- a/classstdex_1_1parser_1_1basic__space__or__punct__cu.html +++ b/classstdex_1_1parser_1_1basic__space__or__punct__cu.html @@ -101,19 +101,19 @@ Public Member Functions  basic_space_or_punct_cu (bool invert=false, 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 bool match (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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) -  - + +bool search (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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) -  +bool match (const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) +  virtual void invalidate ()   @@ -140,8 +140,8 @@ Additional Inherited Members
template<class T>
class stdex::parser::basic_space_or_punct_cu< T >

Test for any space or punctuation code unit.

Member Function Documentation

- -

◆ match()

+ +

◆ match()

@@ -167,7 +167,7 @@ template<clas size_t  - end = (size_t)-1, + end = SIZE_MAX, @@ -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 ab216e802..f17cf0e1a 100644 --- a/classstdex_1_1parser_1_1basic__string-members.html +++ b/classstdex_1_1parser_1_1basic__string-members.html @@ -81,19 +81,19 @@ $(function() {

This is the complete list of members for stdex::parser::basic_string< 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_string(_In_reads_or_z_(count) const T *str, size_t count=(size_t) -1, const std::locale &locale=std::locale()) (defined in stdex::parser::basic_string< T >)stdex::parser::basic_string< T >inline
basic_string(_In_reads_or_z_(count) const T *str, size_t count=SIZE_MAX, const std::locale &locale=std::locale()) (defined in stdex::parser::basic_string< T >)stdex::parser::basic_string< 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
m_str (defined in stdex::parser::basic_string< T >)stdex::parser::basic_string< 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_string< T >)stdex::parser::basic_string< 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
match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::basic_string< T >)stdex::parser::basic_string< T >inlinevirtual
match(const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, 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_MAX, 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__string.html b/classstdex_1_1parser_1_1basic__string.html index 63ee52552..7e45a7c58 100644 --- a/classstdex_1_1parser_1_1basic__string.html +++ b/classstdex_1_1parser_1_1basic__string.html @@ -98,22 +98,22 @@ Inheritance diagram for stdex::parser::basic_string< T >: - - - - + + + + - - - + + - - + + @@ -140,8 +140,8 @@ Additional Inherited Members
template<class T>
class stdex::parser::basic_string< T >

Test for given string.

Member Function Documentation

- -

◆ match()

+ +

◆ match()

@@ -167,7 +167,7 @@ template<clas
- + @@ -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 d96c9805f..258099360 100644 --- a/classstdex_1_1parser_1_1basic__string__branch-members.html +++ b/classstdex_1_1parser_1_1basic__string__branch-members.html @@ -94,17 +94,17 @@ $(function() { - - + + - +

Public Member Functions

basic_string (_In_reads_or_z_(count) const T *str, size_t count=(size_t) -1, 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)
 
basic_string (_In_reads_or_z_(count) const T *str, size_t count=SIZE_MAX, 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_MAX, 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)
 
+
+bool search (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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)
 
bool match (const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
virtual void invalidate ()
 
size_t end = (size_t)-1, end = SIZE_MAX,
invalidate() (defined in stdex::parser::basic_branch< T >)stdex::parser::basic_branch< T >inlinevirtual
m_collection (defined in stdex::parser::parser_collection< T >)stdex::parser::parser_collection< T >protected
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_branch< T >)stdex::parser::basic_branch< 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
match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::basic_branch< T >)stdex::parser::basic_branch< T >inlinevirtual
match(const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inline
parser_collection(const std::locale &locale) (defined in stdex::parser::parser_collection< T >)stdex::parser::parser_collection< T >inlineprotected
parser_collection(const std::shared_ptr< basic_parser< T > > *el, size_t count, const std::locale &locale=std::locale()) (defined in stdex::parser::parser_collection< T >)stdex::parser::parser_collection< T >inline
parser_collection(std::vector< std::shared_ptr< basic_parser< T > > > &&collection, const std::locale &locale=std::locale()) (defined in stdex::parser::parser_collection< T >)stdex::parser::parser_collection< 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
search(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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__string__branch.html b/classstdex_1_1parser_1_1basic__string__branch.html index 9841656ab..b7aed70f9 100644 --- a/classstdex_1_1parser_1_1basic__string__branch.html +++ b/classstdex_1_1parser_1_1basic__string__branch.html @@ -116,8 +116,8 @@ Public Member Functions  basic_branch (std::vector< std::shared_ptr< basic_parser< T > > > &&collection, 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 bool match (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) +  virtual void invalidate ()   - Public Member Functions inherited from stdex::parser::parser_collection< T > @@ -131,13 +131,13 @@ Public Member Functions  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) -  - + +bool search (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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) -  +bool match (const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) +  @@ -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 cb31947e7..1b5e801f4 100644 --- a/classstdex_1_1parser_1_1basic__time-members.html +++ b/classstdex_1_1parser_1_1basic__time-members.html @@ -88,17 +88,17 @@ $(function() { - - + + - +

Protected Member Functions

m_locale (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >protected
m_millisecond_separator (defined in stdex::parser::basic_time< T >)stdex::parser::basic_time< T >protected
m_separator (defined in stdex::parser::basic_time< T >)stdex::parser::basic_time< 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_time< T >)stdex::parser::basic_time< 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
match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::basic_time< T >)stdex::parser::basic_time< T >inlinevirtual
match(const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inline
millisecond (defined in stdex::parser::basic_time< T >)stdex::parser::basic_time< T >
minute (defined in stdex::parser::basic_time< T >)stdex::parser::basic_time< 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
search(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inline
second (defined in stdex::parser::basic_time< T >)stdex::parser::basic_time< T >
~basic_parser() (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inlinevirtual
diff --git a/classstdex_1_1parser_1_1basic__time.html b/classstdex_1_1parser_1_1basic__time.html index 169f1bd25..82163841c 100644 --- a/classstdex_1_1parser_1_1basic__time.html +++ b/classstdex_1_1parser_1_1basic__time.html @@ -102,21 +102,21 @@ Public Member Functions  basic_time (const std::shared_ptr< basic_integer10< T > > &_hour, const std::shared_ptr< basic_integer10< T > > &_minute, const std::shared_ptr< basic_integer10< T > > &_second, const std::shared_ptr< basic_integer10< T > > &_millisecond, const std::shared_ptr< basic_set< T > > &separator, const std::shared_ptr< basic_parser< T > > &millisecond_separator, 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 bool match (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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) -  - + +bool search (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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) -  +bool match (const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) +  @@ -184,8 +184,8 @@ template<clas - -

◆ match()

+ +

◆ match()

@@ -211,7 +211,7 @@ template<clas
- + @@ -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 84893c490..382ec3866 100644 --- a/classstdex_1_1parser_1_1basic__url-members.html +++ b/classstdex_1_1parser_1_1basic__url-members.html @@ -97,18 +97,18 @@ $(function() { - - + + - +

Public Attributes

size_t end = (size_t)-1, end = SIZE_MAX,
m_locale (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >protected
m_slash (defined in stdex::parser::basic_url< T >)stdex::parser::basic_url< T >protected
mailto_scheme (defined in stdex::parser::basic_url< T >)stdex::parser::basic_url< T >
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_url< T >)stdex::parser::basic_url< 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
match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::basic_url< T >)stdex::parser::basic_url< T >inlinevirtual
match(const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inline
password (defined in stdex::parser::basic_url< T >)stdex::parser::basic_url< T >
path (defined in stdex::parser::basic_url< T >)stdex::parser::basic_url< T >
port (defined in stdex::parser::basic_url< T >)stdex::parser::basic_url< 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
search(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inline
username (defined in stdex::parser::basic_url< T >)stdex::parser::basic_url< T >
~basic_parser() (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inlinevirtual
diff --git a/classstdex_1_1parser_1_1basic__url.html b/classstdex_1_1parser_1_1basic__url.html index e49ae5e9c..3836f3c66 100644 --- a/classstdex_1_1parser_1_1basic__url.html +++ b/classstdex_1_1parser_1_1basic__url.html @@ -102,21 +102,21 @@ Public Member Functions  basic_url (const std::shared_ptr< basic_parser< T > > &_http_scheme, const std::shared_ptr< basic_parser< T > > &_ftp_scheme, const std::shared_ptr< basic_parser< T > > &_mailto_scheme, const std::shared_ptr< basic_parser< T > > &_file_scheme, const std::shared_ptr< basic_parser< T > > &colon, const std::shared_ptr< basic_parser< T > > &slash, const std::shared_ptr< basic_parser< T > > &_username, const std::shared_ptr< basic_parser< T > > &_password, const std::shared_ptr< basic_parser< T > > &at, const std::shared_ptr< basic_parser< T > > &ip_lbracket, const std::shared_ptr< basic_parser< T > > &ip_rbracket, const std::shared_ptr< basic_parser< T > > &_ipv4_host, const std::shared_ptr< basic_parser< T > > &_ipv6_host, const std::shared_ptr< basic_parser< T > > &_dns_host, const std::shared_ptr< basic_parser< T > > &_port, const std::shared_ptr< basic_parser< T > > &_path, 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 bool match (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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) -  - + +bool search (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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) -  +bool match (const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) +  @@ -214,8 +214,8 @@ template<clas - -

◆ match()

+ +

◆ match()

@@ -241,7 +241,7 @@ template<clas
- + @@ -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 1a51bf61b..46b02baf8 100644 --- a/classstdex_1_1parser_1_1basic__url__password__char-members.html +++ b/classstdex_1_1parser_1_1basic__url__password__char-members.html @@ -85,14 +85,14 @@ $(function() { - - - + + +

Public Attributes

size_t end = (size_t)-1, end = SIZE_MAX,
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_url_password_char< T >)stdex::parser::basic_url_password_char< 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
match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::basic_url_password_char< T >)stdex::parser::basic_url_password_char< T >inlinevirtual
match(const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, 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_MAX, 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__url__password__char.html b/classstdex_1_1parser_1_1basic__url__password__char.html index 937ffdabe..38501f143 100644 --- a/classstdex_1_1parser_1_1basic__url__password__char.html +++ b/classstdex_1_1parser_1_1basic__url__password__char.html @@ -100,19 +100,19 @@ Public Member Functions  basic_url_password_char (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 bool match (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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) -  - + +bool search (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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) -  +bool match (const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) +  virtual void invalidate ()   @@ -133,8 +133,8 @@ std::locale m_locale
template<class T>
class stdex::parser::basic_url_password_char< T >

Test for valid URL password character.

Member Function Documentation

- -

◆ match()

+ +

◆ match()

@@ -160,7 +160,7 @@ template<clas size_t  - end = (size_t)-1, + end = SIZE_MAX, @@ -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 6ce48f07a..1c65a77b4 100644 --- a/classstdex_1_1parser_1_1basic__url__path-members.html +++ b/classstdex_1_1parser_1_1basic__url__path-members.html @@ -89,16 +89,16 @@ $(function() { m_locale (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >protected m_path_char (defined in stdex::parser::basic_url_path< T >)stdex::parser::basic_url_path< T >protected m_query_start (defined in stdex::parser::basic_url_path< T >)stdex::parser::basic_url_path< 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_url_path< T >)stdex::parser::basic_url_path< 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 + match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::basic_url_path< T >)stdex::parser::basic_url_path< T >inlinevirtual + match(const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inline path (defined in stdex::parser::basic_url_path< T >)stdex::parser::basic_url_path< T > query (defined in stdex::parser::basic_url_path< T >)stdex::parser::basic_url_path< 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 + search(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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__url__path.html b/classstdex_1_1parser_1_1basic__url__path.html index 90c845d99..2e7125ec9 100644 --- a/classstdex_1_1parser_1_1basic__url__path.html +++ b/classstdex_1_1parser_1_1basic__url__path.html @@ -102,21 +102,21 @@ Public Member Functions  basic_url_path (const std::shared_ptr< basic_parser< T > > &path_char, const std::shared_ptr< basic_parser< T > > &query_start, const std::shared_ptr< basic_parser< T > > &bookmark_start, 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 bool match (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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) -  - + +bool search (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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) -  +bool match (const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) +  @@ -184,8 +184,8 @@ template<clas - -

◆ match()

+ +

◆ match()

@@ -211,7 +211,7 @@ template<clas
- + @@ -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 1d6f418f3..c21ddc1c6 100644 --- a/classstdex_1_1parser_1_1basic__url__path__char-members.html +++ b/classstdex_1_1parser_1_1basic__url__path__char-members.html @@ -85,14 +85,14 @@ $(function() { - - - + + +

Public Attributes

size_t end = (size_t)-1, end = SIZE_MAX,
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_url_path_char< T >)stdex::parser::basic_url_path_char< 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
match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::basic_url_path_char< T >)stdex::parser::basic_url_path_char< T >inlinevirtual
match(const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, 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_MAX, 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__url__path__char.html b/classstdex_1_1parser_1_1basic__url__path__char.html index 417c52a9a..63cfd98c3 100644 --- a/classstdex_1_1parser_1_1basic__url__path__char.html +++ b/classstdex_1_1parser_1_1basic__url__path__char.html @@ -100,19 +100,19 @@ Public Member Functions  basic_url_path_char (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 bool match (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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) -  - + +bool search (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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) -  +bool match (const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) +  virtual void invalidate ()   @@ -133,8 +133,8 @@ std::locale m_locale
template<class T>
class stdex::parser::basic_url_path_char< T >

Test for valid URL path character.

Member Function Documentation

- -

◆ match()

+ +

◆ match()

@@ -160,7 +160,7 @@ template<clas size_t  - end = (size_t)-1, + end = SIZE_MAX, @@ -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 58785d34c..744d463eb 100644 --- a/classstdex_1_1parser_1_1basic__url__username__char-members.html +++ b/classstdex_1_1parser_1_1basic__url__username__char-members.html @@ -85,14 +85,14 @@ $(function() { 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_url_username_char< T >)stdex::parser::basic_url_username_char< 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 + match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::basic_url_username_char< T >)stdex::parser::basic_url_username_char< T >inlinevirtual + match(const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, 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_MAX, 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__url__username__char.html b/classstdex_1_1parser_1_1basic__url__username__char.html index ab60fcc40..10113a4da 100644 --- a/classstdex_1_1parser_1_1basic__url__username__char.html +++ b/classstdex_1_1parser_1_1basic__url__username__char.html @@ -100,19 +100,19 @@ Public Member Functions  basic_url_username_char (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 bool match (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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) -  - + +bool search (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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) -  +bool match (const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) +  virtual void invalidate ()   @@ -133,8 +133,8 @@ std::locale m_locale
template<class T>
class stdex::parser::basic_url_username_char< T >

Test for valid URL username character.

Member Function Documentation

- -

◆ match()

+ +

◆ match()

@@ -160,7 +160,7 @@ template<clas size_t  - end = (size_t)-1, + end = SIZE_MAX, @@ -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 47ae44397..5e96e9140 100644 --- a/classstdex_1_1parser_1_1http__agent-members.html +++ b/classstdex_1_1parser_1_1http__agent-members.html @@ -82,13 +82,13 @@ $(function() { - +
intervalstdex::parser::basic_parser< char >
invalidate() (defined in stdex::parser::http_agent)stdex::parser::http_agentinlinevirtual
match(_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default) (defined in stdex::parser::http_agent)stdex::parser::http_agentinlinevirtual
match(_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::http_agent)stdex::parser::http_agentinlinevirtual
type (defined in stdex::parser::http_agent)stdex::parser::http_agent
version (defined in stdex::parser::http_agent)stdex::parser::http_agent
diff --git a/classstdex_1_1parser_1_1http__agent.html b/classstdex_1_1parser_1_1http__agent.html index 347172d3c..641912428 100644 --- a/classstdex_1_1parser_1_1http__agent.html +++ b/classstdex_1_1parser_1_1http__agent.html @@ -98,20 +98,20 @@ Inheritance diagram for stdex::parser::http_agent: - - + + - - - - + + + +

Public Member Functions

virtual bool match (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
virtual bool match (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
virtual void invalidate ()
 
- Public Member Functions inherited from stdex::parser::basic_parser< char >
 basic_parser (const std::locale &locale=std::locale())
 
-bool search (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
-bool match (const std::basic_string< char, _Traits, _Ax > &text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
+bool search (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
+bool match (const std::basic_string< char, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
@@ -164,8 +164,8 @@ std::locale  - + @@ -220,7 +220,7 @@ std::locale  - - + + @@ -111,16 +111,16 @@ Public Member Functions - - - - - + + + + - - + + @@ -140,8 +140,8 @@ std::locale  - + @@ -196,7 +196,7 @@ std::locale  - - + +

Public Attributes

m_locale - -

◆ match()

+ +

◆ match()

@@ -189,7 +189,7 @@ std::locale 
m_locale size_t end = (size_t)-1, end = SIZE_MAX,
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 ad8f481f8..16d710e0e 100644 --- a/classstdex_1_1parser_1_1http__any__type-members.html +++ b/classstdex_1_1parser_1_1http__any__type-members.html @@ -81,11 +81,11 @@ $(function() {

This is the complete list of members for stdex::parser::http_any_type, including all inherited members.

- +
intervalstdex::parser::basic_parser< char >
match(_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default) (defined in stdex::parser::http_any_type)stdex::parser::http_any_typeinlinevirtual
match(_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::http_any_type)stdex::parser::http_any_typeinlinevirtual
diff --git a/classstdex_1_1parser_1_1http__any__type.html b/classstdex_1_1parser_1_1http__any__type.html index e02d072e0..6c282a009 100644 --- a/classstdex_1_1parser_1_1http__any__type.html +++ b/classstdex_1_1parser_1_1http__any__type.html @@ -97,18 +97,18 @@ Inheritance diagram for stdex::parser::http_any_type: - - + + - - - - + + + + @@ -128,8 +128,8 @@ std::locale  - + @@ -184,7 +184,7 @@ std::locale  - - + + - - - - + + + +

Public Member Functions

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

Detailed Description

Test for HTTP any type.

Member Function Documentation

- -

◆ match()

+ +

◆ match()

@@ -153,7 +153,7 @@ std::locale 
m_locale size_t end = (size_t)-1, end = SIZE_MAX,
m_locale diff --git a/classstdex_1_1parser_1_1http__asterisk-members.html b/classstdex_1_1parser_1_1http__asterisk-members.html index 30d14f6b1..af710eed9 100644 --- a/classstdex_1_1parser_1_1http__asterisk-members.html +++ b/classstdex_1_1parser_1_1http__asterisk-members.html @@ -81,11 +81,11 @@ $(function() {

This is the complete list of members for stdex::parser::http_asterisk, including all inherited members.

- +
intervalstdex::parser::basic_parser< char >
match(_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default) (defined in stdex::parser::http_asterisk)stdex::parser::http_asteriskinlinevirtual
match(_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::http_asterisk)stdex::parser::http_asteriskinlinevirtual
diff --git a/classstdex_1_1parser_1_1http__asterisk.html b/classstdex_1_1parser_1_1http__asterisk.html index b1acc2df6..08d978b24 100644 --- a/classstdex_1_1parser_1_1http__asterisk.html +++ b/classstdex_1_1parser_1_1http__asterisk.html @@ -97,18 +97,18 @@ Inheritance diagram for stdex::parser::http_asterisk: - - + + - - - - + + + + @@ -128,8 +128,8 @@ std::locale  - + @@ -184,7 +184,7 @@ std::locale  - +

Public Member Functions

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

Detailed Description

Test for HTTP asterisk.

Member Function Documentation

- -

◆ match()

+ +

◆ match()

@@ -153,7 +153,7 @@ std::locale 
m_locale size_t end = (size_t)-1, end = SIZE_MAX,
m_locale diff --git a/classstdex_1_1parser_1_1http__cookie-members.html b/classstdex_1_1parser_1_1http__cookie-members.html index 66050bbd0..82ac2dd97 100644 --- a/classstdex_1_1parser_1_1http__cookie-members.html +++ b/classstdex_1_1parser_1_1http__cookie-members.html @@ -83,14 +83,14 @@ $(function() {
intervalstdex::parser::basic_parser< char >
invalidate() (defined in stdex::parser::http_cookie)stdex::parser::http_cookieinlinevirtual
m_space (defined in stdex::parser::http_cookie)stdex::parser::http_cookieprotected
match(_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default) (defined in stdex::parser::http_cookie)stdex::parser::http_cookieinlinevirtual
match(_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::http_cookie)stdex::parser::http_cookieinlinevirtual
namestdex::parser::http_cookie
paramsstdex::parser::http_cookie
valuestdex::parser::http_cookie
diff --git a/classstdex_1_1parser_1_1http__cookie.html b/classstdex_1_1parser_1_1http__cookie.html index 61c581a40..57ff3d31e 100644 --- a/classstdex_1_1parser_1_1http__cookie.html +++ b/classstdex_1_1parser_1_1http__cookie.html @@ -99,20 +99,20 @@ Inheritance diagram for stdex::parser::http_cookie: - - + + - - - - + + + +

Public Member Functions

virtual bool match (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
virtual bool match (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
virtual void invalidate ()
 
- Public Member Functions inherited from stdex::parser::basic_parser< char >
 basic_parser (const std::locale &locale=std::locale())
 
-bool search (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
-bool match (const std::basic_string< char, _Traits, _Ax > &text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
+bool search (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
+bool match (const std::basic_string< char, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
@@ -174,8 +174,8 @@ std::locale  - + @@ -230,7 +230,7 @@ std::locale  - +

Public Attributes

m_locale - -

◆ match()

+ +

◆ match()

@@ -199,7 +199,7 @@ std::locale 
m_locale size_t end = (size_t)-1, end = SIZE_MAX,
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 0947f4894..ada3f5a47 100644 --- a/classstdex_1_1parser_1_1http__cookie__parameter-members.html +++ b/classstdex_1_1parser_1_1http__cookie__parameter-members.html @@ -83,13 +83,13 @@ $(function() {
intervalstdex::parser::basic_parser< char >
invalidate() (defined in stdex::parser::http_cookie_parameter)stdex::parser::http_cookie_parameterinlinevirtual
m_space (defined in stdex::parser::http_cookie_parameter)stdex::parser::http_cookie_parameterprotected
match(_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default) (defined in stdex::parser::http_cookie_parameter)stdex::parser::http_cookie_parameterinlinevirtual
match(_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::http_cookie_parameter)stdex::parser::http_cookie_parameterinlinevirtual
name (defined in stdex::parser::http_cookie_parameter)stdex::parser::http_cookie_parameter
value (defined in stdex::parser::http_cookie_parameter)stdex::parser::http_cookie_parameter
diff --git a/classstdex_1_1parser_1_1http__cookie__parameter.html b/classstdex_1_1parser_1_1http__cookie__parameter.html index 9590b3d06..3313ab6cc 100644 --- a/classstdex_1_1parser_1_1http__cookie__parameter.html +++ b/classstdex_1_1parser_1_1http__cookie__parameter.html @@ -99,20 +99,20 @@ Inheritance diagram for stdex::parser::http_cookie_parameter: - - + + - - - - + + + +

Public Member Functions

virtual bool match (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
virtual bool match (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
virtual void invalidate ()
 
- Public Member Functions inherited from stdex::parser::basic_parser< char >
 basic_parser (const std::locale &locale=std::locale())
 
-bool search (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
-bool match (const std::basic_string< char, _Traits, _Ax > &text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
+bool search (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
+bool match (const std::basic_string< char, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
@@ -168,8 +168,8 @@ std::locale  - + @@ -224,7 +224,7 @@ std::locale  - +

Public Attributes

m_locale - -

◆ match()

+ +

◆ match()

@@ -193,7 +193,7 @@ std::locale 
m_locale size_t end = (size_t)-1, end = SIZE_MAX,
m_locale diff --git a/classstdex_1_1parser_1_1http__header-members.html b/classstdex_1_1parser_1_1http__header-members.html index cdb65c266..a7c425129 100644 --- a/classstdex_1_1parser_1_1http__header-members.html +++ b/classstdex_1_1parser_1_1http__header-members.html @@ -83,13 +83,13 @@ $(function() {
intervalstdex::parser::basic_parser< char >
invalidate() (defined in stdex::parser::http_header)stdex::parser::http_headerinlinevirtual
m_line_break (defined in stdex::parser::http_header)stdex::parser::http_headerprotected
match(_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default) (defined in stdex::parser::http_header)stdex::parser::http_headerinlinevirtual
match(_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::http_header)stdex::parser::http_headerinlinevirtual
name (defined in stdex::parser::http_header)stdex::parser::http_header
value (defined in stdex::parser::http_header)stdex::parser::http_header
diff --git a/classstdex_1_1parser_1_1http__header.html b/classstdex_1_1parser_1_1http__header.html index ba24b64d5..6ab783abd 100644 --- a/classstdex_1_1parser_1_1http__header.html +++ b/classstdex_1_1parser_1_1http__header.html @@ -99,20 +99,20 @@ Inheritance diagram for stdex::parser::http_header: - - + + - - - - + + + +

Public Member Functions

virtual bool match (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
virtual bool match (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
virtual void invalidate ()
 
- Public Member Functions inherited from stdex::parser::basic_parser< char >
 basic_parser (const std::locale &locale=std::locale())
 
-bool search (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
-bool match (const std::basic_string< char, _Traits, _Ax > &text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
+bool search (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
+bool match (const std::basic_string< char, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
@@ -168,8 +168,8 @@ std::locale  - + @@ -224,7 +224,7 @@ std::locale  - +

Public Attributes

m_locale - -

◆ match()

+ +

◆ match()

@@ -193,7 +193,7 @@ std::locale 
m_locale size_t end = (size_t)-1, end = SIZE_MAX,
m_locale diff --git a/classstdex_1_1parser_1_1http__language-members.html b/classstdex_1_1parser_1_1http__language-members.html index 3d385311f..80348db2c 100644 --- a/classstdex_1_1parser_1_1http__language-members.html +++ b/classstdex_1_1parser_1_1http__language-members.html @@ -83,11 +83,11 @@ $(function() {
components (defined in stdex::parser::http_language)stdex::parser::http_language
intervalstdex::parser::basic_parser< char >
invalidate() (defined in stdex::parser::http_language)stdex::parser::http_languageinlinevirtual
match(_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default) (defined in stdex::parser::http_language)stdex::parser::http_languageinlinevirtual
match(_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::http_language)stdex::parser::http_languageinlinevirtual
diff --git a/classstdex_1_1parser_1_1http__language.html b/classstdex_1_1parser_1_1http__language.html index c948978d5..f635bf08f 100644 --- a/classstdex_1_1parser_1_1http__language.html +++ b/classstdex_1_1parser_1_1http__language.html @@ -98,20 +98,20 @@ Inheritance diagram for stdex::parser::http_language: - - + + - - - - + + + +

Public Member Functions

virtual bool match (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
virtual bool match (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
virtual void invalidate ()
 
- Public Member Functions inherited from stdex::parser::basic_parser< char >
 basic_parser (const std::locale &locale=std::locale())
 
-bool search (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
-bool match (const std::basic_string< char, _Traits, _Ax > &text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
+bool search (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
+bool match (const std::basic_string< char, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
@@ -161,8 +161,8 @@ std::locale  - + @@ -217,7 +217,7 @@ std::locale  - - + + - - - - + + + +

Public Attributes

m_locale - -

◆ match()

+ +

◆ match()

@@ -186,7 +186,7 @@ std::locale 
m_locale size_t end = (size_t)-1, end = SIZE_MAX,
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 d7208cc69..8d15ec18b 100644 --- a/classstdex_1_1parser_1_1http__line__break-members.html +++ b/classstdex_1_1parser_1_1http__line__break-members.html @@ -81,11 +81,11 @@ $(function() {

This is the complete list of members for stdex::parser::http_line_break, including all inherited members.

- +
intervalstdex::parser::basic_parser< char >
match(_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default) (defined in stdex::parser::http_line_break)stdex::parser::http_line_breakinlinevirtual
match(_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::http_line_break)stdex::parser::http_line_breakinlinevirtual
diff --git a/classstdex_1_1parser_1_1http__line__break.html b/classstdex_1_1parser_1_1http__line__break.html index 3aec3d6ca..159f5c2f5 100644 --- a/classstdex_1_1parser_1_1http__line__break.html +++ b/classstdex_1_1parser_1_1http__line__break.html @@ -97,18 +97,18 @@ Inheritance diagram for stdex::parser::http_line_break: - - + + - - - - + + + + @@ -128,8 +128,8 @@ std::locale  - + @@ -184,7 +184,7 @@ std::locale  - +

Public Member Functions

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

Detailed Description

Test for HTTP line break (RFC2616: CRLF | LF)

Member Function Documentation

- -

◆ match()

+ +

◆ match()

@@ -153,7 +153,7 @@ std::locale 
m_locale size_t end = (size_t)-1, end = SIZE_MAX,
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 b71ac22fa..f5832a33e 100644 --- a/classstdex_1_1parser_1_1http__media__range-members.html +++ b/classstdex_1_1parser_1_1http__media__range-members.html @@ -83,13 +83,13 @@ $(function() {
intervalstdex::parser::basic_parser< char >
invalidate() (defined in stdex::parser::http_media_range)stdex::parser::http_media_rangeinlinevirtual
m_space (defined in stdex::parser::http_media_range)stdex::parser::http_media_rangeprotected
match(_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default) (defined in stdex::parser::http_media_range)stdex::parser::http_media_rangeinlinevirtual
match(_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::http_media_range)stdex::parser::http_media_rangeinlinevirtual
subtype (defined in stdex::parser::http_media_range)stdex::parser::http_media_range
type (defined in stdex::parser::http_media_range)stdex::parser::http_media_range
diff --git a/classstdex_1_1parser_1_1http__media__range.html b/classstdex_1_1parser_1_1http__media__range.html index 3687025b0..ad8a61ede 100644 --- a/classstdex_1_1parser_1_1http__media__range.html +++ b/classstdex_1_1parser_1_1http__media__range.html @@ -100,20 +100,20 @@ Inheritance diagram for stdex::parser::http_media_range: - - + + - - - - + + + +

Public Member Functions

virtual bool match (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
virtual bool match (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
virtual void invalidate ()
 
- Public Member Functions inherited from stdex::parser::basic_parser< char >
 basic_parser (const std::locale &locale=std::locale())
 
-bool search (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
-bool match (const std::basic_string< char, _Traits, _Ax > &text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
+bool search (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
+bool match (const std::basic_string< char, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
@@ -169,8 +169,8 @@ std::locale  - + @@ -225,7 +225,7 @@ std::locale  - +

Public Attributes

m_locale - -

◆ match()

+ +

◆ match()

@@ -194,7 +194,7 @@ std::locale 
m_locale size_t end = (size_t)-1, end = SIZE_MAX,
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 d5c009a54..d9c282961 100644 --- a/classstdex_1_1parser_1_1http__media__type-members.html +++ b/classstdex_1_1parser_1_1http__media__type-members.html @@ -83,14 +83,14 @@ $(function() {
intervalstdex::parser::basic_parser< char >
invalidate() (defined in stdex::parser::http_media_type)stdex::parser::http_media_typeinlinevirtual
m_space (defined in stdex::parser::http_media_range)stdex::parser::http_media_rangeprotected
match(_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default) (defined in stdex::parser::http_media_type)stdex::parser::http_media_typeinlinevirtual
match(_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::http_media_type)stdex::parser::http_media_typeinlinevirtual
params (defined in stdex::parser::http_media_type)stdex::parser::http_media_type
subtype (defined in stdex::parser::http_media_range)stdex::parser::http_media_range
type (defined in stdex::parser::http_media_range)stdex::parser::http_media_range
diff --git a/classstdex_1_1parser_1_1http__media__type.html b/classstdex_1_1parser_1_1http__media__type.html index 3472017bd..8b4baf72a 100644 --- a/classstdex_1_1parser_1_1http__media__type.html +++ b/classstdex_1_1parser_1_1http__media__type.html @@ -99,20 +99,20 @@ Inheritance diagram for stdex::parser::http_media_type: - - + + - - - - + + + +

Public Member Functions

virtual bool match (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
virtual bool match (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
virtual void invalidate ()
 
- Public Member Functions inherited from stdex::parser::basic_parser< char >
 basic_parser (const std::locale &locale=std::locale())
 
-bool search (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
-bool match (const std::basic_string< char, _Traits, _Ax > &text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
+bool search (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
+bool match (const std::basic_string< char, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
@@ -173,8 +173,8 @@ std::locale  - + @@ -229,7 +229,7 @@ std::locale  - +

Public Attributes

m_locale - -

◆ match()

+ +

◆ match()

@@ -198,7 +198,7 @@ std::locale 
m_locale size_t end = (size_t)-1, end = SIZE_MAX,
m_locale diff --git a/classstdex_1_1parser_1_1http__parameter-members.html b/classstdex_1_1parser_1_1http__parameter-members.html index d9ea145db..8010406d2 100644 --- a/classstdex_1_1parser_1_1http__parameter-members.html +++ b/classstdex_1_1parser_1_1http__parameter-members.html @@ -83,13 +83,13 @@ $(function() {
intervalstdex::parser::basic_parser< char >
invalidate() (defined in stdex::parser::http_parameter)stdex::parser::http_parameterinlinevirtual
m_space (defined in stdex::parser::http_parameter)stdex::parser::http_parameterprotected
match(_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default) (defined in stdex::parser::http_parameter)stdex::parser::http_parameterinlinevirtual
match(_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::http_parameter)stdex::parser::http_parameterinlinevirtual
namestdex::parser::http_parameter
valuestdex::parser::http_parameter
diff --git a/classstdex_1_1parser_1_1http__parameter.html b/classstdex_1_1parser_1_1http__parameter.html index 37332e4dc..8aa3e2120 100644 --- a/classstdex_1_1parser_1_1http__parameter.html +++ b/classstdex_1_1parser_1_1http__parameter.html @@ -99,20 +99,20 @@ Inheritance diagram for stdex::parser::http_parameter: - - + + - - - - + + + +

Public Member Functions

virtual bool match (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
virtual bool match (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
virtual void invalidate ()
 
- Public Member Functions inherited from stdex::parser::basic_parser< char >
 basic_parser (const std::locale &locale=std::locale())
 
-bool search (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
-bool match (const std::basic_string< char, _Traits, _Ax > &text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
+bool search (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
+bool match (const std::basic_string< char, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
@@ -170,8 +170,8 @@ std::locale  - + @@ -226,7 +226,7 @@ std::locale  - + @@ -91,7 +91,7 @@ $(function() {

Public Attributes

m_locale - -

◆ match()

+ +

◆ match()

@@ -195,7 +195,7 @@ std::locale 
m_locale size_t end = (size_t)-1, end = SIZE_MAX,
m_locale diff --git a/classstdex_1_1parser_1_1http__protocol-members.html b/classstdex_1_1parser_1_1http__protocol-members.html index ba09ce63e..db2a60945 100644 --- a/classstdex_1_1parser_1_1http__protocol-members.html +++ b/classstdex_1_1parser_1_1http__protocol-members.html @@ -83,7 +83,7 @@ $(function() {
http_protocol(const std::locale &locale=std::locale()) (defined in stdex::parser::http_protocol)stdex::parser::http_protocolinline
intervalstdex::parser::basic_parser< char >
invalidate() (defined in stdex::parser::http_protocol)stdex::parser::http_protocolinlinevirtual
match(_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default) (defined in stdex::parser::http_protocol)stdex::parser::http_protocolinlinevirtual
match(_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::http_protocol)stdex::parser::http_protocolinlinevirtual
type (defined in stdex::parser::http_protocol)stdex::parser::http_protocol
versionstdex::parser::http_protocol
version_maj (defined in stdex::parser::http_protocol)stdex::parser::http_protocol
diff --git a/classstdex_1_1parser_1_1http__protocol.html b/classstdex_1_1parser_1_1http__protocol.html index 622e6d24a..abe0b4686 100644 --- a/classstdex_1_1parser_1_1http__protocol.html +++ b/classstdex_1_1parser_1_1http__protocol.html @@ -101,20 +101,20 @@ Public Member Functions
 http_protocol (const std::locale &locale=std::locale())
 
virtual bool match (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
virtual bool match (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
virtual void invalidate ()
 
- Public Member Functions inherited from stdex::parser::basic_parser< char >
 basic_parser (const std::locale &locale=std::locale())
 
-bool search (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
-bool match (const std::basic_string< char, _Traits, _Ax > &text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
+bool search (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
+bool match (const std::basic_string< char, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
@@ -174,8 +174,8 @@ std::locale  - + @@ -230,7 +230,7 @@ std::locale  - +

Public Attributes

m_locale - -

◆ match()

+ +

◆ match()

@@ -199,7 +199,7 @@ std::locale 
m_locale size_t end = (size_t)-1, end = SIZE_MAX,
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 4d9c35882..c6e491edb 100644 --- a/classstdex_1_1parser_1_1http__quoted__string-members.html +++ b/classstdex_1_1parser_1_1http__quoted__string-members.html @@ -84,11 +84,11 @@ $(function() {
intervalstdex::parser::basic_parser< char >
invalidate() (defined in stdex::parser::http_quoted_string)stdex::parser::http_quoted_stringinlinevirtual
m_chr (defined in stdex::parser::http_quoted_string)stdex::parser::http_quoted_stringprotected
match(_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default) (defined in stdex::parser::http_quoted_string)stdex::parser::http_quoted_stringinlinevirtual
match(_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::http_quoted_string)stdex::parser::http_quoted_stringinlinevirtual
diff --git a/classstdex_1_1parser_1_1http__quoted__string.html b/classstdex_1_1parser_1_1http__quoted__string.html index fc41e41be..de7ddec90 100644 --- a/classstdex_1_1parser_1_1http__quoted__string.html +++ b/classstdex_1_1parser_1_1http__quoted__string.html @@ -99,20 +99,20 @@ Inheritance diagram for stdex::parser::http_quoted_string: - - + + - - - - + + + +

Public Member Functions

virtual bool match (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
virtual bool match (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
virtual void invalidate ()
 
- Public Member Functions inherited from stdex::parser::basic_parser< char >
 basic_parser (const std::locale &locale=std::locale())
 
-bool search (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
-bool match (const std::basic_string< char, _Traits, _Ax > &text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
+bool search (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
+bool match (const std::basic_string< char, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
@@ -166,8 +166,8 @@ std::locale  - + @@ -222,7 +222,7 @@ std::locale  - +

Public Attributes

m_locale - -

◆ match()

+ +

◆ match()

@@ -191,7 +191,7 @@ std::locale 
m_locale size_t end = (size_t)-1, end = SIZE_MAX,
m_locale diff --git a/classstdex_1_1parser_1_1http__request-members.html b/classstdex_1_1parser_1_1http__request-members.html index 4c1dfcecb..a03433514 100644 --- a/classstdex_1_1parser_1_1http__request-members.html +++ b/classstdex_1_1parser_1_1http__request-members.html @@ -84,14 +84,14 @@ $(function() {
intervalstdex::parser::basic_parser< char >
invalidate() (defined in stdex::parser::http_request)stdex::parser::http_requestinlinevirtual
m_line_break (defined in stdex::parser::http_request)stdex::parser::http_requestprotected
match(_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default) (defined in stdex::parser::http_request)stdex::parser::http_requestinlinevirtual
match(_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::http_request)stdex::parser::http_requestinlinevirtual
protocol (defined in stdex::parser::http_request)stdex::parser::http_request
url (defined in stdex::parser::http_request)stdex::parser::http_request
verb (defined in stdex::parser::http_request)stdex::parser::http_request
diff --git a/classstdex_1_1parser_1_1http__request.html b/classstdex_1_1parser_1_1http__request.html index 927f2ef73..fca25de90 100644 --- a/classstdex_1_1parser_1_1http__request.html +++ b/classstdex_1_1parser_1_1http__request.html @@ -102,20 +102,20 @@ Public Member Functions
 http_request (const std::locale &locale=std::locale())
 
virtual bool match (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
virtual bool match (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
virtual void invalidate ()
 
- Public Member Functions inherited from stdex::parser::basic_parser< char >
 basic_parser (const std::locale &locale=std::locale())
 
-bool search (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
-bool match (const std::basic_string< char, _Traits, _Ax > &text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
+bool search (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
+bool match (const std::basic_string< char, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
@@ -174,8 +174,8 @@ std::locale  - + @@ -230,7 +230,7 @@ std::locale  - - + + - - - - + + + +

Public Attributes

m_locale - -

◆ match()

+ +

◆ match()

@@ -199,7 +199,7 @@ std::locale 
m_locale size_t end = (size_t)-1, end = SIZE_MAX,
m_locale diff --git a/classstdex_1_1parser_1_1http__space-members.html b/classstdex_1_1parser_1_1http__space-members.html index 5dc1e8503..cf298fdaf 100644 --- a/classstdex_1_1parser_1_1http__space-members.html +++ b/classstdex_1_1parser_1_1http__space-members.html @@ -82,11 +82,11 @@ $(function() { - +
intervalstdex::parser::basic_parser< char >
m_line_break (defined in stdex::parser::http_space)stdex::parser::http_spaceprotected
match(_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default) (defined in stdex::parser::http_space)stdex::parser::http_spaceinlinevirtual
match(_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::http_space)stdex::parser::http_spaceinlinevirtual
diff --git a/classstdex_1_1parser_1_1http__space.html b/classstdex_1_1parser_1_1http__space.html index 5e6d1bf41..87c9db651 100644 --- a/classstdex_1_1parser_1_1http__space.html +++ b/classstdex_1_1parser_1_1http__space.html @@ -98,18 +98,18 @@ Inheritance diagram for stdex::parser::http_space: - - + + - - - - + + + + @@ -135,8 +135,8 @@ Additional Inherited Members

Detailed Description

Test for HTTP space (RFC2616: LWS)

Member Function Documentation

- -

◆ match()

+ +

◆ match()

@@ -160,7 +160,7 @@ Additional Inherited Members
- + @@ -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 7e536898e..8135ec0ae 100644 --- a/classstdex_1_1parser_1_1http__text__char-members.html +++ b/classstdex_1_1parser_1_1http__text__char-members.html @@ -82,11 +82,11 @@ $(function() {

Public Member Functions

virtual bool match (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
virtual bool match (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
- Public Member Functions inherited from stdex::parser::basic_parser< char >
 basic_parser (const std::locale &locale=std::locale())
 
-bool search (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
-bool match (const std::basic_string< char, _Traits, _Ax > &text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
+bool search (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
+bool match (const std::basic_string< char, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
virtual void invalidate ()
 
size_t end = (size_t)-1, end = SIZE_MAX,
- +
intervalstdex::parser::basic_parser< char >
m_space (defined in stdex::parser::http_text_char)stdex::parser::http_text_charprotected
match(_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default) (defined in stdex::parser::http_text_char)stdex::parser::http_text_charinlinevirtual
match(_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::http_text_char)stdex::parser::http_text_charinlinevirtual
diff --git a/classstdex_1_1parser_1_1http__text__char.html b/classstdex_1_1parser_1_1http__text__char.html index a5b917715..ab539faf6 100644 --- a/classstdex_1_1parser_1_1http__text__char.html +++ b/classstdex_1_1parser_1_1http__text__char.html @@ -98,18 +98,18 @@ Inheritance diagram for stdex::parser::http_text_char: - - + + - - - - + + + + @@ -135,8 +135,8 @@ Additional Inherited Members

Detailed Description

Test for HTTP text character (RFC2616: TEXT)

Member Function Documentation

- -

◆ match()

+ +

◆ match()

@@ -160,7 +160,7 @@ Additional Inherited Members
- + @@ -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 599db9db0..4f19facdc 100644 --- a/classstdex_1_1parser_1_1http__token-members.html +++ b/classstdex_1_1parser_1_1http__token-members.html @@ -81,11 +81,11 @@ $(function() {

This is the complete list of members for stdex::parser::http_token, including all inherited members.

Public Member Functions

virtual bool match (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
virtual bool match (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
- Public Member Functions inherited from stdex::parser::basic_parser< char >
 basic_parser (const std::locale &locale=std::locale())
 
-bool search (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
-bool match (const std::basic_string< char, _Traits, _Ax > &text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
+bool search (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
+bool match (const std::basic_string< char, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
virtual void invalidate ()
 
size_t end = (size_t)-1, end = SIZE_MAX,
- +
intervalstdex::parser::basic_parser< char >
match(_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default) (defined in stdex::parser::http_token)stdex::parser::http_tokeninlinevirtual
match(_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::http_token)stdex::parser::http_tokeninlinevirtual
diff --git a/classstdex_1_1parser_1_1http__token.html b/classstdex_1_1parser_1_1http__token.html index c567bef08..3d38b857a 100644 --- a/classstdex_1_1parser_1_1http__token.html +++ b/classstdex_1_1parser_1_1http__token.html @@ -97,18 +97,18 @@ Inheritance diagram for stdex::parser::http_token: - - + + - - - - + + + + @@ -128,8 +128,8 @@ std::locale  - + @@ -184,7 +184,7 @@ std::locale  - + @@ -91,7 +91,7 @@ $(function() {

Public Member Functions

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

Detailed Description

Test for HTTP token (RFC2616: token - tolerates non-ASCII)

Member Function Documentation

- -

◆ match()

+ +

◆ match()

@@ -153,7 +153,7 @@ std::locale 
m_locale size_t end = (size_t)-1, end = SIZE_MAX,
m_locale diff --git a/classstdex_1_1parser_1_1http__url-members.html b/classstdex_1_1parser_1_1http__url-members.html index fa084292b..1682b93f8 100644 --- a/classstdex_1_1parser_1_1http__url-members.html +++ b/classstdex_1_1parser_1_1http__url-members.html @@ -83,7 +83,7 @@ $(function() {
http_url(const std::locale &locale=std::locale()) (defined in stdex::parser::http_url)stdex::parser::http_urlinline
intervalstdex::parser::basic_parser< char >
invalidate() (defined in stdex::parser::http_url)stdex::parser::http_urlinlinevirtual
match(_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default) (defined in stdex::parser::http_url)stdex::parser::http_urlinlinevirtual
match(_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::http_url)stdex::parser::http_urlinlinevirtual
params (defined in stdex::parser::http_url)stdex::parser::http_url
path (defined in stdex::parser::http_url)stdex::parser::http_url
port (defined in stdex::parser::http_url)stdex::parser::http_url
diff --git a/classstdex_1_1parser_1_1http__url.html b/classstdex_1_1parser_1_1http__url.html index d8ed1be73..62b79a48f 100644 --- a/classstdex_1_1parser_1_1http__url.html +++ b/classstdex_1_1parser_1_1http__url.html @@ -101,20 +101,20 @@ Public Member Functions
 http_url (const std::locale &locale=std::locale())
 
virtual bool match (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
virtual bool match (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
virtual void invalidate ()
 
- Public Member Functions inherited from stdex::parser::basic_parser< char >
 basic_parser (const std::locale &locale=std::locale())
 
-bool search (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
-bool match (const std::basic_string< char, _Traits, _Ax > &text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
+bool search (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
+bool match (const std::basic_string< char, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
@@ -173,8 +173,8 @@ std::locale  - + @@ -229,7 +229,7 @@ std::locale  - - - - - + + + + - - + +

Public Attributes

m_locale - -

◆ match()

+ +

◆ match()

@@ -198,7 +198,7 @@ std::locale 
m_locale size_t end = (size_t)-1, end = SIZE_MAX,
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 6ac893524..2d58b9ad5 100644 --- a/classstdex_1_1parser_1_1http__url__parameter-members.html +++ b/classstdex_1_1parser_1_1http__url__parameter-members.html @@ -82,13 +82,13 @@ $(function() { - +
intervalstdex::parser::basic_parser< char >
invalidate() (defined in stdex::parser::http_url_parameter)stdex::parser::http_url_parameterinlinevirtual
match(_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default) (defined in stdex::parser::http_url_parameter)stdex::parser::http_url_parameterinlinevirtual
match(_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::http_url_parameter)stdex::parser::http_url_parameterinlinevirtual
name (defined in stdex::parser::http_url_parameter)stdex::parser::http_url_parameter
value (defined in stdex::parser::http_url_parameter)stdex::parser::http_url_parameter
diff --git a/classstdex_1_1parser_1_1http__url__parameter.html b/classstdex_1_1parser_1_1http__url__parameter.html index 79c8852e0..3bb79b96c 100644 --- a/classstdex_1_1parser_1_1http__url__parameter.html +++ b/classstdex_1_1parser_1_1http__url__parameter.html @@ -98,20 +98,20 @@ Inheritance diagram for stdex::parser::http_url_parameter: - - + + - - - - + + + +

Public Member Functions

virtual bool match (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
virtual bool match (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
virtual void invalidate ()
 
- Public Member Functions inherited from stdex::parser::basic_parser< char >
 basic_parser (const std::locale &locale=std::locale())
 
-bool search (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
-bool match (const std::basic_string< char, _Traits, _Ax > &text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
+bool search (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
+bool match (const std::basic_string< char, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
@@ -164,8 +164,8 @@ std::locale  - + @@ -220,7 +220,7 @@ std::locale  - - + + - - - - + + + +

Public Attributes

m_locale - -

◆ match()

+ +

◆ match()

@@ -189,7 +189,7 @@ std::locale 
m_locale size_t end = (size_t)-1, end = SIZE_MAX,
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 27a54dcfd..3e200ad5f 100644 --- a/classstdex_1_1parser_1_1http__url__path-members.html +++ b/classstdex_1_1parser_1_1http__url__path-members.html @@ -82,12 +82,12 @@ $(function() { - +
intervalstdex::parser::basic_parser< char >
invalidate() (defined in stdex::parser::http_url_path)stdex::parser::http_url_pathinlinevirtual
match(_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default) (defined in stdex::parser::http_url_path)stdex::parser::http_url_pathinlinevirtual
match(_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::http_url_path)stdex::parser::http_url_pathinlinevirtual
segmentsstdex::parser::http_url_path
diff --git a/classstdex_1_1parser_1_1http__url__path.html b/classstdex_1_1parser_1_1http__url__path.html index c9143a783..c7cbfbf28 100644 --- a/classstdex_1_1parser_1_1http__url__path.html +++ b/classstdex_1_1parser_1_1http__url__path.html @@ -98,20 +98,20 @@ Inheritance diagram for stdex::parser::http_url_path: - - + + - - - - + + + +

Public Member Functions

virtual bool match (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
virtual bool match (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
virtual void invalidate ()
 
- Public Member Functions inherited from stdex::parser::basic_parser< char >
 basic_parser (const std::locale &locale=std::locale())
 
-bool search (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
-bool match (const std::basic_string< char, _Traits, _Ax > &text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
+bool search (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
+bool match (const std::basic_string< char, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
@@ -162,8 +162,8 @@ std::locale  - + @@ -218,7 +218,7 @@ std::locale  - - + + - - - - + + + +

Public Attributes

m_locale - -

◆ match()

+ +

◆ match()

@@ -187,7 +187,7 @@ std::locale 
m_locale size_t end = (size_t)-1, end = SIZE_MAX,
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 1724b9228..51d8192c0 100644 --- a/classstdex_1_1parser_1_1http__url__path__segment-members.html +++ b/classstdex_1_1parser_1_1http__url__path__segment-members.html @@ -81,11 +81,11 @@ $(function() {

This is the complete list of members for stdex::parser::http_url_path_segment, including all inherited members.

- +
intervalstdex::parser::basic_parser< char >
match(_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default) (defined in stdex::parser::http_url_path_segment)stdex::parser::http_url_path_segmentinlinevirtual
match(_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::http_url_path_segment)stdex::parser::http_url_path_segmentinlinevirtual
diff --git a/classstdex_1_1parser_1_1http__url__path__segment.html b/classstdex_1_1parser_1_1http__url__path__segment.html index 50cad8472..8730061df 100644 --- a/classstdex_1_1parser_1_1http__url__path__segment.html +++ b/classstdex_1_1parser_1_1http__url__path__segment.html @@ -97,18 +97,18 @@ Inheritance diagram for stdex::parser::http_url_path_segment: - - + + - - - - + + + + @@ -128,8 +128,8 @@ std::locale  - + @@ -184,7 +184,7 @@ std::locale  - +

Public Member Functions

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

Detailed Description

Test for HTTP URL path segment.

Member Function Documentation

- -

◆ match()

+ +

◆ match()

@@ -153,7 +153,7 @@ std::locale 
m_locale size_t end = (size_t)-1, end = SIZE_MAX,
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 8e36d6163..4b0b417d2 100644 --- a/classstdex_1_1parser_1_1http__url__port-members.html +++ b/classstdex_1_1parser_1_1http__url__port-members.html @@ -83,12 +83,12 @@ $(function() {
http_url_port(const std::locale &locale=std::locale()) (defined in stdex::parser::http_url_port)stdex::parser::http_url_portinline
intervalstdex::parser::basic_parser< char >
invalidate() (defined in stdex::parser::http_url_port)stdex::parser::http_url_portinlinevirtual
match(_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default) (defined in stdex::parser::http_url_port)stdex::parser::http_url_portinlinevirtual
match(_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::http_url_port)stdex::parser::http_url_portinlinevirtual
value (defined in stdex::parser::http_url_port)stdex::parser::http_url_port
diff --git a/classstdex_1_1parser_1_1http__url__port.html b/classstdex_1_1parser_1_1http__url__port.html index 8ccb7ae18..67aa0cdd1 100644 --- a/classstdex_1_1parser_1_1http__url__port.html +++ b/classstdex_1_1parser_1_1http__url__port.html @@ -101,20 +101,20 @@ Public Member Functions
 http_url_port (const std::locale &locale=std::locale())
 
virtual bool match (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
virtual bool match (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
virtual void invalidate ()
 
- Public Member Functions inherited from stdex::parser::basic_parser< char >
 basic_parser (const std::locale &locale=std::locale())
 
-bool search (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
-bool match (const std::basic_string< char, _Traits, _Ax > &text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
+bool search (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
+bool match (const std::basic_string< char, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
@@ -164,8 +164,8 @@ std::locale  - + @@ -220,7 +220,7 @@ std::locale  - - + + - - - - + + + +

Public Attributes

m_locale - -

◆ match()

+ +

◆ match()

@@ -189,7 +189,7 @@ std::locale 
m_locale size_t end = (size_t)-1, end = SIZE_MAX,
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 b8306fca0..03a51ff19 100644 --- a/classstdex_1_1parser_1_1http__url__server-members.html +++ b/classstdex_1_1parser_1_1http__url__server-members.html @@ -81,11 +81,11 @@ $(function() {

This is the complete list of members for stdex::parser::http_url_server, including all inherited members.

- +
intervalstdex::parser::basic_parser< char >
match(_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default) (defined in stdex::parser::http_url_server)stdex::parser::http_url_serverinlinevirtual
match(_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::http_url_server)stdex::parser::http_url_serverinlinevirtual
diff --git a/classstdex_1_1parser_1_1http__url__server.html b/classstdex_1_1parser_1_1http__url__server.html index 5f1676deb..513063ac8 100644 --- a/classstdex_1_1parser_1_1http__url__server.html +++ b/classstdex_1_1parser_1_1http__url__server.html @@ -97,18 +97,18 @@ Inheritance diagram for stdex::parser::http_url_server: - - + + - - - - + + + + @@ -128,8 +128,8 @@ std::locale  - + @@ -184,7 +184,7 @@ std::locale  - +

Public Member Functions

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

Detailed Description

Test for HTTP URL server.

Member Function Documentation

- -

◆ match()

+ +

◆ match()

@@ -153,7 +153,7 @@ std::locale 
m_locale size_t end = (size_t)-1, end = SIZE_MAX,
m_locale diff --git a/classstdex_1_1parser_1_1http__value-members.html b/classstdex_1_1parser_1_1http__value-members.html index 3a623f370..69e4cfbe9 100644 --- a/classstdex_1_1parser_1_1http__value-members.html +++ b/classstdex_1_1parser_1_1http__value-members.html @@ -82,13 +82,13 @@ $(function() { - +
intervalstdex::parser::basic_parser< char >
invalidate() (defined in stdex::parser::http_value)stdex::parser::http_valueinlinevirtual
match(_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default) (defined in stdex::parser::http_value)stdex::parser::http_valueinlinevirtual
match(_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::http_value)stdex::parser::http_valueinlinevirtual
stringstdex::parser::http_value
tokenstdex::parser::http_value
diff --git a/classstdex_1_1parser_1_1http__value.html b/classstdex_1_1parser_1_1http__value.html index ef6477899..bc9eba8f8 100644 --- a/classstdex_1_1parser_1_1http__value.html +++ b/classstdex_1_1parser_1_1http__value.html @@ -98,20 +98,20 @@ Inheritance diagram for stdex::parser::http_value: - - + + - - - - + + + +

Public Member Functions

virtual bool match (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
virtual bool match (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
virtual void invalidate ()
 
- Public Member Functions inherited from stdex::parser::basic_parser< char >
 basic_parser (const std::locale &locale=std::locale())
 
-bool search (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
-bool match (const std::basic_string< char, _Traits, _Ax > &text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
+bool search (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
+bool match (const std::basic_string< char, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
@@ -166,8 +166,8 @@ std::locale  - + @@ -222,7 +222,7 @@ std::locale  - - + +

Public Attributes

m_locale - -

◆ match()

+ +

◆ match()

@@ -191,7 +191,7 @@ std::locale 
m_locale size_t end = (size_t)-1, end = SIZE_MAX,
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 4b43a242b..5e15f9ad5 100644 --- a/classstdex_1_1parser_1_1http__value__collection-members.html +++ b/classstdex_1_1parser_1_1http__value__collection-members.html @@ -80,11 +80,11 @@ $(function() {

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

- +
insert(_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default) (defined in stdex::parser::http_value_collection< _Key, T >)stdex::parser::http_value_collection< _Key, T >inline
insert(_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::http_value_collection< _Key, T >)stdex::parser::http_value_collection< _Key, T >inline
diff --git a/classstdex_1_1parser_1_1http__value__collection.html b/classstdex_1_1parser_1_1http__value__collection.html index 9ba6c3dc4..2c421aacd 100644 --- a/classstdex_1_1parser_1_1http__value__collection.html +++ b/classstdex_1_1parser_1_1http__value__collection.html @@ -94,9 +94,9 @@ Inheritance diagram for stdex::parser::http_value_collection< _Key, T >:

Public Member Functions

-void insert (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
+void insert (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 

Detailed Description

template<class _Key, class T>
@@ -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 d1b54163b..4cfa07b3a 100644 --- a/classstdex_1_1parser_1_1http__weight-members.html +++ b/classstdex_1_1parser_1_1http__weight-members.html @@ -83,12 +83,12 @@ $(function() {
http_weight(const std::locale &locale=std::locale()) (defined in stdex::parser::http_weight)stdex::parser::http_weightinline
intervalstdex::parser::basic_parser< char >
invalidate() (defined in stdex::parser::http_weight)stdex::parser::http_weightinlinevirtual
match(_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default) (defined in stdex::parser::http_weight)stdex::parser::http_weightinlinevirtual
match(_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::http_weight)stdex::parser::http_weightinlinevirtual
valuestdex::parser::http_weight
diff --git a/classstdex_1_1parser_1_1http__weight.html b/classstdex_1_1parser_1_1http__weight.html index 30278380b..d23b7ac26 100644 --- a/classstdex_1_1parser_1_1http__weight.html +++ b/classstdex_1_1parser_1_1http__weight.html @@ -101,20 +101,20 @@ Public Member Functions
 http_weight (const std::locale &locale=std::locale())
 
virtual bool match (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
virtual bool match (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
virtual void invalidate ()
 
- Public Member Functions inherited from stdex::parser::basic_parser< char >
 basic_parser (const std::locale &locale=std::locale())
 
-bool search (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
-bool match (const std::basic_string< char, _Traits, _Ax > &text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
+bool search (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
+bool match (const std::basic_string< char, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
@@ -165,8 +165,8 @@ std::locale  - + @@ -221,7 +221,7 @@ std::locale  - +

Public Attributes

m_locale - -

◆ match()

+ +

◆ match()

@@ -190,7 +190,7 @@ std::locale 
m_locale size_t end = (size_t)-1, end = SIZE_MAX,
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 637a6ce10..7409af058 100644 --- a/classstdex_1_1parser_1_1http__weighted__value-members.html +++ b/classstdex_1_1parser_1_1http__weighted__value-members.html @@ -85,12 +85,12 @@ $(function() {
http_weighted_value(const std::locale &locale=std::locale()) (defined in stdex::parser::http_weighted_value< T, T_asterisk >)stdex::parser::http_weighted_value< T, T_asterisk >inline
intervalstdex::parser::basic_parser< char >
invalidate() (defined in stdex::parser::http_weighted_value< T, T_asterisk >)stdex::parser::http_weighted_value< T, T_asterisk >inlinevirtual
match(_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default) (defined in stdex::parser::http_weighted_value< T, T_asterisk >)stdex::parser::http_weighted_value< T, T_asterisk >inlinevirtual
match(_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::http_weighted_value< T, T_asterisk >)stdex::parser::http_weighted_value< T, T_asterisk >inlinevirtual
value (defined in stdex::parser::http_weighted_value< T, T_asterisk >)stdex::parser::http_weighted_value< T, T_asterisk >
diff --git a/classstdex_1_1parser_1_1http__weighted__value.html b/classstdex_1_1parser_1_1http__weighted__value.html index b661e9bd0..2ee30c60a 100644 --- a/classstdex_1_1parser_1_1http__weighted__value.html +++ b/classstdex_1_1parser_1_1http__weighted__value.html @@ -101,20 +101,20 @@ Public Member Functions
 http_weighted_value (const std::locale &locale=std::locale())
 
virtual bool match (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
virtual bool match (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
virtual void invalidate ()
 
- Public Member Functions inherited from stdex::parser::basic_parser< char >
 basic_parser (const std::locale &locale=std::locale())
 
-bool search (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
-bool match (const std::basic_string< char, _Traits, _Ax > &text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
+bool search (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
+bool match (const std::basic_string< char, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
@@ -173,8 +173,8 @@ template<clas - -

◆ match()

+ +

◆ match()

@@ -200,7 +200,7 @@ template<clas
- + @@ -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 241d50ca2..130ef8eca 100644 --- a/classstdex_1_1parser_1_1parser__collection-members.html +++ b/classstdex_1_1parser_1_1parser__collection-members.html @@ -85,17 +85,17 @@ $(function() { - - + + - +

Public Attributes

size_t end = (size_t)-1, end = SIZE_MAX,
invalidate() (defined in stdex::parser::parser_collection< T >)stdex::parser::parser_collection< T >inlinevirtual
m_collection (defined in stdex::parser::parser_collection< T >)stdex::parser::parser_collection< T >protected
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)=0 (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >pure virtual
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
match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)=0 (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >pure virtual
match(const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inline
parser_collection(const std::locale &locale) (defined in stdex::parser::parser_collection< T >)stdex::parser::parser_collection< T >inlineprotected
parser_collection(const std::shared_ptr< basic_parser< T > > *el, size_t count, const std::locale &locale=std::locale()) (defined in stdex::parser::parser_collection< T >)stdex::parser::parser_collection< T >inline
parser_collection(std::vector< std::shared_ptr< basic_parser< T > > > &&collection, const std::locale &locale=std::locale()) (defined in stdex::parser::parser_collection< T >)stdex::parser::parser_collection< 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
search(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, 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_1parser__collection.html b/classstdex_1_1parser_1_1parser__collection.html index 4e7d32365..bb9fd0568 100644 --- a/classstdex_1_1parser_1_1parser__collection.html +++ b/classstdex_1_1parser_1_1parser__collection.html @@ -115,16 +115,16 @@ Public Member Functions
 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)
 
-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)=0
 
+
+bool search (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
+virtual bool match (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)=0
 
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)
 
bool match (const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
@@ -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 c00481376..1e35476b6 100644 --- a/classstdex_1_1parser_1_1sgml__any__cp-members.html +++ b/classstdex_1_1parser_1_1sgml__any__cp-members.html @@ -84,16 +84,16 @@ $(function() { - - - - + + + +

Protected Member Functions

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 char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default) (defined in stdex::parser::sgml_any_cp)stdex::parser::sgml_any_cpinlinevirtual
match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)=0 (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >pure virtual
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
match(_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::sgml_any_cp)stdex::parser::sgml_any_cpinlinevirtual
match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)=0 (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >pure virtual
match(const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, 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_MAX, int flags=match_default) (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inline
sgml_any_cp(const std::locale &locale=std::locale()) (defined in stdex::parser::sgml_any_cp)stdex::parser::sgml_any_cpinline
~basic_parser() (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inlinevirtual
diff --git a/classstdex_1_1parser_1_1sgml__any__cp.html b/classstdex_1_1parser_1_1sgml__any__cp.html index 4fe6734fa..96fc25fff 100644 --- a/classstdex_1_1parser_1_1sgml__any__cp.html +++ b/classstdex_1_1parser_1_1sgml__any__cp.html @@ -101,8 +101,8 @@ Public Member Functions
 sgml_any_cp (const std::locale &locale=std::locale())
 
virtual bool match (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
virtual bool match (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
- Public Member Functions inherited from stdex::parser::basic_any_cu< char >
 basic_any_cu (const std::locale &locale=std::locale())
 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)
 
-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)=0
 
+
+bool search (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
+virtual bool match (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)=0
 
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)
 
bool match (const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
virtual void invalidate ()
 
m_locale

Detailed Description

Test for any SGML code point.

Member Function Documentation

- -

◆ match()

+ +

◆ match()

@@ -165,7 +165,7 @@ std::locale 
m_locale size_t end = (size_t)-1, end = SIZE_MAX,
m_locale diff --git a/classstdex_1_1parser_1_1sgml__cp-members.html b/classstdex_1_1parser_1_1sgml__cp-members.html index 83c2b983f..6f828d134 100644 --- a/classstdex_1_1parser_1_1sgml__cp-members.html +++ b/classstdex_1_1parser_1_1sgml__cp-members.html @@ -83,12 +83,12 @@ $(function() {
intervalstdex::parser::basic_parser< char >
m_chr (defined in stdex::parser::sgml_cp)stdex::parser::sgml_cpprotected
m_invert (defined in stdex::parser::sgml_cp)stdex::parser::sgml_cpprotected
match(_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default) (defined in stdex::parser::sgml_cp)stdex::parser::sgml_cpinlinevirtual
sgml_cp(const char *chr, size_t count=(size_t) -1, bool invert=false, const std::locale &locale=std::locale()) (defined in stdex::parser::sgml_cp)stdex::parser::sgml_cpinline
match(_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::sgml_cp)stdex::parser::sgml_cpinlinevirtual
sgml_cp(const char *chr, size_t count=SIZE_MAX, bool invert=false, const std::locale &locale=std::locale()) (defined in stdex::parser::sgml_cp)stdex::parser::sgml_cpinline
diff --git a/classstdex_1_1parser_1_1sgml__cp.html b/classstdex_1_1parser_1_1sgml__cp.html index 3a7fb78d8..57782c9a8 100644 --- a/classstdex_1_1parser_1_1sgml__cp.html +++ b/classstdex_1_1parser_1_1sgml__cp.html @@ -98,21 +98,21 @@ Inheritance diagram for stdex::parser::sgml_cp: - - - - + + + + - - - - + + + + @@ -141,8 +141,8 @@ Additional Inherited Members

Detailed Description

Test for specific SGML code point.

Member Function Documentation

- -

◆ match()

+ +

◆ match()

@@ -166,7 +166,7 @@ Additional Inherited Members
- + @@ -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 3815626b2..d6df8c99d 100644 --- a/classstdex_1_1parser_1_1sgml__cp__set-members.html +++ b/classstdex_1_1parser_1_1sgml__cp__set-members.html @@ -84,16 +84,16 @@ $(function() { - - - - - + + + + +

Public Member Functions

sgml_cp (const char *chr, size_t count=(size_t) -1, bool invert=false, const std::locale &locale=std::locale())
 
virtual bool match (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
sgml_cp (const char *chr, size_t count=SIZE_MAX, bool invert=false, const std::locale &locale=std::locale())
 
virtual bool match (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
- Public Member Functions inherited from stdex::parser::basic_parser< char >
 basic_parser (const std::locale &locale=std::locale())
 
-bool search (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
-bool match (const std::basic_string< char, _Traits, _Ax > &text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
+bool search (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
+bool match (const std::basic_string< char, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
virtual void invalidate ()
 
size_t end = (size_t)-1, end = SIZE_MAX,
intervalstdex::parser::basic_parser< T >
m_locale (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >protected
m_set (defined in stdex::parser::sgml_cp_set)stdex::parser::sgml_cp_setprotected
match(_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default) (defined in stdex::parser::sgml_cp_set)stdex::parser::sgml_cp_setinlinevirtual
match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)=0 (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >pure virtual
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
sgml_cp_set(const char *set, size_t count=(size_t) -1, bool invert=false, const std::locale &locale=std::locale()) (defined in stdex::parser::sgml_cp_set)stdex::parser::sgml_cp_setinline
match(_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::sgml_cp_set)stdex::parser::sgml_cp_setinlinevirtual
match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)=0 (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >pure virtual
match(const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, 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_MAX, int flags=match_default) (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inline
sgml_cp_set(const char *set, size_t count=SIZE_MAX, bool invert=false, const std::locale &locale=std::locale()) (defined in stdex::parser::sgml_cp_set)stdex::parser::sgml_cp_setinline
~basic_parser() (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inlinevirtual
diff --git a/classstdex_1_1parser_1_1sgml__cp__set.html b/classstdex_1_1parser_1_1sgml__cp__set.html index 5b9e668a8..9cdb783e2 100644 --- a/classstdex_1_1parser_1_1sgml__cp__set.html +++ b/classstdex_1_1parser_1_1sgml__cp__set.html @@ -99,11 +99,11 @@ Inheritance diagram for stdex::parser::sgml_cp_set: - - - - + + + + @@ -114,16 +114,16 @@ Public Member Functions - - - - - + + + + - - + +

Public Member Functions

sgml_cp_set (const char *set, size_t count=(size_t) -1, bool invert=false, const std::locale &locale=std::locale())
 
virtual bool match (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
sgml_cp_set (const char *set, size_t count=SIZE_MAX, bool invert=false, const std::locale &locale=std::locale())
 
virtual bool match (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
- Public Member Functions inherited from stdex::parser::basic_set< char >
 basic_set (bool invert=false, const std::locale &locale=std::locale())
 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)
 
-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)=0
 
+
+bool search (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
+virtual bool match (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)=0
 
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)
 
bool match (const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
@@ -154,8 +154,8 @@ Additional Inherited Members

Detailed Description

Test for any SGML code point from a given string of SGML code points.

Member Function Documentation

- -

◆ match()

+ +

◆ match()

@@ -179,7 +179,7 @@ Additional Inherited Members
- + @@ -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 c9c663ebd..0b95b2447 100644 --- a/classstdex_1_1parser_1_1sgml__dns__domain__char-members.html +++ b/classstdex_1_1parser_1_1sgml__dns__domain__char-members.html @@ -85,16 +85,16 @@ $(function() { - - - - + + + +

Protected Attributes

size_t end = (size_t)-1, end = SIZE_MAX,
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 char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default) (defined in stdex::parser::sgml_dns_domain_char)stdex::parser::sgml_dns_domain_charinlinevirtual
match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)=0 (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >pure virtual
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
match(_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::sgml_dns_domain_char)stdex::parser::sgml_dns_domain_charinlinevirtual
match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)=0 (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >pure virtual
match(const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, 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_MAX, int flags=match_default) (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inline
sgml_dns_domain_char(bool allow_idn, const std::locale &locale=std::locale()) (defined in stdex::parser::sgml_dns_domain_char)stdex::parser::sgml_dns_domain_charinline
~basic_parser() (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inlinevirtual
diff --git a/classstdex_1_1parser_1_1sgml__dns__domain__char.html b/classstdex_1_1parser_1_1sgml__dns__domain__char.html index 76518f08c..d1318ab2f 100644 --- a/classstdex_1_1parser_1_1sgml__dns__domain__char.html +++ b/classstdex_1_1parser_1_1sgml__dns__domain__char.html @@ -101,8 +101,8 @@ Public Member Functions  sgml_dns_domain_char (bool allow_idn, const std::locale &locale=std::locale())   -virtual bool match (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default) -  +virtual bool match (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) +  - Public Member Functions inherited from stdex::parser::basic_dns_domain_char< char >  basic_dns_domain_char (bool allow_idn, const std::locale &locale=std::locale()) @@ -111,16 +111,16 @@ Public Member Functions  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) -  - -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)=0 -  - + +bool search (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) +  + +virtual bool match (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)=0 +  + 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) -  +bool match (const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) +  virtual void invalidate ()   @@ -149,8 +149,8 @@ std::locale m_locale

Detailed Description

Test for valid DNS domain SGML character.

Member Function Documentation

- -

◆ match()

+ +

◆ match()

@@ -174,7 +174,7 @@ std::locale m_locale size_t  - end = (size_t)-1, + end = SIZE_MAX, @@ -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 ba5b47b81..2811970b9 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 @@ -81,12 +81,12 @@ $(function() {

This is the complete list of members for stdex::parser::sgml_ipv6_scope_id_char, including all inherited members.

- +
intervalstdex::parser::basic_parser< char >
match(_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default) (defined in stdex::parser::sgml_ipv6_scope_id_char)stdex::parser::sgml_ipv6_scope_id_charinlinevirtual
match(_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::sgml_ipv6_scope_id_char)stdex::parser::sgml_ipv6_scope_id_charinlinevirtual
sgml_ipv6_scope_id_char(const std::locale &locale=std::locale()) (defined in stdex::parser::sgml_ipv6_scope_id_char)stdex::parser::sgml_ipv6_scope_id_charinline
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 e49dcf70d..5c87bb72d 100644 --- a/classstdex_1_1parser_1_1sgml__ipv6__scope__id__char.html +++ b/classstdex_1_1parser_1_1sgml__ipv6__scope__id__char.html @@ -100,18 +100,18 @@ Public Member Functions  sgml_ipv6_scope_id_char (const std::locale &locale=std::locale())   -virtual bool match (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default) -  +virtual bool match (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) +  - Public Member Functions inherited from stdex::parser::basic_parser< char >  basic_parser (const std::locale &locale=std::locale())   - -bool search (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default) -  - -bool match (const std::basic_string< char, _Traits, _Ax > &text, size_t start=0, size_t end=(size_t) -1, int flags=match_default) -  + +bool search (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) +  + +bool match (const std::basic_string< char, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) +  virtual void invalidate ()   @@ -131,8 +131,8 @@ std::locale m_locale

Detailed Description

Test for valid IPv6 address scope ID SGML character.

Member Function Documentation

- -

◆ match()

+ +

◆ match()

@@ -156,7 +156,7 @@ std::locale m_locale size_t  - end = (size_t)-1, + end = SIZE_MAX, @@ -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 4dd397dda..32c19e559 100644 --- a/classstdex_1_1parser_1_1sgml__punct__cp-members.html +++ b/classstdex_1_1parser_1_1sgml__punct__cp-members.html @@ -84,16 +84,16 @@ $(function() { 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 char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default) (defined in stdex::parser::sgml_punct_cp)stdex::parser::sgml_punct_cpinlinevirtual - match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)=0 (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >pure virtual - 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 + match(_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::sgml_punct_cp)stdex::parser::sgml_punct_cpinlinevirtual + match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)=0 (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >pure virtual + match(const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, 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_MAX, int flags=match_default) (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inline sgml_punct_cp(bool invert=false, const std::locale &locale=std::locale()) (defined in stdex::parser::sgml_punct_cp)stdex::parser::sgml_punct_cpinline ~basic_parser() (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inlinevirtual
diff --git a/classstdex_1_1parser_1_1sgml__punct__cp.html b/classstdex_1_1parser_1_1sgml__punct__cp.html index 6248b53da..031740488 100644 --- a/classstdex_1_1parser_1_1sgml__punct__cp.html +++ b/classstdex_1_1parser_1_1sgml__punct__cp.html @@ -101,8 +101,8 @@ Public Member Functions  sgml_punct_cp (bool invert=false, const std::locale &locale=std::locale())   -virtual bool match (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default) -  +virtual bool match (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) +  - Public Member Functions inherited from stdex::parser::basic_punct_cu< char >  basic_punct_cu (bool invert=false, const std::locale &locale=std::locale()) @@ -111,16 +111,16 @@ Public Member Functions  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) -  - -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)=0 -  - + +bool search (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) +  + +virtual bool match (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)=0 +  + 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) -  +bool match (const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) +  virtual void invalidate ()   @@ -144,8 +144,8 @@ std::locale m_locale

Detailed Description

Test for any SGML punctuation code point.

Member Function Documentation

- -

◆ match()

+ +

◆ match()

@@ -169,7 +169,7 @@ std::locale m_locale size_t  - end = (size_t)-1, + end = SIZE_MAX, @@ -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 5e6d0b012..b31241610 100644 --- a/classstdex_1_1parser_1_1sgml__space__cp-members.html +++ b/classstdex_1_1parser_1_1sgml__space__cp-members.html @@ -84,16 +84,16 @@ $(function() { 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 char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default) (defined in stdex::parser::sgml_space_cp)stdex::parser::sgml_space_cpinlinevirtual - match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)=0 (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >pure virtual - 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 + match(_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::sgml_space_cp)stdex::parser::sgml_space_cpinlinevirtual + match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)=0 (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >pure virtual + match(const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, 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_MAX, int flags=match_default) (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inline sgml_space_cp(bool invert=false, const std::locale &locale=std::locale()) (defined in stdex::parser::sgml_space_cp)stdex::parser::sgml_space_cpinline ~basic_parser() (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inlinevirtual
diff --git a/classstdex_1_1parser_1_1sgml__space__cp.html b/classstdex_1_1parser_1_1sgml__space__cp.html index 326f52cc0..3b695022f 100644 --- a/classstdex_1_1parser_1_1sgml__space__cp.html +++ b/classstdex_1_1parser_1_1sgml__space__cp.html @@ -101,8 +101,8 @@ Public Member Functions  sgml_space_cp (bool invert=false, const std::locale &locale=std::locale())   -virtual bool match (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default) -  +virtual bool match (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) +  - Public Member Functions inherited from stdex::parser::basic_space_cu< char >  basic_space_cu (bool invert=false, const std::locale &locale=std::locale()) @@ -111,16 +111,16 @@ Public Member Functions  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) -  - -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)=0 -  - + +bool search (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) +  + +virtual bool match (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)=0 +  + 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) -  +bool match (const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) +  virtual void invalidate ()   @@ -144,8 +144,8 @@ std::locale m_locale

Detailed Description

Test for any SGML space code point.

Member Function Documentation

- -

◆ match()

+ +

◆ match()

@@ -169,7 +169,7 @@ std::locale m_locale size_t  - end = (size_t)-1, + end = SIZE_MAX, @@ -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 e6052d32b..820618f36 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 @@ -84,16 +84,16 @@ $(function() { 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 char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default) (defined in stdex::parser::sgml_space_or_punct_cp)stdex::parser::sgml_space_or_punct_cpinlinevirtual - match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)=0 (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >pure virtual - 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 + match(_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::sgml_space_or_punct_cp)stdex::parser::sgml_space_or_punct_cpinlinevirtual + match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)=0 (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >pure virtual + match(const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, 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_MAX, int flags=match_default) (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inline sgml_space_or_punct_cp(bool invert=false, const std::locale &locale=std::locale()) (defined in stdex::parser::sgml_space_or_punct_cp)stdex::parser::sgml_space_or_punct_cpinline ~basic_parser() (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inlinevirtual
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 51394e0b5..dcde131ae 100644 --- a/classstdex_1_1parser_1_1sgml__space__or__punct__cp.html +++ b/classstdex_1_1parser_1_1sgml__space__or__punct__cp.html @@ -101,8 +101,8 @@ Public Member Functions  sgml_space_or_punct_cp (bool invert=false, const std::locale &locale=std::locale())   -virtual bool match (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default) -  +virtual bool match (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) +  - Public Member Functions inherited from stdex::parser::basic_space_or_punct_cu< char >  basic_space_or_punct_cu (bool invert=false, const std::locale &locale=std::locale()) @@ -111,16 +111,16 @@ Public Member Functions  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) -  - -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)=0 -  - + +bool search (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) +  + +virtual bool match (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)=0 +  + 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) -  +bool match (const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) +  virtual void invalidate ()   @@ -144,8 +144,8 @@ std::locale m_locale

Detailed Description

Test for any SGML space or punctuation code point.

Member Function Documentation

- -

◆ match()

+ +

◆ match()

@@ -169,7 +169,7 @@ std::locale m_locale size_t  - end = (size_t)-1, + end = SIZE_MAX, @@ -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 95d853a5c..3211f4ef6 100644 --- a/classstdex_1_1parser_1_1sgml__string-members.html +++ b/classstdex_1_1parser_1_1sgml__string-members.html @@ -82,12 +82,12 @@ $(function() { - - + +
intervalstdex::parser::basic_parser< char >
m_str (defined in stdex::parser::sgml_string)stdex::parser::sgml_stringprotected
match(_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default) (defined in stdex::parser::sgml_string)stdex::parser::sgml_stringinlinevirtual
sgml_string(const char *str, size_t count=(size_t) -1, const std::locale &locale=std::locale()) (defined in stdex::parser::sgml_string)stdex::parser::sgml_stringinline
match(_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::sgml_string)stdex::parser::sgml_stringinlinevirtual
sgml_string(const char *str, size_t count=SIZE_MAX, const std::locale &locale=std::locale()) (defined in stdex::parser::sgml_string)stdex::parser::sgml_stringinline
diff --git a/classstdex_1_1parser_1_1sgml__string.html b/classstdex_1_1parser_1_1sgml__string.html index a41266f07..76d4784b6 100644 --- a/classstdex_1_1parser_1_1sgml__string.html +++ b/classstdex_1_1parser_1_1sgml__string.html @@ -98,21 +98,21 @@ Inheritance diagram for stdex::parser::sgml_string:
- - - - + + + + - - - - + + + + @@ -138,8 +138,8 @@ Additional Inherited Members

Detailed Description

Test for SGML given string.

Member Function Documentation

- -

◆ match()

+ +

◆ match()

@@ -163,7 +163,7 @@ Additional Inherited Members
- + @@ -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 8cae25965..0158e445a 100644 --- a/classstdex_1_1parser_1_1sgml__url__password__char-members.html +++ b/classstdex_1_1parser_1_1sgml__url__password__char-members.html @@ -84,16 +84,16 @@ $(function() { - - - - + + + +

Public Member Functions

sgml_string (const char *str, size_t count=(size_t) -1, const std::locale &locale=std::locale())
 
virtual bool match (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
sgml_string (const char *str, size_t count=SIZE_MAX, const std::locale &locale=std::locale())
 
virtual bool match (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
- Public Member Functions inherited from stdex::parser::basic_parser< char >
 basic_parser (const std::locale &locale=std::locale())
 
-bool search (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
-bool match (const std::basic_string< char, _Traits, _Ax > &text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)
 
+bool search (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
+bool match (const std::basic_string< char, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)
 
virtual void invalidate ()
 
size_t end = (size_t)-1, end = SIZE_MAX,
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 char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default) (defined in stdex::parser::sgml_url_password_char)stdex::parser::sgml_url_password_charinlinevirtual
match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)=0 (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >pure virtual
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
match(_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::sgml_url_password_char)stdex::parser::sgml_url_password_charinlinevirtual
match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)=0 (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >pure virtual
match(const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, 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_MAX, int flags=match_default) (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inline
sgml_url_password_char(const std::locale &locale=std::locale()) (defined in stdex::parser::sgml_url_password_char)stdex::parser::sgml_url_password_charinline
~basic_parser() (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inlinevirtual
diff --git a/classstdex_1_1parser_1_1sgml__url__password__char.html b/classstdex_1_1parser_1_1sgml__url__password__char.html index f86d0bb8c..ea0fd02c7 100644 --- a/classstdex_1_1parser_1_1sgml__url__password__char.html +++ b/classstdex_1_1parser_1_1sgml__url__password__char.html @@ -101,8 +101,8 @@ Public Member Functions  sgml_url_password_char (const std::locale &locale=std::locale())   -virtual bool match (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default) -  +virtual bool match (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) +  - Public Member Functions inherited from stdex::parser::basic_url_password_char< char >  basic_url_password_char (const std::locale &locale=std::locale()) @@ -111,16 +111,16 @@ Public Member Functions  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) -  - -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)=0 -  - + +bool search (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) +  + +virtual bool match (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)=0 +  + 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) -  +bool match (const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) +  virtual void invalidate ()   @@ -140,8 +140,8 @@ std::locale m_locale

Detailed Description

Test for valid URL password SGML character.

Member Function Documentation

- -

◆ match()

+ +

◆ match()

@@ -165,7 +165,7 @@ std::locale m_locale size_t  - end = (size_t)-1, + end = SIZE_MAX, @@ -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 81206eee9..901b78d22 100644 --- a/classstdex_1_1parser_1_1sgml__url__path__char-members.html +++ b/classstdex_1_1parser_1_1sgml__url__path__char-members.html @@ -84,16 +84,16 @@ $(function() { 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 char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default) (defined in stdex::parser::sgml_url_path_char)stdex::parser::sgml_url_path_charinlinevirtual - match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)=0 (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >pure virtual - 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 + match(_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::sgml_url_path_char)stdex::parser::sgml_url_path_charinlinevirtual + match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)=0 (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >pure virtual + match(const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, 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_MAX, int flags=match_default) (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inline sgml_url_path_char(const std::locale &locale=std::locale()) (defined in stdex::parser::sgml_url_path_char)stdex::parser::sgml_url_path_charinline ~basic_parser() (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inlinevirtual
diff --git a/classstdex_1_1parser_1_1sgml__url__path__char.html b/classstdex_1_1parser_1_1sgml__url__path__char.html index c45336e60..f79f89a44 100644 --- a/classstdex_1_1parser_1_1sgml__url__path__char.html +++ b/classstdex_1_1parser_1_1sgml__url__path__char.html @@ -101,8 +101,8 @@ Public Member Functions  sgml_url_path_char (const std::locale &locale=std::locale())   -virtual bool match (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default) -  +virtual bool match (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) +  - Public Member Functions inherited from stdex::parser::basic_url_path_char< char >  basic_url_path_char (const std::locale &locale=std::locale()) @@ -111,16 +111,16 @@ Public Member Functions  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) -  - -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)=0 -  - + +bool search (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) +  + +virtual bool match (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)=0 +  + 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) -  +bool match (const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) +  virtual void invalidate ()   @@ -140,8 +140,8 @@ std::locale m_locale

Detailed Description

Test for valid URL path SGML character.

Member Function Documentation

- -

◆ match()

+ +

◆ match()

@@ -165,7 +165,7 @@ std::locale m_locale size_t  - end = (size_t)-1, + end = SIZE_MAX, @@ -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 1f3acfc03..a26ea9796 100644 --- a/classstdex_1_1parser_1_1sgml__url__username__char-members.html +++ b/classstdex_1_1parser_1_1sgml__url__username__char-members.html @@ -84,16 +84,16 @@ $(function() { 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 char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default) (defined in stdex::parser::sgml_url_username_char)stdex::parser::sgml_url_username_charinlinevirtual - match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default)=0 (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >pure virtual - 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 + match(_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) (defined in stdex::parser::sgml_url_username_char)stdex::parser::sgml_url_username_charinlinevirtual + match(_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)=0 (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >pure virtual + match(const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, 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_MAX, int flags=match_default) (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inline sgml_url_username_char(const std::locale &locale=std::locale()) (defined in stdex::parser::sgml_url_username_char)stdex::parser::sgml_url_username_charinline ~basic_parser() (defined in stdex::parser::basic_parser< T >)stdex::parser::basic_parser< T >inlinevirtual
diff --git a/classstdex_1_1parser_1_1sgml__url__username__char.html b/classstdex_1_1parser_1_1sgml__url__username__char.html index 3aab26be9..6798117e7 100644 --- a/classstdex_1_1parser_1_1sgml__url__username__char.html +++ b/classstdex_1_1parser_1_1sgml__url__username__char.html @@ -101,8 +101,8 @@ Public Member Functions  sgml_url_username_char (const std::locale &locale=std::locale())   -virtual bool match (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=(size_t) -1, int flags=match_default) -  +virtual bool match (_In_reads_or_z_(end) const char *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) +  - Public Member Functions inherited from stdex::parser::basic_url_username_char< char >  basic_url_username_char (const std::locale &locale=std::locale()) @@ -111,16 +111,16 @@ Public Member Functions  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) -  - -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)=0 -  - + +bool search (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) +  + +virtual bool match (_In_reads_or_z_(end) const T *text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default)=0 +  + 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) -  +bool match (const std::basic_string< T, _Traits, _Ax > &text, size_t start=0, size_t end=SIZE_MAX, int flags=match_default) +  virtual void invalidate ()   @@ -140,8 +140,8 @@ std::locale m_locale

Detailed Description

Test for valid URL username SGML character.

Member Function Documentation

- -

◆ match()

+ +

◆ match()

@@ -165,7 +165,7 @@ std::locale m_locale size_t  - end = (size_t)-1, + end = SIZE_MAX, @@ -196,7 +196,7 @@ std::locale m_locale diff --git a/classstdex_1_1pool-members.html b/classstdex_1_1pool-members.html index 6c4a77c9b..d1f149c64 100644 --- a/classstdex_1_1pool-members.html +++ b/classstdex_1_1pool-members.html @@ -86,7 +86,7 @@ $(function() {
diff --git a/classstdex_1_1pool.html b/classstdex_1_1pool.html index 97f78d72a..60deb2547 100644 --- a/classstdex_1_1pool.html +++ b/classstdex_1_1pool.html @@ -197,7 +197,7 @@ template<class T >
diff --git a/classstdex_1_1progress-members.html b/classstdex_1_1progress-members.html index ad07b869e..208bbabe5 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 57a59124f..c50ba43e2 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 6198c0b2c..f9136cd6e 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 4b0a5520d..7366c7cf4 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 732277a18..eed86aeb8 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 10413cf2d..ec9efe0e2 100644 --- a/classstdex_1_1ring.html +++ b/classstdex_1_1ring.html @@ -296,7 +296,7 @@ template<class T , size_t CAPACITY> diff --git a/classstdex_1_1sha1__hash-members.html b/classstdex_1_1sha1__hash-members.html index e4309e92c..e5335fe1a 100644 --- a/classstdex_1_1sha1__hash-members.html +++ b/classstdex_1_1sha1__hash-members.html @@ -93,7 +93,7 @@ $(function() { diff --git a/classstdex_1_1sha1__hash.html b/classstdex_1_1sha1__hash.html index 78d2af627..e89dd8234 100644 --- a/classstdex_1_1sha1__hash.html +++ b/classstdex_1_1sha1__hash.html @@ -259,7 +259,7 @@ uint32_t m_temp [16] diff --git a/classstdex_1_1spinlock-members.html b/classstdex_1_1spinlock-members.html index 1482d7da9..60392d116 100644 --- a/classstdex_1_1spinlock-members.html +++ b/classstdex_1_1spinlock-members.html @@ -86,7 +86,7 @@ $(function() { diff --git a/classstdex_1_1spinlock.html b/classstdex_1_1spinlock.html index ec70e1d09..1303cacf5 100644 --- a/classstdex_1_1spinlock.html +++ b/classstdex_1_1spinlock.html @@ -138,7 +138,7 @@ void unlock () noexcep diff --git a/classstdex_1_1stream_1_1async__reader-members.html b/classstdex_1_1stream_1_1async__reader-members.html index f0d3a0364..61ff3ba4f 100644 --- a/classstdex_1_1stream_1_1async__reader-members.html +++ b/classstdex_1_1stream_1_1async__reader-members.html @@ -155,7 +155,7 @@ $(function() { diff --git a/classstdex_1_1stream_1_1async__reader.html b/classstdex_1_1stream_1_1async__reader.html index caf1cb118..6497f935c 100644 --- a/classstdex_1_1stream_1_1async__reader.html +++ b/classstdex_1_1stream_1_1async__reader.html @@ -414,7 +414,7 @@ template<size_t CAPACITY = default_async_limit> diff --git a/classstdex_1_1stream_1_1async__writer-members.html b/classstdex_1_1stream_1_1async__writer-members.html index 8270b3cd9..43e7f0a7d 100644 --- a/classstdex_1_1stream_1_1async__writer-members.html +++ b/classstdex_1_1stream_1_1async__writer-members.html @@ -155,7 +155,7 @@ $(function() { diff --git a/classstdex_1_1stream_1_1async__writer.html b/classstdex_1_1stream_1_1async__writer.html index f70a7019a..9f1b0a514 100644 --- a/classstdex_1_1stream_1_1async__writer.html +++ b/classstdex_1_1stream_1_1async__writer.html @@ -445,7 +445,7 @@ template<size_t CAPACITY = default_async_limit> diff --git a/classstdex_1_1stream_1_1basic-members.html b/classstdex_1_1stream_1_1basic-members.html index 34cd8c1be..10e5ef0f7 100644 --- a/classstdex_1_1stream_1_1basic-members.html +++ b/classstdex_1_1stream_1_1basic-members.html @@ -148,7 +148,7 @@ $(function() { diff --git a/classstdex_1_1stream_1_1basic.html b/classstdex_1_1stream_1_1basic.html index cbdd7985e..ab7557333 100644 --- a/classstdex_1_1stream_1_1basic.html +++ b/classstdex_1_1stream_1_1basic.html @@ -1400,7 +1400,7 @@ template<class T > diff --git a/classstdex_1_1stream_1_1basic__file-members.html b/classstdex_1_1stream_1_1basic__file-members.html index 82ba1b60a..dd4c42f6f 100644 --- a/classstdex_1_1stream_1_1basic__file-members.html +++ b/classstdex_1_1stream_1_1basic__file-members.html @@ -164,7 +164,7 @@ $(function() { diff --git a/classstdex_1_1stream_1_1basic__file.html b/classstdex_1_1stream_1_1basic__file.html index 677ce0e8e..a6a23ce61 100644 --- a/classstdex_1_1stream_1_1basic__file.html +++ b/classstdex_1_1stream_1_1basic__file.html @@ -961,7 +961,7 @@ state_t m_state diff --git a/classstdex_1_1stream_1_1basic__sys-members.html b/classstdex_1_1stream_1_1basic__sys-members.html index b333229d3..2551f54ee 100644 --- a/classstdex_1_1stream_1_1basic__sys-members.html +++ b/classstdex_1_1stream_1_1basic__sys-members.html @@ -160,7 +160,7 @@ $(function() { diff --git a/classstdex_1_1stream_1_1basic__sys.html b/classstdex_1_1stream_1_1basic__sys.html index 9e7d3cdc8..a4ba092ad 100644 --- a/classstdex_1_1stream_1_1basic__sys.html +++ b/classstdex_1_1stream_1_1basic__sys.html @@ -527,7 +527,7 @@ sys_handle m_h diff --git a/classstdex_1_1stream_1_1buffer-members.html b/classstdex_1_1stream_1_1buffer-members.html index a635db115..658fbd0ef 100644 --- a/classstdex_1_1stream_1_1buffer-members.html +++ b/classstdex_1_1stream_1_1buffer-members.html @@ -155,7 +155,7 @@ $(function() { diff --git a/classstdex_1_1stream_1_1buffer.html b/classstdex_1_1stream_1_1buffer.html index 9bd1ae469..860089513 100644 --- a/classstdex_1_1stream_1_1buffer.html +++ b/classstdex_1_1stream_1_1buffer.html @@ -489,7 +489,7 @@ state_t m_state diff --git a/classstdex_1_1stream_1_1buffered__sys-members.html b/classstdex_1_1stream_1_1buffered__sys-members.html index a57db76a3..90a20bf03 100644 --- a/classstdex_1_1stream_1_1buffered__sys-members.html +++ b/classstdex_1_1stream_1_1buffered__sys-members.html @@ -157,7 +157,7 @@ $(function() { diff --git a/classstdex_1_1stream_1_1buffered__sys.html b/classstdex_1_1stream_1_1buffered__sys.html index 53dd503b5..0b779a4e9 100644 --- a/classstdex_1_1stream_1_1buffered__sys.html +++ b/classstdex_1_1stream_1_1buffered__sys.html @@ -365,7 +365,7 @@ void flush_write () diff --git a/classstdex_1_1stream_1_1cache-members.html b/classstdex_1_1stream_1_1cache-members.html index 1e2d7eacb..5289f3516 100644 --- a/classstdex_1_1stream_1_1cache-members.html +++ b/classstdex_1_1stream_1_1cache-members.html @@ -166,7 +166,7 @@ $(function() { diff --git a/classstdex_1_1stream_1_1cache.html b/classstdex_1_1stream_1_1cache.html index 94371affa..209e2679e 100644 --- a/classstdex_1_1stream_1_1cache.html +++ b/classstdex_1_1stream_1_1cache.html @@ -925,7 +925,7 @@ state_t m_state diff --git a/classstdex_1_1stream_1_1cached__file-members.html b/classstdex_1_1stream_1_1cached__file-members.html index 8a4d35698..d731547d5 100644 --- a/classstdex_1_1stream_1_1cached__file-members.html +++ b/classstdex_1_1stream_1_1cached__file-members.html @@ -173,7 +173,7 @@ $(function() { diff --git a/classstdex_1_1stream_1_1cached__file.html b/classstdex_1_1stream_1_1cached__file.html index ba3063587..a1811bba9 100644 --- a/classstdex_1_1stream_1_1cached__file.html +++ b/classstdex_1_1stream_1_1cached__file.html @@ -600,7 +600,7 @@ state_t m_state diff --git a/classstdex_1_1stream_1_1converter-members.html b/classstdex_1_1stream_1_1converter-members.html index 07f0cb2fb..a9a521baf 100644 --- a/classstdex_1_1stream_1_1converter-members.html +++ b/classstdex_1_1stream_1_1converter-members.html @@ -150,7 +150,7 @@ $(function() { diff --git a/classstdex_1_1stream_1_1converter.html b/classstdex_1_1stream_1_1converter.html index ac372f60f..1184d43f9 100644 --- a/classstdex_1_1stream_1_1converter.html +++ b/classstdex_1_1stream_1_1converter.html @@ -507,7 +507,7 @@ state_t m_state diff --git a/classstdex_1_1stream_1_1diag__file-members.html b/classstdex_1_1stream_1_1diag__file-members.html index a03477266..419808876 100644 --- a/classstdex_1_1stream_1_1diag__file-members.html +++ b/classstdex_1_1stream_1_1diag__file-members.html @@ -167,7 +167,7 @@ $(function() { diff --git a/classstdex_1_1stream_1_1diag__file.html b/classstdex_1_1stream_1_1diag__file.html index 8c5331ad6..c558c71d0 100644 --- a/classstdex_1_1stream_1_1diag__file.html +++ b/classstdex_1_1stream_1_1diag__file.html @@ -754,7 +754,7 @@ state_t m_state diff --git a/classstdex_1_1stream_1_1fifo-members.html b/classstdex_1_1stream_1_1fifo-members.html index be78a6908..dc7bf1118 100644 --- a/classstdex_1_1stream_1_1fifo-members.html +++ b/classstdex_1_1stream_1_1fifo-members.html @@ -155,7 +155,7 @@ $(function() { diff --git a/classstdex_1_1stream_1_1fifo.html b/classstdex_1_1stream_1_1fifo.html index b1cb4c9c0..0fa27938c 100644 --- a/classstdex_1_1stream_1_1fifo.html +++ b/classstdex_1_1stream_1_1fifo.html @@ -479,7 +479,7 @@ state_t m_state diff --git a/classstdex_1_1stream_1_1file-members.html b/classstdex_1_1stream_1_1file-members.html index 2d48a0c4b..6b878588c 100644 --- a/classstdex_1_1stream_1_1file-members.html +++ b/classstdex_1_1stream_1_1file-members.html @@ -189,7 +189,7 @@ $(function() { diff --git a/classstdex_1_1stream_1_1file.html b/classstdex_1_1stream_1_1file.html index f7872c41d..fe8bc29a2 100644 --- a/classstdex_1_1stream_1_1file.html +++ b/classstdex_1_1stream_1_1file.html @@ -1161,7 +1161,7 @@ sys_handle m_h diff --git a/classstdex_1_1stream_1_1file__window-members.html b/classstdex_1_1stream_1_1file__window-members.html index 5de7f30eb..3b388931a 100644 --- a/classstdex_1_1stream_1_1file__window-members.html +++ b/classstdex_1_1stream_1_1file__window-members.html @@ -168,7 +168,7 @@ $(function() { diff --git a/classstdex_1_1stream_1_1file__window.html b/classstdex_1_1stream_1_1file__window.html index 5a1ba9e79..aec8ce402 100644 --- a/classstdex_1_1stream_1_1file__window.html +++ b/classstdex_1_1stream_1_1file__window.html @@ -787,7 +787,7 @@ state_t m_state diff --git a/classstdex_1_1stream_1_1limiter-members.html b/classstdex_1_1stream_1_1limiter-members.html index 3afcb5f29..725db8a65 100644 --- a/classstdex_1_1stream_1_1limiter-members.html +++ b/classstdex_1_1stream_1_1limiter-members.html @@ -153,7 +153,7 @@ $(function() { diff --git a/classstdex_1_1stream_1_1limiter.html b/classstdex_1_1stream_1_1limiter.html index 8417ad71f..ce6929344 100644 --- a/classstdex_1_1stream_1_1limiter.html +++ b/classstdex_1_1stream_1_1limiter.html @@ -456,7 +456,7 @@ state_t m_state diff --git a/classstdex_1_1stream_1_1memory__file-members.html b/classstdex_1_1stream_1_1memory__file-members.html index b4eda8920..6ffb46de9 100644 --- a/classstdex_1_1stream_1_1memory__file-members.html +++ b/classstdex_1_1stream_1_1memory__file-members.html @@ -208,7 +208,7 @@ $(function() { diff --git a/classstdex_1_1stream_1_1memory__file.html b/classstdex_1_1stream_1_1memory__file.html index ec368bc1e..6dfc14bb5 100644 --- a/classstdex_1_1stream_1_1memory__file.html +++ b/classstdex_1_1stream_1_1memory__file.html @@ -1690,7 +1690,7 @@ template<class T > diff --git a/classstdex_1_1stream_1_1replicator-members.html b/classstdex_1_1stream_1_1replicator-members.html index 38a68cd14..ef609e1fb 100644 --- a/classstdex_1_1stream_1_1replicator-members.html +++ b/classstdex_1_1stream_1_1replicator-members.html @@ -153,7 +153,7 @@ $(function() { diff --git a/classstdex_1_1stream_1_1replicator.html b/classstdex_1_1stream_1_1replicator.html index 23d670fdf..f08df6171 100644 --- a/classstdex_1_1stream_1_1replicator.html +++ b/classstdex_1_1stream_1_1replicator.html @@ -462,7 +462,7 @@ state_t m_state diff --git a/classstdex_1_1stream_1_1replicator_1_1worker-members.html b/classstdex_1_1stream_1_1replicator_1_1worker-members.html index 8a49ea2d2..daa7f7d60 100644 --- a/classstdex_1_1stream_1_1replicator_1_1worker-members.html +++ b/classstdex_1_1stream_1_1replicator_1_1worker-members.html @@ -93,7 +93,7 @@ $(function() { diff --git a/classstdex_1_1stream_1_1replicator_1_1worker.html b/classstdex_1_1stream_1_1replicator_1_1worker.html index aebf0ef71..e1fda95a8 100644 --- a/classstdex_1_1stream_1_1replicator_1_1worker.html +++ b/classstdex_1_1stream_1_1replicator_1_1worker.html @@ -149,7 +149,7 @@ void process_op () diff --git a/classstdex_1_1stream_1_1socket-members.html b/classstdex_1_1stream_1_1socket-members.html index 1d06008b4..e7dc6ed4a 100644 --- a/classstdex_1_1stream_1_1socket-members.html +++ b/classstdex_1_1stream_1_1socket-members.html @@ -156,7 +156,7 @@ $(function() { diff --git a/classstdex_1_1stream_1_1socket.html b/classstdex_1_1stream_1_1socket.html index 62b7d009c..c8e4db319 100644 --- a/classstdex_1_1stream_1_1socket.html +++ b/classstdex_1_1stream_1_1socket.html @@ -533,7 +533,7 @@ state_t m_state diff --git a/classstdex_1_1stream_1_1window-members.html b/classstdex_1_1stream_1_1window-members.html index 45ebd79e8..5ac926457 100644 --- a/classstdex_1_1stream_1_1window-members.html +++ b/classstdex_1_1stream_1_1window-members.html @@ -156,7 +156,7 @@ $(function() { diff --git a/classstdex_1_1stream_1_1window.html b/classstdex_1_1stream_1_1window.html index fb14f6d84..f5900b647 100644 --- a/classstdex_1_1stream_1_1window.html +++ b/classstdex_1_1stream_1_1window.html @@ -465,7 +465,7 @@ state_t m_state diff --git a/classstdex_1_1stream__hasher-members.html b/classstdex_1_1stream__hasher-members.html index 2c57b3e0a..3ae66516a 100644 --- a/classstdex_1_1stream__hasher-members.html +++ b/classstdex_1_1stream__hasher-members.html @@ -152,7 +152,7 @@ $(function() { diff --git a/classstdex_1_1stream__hasher.html b/classstdex_1_1stream__hasher.html index 912c8e9eb..51cab040e 100644 --- a/classstdex_1_1stream__hasher.html +++ b/classstdex_1_1stream__hasher.html @@ -448,7 +448,7 @@ template<class T > diff --git a/classstdex_1_1sys__object-members.html b/classstdex_1_1sys__object-members.html index 44697c6b1..6ba28758e 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 562446093..bd2a01901 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 e73b8e702..fcbc46587 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 931aa774c..2d6b72abb 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 967283ddd..bd8f3ff5c 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 939b42a1a..005a90ccc 100644 --- a/classstdex_1_1vector__queue.html +++ b/classstdex_1_1vector__queue.html @@ -795,7 +795,7 @@ template<class T > diff --git a/classstdex_1_1watchdog-members.html b/classstdex_1_1watchdog-members.html index 6abc39757..192cf80c7 100644 --- a/classstdex_1_1watchdog-members.html +++ b/classstdex_1_1watchdog-members.html @@ -94,7 +94,7 @@ $(function() { diff --git a/classstdex_1_1watchdog.html b/classstdex_1_1watchdog.html index cc5fbc536..294a5c0d2 100644 --- a/classstdex_1_1watchdog.html +++ b/classstdex_1_1watchdog.html @@ -223,7 +223,7 @@ template<class _Clock , class _Duration = typename _Clock::duration> diff --git a/dir_4be4f7b278e009bf0f1906cf31fb73bd.html b/dir_4be4f7b278e009bf0f1906cf31fb73bd.html index 2c0c1cc0c..b9747a853 100644 --- a/dir_4be4f7b278e009bf0f1906cf31fb73bd.html +++ b/dir_4be4f7b278e009bf0f1906cf31fb73bd.html @@ -104,7 +104,7 @@ Files diff --git a/dir_d44c64559bbebec7f509842c48db8b23.html b/dir_d44c64559bbebec7f509842c48db8b23.html index a1feb6341..61c247d1b 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 a470c37ec..fa7d566a7 100644 --- a/dir_fca3c47b2ea228727bd6729832f89576.html +++ b/dir_fca3c47b2ea228727bd6729832f89576.html @@ -94,6 +94,8 @@ Files    hex.hpp   + html.hpp idrec.hpp    interval.hpp @@ -144,7 +146,7 @@ Files diff --git a/endian_8hpp_source.html b/endian_8hpp_source.html index db79fac52..b7ecc858d 100644 --- a/endian_8hpp_source.html +++ b/endian_8hpp_source.html @@ -225,7 +225,7 @@ $(document).ready(function() { init_codefold(0); }); diff --git a/exception_8hpp_source.html b/exception_8hpp_source.html index 7c36d4116..0682f46e7 100644 --- a/exception_8hpp_source.html +++ b/exception_8hpp_source.html @@ -107,7 +107,7 @@ $(document).ready(function() { init_codefold(0); }); diff --git a/files.html b/files.html index 78ca6fb85..57cad5a7e 100644 --- a/files.html +++ b/files.html @@ -84,46 +84,47 @@ $(function() {  exception.hpp  hash.hpp  hex.hpp - idrec.hpp - interval.hpp - locale.hpp - mapping.hpp - math.hpp - memory.hpp - parser.hpp - pool.hpp - progress.hpp - ring.hpp - sgml.hpp - sgml_unicode.hpp - socket.hpp - spinlock.hpp - stream.hpp - string.hpp - sys_info.hpp - system.hpp - unicode.hpp - uuid.hpp - vector_queue.hpp - watchdog.hpp - windows.h -  UnitTests - compat.hpp - hash.cpp - math.cpp - parser.cpp - pch.hpp - ring.cpp - sgml.cpp - stream.cpp - unicode.cpp - watchdog.cpp + html.hpp + idrec.hpp + interval.hpp + locale.hpp + mapping.hpp + math.hpp + memory.hpp + parser.hpp + pool.hpp + progress.hpp + ring.hpp + sgml.hpp + sgml_unicode.hpp + socket.hpp + spinlock.hpp + stream.hpp + string.hpp + sys_info.hpp + system.hpp + unicode.hpp + uuid.hpp + vector_queue.hpp + watchdog.hpp + windows.h +  UnitTests + compat.hpp + hash.cpp + math.cpp + parser.cpp + pch.hpp + ring.cpp + sgml.cpp + stream.cpp + unicode.cpp + watchdog.cpp diff --git a/functions.html b/functions.html index c6bd314ce..ef009e375 100644 --- a/functions.html +++ b/functions.html @@ -74,18 +74,27 @@ $(function() {

- a -

diff --git a/functions_b.html b/functions_b.html index ef61049b3..5595f52d7 100644 --- a/functions_b.html +++ b/functions_b.html @@ -76,13 +76,14 @@ $(function() {
  • back() : stdex::ring< T, CAPACITY >, stdex::vector_queue< T >
  • base64_dec() : stdex::base64_dec
  • base64_enc() : stdex::base64_enc
  • +
  • base_type : stdex::parser::basic_mime_type< T >
  • bban : stdex::parser::basic_iban< T >
  • buf : stdex::hex_dec
  • diff --git a/functions_c.html b/functions_c.html index 1d3a0ad47..56ab509f9 100644 --- a/functions_c.html +++ b/functions_c.html @@ -76,14 +76,16 @@ $(function() {
  • cached_file() : stdex::stream::cached_file
  • cancel() : stdex::global_progress< T >, stdex::progress< T >
  • capacity() : stdex::vector_queue< T >
  • +
  • charset : stdex::parser::basic_mime_type< T >
  • check_digits : stdex::parser::basic_creditor_reference< T >, stdex::parser::basic_iban< T >
  • -
  • clear() : stdex::base64_dec, stdex::base64_enc, stdex::basic_hash< T >, stdex::block_hash< T >, stdex::crc32_hash, stdex::hex_dec, stdex::md5_hash, stdex::sha1_hash, stdex::vector_queue< T >
  • +
  • clear() : stdex::base64_dec, stdex::base64_enc, stdex::basic_hash< T >, stdex::block_hash< T >, stdex::crc32_hash, stdex::hex_dec, stdex::html::document< _Elem, _Traits, _Alloc >, stdex::md5_hash, stdex::sha1_hash, 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::stream::socket, stdex::sys_object
  • +
  • code : stdex::html::element, stdex::html::element_end
  • components : stdex::parser::basic_ipv4_address< T >, stdex::parser::basic_ipv6_address< T >
  • const_pointer : stdex::vector_queue< T >
  • const_reference : stdex::vector_queue< T >
  • contains() : stdex::interval< T >
  • -
  • content : stdex::parser::http_quoted_string
  • +
  • content : stdex::html::comment, stdex::html::instruction, stdex::parser::basic_css_comment< T >, stdex::parser::basic_css_import< T >, stdex::parser::basic_css_string< T >, stdex::parser::basic_css_uri< T >, stdex::parser::basic_html_value< T >, 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
  • @@ -92,7 +94,7 @@ $(function() { diff --git a/functions_d.html b/functions_d.html index 8fb553f04..9fee46c00 100644 --- a/functions_d.html +++ b/functions_d.html @@ -73,7 +73,7 @@ $(function() {
    Here is a list of all documented class members with links to the class documentation for each member:

    - d -

    diff --git a/functions_l.html b/functions_l.html index b6fa00d35..72353eb30 100644 --- a/functions_l.html +++ b/functions_l.html @@ -75,13 +75,14 @@ $(function() {

    - l -

    diff --git a/functions_m.html b/functions_m.html index 7ed22edb3..3ec5cd3fb 100644 --- a/functions_m.html +++ b/functions_m.html @@ -76,28 +76,47 @@ $(function() {
  • m_allow_absolute : stdex::parser::basic_dns_name< T >
  • m_buf : stdex::base64_dec, stdex::base64_enc
  • m_callback : stdex::watchdog< _Clock, _Duration >
  • +
  • m_charset : stdex::html::document< _Elem, _Traits, _Alloc >
  • m_count : stdex::vector_queue< T >
  • m_data : stdex::stream::memory_file, stdex::vector_queue< T >
  • +
  • m_document : stdex::html::parser< _Elem, _Traits, _Alloc >
  • m_el : stdex::parser::basic_iterations< T >
  • +
  • m_element_stack : stdex::html::document< _Elem, _Traits, _Alloc >
  • +
  • m_entities : stdex::html::document< _Elem, _Traits, _Alloc >
  • m_greedy : stdex::parser::basic_iterations< T >
  • m_head : stdex::vector_queue< T >
  • +
  • m_is_cdata : stdex::html::document< _Elem, _Traits, _Alloc >
  • +
  • m_is_rcdata : stdex::html::document< _Elem, _Traits, _Alloc >
  • +
  • m_is_special_element : stdex::html::document< _Elem, _Traits, _Alloc >
  • m_manage : stdex::stream::memory_file
  • m_max_iterations : stdex::parser::basic_iterations< T >
  • m_min_iterations : stdex::parser::basic_iterations< T >
  • m_num : stdex::base64_dec, stdex::base64_enc
  • m_num_blocks : stdex::base64_writer
  • -
  • m_offset : stdex::stream::memory_file
  • +
  • m_num_invalid_conditions : stdex::html::document< _Elem, _Traits, _Alloc >
  • +
  • m_num_parsed : stdex::html::document< _Elem, _Traits, _Alloc >
  • +
  • m_num_valid_conditions : stdex::html::document< _Elem, _Traits, _Alloc >
  • +
  • m_offset : stdex::html::parser< _Elem, _Traits, _Alloc >, stdex::stream::memory_file
  • +
  • m_parse_frames : stdex::html::parser< _Elem, _Traits, _Alloc >
  • m_phase : stdex::watchdog< _Clock, _Duration >
  • +
  • m_progress : stdex::html::parser< _Elem, _Traits, _Alloc >
  • m_quit : stdex::watchdog< _Clock, _Duration >
  • m_reserved : stdex::stream::memory_file
  • +
  • m_sequences : stdex::html::document< _Elem, _Traits, _Alloc >
  • m_size : stdex::stream::memory_file
  • m_size_max : stdex::vector_queue< T >
  • +
  • m_source : stdex::html::document< _Elem, _Traits, _Alloc >, stdex::html::parser< _Elem, _Traits, _Alloc >
  • m_temp : stdex::base64_reader
  • m_temp_len : stdex::base64_reader
  • m_temp_off : stdex::base64_reader
  • m_timeout : stdex::watchdog< _Clock, _Duration >
  • -
  • mapping() : stdex::mapping< T >
  • +
  • m_tokens : stdex::html::parser< _Elem, _Traits, _Alloc >
  • +
  • m_url : stdex::html::parser< _Elem, _Traits, _Alloc >
  • +
  • make_absolute_url() : stdex::html::parser< _Elem, _Traits, _Alloc >
  • +
  • mapping : stdex::html::text_token< _Elem, _Traits, _Alloc >, stdex::mapping< T >
  • +
  • may_contain() : stdex::html::element_traits
  • memory_file() : stdex::stream::memory_file
  • +
  • merge() : stdex::html::parser< _Elem, _Traits, _Alloc >
  • model : stdex::parser::basic_si_reference< T >
  • mouth : stdex::parser::basic_emoticon< T >
  • mtime() : stdex::stream::basic_file, stdex::stream::cache, stdex::stream::file
  • @@ -105,7 +124,7 @@ $(function() { diff --git a/functions_n.html b/functions_n.html index 2df56b852..3bf21b18a 100644 --- a/functions_n.html +++ b/functions_n.html @@ -73,7 +73,7 @@ $(function() {
    Here is a list of all documented class members with links to the class documentation for each member:

    - n -

    diff --git a/functions_t.html b/functions_t.html index 9da91ad24..678f1a5c5 100644 --- a/functions_t.html +++ b/functions_t.html @@ -75,17 +75,21 @@ $(function() {

    - t -

    diff --git a/functions_type.html b/functions_type.html index 0b06a3154..d5f173d62 100644 --- a/functions_type.html +++ b/functions_type.html @@ -81,7 +81,7 @@ $(function() { diff --git a/functions_u.html b/functions_u.html index 189dc47a9..83f54740f 100644 --- a/functions_u.html +++ b/functions_u.html @@ -74,12 +74,13 @@ $(function() {

    - u -

    diff --git a/functions_v.html b/functions_v.html index 97bb6c6e0..ee634c6f8 100644 --- a/functions_v.html +++ b/functions_v.html @@ -73,7 +73,7 @@ $(function() {
    Here is a list of all documented class members with links to the class documentation for each member:

    - v -

      -
    • value : stdex::parser::basic_integer< T >, stdex::parser::basic_ipv4_address< T >, stdex::parser::basic_ipv6_address< T >, stdex::parser::basic_phone_number< T >, stdex::parser::basic_scientific_numeral< T >, stdex::parser::http_cookie, stdex::parser::http_parameter, stdex::parser::http_weight
    • +
    • value : stdex::html::entity< _Elem, _Traits, _Alloc >, stdex::parser::basic_integer< T >, stdex::parser::basic_ipv4_address< T >, stdex::parser::basic_ipv6_address< T >, stdex::parser::basic_phone_number< T >, stdex::parser::basic_scientific_numeral< T >, stdex::parser::html_attribute, stdex::parser::http_cookie, stdex::parser::http_parameter, stdex::parser::http_weight
    • value_type : stdex::vector_queue< T >
    • vector_queue() : stdex::vector_queue< T >
    • version : stdex::parser::http_protocol
    • @@ -81,7 +81,7 @@ $(function() { diff --git a/functions_vars.html b/functions_vars.html index 2e192345b..91f0f79c4 100644 --- a/functions_vars.html +++ b/functions_vars.html @@ -73,29 +73,35 @@ $(function() {
      Here is a list of all documented variables with links to the class documentation for each member:

      - a -

      - b -

      - c -

      - d -

        -
      • data : stdex::idrec::record< T, T_ID, ID, T_SIZE, ALIGN >, stdex::stream::replicator::worker
      • +
      • data : stdex::html::token, stdex::idrec::record< T, T_ID, ID, T_SIZE, ALIGN >, stdex::stream::replicator::worker
      • decimal : stdex::parser::basic_monetary_numeral< T >, stdex::parser::basic_scientific_numeral< T >
      • decimal_separator : stdex::parser::basic_monetary_numeral< T >, stdex::parser::basic_scientific_numeral< T >
      • digit_count : stdex::parser::basic_integer10ts< T >
      • @@ -105,7 +111,9 @@ $(function() {

        - e -

        - n -

          -
        • name : stdex::parser::http_cookie, stdex::parser::http_parameter
        • +
        • name : stdex::html::declaration, stdex::html::element, stdex::html::element_end, stdex::html::entity< _Elem, _Traits, _Alloc >, stdex::html::starting_token< _Elem, _Traits, _Alloc >, stdex::parser::basic_html_tag< T >, stdex::parser::html_attribute, stdex::parser::http_cookie, stdex::parser::http_parameter
        • negative_exp_sign : stdex::parser::basic_scientific_numeral< T >
        • negative_sign : stdex::parser::basic_mixed_numeral< T >, stdex::parser::basic_monetary_numeral< T >, stdex::parser::basic_scientific_numeral< T >, stdex::parser::basic_signed_numeral< T >
        • nose : stdex::parser::basic_emoticon< T >
        • @@ -183,6 +208,7 @@ $(function() {

          - p -

          • params : stdex::parser::http_cookie
          • +
          • parent : stdex::html::sequence
          • part1 : stdex::parser::basic_si_reference< T >
          • part2 : stdex::parser::basic_si_reference< T >
          • part3 : stdex::parser::basic_si_reference< T >
          • @@ -201,31 +227,42 @@ $(function() {

            - s -

            - t -

            + + +

            - u -

            - v -

            - w -

            diff --git a/functions_w.html b/functions_w.html index c89dbf6b7..41b7cc54f 100644 --- a/functions_w.html +++ b/functions_w.html @@ -74,6 +74,7 @@ $(function() {

            - w -

            • watchdog() : stdex::watchdog< _Clock, _Duration >
            • +
            • word_index : stdex::html::inserted_token
            • write() : stdex::base64_writer, stdex::stream::async_writer< CAPACITY >, stdex::stream::basic, stdex::stream::basic_sys, stdex::stream::buffer, stdex::stream::cache, stdex::stream::converter, stdex::stream::diag_file, stdex::stream::fifo, stdex::stream::file_window, stdex::stream::limiter, stdex::stream::memory_file, stdex::stream::replicator, stdex::stream::socket, stdex::stream::window, stdex::stream_hasher< T >
            • write_array() : stdex::stream::basic
            • write_byte() : stdex::stream::basic, stdex::stream::memory_file
            • @@ -89,7 +90,7 @@ $(function() { diff --git a/functions_~.html b/functions_~.html index 3f48921a1..12a8d327a 100644 --- a/functions_~.html +++ b/functions_~.html @@ -79,7 +79,7 @@ $(function() { diff --git a/hash_8cpp_source.html b/hash_8cpp_source.html index 14b0107f8..d0e9af8fb 100644 --- a/hash_8cpp_source.html +++ b/hash_8cpp_source.html @@ -164,7 +164,7 @@ $(document).ready(function() { init_codefold(0); }); diff --git a/hash_8hpp_source.html b/hash_8hpp_source.html index 1accb4e77..66877c4df 100644 --- a/hash_8hpp_source.html +++ b/hash_8hpp_source.html @@ -743,7 +743,7 @@ $(document).ready(function() { init_codefold(0); }); diff --git a/hex_8hpp_source.html b/hex_8hpp_source.html index d3637e49c..4b389f0f7 100644 --- a/hex_8hpp_source.html +++ b/hex_8hpp_source.html @@ -231,7 +231,7 @@ $(document).ready(function() { init_codefold(0); }); diff --git a/hierarchy.html b/hierarchy.html index 46c24e634..c57fba8c9 100644 --- a/hierarchy.html +++ b/hierarchy.html @@ -120,145 +120,190 @@ $(function() {  Cstdex::parser::basic_parser< T >Base template for all parsers  Cstdex::parser::basic_any_cu< char >  Cstdex::parser::sgml_any_cpTest for any SGML code point - Cstdex::parser::basic_dns_domain_char< char > - Cstdex::parser::sgml_dns_domain_charTest for valid DNS domain SGML character - Cstdex::parser::basic_punct_cu< char > - Cstdex::parser::sgml_punct_cpTest for any SGML punctuation code point - Cstdex::parser::basic_set< char > - Cstdex::parser::sgml_cp_setTest for any SGML code point from a given string of SGML code points - Cstdex::parser::basic_space_cu< char > - Cstdex::parser::sgml_space_cpTest for any SGML space code point - Cstdex::parser::basic_space_or_punct_cu< char > - Cstdex::parser::sgml_space_or_punct_cpTest for any SGML space or punctuation code point - Cstdex::parser::basic_url_password_char< char > - Cstdex::parser::sgml_url_password_charTest for valid URL password SGML character - Cstdex::parser::basic_url_path_char< char > - Cstdex::parser::sgml_url_path_charTest for valid URL path SGML character - Cstdex::parser::basic_url_username_char< char > - Cstdex::parser::sgml_url_username_charTest for valid URL username SGML character - Cstdex::parser::basic_angle< T >Test for angle in d°mm'ss.dddd form - 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_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 - Cstdex::parser::http_asteriskTest for HTTP asterisk - Cstdex::parser::http_cookieTest for HTTP cookie (RFC2109) - Cstdex::parser::http_cookie_parameterTest for HTTP cookie parameter (RFC2109) - Cstdex::parser::http_headerTest for HTTP header - Cstdex::parser::http_languageTest for HTTP language (RFC1766) - Cstdex::parser::http_line_breakTest for HTTP line break (RFC2616: CRLF | LF) - Cstdex::parser::http_media_rangeTest for HTTP media range (RFC2616: media-range) - Cstdex::parser::http_media_typeTest for HTTP media type (RFC2616: media-type) - Cstdex::parser::http_parameterTest for HTTP parameter (RFC2616: parameter) - Cstdex::parser::http_protocolTest for HTTP protocol - Cstdex::parser::http_quoted_stringTest for HTTP quoted string (RFC2616: quoted-string) - Cstdex::parser::http_requestTest for HTTP request - Cstdex::parser::http_spaceTest for HTTP space (RFC2616: LWS) - Cstdex::parser::http_text_charTest for HTTP text character (RFC2616: TEXT) - Cstdex::parser::http_tokenTest for HTTP token (RFC2616: token - tolerates non-ASCII) - Cstdex::parser::http_urlTest for HTTP URL - Cstdex::parser::http_url_parameterTest for HTTP URL parameter - Cstdex::parser::http_url_pathTest for HTTP URL path segment - Cstdex::parser::http_url_path_segmentTest for HTTP URL path segment - Cstdex::parser::http_url_portTest for HTTP URL port - Cstdex::parser::http_url_serverTest for HTTP URL server - Cstdex::parser::http_valueTest for HTTP value (RFC2616: value) - Cstdex::parser::http_weightTest for HTTP weight factor - Cstdex::parser::http_weighted_value< T, T_asterisk >Test for HTTP weighted value - Cstdex::parser::sgml_cpTest for specific SGML code point - Cstdex::parser::sgml_ipv6_scope_id_charTest for valid IPv6 address scope ID SGML character - Cstdex::parser::sgml_stringTest for SGML given string - Cstdex::stream::buffer::buffer_t - Cstdex::charset_encoder< T_from, T_to >Encoding converter context - Cstdex::free_locale_deleteDeleter for unique_ptr using free_locale - Cstdex::hex_decHexadecimal decoding session - Cstdex::hex_encHexadecimal encoding session - Cstdex::parser::http_factor_more< T > - Cstdex::interval< T >Numerical interval - Cstdex::interval< fpos_t > - Cstdex::interval< size_t > - Cstdex::mapping< T >Maps index in source string to index in destination string - Cstdex::md2_tMD2 hash value - Cstdex::no_delete< T >Noop deleter - Cstdex::no_delete< T[]>Noop array deleter - Cstdex::stream::fifo::node_t - Cstdex::pool< T >Per-NUMA pool of items - Cstdex::progress< T >Progress indicator base class - Cstdex::global_progress< T >Global progress indicator base class - Cstdex::progress_switcher< T >Progress indicator switcher - Cstdex::lazy_progress< T >Lazy progress indicator base class - Cstdex::idrec::record< T, T_ID, ID, T_SIZE, ALIGN >Helper class for read/write of records to/from memory - Cstdex::ring< T, CAPACITY >Ring buffer - Cstdex::ring< uint8_t, default_async_limit > - Cstd::runtime_error - Cstdex::user_cancelledUser cancelled exception - Cstdex::sha256_tSHA256 hash value - Cstdex::sha_tSHA hash value - Cstdex::spinlockSpin-lock - Cstdex::sys_info_tSystem information - Cstdex::sys_objectOperating system object (file, pipe, anything with an OS handle etc.) - Cstdex::stream::basic_sysOS data stream (file, pipe, socket...) - CT - Cstdex::parser::http_value_collection< _Key, T >Collection of HTTP values - Cstd::thread - Cstdex::stream::replicator::worker - Cstdex::vector_queue< T >Helper class to allow limited size FIFO queues implemented as vector of elements - Cstdex::watchdog< _Clock, _Duration >Triggers callback if not reset frequently enough + Cstdex::parser::basic_any_cu< _Elem > + Cstdex::parser::basic_css_cdc< _Elem > + Cstdex::parser::basic_css_cdo< _Elem > + Cstdex::parser::basic_css_comment< _Elem > + Cstdex::parser::basic_css_import< _Elem > + Cstdex::parser::basic_css_string< _Elem > + Cstdex::parser::basic_css_uri< _Elem > + Cstdex::parser::basic_dns_domain_char< char > + Cstdex::parser::sgml_dns_domain_charTest for valid DNS domain SGML character + Cstdex::parser::basic_html_declaration_condition_end< _Elem > + Cstdex::parser::basic_html_declaration_condition_start< _Elem > + Cstdex::parser::basic_html_ident< _Elem > + Cstdex::parser::basic_html_tag< _Elem > + Cstdex::parser::basic_html_value< _Elem > + Cstdex::parser::basic_punct_cu< char > + Cstdex::parser::sgml_punct_cpTest for any SGML punctuation code point + Cstdex::parser::basic_set< char > + Cstdex::parser::sgml_cp_setTest for any SGML code point from a given string of SGML code points + Cstdex::parser::basic_space_cu< char > + Cstdex::parser::sgml_space_cpTest for any SGML space code point + Cstdex::parser::basic_space_or_punct_cu< char > + Cstdex::parser::sgml_space_or_punct_cpTest for any SGML space or punctuation code point + Cstdex::parser::basic_url_password_char< char > + Cstdex::parser::sgml_url_password_charTest for valid URL password SGML character + Cstdex::parser::basic_url_path_char< char > + Cstdex::parser::sgml_url_path_charTest for valid URL path SGML character + Cstdex::parser::basic_url_username_char< char > + Cstdex::parser::sgml_url_username_charTest for valid URL username SGML character + Cstdex::parser::basic_angle< T >Test for angle in d°mm'ss.dddd form + 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_creditor_reference< T >Test for Creditor Reference + Cstdex::parser::basic_css_cdc< T >Legacy CSS comment end --> + Cstdex::parser::basic_css_cdo< T >Legacy CSS comment start <!-- + Cstdex::parser::basic_css_comment< T >CSS comment + Cstdex::parser::basic_css_import< T >CSS import directive + Cstdex::parser::basic_css_string< T >CSS string + Cstdex::parser::basic_css_uri< T >URI in CSS + 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_html_declaration_condition_end< T >End of condition ...]]> + Cstdex::parser::basic_html_declaration_condition_start< T >Start of condition <![condition[... + Cstdex::parser::basic_html_ident< T >Contiguous sequence of characters representing name of element, attribute etc + Cstdex::parser::basic_html_tag< T >Tag + Cstdex::parser::basic_html_value< T >Optionally-quoted string representing value of an attribute + 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_mime_type< T >MIME content type + 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< _Elem > + Cstdex::parser::basic_parser< char > + Cstdex::parser::http_agentTest for HTTP agent + Cstdex::parser::http_any_typeTest for HTTP any type + Cstdex::parser::http_asteriskTest for HTTP asterisk + Cstdex::parser::http_cookieTest for HTTP cookie (RFC2109) + Cstdex::parser::http_cookie_parameterTest for HTTP cookie parameter (RFC2109) + Cstdex::parser::http_headerTest for HTTP header + Cstdex::parser::http_languageTest for HTTP language (RFC1766) + Cstdex::parser::http_line_breakTest for HTTP line break (RFC2616: CRLF | LF) + Cstdex::parser::http_media_rangeTest for HTTP media range (RFC2616: media-range) + Cstdex::parser::http_media_typeTest for HTTP media type (RFC2616: media-type) + Cstdex::parser::http_parameterTest for HTTP parameter (RFC2616: parameter) + Cstdex::parser::http_protocolTest for HTTP protocol + Cstdex::parser::http_quoted_stringTest for HTTP quoted string (RFC2616: quoted-string) + Cstdex::parser::http_requestTest for HTTP request + Cstdex::parser::http_spaceTest for HTTP space (RFC2616: LWS) + Cstdex::parser::http_text_charTest for HTTP text character (RFC2616: TEXT) + Cstdex::parser::http_tokenTest for HTTP token (RFC2616: token - tolerates non-ASCII) + Cstdex::parser::http_urlTest for HTTP URL + Cstdex::parser::http_url_parameterTest for HTTP URL parameter + Cstdex::parser::http_url_pathTest for HTTP URL path segment + Cstdex::parser::http_url_path_segmentTest for HTTP URL path segment + Cstdex::parser::http_url_portTest for HTTP URL port + Cstdex::parser::http_url_serverTest for HTTP URL server + Cstdex::parser::http_valueTest for HTTP value (RFC2616: value) + Cstdex::parser::http_weightTest for HTTP weight factor + Cstdex::parser::http_weighted_value< T, T_asterisk >Test for HTTP weighted value + Cstdex::parser::sgml_cpTest for specific SGML code point + Cstdex::parser::sgml_ipv6_scope_id_charTest for valid IPv6 address scope ID SGML character + Cstdex::parser::sgml_stringTest for SGML given string + Cstdex::stream::buffer::buffer_t + Cstdex::charset_encoder< T_from, T_to >Encoding converter context + Cstdex::html::document< _Elem, _Traits, _Alloc >HTML document + Cstdex::html::document< _Elem, _Traits, _Alloc > + Cstdex::html::element_traitsDescribes attributes associated with a HTML element + Cstdex::html::entity< _Elem, _Traits, _Alloc >HTML entity + Cstdex::free_locale_deleteDeleter for unique_ptr using free_locale + Cstdex::hex_decHexadecimal decoding session + Cstdex::hex_encHexadecimal encoding session + Cstdex::parser::html_attributeTag attribute + Cstdex::parser::http_factor_more< T > + Cstdex::html::inserted_tokenInserted HTML token + Cstdex::interval< T >Numerical interval + Cstdex::interval< fpos_t > + Cstdex::interval< size_t > + Cstdex::mapping< T >Maps index in source string to index in destination string + Cstdex::md2_tMD2 hash value + Cstdex::no_delete< T >Noop deleter + Cstdex::no_delete< T[]>Noop array deleter + Cstdex::stream::fifo::node_t + Cstdex::html::parser< _Elem, _Traits, _Alloc >HTML parser + Cstdex::pool< T >Per-NUMA pool of items + Cstdex::progress< T >Progress indicator base class + Cstdex::global_progress< T >Global progress indicator base class + Cstdex::progress_switcher< T >Progress indicator switcher + Cstdex::lazy_progress< T >Lazy progress indicator base class + Cstdex::progress< size_t > + Cstdex::idrec::record< T, T_ID, ID, T_SIZE, ALIGN >Helper class for read/write of records to/from memory + Cstdex::ring< T, CAPACITY >Ring buffer + Cstdex::ring< uint8_t, default_async_limit > + Cstd::runtime_error + Cstdex::user_cancelledUser cancelled exception + Cstdex::html::sequenceBase class for HTML sequences + Cstdex::html::commentHTML comment + Cstdex::html::declarationHTML declaration + Cstdex::html::elementHTML element <.../> + Cstdex::html::element_startStarting tag of an HTML element <...> + Cstdex::html::element_endEnding tag of an HTML element </...> + Cstdex::html::instructionHTML instruction + Cstdex::sha256_tSHA256 hash value + Cstdex::sha_tSHA hash value + Cstdex::spinlockSpin-lock + Cstdex::sys_info_tSystem information + Cstdex::sys_objectOperating system object (file, pipe, anything with an OS handle etc.) + Cstdex::stream::basic_sysOS data stream (file, pipe, socket...) + CT + Cstdex::parser::http_value_collection< _Key, T >Collection of HTTP values + Cstd::thread + Cstdex::stream::replicator::worker + Cstdex::html::tokenHTML token base class + Cstdex::html::text_token< _Elem, std::char_traits< _Elem >, std::allocator< _Elem > > + Cstdex::html::text_token< _Elem, _Traits, _Alloc >Token representing part of HTML text + Cstdex::html::starting_token< _Elem, _Traits, _Alloc >Token representing start HTML tag + Cstdex::html::url_token< _Elem, _Traits, _Alloc >HTTP token representing an URL + Cstdex::vector_queue< T >Helper class to allow limited size FIFO queues implemented as vector of elements + Cstdex::watchdog< _Clock, _Duration >Triggers callback if not reset frequently enough diff --git a/html_8hpp_source.html b/html_8hpp_source.html new file mode 100644 index 000000000..1b83280aa --- /dev/null +++ b/html_8hpp_source.html @@ -0,0 +1,2465 @@ + + + + + + + +stdex: include/stdex/html.hpp Source File + + + + + + + + + +
              +
              + + + + + + +
              +
              stdex +
              +
              Additional custom or not Standard C++ covered algorithms
              +
              +
              + + + + + + + + + +
              +
              + + +
              +
              +
              +
              +
              +
              Loading...
              +
              Searching...
              +
              No Matches
              +
              +
              +
              +
              + + +
              +
              +
              html.hpp
              +
              +
              +
              1/*
              +
              2 SPDX-License-Identifier: MIT
              +
              3 Copyright © 2016-2023 Amebis
              +
              4*/
              +
              5
              +
              6#pragma once
              +
              7
              +
              8#include "compat.hpp"
              +
              9#include "exception.hpp"
              +
              10#include "interval.hpp"
              +
              11#include "mapping.hpp"
              +
              12#include "parser.hpp"
              +
              13#include "progress.hpp"
              +
              14#include "sgml.hpp"
              +
              15#include "string.hpp"
              +
              16#include "system.hpp"
              +
              17#include "unicode.hpp"
              +
              18#include <exception>
              +
              19#include <list>
              +
              20#include <map>
              +
              21#include <memory>
              +
              22#include <stdexcept>
              +
              23#include <vector>
              +
              24
              +
              25#ifdef _WIN32
              +
              26#undef small
              +
              27#endif
              +
              28
              +
              29namespace stdex
              +
              30{
              +
              31 namespace html
              +
              32 {
              +
              40 template<class _Traits = std::char_traits<char>, class _Alloc = std::allocator<char>>
              +
              41 inline void escape(
              +
              42 _Inout_ std::basic_string<char, _Traits, _Alloc>& dst,
              +
              43 _In_reads_or_z_opt_(num_chars) const char* src, _In_ size_t num_chars = SIZE_MAX)
              +
              44 {
              +
              45 _Assume_(src || !num_chars);
              +
              46 for (size_t i = 0; i < num_chars && src[i]; ++i) {
              +
              47 switch (src[i]) {
              +
              48 case '&': dst += "&amp;"; break;
              +
              49 case ';': dst += "&semi;"; break;
              +
              50 case '\"': dst += "&quot;"; break;
              +
              51 case '\'': dst += "&#x27;"; break;
              +
              52 case '<': dst += "&lt;"; break;
              +
              53 case '>': dst += "&gt;"; break;
              +
              54 case 0x00a0: dst += "&nbsp;"; break; // No-break space must be escaped as SGML entity, otherwise browsers treat it as a normal space.
              +
              55 default: dst += src[i]; break;
              +
              56 }
              +
              57 }
              +
              58 }
              +
              59
              +
              67 template<class _Traits = std::char_traits<wchar_t>, class _Alloc = std::allocator<wchar_t>>
              +
              68 inline void escape(
              +
              69 _Inout_ std::basic_string<wchar_t, _Traits, _Alloc>& dst,
              +
              70 _In_reads_or_z_opt_(num_chars) const wchar_t* src, _In_ size_t num_chars = SIZE_MAX)
              +
              71 {
              +
              72 _Assume_(src || !num_chars);
              +
              73 for (size_t i = 0; i < num_chars && src[i]; ++i) {
              +
              74 switch (src[i]) {
              +
              75 case L'&': dst += L"&amp;"; break;
              +
              76 case L';': dst += L"&semi;"; break;
              +
              77 case L'\"': dst += L"&quot;"; break;
              +
              78 case L'\'': dst += L"&#x27;"; break;
              +
              79 case L'<': dst += L"&lt;"; break;
              +
              80 case L'>': dst += L"&gt;"; break;
              +
              81 case L'\u00a0': dst += L"&nbsp;"; break; // No-break space must be escaped as SGML entity, otherwise browsers treat it as a normal space.
              +
              82 default: dst += src[i]; break;
              +
              83 }
              +
              84 }
              +
              85 }
              +
              86
              +
              93 template<class _Traits = std::char_traits<char>, class _Alloc = std::allocator<char>>
              +
              94 inline void escape_min(_Inout_ std::basic_string<char, _Traits, _Alloc>& dst, _In_ char chr)
              +
              95 {
              +
              96 switch (chr) {
              +
              97 case '&': dst += "&amp;"; break;
              +
              98 case '<': dst += "&lt;"; break;
              +
              99 case '>': dst += "&gt;"; break;
              +
              100 case 0x00a0: dst += "&nbsp;"; break; // No-break space must be escaped as SGML entity, otherwise browsers treat it as a normal space.
              +
              101 default: dst += chr; break;
              +
              102 }
              +
              103 }
              +
              104
              +
              111 template<class _Traits = std::char_traits<wchar_t>, class _Alloc = std::allocator<wchar_t>>
              +
              112 inline void escape_min(_Inout_ std::basic_string<wchar_t, _Traits, _Alloc>& dst, _In_ wchar_t chr)
              +
              113 {
              +
              114 switch (chr) {
              +
              115 case L'&': dst += L"&amp;"; break;
              +
              116 case L'<': dst += L"&lt;"; break;
              +
              117 case L'>': dst += L"&gt;"; break;
              +
              118 case L'\u00a0': dst += L"&nbsp;"; break; // No-break space must be escaped as SGML entity, otherwise browsers treat it as a normal space.
              +
              119 default: dst += chr; break;
              +
              120 }
              +
              121 }
              +
              122
              +
              130 template<class _Traits = std::char_traits<char>, class _Alloc = std::allocator<char>>
              +
              131 inline void escape_min(
              +
              132 _Inout_ std::basic_string<char, _Traits, _Alloc>& dst,
              +
              133 _In_reads_or_z_opt_(num_chars) const char* src, _In_ size_t num_chars = SIZE_MAX)
              +
              134 {
              +
              135 _Assume_(src || !num_chars);
              +
              136 for (size_t i = 0; i < num_chars && src[i]; ++i) {
              +
              137 switch (src[i]) {
              +
              138 case '&': dst += "&amp;"; break;
              +
              139 case '<': dst += "&lt;"; break;
              +
              140 case '>': dst += "&gt;"; break;
              +
              141 case 0x00a0: dst += "&nbsp;"; break; // No-break space must be escaped as SGML entity, otherwise browsers treat it as a normal space.
              +
              142 default: dst += src[i]; break;
              +
              143 }
              +
              144 }
              +
              145 }
              +
              146
              +
              154 template<class _Traits = std::char_traits<wchar_t>, class _Alloc = std::allocator<wchar_t>>
              +
              155 inline void escape_min(
              +
              156 _Inout_ std::basic_string<wchar_t, _Traits, _Alloc>& dst,
              +
              157 _In_reads_or_z_opt_(num_chars) const wchar_t* src, _In_ size_t num_chars = SIZE_MAX)
              +
              158 {
              +
              159 _Assume_(src || !num_chars);
              +
              160 for (size_t i = 0; i < num_chars && src[i]; ++i) {
              +
              161 switch (src[i]) {
              +
              162 case L'&': dst += L"&amp;"; break;
              +
              163 case L'<': dst += L"&lt;"; break;
              +
              164 case L'>': dst += L"&gt;"; break;
              +
              165 case L'\u00a0': dst += L"&nbsp;"; break; // No-break space must be escaped as SGML entity, otherwise browsers treat it as a normal space.
              +
              166 default: dst += src[i]; break;
              +
              167 }
              +
              168 }
              +
              169 }
              +
              170
              +
              178 template<class _Traits = std::char_traits<char>, class _Alloc = std::allocator<char>>
              +
              179 inline void url_unescape(
              +
              180 _Inout_ std::basic_string<char, _Traits, _Alloc>& dst,
              +
              181 _In_reads_or_z_opt_(num_chars) const char* src, _In_ size_t num_chars = SIZE_MAX)
              +
              182 {
              +
              183 _Assume_(src || !num_chars);
              +
              184 for (size_t i = 0; i < num_chars && src[i];) {
              +
              185 switch (src[i]) {
              +
              186 case '+':
              +
              187 dst += ' '; i++;
              +
              188 break;
              +
              189
              +
              190 case '%': {
              +
              191 i++;
              +
              192
              +
              193 uint8_t chr;
              +
              194 if ('0' <= src[i] && src[i] <= '9') chr = (src[i++] - '0') << 4;
              +
              195 else if ('A' <= src[i] && src[i] <= 'F') chr = (src[i++] - 'A' + 10) << 4;
              +
              196 else if ('a' <= src[i] && src[i] <= 'f') chr = (src[i++] - 'a' + 10) << 4;
              +
              197 else { dst += '%'; continue; }
              +
              198 if ('0' <= src[i] && src[i] <= '9') chr |= (src[i++] - '0');
              +
              199 else if ('A' <= src[i] && src[i] <= 'F') chr |= (src[i++] - 'A' + 10);
              +
              200 else if ('a' <= src[i] && src[i] <= 'f') chr |= (src[i++] - 'a' + 10);
              +
              201 else { dst += '%'; dst += src[i - 1]; continue; }
              +
              202
              +
              203 dst += static_cast<char>(chr);
              +
              204 break;
              +
              205 }
              +
              206
              +
              207 default:
              +
              208 dst += src[i++];
              +
              209 }
              +
              210 }
              +
              211 }
              +
              212
              +
              220 template<class _Traits = std::char_traits<char>, class _Alloc = std::allocator<char>>
              +
              221 inline void url_escape(
              +
              222 _Inout_ std::basic_string<char, _Traits, _Alloc>& dst,
              +
              223 _In_reads_or_z_opt_(num_chars) const char* src, _In_ size_t num_chars = SIZE_MAX)
              +
              224 {
              +
              225 _Assume_(src || !num_chars);
              +
              226 for (size_t i = 0; i < num_chars && src[i]; ++i) {
              +
              227 switch (src[i]) {
              +
              228 case ' ': dst += "+"; break;
              +
              229 case '<': dst += "%3C"; break;
              +
              230 case '>': dst += "%3E"; break;
              +
              231 case '#': dst += "%23"; break;
              +
              232 case '%': dst += "%25"; break;
              +
              233 case '{': dst += "%7B"; break;
              +
              234 case '}': dst += "%7D"; break;
              +
              235 case '|': dst += "%7C"; break;
              +
              236 case '\\': dst += "%5C"; break;
              +
              237 case '^': dst += "%5E"; break;
              +
              238 case '~': dst += "%7E"; break;
              +
              239 case '[': dst += "%5B"; break;
              +
              240 case ']': dst += "%5D"; break;
              +
              241 case '`': dst += "%60"; break;
              +
              242 case ';': dst += "%3B"; break;
              +
              243 case '/': dst += "%2F"; break;
              +
              244 case '?': dst += "%3F"; break;
              +
              245 case ':': dst += "%3A"; break;
              +
              246 case '@': dst += "%40"; break;
              +
              247 case '=': dst += "%3D"; break;
              +
              248 case '&': dst += "%26"; break;
              +
              249 case '$': dst += "%24"; break;
              +
              250 default:
              +
              251 if (0x20 < static_cast<uint8_t>(src[i]) && static_cast<uint8_t>(src[i]) < 0x7f)
              +
              252 dst += src[i];
              +
              253 else {
              +
              254 dst += '%';
              +
              255 uint8_t n = (static_cast<uint8_t>(src[i]) & 0xf0) >> 4;
              +
              256 dst += n < 10 ? static_cast<char>('0' + n) : static_cast<char>('A' + n - 10);
              +
              257 n = ((uint8_t)src[i] & 0x0f);
              +
              258 dst += n < 10 ? static_cast<char>('0' + n) : static_cast<char>('A' + n - 10);
              +
              259 }
              +
              260 }
              +
              261 }
              +
              262 }
              +
              263
              +
              271 template<class _Elem, class _Traits = std::char_traits<_Elem>, class _Alloc = std::allocator<_Elem>>
              +
              272 inline void css_unescape(
              +
              273 _Inout_ std::basic_string<_Elem, _Traits, _Alloc>& dst,
              +
              274 _In_reads_or_z_opt_(num_chars) const _Elem* src, _In_ size_t num_chars = SIZE_MAX)
              +
              275 {
              +
              276 _Assume_(src || !num_chars);
              +
              277 for (size_t i = 0; i < num_chars && src[i];) {
              +
              278 if (src[i] != '\\')
              +
              279 dst += src[i++];
              +
              280 else if (i + 1 < num_chars) {
              +
              281 i++;
              +
              282
              +
              283 switch (src[i]) {
              +
              284 // Classic escapes
              +
              285 case 'n': dst += '\n'; i++; break;
              +
              286 case 'r': dst += '\r'; i++; break;
              +
              287 case 't': dst += '\t'; i++; break;
              +
              288
              +
              289 // `\` at the end of the line
              +
              290 case '\n': i++; break;
              +
              291
              +
              292 // `\nnnn` escape
              +
              293 case '0':
              +
              294 case '1':
              +
              295 case '2':
              +
              296 case '3':
              +
              297 case '4':
              +
              298 case '5':
              +
              299 case '6':
              +
              300 case '7':
              +
              301 case '8':
              +
              302 case '9':
              +
              303 case 'A': case 'a':
              +
              304 case 'B': case 'b':
              +
              305 case 'C': case 'c':
              +
              306 case 'D': case 'd':
              +
              307 case 'E': case 'e':
              +
              308 case 'F': case 'f': {
              +
              309 wchar_t chr = 0;
              +
              310 size_t end = std::min(num_chars, i + 6);
              +
              311
              +
              312 for (; i < end; ++i) {
              +
              313 if ('0' <= src[i] && src[i] <= '9') chr = chr * 0x10 + src[i] - '0';
              +
              314 else if ('A' <= src[i] && src[i] <= 'F') chr = chr * 0x10 + src[i] - 'A' + 10;
              +
              315 else if ('a' <= src[i] && src[i] <= 'f') chr = chr * 0x10 + src[i] - 'a' + 10;
              +
              316 else break;
              +
              317 }
              +
              318
              +
              319 dst += static_cast<_Elem>(chr);
              +
              320
              +
              321 if (i < end && src[i] == ' ') {
              +
              322 // Skip space after `\nnnn`.
              +
              323 i++;
              +
              324 }
              +
              325 break;
              +
              326 }
              +
              327
              +
              328 default: dst += src[i++];
              +
              329 }
              +
              330 }
              +
              331 }
              +
              332 }
              +
              333
              +
              341 template<class _Traits = std::char_traits<char>, class _Alloc = std::allocator<char>>
              +
              342 inline void css_escape(
              +
              343 _Inout_ std::basic_string<char, _Traits, _Alloc>& dst,
              +
              344 _In_reads_or_z_opt_(num_chars) const char* src, _In_ size_t num_chars = SIZE_MAX)
              +
              345 {
              +
              346 _Assume_(src || !num_chars);
              +
              347 for (size_t i = 0; i < num_chars && src[i]; ++i) {
              +
              348 switch (src[i]) {
              +
              349 case '\\': dst += "\\\\"; break;
              +
              350 case '\n': dst += "\\n"; break;
              +
              351 case '\r': dst += "\\r"; break;
              +
              352 case '\t': dst += "\\t"; break;
              +
              353 case '\"': dst += "\\\""; break;
              +
              354 case '\'': dst += "\\'"; break;
              +
              355 default: dst += src[i]; break;
              +
              356 }
              +
              357 }
              +
              358 }
              +
              359
              +
              367 template<class _Traits = std::char_traits<wchar_t>, class _Alloc = std::allocator<wchar_t>>
              +
              368 inline void css_escape(
              +
              369 _Inout_ std::basic_string<wchar_t, _Traits, _Alloc>& dst,
              +
              370 _In_reads_or_z_opt_(num_chars) const wchar_t* src, _In_ size_t num_chars = SIZE_MAX)
              +
              371 {
              +
              372 _Assume_(src || !num_chars);
              +
              373 for (size_t i = 0; i < num_chars && src[i]; ++i) {
              +
              374 switch (src[i]) {
              +
              375 case L'\\': dst += L"\\\\"; break;
              +
              376 case L'\n': dst += L"\\n"; break;
              +
              377 case L'\r': dst += L"\\r"; break;
              +
              378 case L'\t': dst += L"\\t"; break;
              +
              379 case L'\"': dst += L"\\\""; break;
              +
              380 case L'\'': dst += L"\\'"; break;
              +
              381 default: dst += src[i]; break;
              +
              382 }
              +
              383 }
              +
              384 }
              +
              385
              +
              389 enum class element_t {
              +
              390 empty = 0,
              +
              391 a,
              +
              392 abbr,
              +
              393 acronym,
              +
              394 address,
              +
              395 applet,
              +
              396 area,
              +
              397 b,
              +
              398 base,
              +
              399 basefont,
              +
              400 bdo,
              +
              401 bgsound, // Microsoft Specific
              +
              402 big,
              +
              403 blink, // Microsoft Specific
              +
              404 blockquote,
              +
              405 body,
              +
              406 br,
              +
              407 button,
              +
              408 caption,
              +
              409 center,
              +
              410 cite,
              +
              411 code,
              +
              412 col,
              +
              413 colgroup,
              +
              414 comment, // Microsoft Specific
              +
              415 dd,
              +
              416 del,
              +
              417 dfn,
              +
              418 dir,
              +
              419 div,
              +
              420 dl,
              +
              421 dt,
              +
              422 em,
              +
              423 embed, // Microsoft Specific
              +
              424 fieldset,
              +
              425 font,
              +
              426 form,
              +
              427 frame,
              +
              428 frameset,
              +
              429 h1,
              +
              430 h2,
              +
              431 h3,
              +
              432 h4,
              +
              433 h5,
              +
              434 h6,
              +
              435 head,
              +
              436 hr,
              +
              437 html,
              +
              438 i,
              +
              439 iframe,
              +
              440 img,
              +
              441 input,
              +
              442 ins,
              +
              443 isindex,
              +
              444 kbd,
              +
              445 label,
              +
              446 legend,
              +
              447 li,
              +
              448 link,
              +
              449 listing, // Microsoft Specific
              +
              450 map,
              +
              451 marquee, // Microsoft Specific
              +
              452 menu,
              +
              453 meta,
              +
              454 nextid, // Microsoft Specific
              +
              455 nobr, // Microsoft Specific
              +
              456 noembed, // Microsoft Specific
              +
              457 noframes,
              +
              458 noscript,
              +
              459 object,
              +
              460 ol,
              +
              461 optgroup,
              +
              462 option,
              +
              463 p,
              +
              464 param,
              +
              465 plaintext, // Microsoft Specific
              +
              466 pre,
              +
              467 q,
              +
              468 rt, // Microsoft Specific
              +
              469 ruby, // Microsoft Specific
              +
              470 s,
              +
              471 samp,
              +
              472 script,
              +
              473 select,
              +
              474 small,
              +
              475 span,
              +
              476 strike,
              +
              477 strong,
              +
              478 style,
              +
              479 sub,
              +
              480 sup,
              +
              481 table,
              +
              482 tbody,
              +
              483 td,
              +
              484 textarea,
              +
              485 tfoot,
              +
              486 th,
              +
              487 thead,
              +
              488 title,
              +
              489 tr,
              +
              490 tt,
              +
              491 u,
              +
              492 ul,
              +
              493 var,
              +
              494 wbr, // Microsoft Specific
              +
              495 xmp, // Microsoft Specific
              +
              496
              +
              497 unknown = -1,
              +
              498 PCDATA = -2,
              +
              499 CDATA = -3,
              +
              500 };
              +
              501
              +
              505 enum class element_span_t {
              +
              506 needs_end = 0,
              +
              507 end_optional,
              +
              508 immediate,
              +
              509 };
              +
              510
              +
              + +
              515 {
              +
              +
              521 static inline element_span_t span(_In_ element_t code)
              +
              522 {
              +
              523 static element_span_t lookup[] = {
              +
              524 element_span_t::needs_end, // a
              +
              525 element_span_t::needs_end, // abbr
              +
              526 element_span_t::needs_end, // acronym
              +
              527 element_span_t::needs_end, // address
              +
              528 element_span_t::needs_end, // applet
              +
              529 element_span_t::immediate, // area
              +
              530 element_span_t::needs_end, // b
              +
              531 element_span_t::immediate, // base
              +
              532 element_span_t::immediate, // basefont
              +
              533 element_span_t::needs_end, // bdo
              +
              534 element_span_t::immediate, // bgsound
              +
              535 element_span_t::needs_end, // big
              +
              536 element_span_t::needs_end, // blink
              +
              537 element_span_t::needs_end, // blockquote
              +
              538 element_span_t::end_optional, // body
              +
              539 element_span_t::immediate, // br
              +
              540 element_span_t::needs_end, // button
              +
              541 element_span_t::needs_end, // caption
              +
              542 element_span_t::needs_end, // center
              +
              543 element_span_t::needs_end, // cite
              +
              544 element_span_t::needs_end, // code
              +
              545 element_span_t::immediate, // col
              +
              546 element_span_t::end_optional, // colgroup
              +
              547 element_span_t::needs_end, // comment
              +
              548 element_span_t::end_optional, // dd
              +
              549 element_span_t::needs_end, // del
              +
              550 element_span_t::needs_end, // dfn
              +
              551 element_span_t::needs_end, // dir
              +
              552 element_span_t::needs_end, // div
              +
              553 element_span_t::needs_end, // dl
              +
              554 element_span_t::end_optional, // dt
              +
              555 element_span_t::needs_end, // em
              +
              556 element_span_t::immediate, // embed
              +
              557 element_span_t::needs_end, // fieldset
              +
              558 element_span_t::needs_end, // font
              +
              559 element_span_t::needs_end, // form
              +
              560 element_span_t::immediate, // frame
              +
              561 element_span_t::needs_end, // frameset
              +
              562 element_span_t::needs_end, // h1
              +
              563 element_span_t::needs_end, // h2
              +
              564 element_span_t::needs_end, // h3
              +
              565 element_span_t::needs_end, // h4
              +
              566 element_span_t::needs_end, // h5
              +
              567 element_span_t::needs_end, // h6
              +
              568 element_span_t::end_optional, // head
              +
              569 element_span_t::immediate, // hr
              +
              570 element_span_t::end_optional, // html
              +
              571 element_span_t::needs_end, // i
              +
              572 element_span_t::needs_end, // iframe
              +
              573 element_span_t::immediate, // img
              +
              574 element_span_t::immediate, // input
              +
              575 element_span_t::needs_end, // ins
              +
              576 element_span_t::immediate, // isindex
              +
              577 element_span_t::needs_end, // kbd
              +
              578 element_span_t::needs_end, // label
              +
              579 element_span_t::needs_end, // legend
              +
              580 element_span_t::end_optional, // li
              +
              581 element_span_t::immediate, // link
              +
              582 element_span_t::needs_end, // listing
              +
              583 element_span_t::needs_end, // map
              +
              584 element_span_t::needs_end, // marquee
              +
              585 element_span_t::needs_end, // menu
              +
              586 element_span_t::immediate, // meta
              +
              587 element_span_t::immediate, // nextid
              +
              588 element_span_t::needs_end, // nobr
              +
              589 element_span_t::needs_end, // noembed
              +
              590 element_span_t::needs_end, // noframes
              +
              591 element_span_t::needs_end, // noscript
              +
              592 element_span_t::needs_end, // object
              +
              593 element_span_t::needs_end, // ol
              +
              594 element_span_t::needs_end, // optgroup
              +
              595 element_span_t::end_optional, // option
              +
              596 element_span_t::end_optional, // p
              +
              597 element_span_t::immediate, // param
              +
              598 element_span_t::end_optional, // plaintext
              +
              599 element_span_t::needs_end, // pre
              +
              600 element_span_t::needs_end, // q
              +
              601 element_span_t::immediate, // rt
              +
              602 element_span_t::needs_end, // ruby
              +
              603 element_span_t::needs_end, // s
              +
              604 element_span_t::needs_end, // samp
              +
              605 element_span_t::needs_end, // script
              +
              606 element_span_t::needs_end, // select
              +
              607 element_span_t::needs_end, // small
              +
              608 element_span_t::needs_end, // span
              +
              609 element_span_t::needs_end, // strike
              +
              610 element_span_t::needs_end, // strong
              +
              611 element_span_t::needs_end, // style
              +
              612 element_span_t::needs_end, // sub
              +
              613 element_span_t::needs_end, // sup
              +
              614 element_span_t::needs_end, // table
              +
              615 element_span_t::end_optional, // tbody
              +
              616 element_span_t::end_optional, // td
              +
              617 element_span_t::needs_end, // textarea
              +
              618 element_span_t::end_optional, // tfoot
              +
              619 element_span_t::end_optional, // th
              +
              620 element_span_t::end_optional, // thead
              +
              621 element_span_t::needs_end, // title
              +
              622 element_span_t::end_optional, // tr
              +
              623 element_span_t::needs_end, // tt
              +
              624 element_span_t::needs_end, // u
              +
              625 element_span_t::needs_end, // ul
              +
              626 element_span_t::needs_end, // var
              +
              627 element_span_t::immediate, // wbr
              +
              628 element_span_t::needs_end, // xmp
              +
              629 };
              +
              630 return element_t::a <= code && code <= element_t::xmp ?
              +
              631 lookup[static_cast<size_t>(code) - static_cast<size_t>(element_t::a)] :
              +
              632 element_span_t::needs_end;
              +
              633 }
              +
              +
              634
              +
              +
              640 static inline bool is_fontstyle(_In_ element_t code)
              +
              641 {
              +
              642 switch (code) {
              +
              643 case element_t::tt:
              +
              644 case element_t::i:
              +
              645 case element_t::b:
              +
              646 case element_t::u:
              +
              647 case element_t::s:
              +
              648 case element_t::strike:
              +
              649 case element_t::blink:
              +
              650 case element_t::big:
              +
              651 case element_t::small:
              +
              652 return true;
              +
              653 };
              +
              654 return false;
              +
              655 }
              +
              +
              656
              +
              +
              662 static inline bool is_phrase(_In_ element_t code)
              +
              663 {
              +
              664 switch (code) {
              +
              665 case element_t::em:
              +
              666 case element_t::strong:
              +
              667 case element_t::dfn:
              +
              668 case element_t::code:
              +
              669 case element_t::samp:
              +
              670 case element_t::kbd:
              +
              671 case element_t::var:
              +
              672 case element_t::cite:
              +
              673 case element_t::abbr:
              +
              674 case element_t::acronym:
              +
              675 case element_t::xmp:
              +
              676 return true;
              +
              677 };
              +
              678 return false;
              +
              679 }
              +
              +
              680
              +
              +
              686 static inline bool is_special(_In_ element_t code)
              +
              687 {
              +
              688 switch (code) {
              +
              689 case element_t::a:
              +
              690 case element_t::img:
              +
              691 case element_t::applet:
              +
              692 case element_t::object:
              +
              693 case element_t::embed:
              +
              694 case element_t::font:
              +
              695 case element_t::basefont:
              +
              696 case element_t::br:
              +
              697 case element_t::wbr:
              +
              698 case element_t::rt:
              +
              699 case element_t::script:
              +
              700 case element_t::map:
              +
              701 case element_t::q:
              +
              702 case element_t::sub:
              +
              703 case element_t::sup:
              +
              704 case element_t::ruby:
              +
              705 case element_t::span:
              +
              706 case element_t::bdo:
              +
              707 case element_t::iframe:
              +
              708 case element_t::nobr:
              +
              709 return true;
              +
              710 };
              +
              711 return false;
              +
              712 }
              +
              +
              713
              +
              +
              719 static inline bool is_formctrl(_In_ element_t code)
              +
              720 {
              +
              721 switch (code) {
              +
              722 case element_t::input:
              +
              723 case element_t::select:
              +
              724 case element_t::textarea:
              +
              725 case element_t::label:
              +
              726 case element_t::button:
              +
              727 return true;
              +
              728 };
              +
              729 return false;
              +
              730 }
              +
              +
              731
              +
              +
              737 static inline bool is_inline(_In_ element_t code)
              +
              738 {
              +
              739 return
              +
              740 code == element_t::PCDATA ||
              +
              741 is_fontstyle(code) ||
              +
              742 is_phrase(code) ||
              +
              743 is_special(code) ||
              +
              744 is_formctrl(code);
              +
              745 }
              +
              +
              746
              +
              +
              752 static inline bool is_heading(_In_ element_t code)
              +
              753 {
              +
              754 switch (code) {
              +
              755 case element_t::h1:
              +
              756 case element_t::h2:
              +
              757 case element_t::h3:
              +
              758 case element_t::h4:
              +
              759 case element_t::h5:
              +
              760 case element_t::h6:
              +
              761 return true;
              +
              762 };
              +
              763 return false;
              +
              764 }
              +
              +
              765
              +
              +
              771 static inline bool is_list(_In_ element_t code)
              +
              772 {
              +
              773 switch (code) {
              +
              774 case element_t::ul:
              +
              775 case element_t::ol:
              +
              776 case element_t::dir:
              +
              777 case element_t::menu:
              +
              778 return true;
              +
              779 };
              +
              780 return false;
              +
              781 }
              +
              +
              782
              +
              +
              788 static inline bool is_preformatted(_In_ element_t code)
              +
              789 {
              +
              790 switch (code) {
              +
              791 case element_t::pre:
              +
              792 case element_t::listing:
              +
              793 return true;
              +
              794 }
              +
              795 return false;
              +
              796 }
              +
              +
              797
              +
              +
              803 static inline bool is_block(_In_ element_t code)
              +
              804 {
              +
              805 if (is_heading(code) ||
              +
              806 is_list(code) ||
              +
              807 is_preformatted(code)) return true;
              +
              808 switch (code) {
              +
              809 case element_t::p:
              +
              810 case element_t::dl:
              +
              811 case element_t::div:
              +
              812 case element_t::center:
              +
              813 case element_t::marquee:
              +
              814 case element_t::noscript:
              +
              815 case element_t::noframes:
              +
              816 case element_t::noembed:
              +
              817 case element_t::blockquote:
              +
              818 case element_t::form:
              +
              819 case element_t::isindex:
              +
              820 case element_t::hr:
              +
              821 case element_t::table:
              +
              822 case element_t::fieldset:
              +
              823 case element_t::address:
              +
              824 return true;
              +
              825 };
              +
              826 return false;
              +
              827 }
              +
              +
              828
              +
              +
              834 static inline bool is_flow(_In_ element_t code)
              +
              835 {
              +
              836 return is_block(code) || is_inline(code);
              +
              837 }
              +
              +
              838
              +
              +
              844 static inline bool is_head_content(_In_ element_t code)
              +
              845 {
              +
              846 switch (code) {
              +
              847 case element_t::title:
              +
              848 case element_t::isindex:
              +
              849 case element_t::base:
              +
              850 case element_t::nextid:
              +
              851 return true;
              +
              852 };
              +
              853 return false;
              +
              854 }
              +
              +
              855
              +
              +
              861 static inline bool is_head_misc(_In_ element_t code)
              +
              862 {
              +
              863 switch (code) {
              +
              864 case element_t::script:
              +
              865 case element_t::style:
              +
              866 case element_t::meta:
              +
              867 case element_t::link:
              +
              868 case element_t::object:
              +
              869 return true;
              +
              870 };
              +
              871 return false;
              +
              872 }
              +
              +
              873
              +
              +
              879 static inline bool is_pre_exclusion(_In_ element_t code)
              +
              880 {
              +
              881 switch (code) {
              +
              882 case element_t::img:
              +
              883 case element_t::object:
              +
              884 case element_t::applet:
              +
              885 case element_t::embed:
              +
              886 case element_t::big:
              +
              887 case element_t::small:
              +
              888 case element_t::sub:
              +
              889 case element_t::sup:
              +
              890 case element_t::ruby:
              +
              891 case element_t::font:
              +
              892 case element_t::basefont:
              +
              893 case element_t::nobr:
              +
              894 return true;
              +
              895 };
              +
              896 return false;
              +
              897 }
              +
              +
              898
              +
              +
              904 static inline bool is_html_content(_In_ element_t code)
              +
              905 {
              +
              906 switch (code) {
              +
              907 case element_t::head:
              +
              908 case element_t::body:
              +
              909 case element_t::frameset:
              +
              910 return true;
              +
              911 };
              +
              912 return false;
              +
              913 }
              +
              +
              914
              +
              +
              920 static inline bool is_group(_In_ element_t code)
              +
              921 {
              +
              922 if (is_block(code) ||
              +
              923 is_html_content(code) ||
              +
              924 is_head_content(code)) return true;
              +
              925 switch (code) {
              +
              926 case element_t::col:
              +
              927 case element_t::colgroup:
              +
              928 case element_t::dd:
              +
              929 case element_t::dir:
              +
              930 case element_t::dt:
              +
              931 case element_t::frame:
              +
              932 case element_t::iframe:
              +
              933 case element_t::legend:
              +
              934 case element_t::td:
              +
              935 case element_t::th:
              +
              936 case element_t::tr:
              +
              937 return true;
              +
              938 };
              +
              939 return false;
              +
              940 }
              +
              +
              941
              +
              +
              950 static inline bool may_contain(_In_ element_t parent, _In_ element_t child)
              +
              951 {
              +
              952 if (child == element_t::unknown || child == element_t::comment)
              +
              953 return true;
              +
              954 if (is_fontstyle(parent) || is_phrase(parent))
              +
              955 return is_inline(child);
              +
              956 if (is_heading(parent))
              +
              957 return is_inline(child);
              +
              958
              +
              959 switch (parent) {
              +
              960 case element_t::a: return is_inline(child) && child != element_t::a;
              +
              961 case element_t::address: return is_inline(child) || child == element_t::p;
              +
              962 case element_t::applet: return is_flow(child) || child == element_t::param;
              +
              963 case element_t::area: return false;
              +
              964 case element_t::base: return false;
              +
              965 case element_t::basefont: return false;
              +
              966 case element_t::bdo: return is_inline(child);
              +
              967 case element_t::blockquote: return is_flow(child);
              +
              968 case element_t::body: return is_flow(child) || child == element_t::ins || child == element_t::del;
              +
              969 case element_t::br: return false;
              +
              970 case element_t::button: return is_flow(child) && !is_formctrl(child) && child != element_t::a && child != element_t::form && child != element_t::isindex && child != element_t::fieldset && child != element_t::iframe;
              +
              971 case element_t::caption: return is_inline(child);
              +
              972 case element_t::center: return is_flow(child);
              +
              973 case element_t::col: return false;
              +
              974 case element_t::colgroup: return child == element_t::col;
              +
              975 case element_t::comment: return child == element_t::CDATA;
              +
              976 case element_t::dd: return is_flow(child);
              +
              977 case element_t::del: return is_flow(child);
              +
              978 case element_t::dir: return child == element_t::li;
              +
              979 case element_t::div: return is_flow(child);
              +
              980 case element_t::dl: return child == element_t::dt || child == element_t::dd;
              +
              981 case element_t::dt: return is_inline(child);
              +
              982 case element_t::embed: return is_flow(child) || child == element_t::param;
              +
              983 case element_t::fieldset: return is_flow(child) || child == element_t::legend || child == element_t::PCDATA;
              +
              984 case element_t::font: return is_inline(child);
              +
              985 case element_t::form: return is_flow(child) && child != element_t::form;
              +
              986 case element_t::frame: return false;
              +
              987 case element_t::frameset: return child == element_t::frameset || child == element_t::frame || child == element_t::noframes;
              +
              988 case element_t::head: return is_head_content(child) || is_head_misc(child);
              +
              989 case element_t::hr: return false;
              +
              990 case element_t::html: return is_html_content(child);
              +
              991 case element_t::iframe: return is_flow(child);
              +
              992 case element_t::img: return false;
              +
              993 case element_t::input: return false;
              +
              994 case element_t::ins: return is_flow(child);
              +
              995 case element_t::isindex: return false;
              +
              996 case element_t::label: return is_inline(child) && child != element_t::label;
              +
              997 case element_t::legend: return is_inline(child);
              +
              998 case element_t::li: return is_flow(child);
              +
              999 case element_t::link: return false;
              +
              1000 case element_t::listing: return child == element_t::CDATA;
              +
              1001 case element_t::map: return is_block(child) || child == element_t::area;
              +
              1002 case element_t::marquee: return is_flow(child);
              +
              1003 case element_t::menu: return child == element_t::li;
              +
              1004 case element_t::meta: return false;
              +
              1005 case element_t::nobr: return is_inline(child) || child == element_t::wbr;
              +
              1006 case element_t::noframes: return (is_flow(child) || child == element_t::body) && child != element_t::noframes;
              +
              1007 case element_t::noscript: return is_flow(child);
              +
              1008 case element_t::noembed: return is_flow(child);
              +
              1009 case element_t::object: return is_flow(child) || child == element_t::param;
              +
              1010 case element_t::ol: return child == element_t::li;
              +
              1011 case element_t::optgroup: return child == element_t::option;
              +
              1012 case element_t::option: return child == element_t::PCDATA;
              +
              1013 case element_t::p: return is_inline(child);
              +
              1014 case element_t::param: return false;
              +
              1015 case element_t::plaintext: return is_flow(child);
              +
              1016 case element_t::pre: return is_inline(child) && !is_pre_exclusion(child);
              +
              1017 case element_t::q: return is_inline(child);
              +
              1018 case element_t::rt: return false;
              +
              1019 case element_t::ruby: return is_inline(child);
              +
              1020 case element_t::script: return child == element_t::CDATA;
              +
              1021 case element_t::select: return child == element_t::optgroup || child == element_t::option;
              +
              1022 case element_t::span: return is_inline(child);
              +
              1023 case element_t::style: return child == element_t::CDATA;
              +
              1024 case element_t::sub: return is_inline(child);
              +
              1025 case element_t::sup: return is_inline(child);
              +
              1026 case element_t::table: return child == element_t::caption || child == element_t::col || child == element_t::colgroup || child == element_t::thead || child == element_t::tfoot || child == element_t::tbody;
              +
              1027 case element_t::tbody: return child == element_t::tr;
              +
              1028 case element_t::td: return is_flow(child);
              +
              1029 case element_t::textarea: return child == element_t::PCDATA;
              +
              1030 case element_t::tfoot: return child == element_t::tr;
              +
              1031 case element_t::th: return is_flow(child);
              +
              1032 case element_t::thead: return child == element_t::tr;
              +
              1033 case element_t::title: return child == element_t::PCDATA;
              +
              1034 case element_t::tr: return child == element_t::td || child == element_t::th;
              +
              1035 case element_t::ul: return child == element_t::li;
              +
              1036 case element_t::wbr: return false;
              +
              1037 case element_t::unknown: return true;
              +
              1038 }
              +
              1039 return false;
              +
              1040 }
              +
              +
              1041
              +
              1049 template <class T>
              +
              +
              1050 static inline bool is_uri(_In_ element_t code, _In_reads_or_z_opt_(num_chars) const T* attr_name, _In_ size_t num_chars)
              +
              1051 {
              +
              1052 _Assume_(attr_name || !num_chars);
              +
              1053 switch (code) {
              +
              1054 case element_t::a: return !stdex::strnicmp(attr_name, num_chars, "href", SIZE_MAX, stdex::std_locale_C);
              +
              1055 case element_t::applet: return !stdex::strnicmp(attr_name, num_chars, "code", SIZE_MAX, stdex::std_locale_C) ||
              +
              1056 !stdex::strnicmp(attr_name, num_chars, "codebase", SIZE_MAX, stdex::std_locale_C) ||
              +
              1057 !stdex::strnicmp(attr_name, num_chars, "src", SIZE_MAX, stdex::std_locale_C);
              +
              1058 case element_t::area: return !stdex::strnicmp(attr_name, num_chars, "href", SIZE_MAX, stdex::std_locale_C);
              +
              1059 case element_t::base: return !stdex::strnicmp(attr_name, num_chars, "href", SIZE_MAX, stdex::std_locale_C);
              +
              1060 case element_t::bgsound: return !stdex::strnicmp(attr_name, num_chars, "src", SIZE_MAX, stdex::std_locale_C);
              +
              1061 case element_t::blockquote: return !stdex::strnicmp(attr_name, num_chars, "cite", SIZE_MAX, stdex::std_locale_C);
              +
              1062 case element_t::body: return !stdex::strnicmp(attr_name, num_chars, "background", SIZE_MAX, stdex::std_locale_C);
              +
              1063 case element_t::comment: return !stdex::strnicmp(attr_name, num_chars, "data", SIZE_MAX, stdex::std_locale_C);
              +
              1064 case element_t::del: return !stdex::strnicmp(attr_name, num_chars, "cite", SIZE_MAX, stdex::std_locale_C);
              +
              1065 case element_t::embed: return !stdex::strnicmp(attr_name, num_chars, "pluginspage", SIZE_MAX, stdex::std_locale_C) ||
              +
              1066 !stdex::strnicmp(attr_name, num_chars, "src", SIZE_MAX, stdex::std_locale_C);
              +
              1067 case element_t::form: return !stdex::strnicmp(attr_name, num_chars, "action", SIZE_MAX, stdex::std_locale_C);
              +
              1068 case element_t::frame: return !stdex::strnicmp(attr_name, num_chars, "longdesc", SIZE_MAX, stdex::std_locale_C) ||
              +
              1069 !stdex::strnicmp(attr_name, num_chars, "src", SIZE_MAX, stdex::std_locale_C);
              +
              1070 case element_t::head: return !stdex::strnicmp(attr_name, num_chars, "profile", SIZE_MAX, stdex::std_locale_C);
              +
              1071 case element_t::iframe: return !stdex::strnicmp(attr_name, num_chars, "longdesc", SIZE_MAX, stdex::std_locale_C) ||
              +
              1072 !stdex::strnicmp(attr_name, num_chars, "src", SIZE_MAX, stdex::std_locale_C);
              +
              1073 case element_t::img: return !stdex::strnicmp(attr_name, num_chars, "longdesc", SIZE_MAX, stdex::std_locale_C) ||
              +
              1074 !stdex::strnicmp(attr_name, num_chars, "lowsrc", SIZE_MAX, stdex::std_locale_C) ||
              +
              1075 !stdex::strnicmp(attr_name, num_chars, "src", SIZE_MAX, stdex::std_locale_C) ||
              +
              1076 !stdex::strnicmp(attr_name, num_chars, "usemap", SIZE_MAX, stdex::std_locale_C);
              +
              1077 case element_t::input: return !stdex::strnicmp(attr_name, num_chars, "lowsrc", SIZE_MAX, stdex::std_locale_C) ||
              +
              1078 !stdex::strnicmp(attr_name, num_chars, "src", SIZE_MAX, stdex::std_locale_C) ||
              +
              1079 !stdex::strnicmp(attr_name, num_chars, "usemap", SIZE_MAX, stdex::std_locale_C);
              +
              1080 case element_t::ins: return !stdex::strnicmp(attr_name, num_chars, "cite", SIZE_MAX, stdex::std_locale_C);
              +
              1081 case element_t::link: return !stdex::strnicmp(attr_name, num_chars, "href", SIZE_MAX, stdex::std_locale_C);
              +
              1082 case element_t::object: return !stdex::strnicmp(attr_name, num_chars, "basehref", SIZE_MAX, stdex::std_locale_C) ||
              +
              1083 !stdex::strnicmp(attr_name, num_chars, "classid", SIZE_MAX, stdex::std_locale_C) ||
              +
              1084 !stdex::strnicmp(attr_name, num_chars, "code", SIZE_MAX, stdex::std_locale_C) ||
              +
              1085 !stdex::strnicmp(attr_name, num_chars, "codebase", SIZE_MAX, stdex::std_locale_C) ||
              +
              1086 !stdex::strnicmp(attr_name, num_chars, "data", SIZE_MAX, stdex::std_locale_C) ||
              +
              1087 !stdex::strnicmp(attr_name, num_chars, "usemap", SIZE_MAX, stdex::std_locale_C);
              +
              1088 case element_t::q: return !stdex::strnicmp(attr_name, num_chars, "cite", SIZE_MAX, stdex::std_locale_C);
              +
              1089 case element_t::script: return !stdex::strnicmp(attr_name, num_chars, "src", SIZE_MAX, stdex::std_locale_C);
              +
              1090 case element_t::table: return !stdex::strnicmp(attr_name, num_chars, "background", SIZE_MAX, stdex::std_locale_C);
              +
              1091 case element_t::td: return !stdex::strnicmp(attr_name, num_chars, "background", SIZE_MAX, stdex::std_locale_C);
              +
              1092 case element_t::th: return !stdex::strnicmp(attr_name, num_chars, "background", SIZE_MAX, stdex::std_locale_C);
              +
              1093 }
              +
              1094 return false;
              +
              1095 }
              +
              +
              1096
              +
              1104 template <class T>
              +
              +
              1105 static inline bool is_localizable(element_t code, const T* attr_name, size_t num_chars)
              +
              1106 {
              +
              1107 _Assume_(attr_name || !num_chars);
              +
              1108 if (!stdex::strnicmp(attr_name, num_chars, "title", SIZE_MAX, stdex::std_locale_C))
              +
              1109 return true;
              +
              1110 switch (code) {
              +
              1111 case element_t::applet: return !stdex::strnicmp(attr_name, num_chars, "alt", SIZE_MAX, stdex::std_locale_C);
              +
              1112 case element_t::area: return !stdex::strnicmp(attr_name, num_chars, "alt", SIZE_MAX, stdex::std_locale_C);
              +
              1113 case element_t::img: return !stdex::strnicmp(attr_name, num_chars, "alt", SIZE_MAX, stdex::std_locale_C);
              +
              1114 case element_t::input: return !stdex::strnicmp(attr_name, num_chars, "alt", SIZE_MAX, stdex::std_locale_C);
              +
              1115 case element_t::object: return !stdex::strnicmp(attr_name, num_chars, "alt", SIZE_MAX, stdex::std_locale_C);
              +
              1116 case element_t::table: return !stdex::strnicmp(attr_name, num_chars, "summary", SIZE_MAX, stdex::std_locale_C);
              +
              1117 case element_t::td: return !stdex::strnicmp(attr_name, num_chars, "abbr", SIZE_MAX, stdex::std_locale_C);
              +
              1118 case element_t::th: return !stdex::strnicmp(attr_name, num_chars, "abbr", SIZE_MAX, stdex::std_locale_C);
              +
              1119 }
              +
              1120 return false;
              +
              1121 }
              +
              +
              1122 };
              +
              +
              1123
              +
              1124 class sequence;
              +
              1125 using sequence_store = std::vector<std::unique_ptr<sequence>>;
              +
              1126
              +
              + +
              1131 {
              +
              1132 public:
              +
              1133 stdex::parser::html_sequence_t type;
              + + +
              1136
              +
              1137 sequence(_In_ stdex::parser::html_sequence_t _type = stdex::parser::html_sequence_t::unknown, _In_ size_t start = 0, size_t end = 0, _In_opt_ sequence* _parent = nullptr) :
              +
              1138 type(_type),
              +
              1139 interval(start, end),
              +
              1140 parent(_parent)
              +
              1141 {}
              +
              1142
              +
              1143 virtual ~sequence() {} // make polymorphic
              +
              1144 };
              +
              +
              1145
              +
              +
              1149 class element : public sequence
              +
              1150 {
              +
              1151 public:
              +
              1152 template <class T>
              +
              1153 inline element(_Inout_ stdex::parser::basic_html_tag<T>&& tag, _In_z_ const T* src, _In_opt_ sequence* parent = nullptr) :
              +
              1154 sequence(tag.type, tag.interval.start, tag.interval.end, parent),
              +
              1155 code(element_code(src + tag.name.start, tag.name.size())),
              +
              1156 name(std::move(tag.name)),
              +
              1157 attributes(std::move(tag.attributes))
              +
              1158 {}
              +
              1159
              +
              1160 template <class T>
              +
              1161 static element_t element_code(_In_reads_z_(num_chars) const T* name, size_t num_chars)
              +
              1162 {
              +
              1163 static const struct {
              +
              1164 const char* name;
              +
              1165 element_t code;
              +
              1166 } mapping[] = {
              +
              1167 { "a", element_t::a, },
              +
              1168 { "abbr", element_t::abbr, },
              +
              1169 { "acronym", element_t::acronym, },
              +
              1170 { "address", element_t::address, },
              +
              1171 { "applet", element_t::applet, },
              +
              1172 { "area", element_t::area, },
              +
              1173 { "b", element_t::b, },
              +
              1174 { "base", element_t::base, },
              +
              1175 { "basefont", element_t::basefont, },
              +
              1176 { "bdo", element_t::bdo, },
              +
              1177 { "bgsound", element_t::bgsound, },
              +
              1178 { "big", element_t::big, },
              +
              1179 { "blink", element_t::blink, },
              +
              1180 { "blockquote", element_t::blockquote, },
              +
              1181 { "body", element_t::body, },
              +
              1182 { "br", element_t::br, },
              +
              1183 { "button", element_t::button, },
              +
              1184 { "caption", element_t::caption, },
              +
              1185 { "center", element_t::center, },
              +
              1186 { "cite", element_t::cite, },
              +
              1187 { "code", element_t::code, },
              +
              1188 { "col", element_t::col, },
              +
              1189 { "colgroup", element_t::colgroup, },
              +
              1190 { "comment", element_t::comment, },
              +
              1191 { "dd", element_t::dd, },
              +
              1192 { "del", element_t::del, },
              +
              1193 { "dfn", element_t::dfn, },
              +
              1194 { "dir", element_t::dir, },
              +
              1195 { "div", element_t::div, },
              +
              1196 { "dl", element_t::dl, },
              +
              1197 { "dt", element_t::dt, },
              +
              1198 { "em", element_t::em, },
              +
              1199 { "embed", element_t::embed, },
              +
              1200 { "fieldset", element_t::fieldset, },
              +
              1201 { "font", element_t::font, },
              +
              1202 { "form", element_t::form, },
              +
              1203 { "frame", element_t::frame, },
              +
              1204 { "frameset", element_t::frameset, },
              +
              1205 { "h1", element_t::h1, },
              +
              1206 { "h2", element_t::h2, },
              +
              1207 { "h3", element_t::h3, },
              +
              1208 { "h4", element_t::h4, },
              +
              1209 { "h5", element_t::h5, },
              +
              1210 { "h6", element_t::h6, },
              +
              1211 { "head", element_t::head, },
              +
              1212 { "hr", element_t::hr, },
              +
              1213 { "html", element_t::html, },
              +
              1214 { "i", element_t::i, },
              +
              1215 { "iframe", element_t::iframe, },
              +
              1216 { "img", element_t::img, },
              +
              1217 { "input", element_t::input, },
              +
              1218 { "ins", element_t::ins, },
              +
              1219 { "isindex", element_t::isindex, },
              +
              1220 { "kbd", element_t::kbd, },
              +
              1221 { "label", element_t::label, },
              +
              1222 { "legend", element_t::legend, },
              +
              1223 { "li", element_t::li, },
              +
              1224 { "link", element_t::link, },
              +
              1225 { "listing", element_t::listing, },
              +
              1226 { "map", element_t::map, },
              +
              1227 { "marquee", element_t::marquee, },
              +
              1228 { "menu", element_t::menu, },
              +
              1229 { "meta", element_t::meta, },
              +
              1230 { "nextid", element_t::nextid, },
              +
              1231 { "nobr", element_t::nobr, },
              +
              1232 { "noembed", element_t::noembed, },
              +
              1233 { "noframes", element_t::noframes, },
              +
              1234 { "noscript", element_t::noscript, },
              +
              1235 { "object", element_t::object, },
              +
              1236 { "ol", element_t::ol, },
              +
              1237 { "optgroup", element_t::optgroup, },
              +
              1238 { "option", element_t::option, },
              +
              1239 { "p", element_t::p, },
              +
              1240 { "param", element_t::param, },
              +
              1241 { "plaintext", element_t::plaintext, },
              +
              1242 { "pre", element_t::pre, },
              +
              1243 { "q", element_t::q, },
              +
              1244 { "rt", element_t::rt, },
              +
              1245 { "ruby", element_t::ruby, },
              +
              1246 { "s", element_t::s, },
              +
              1247 { "samp", element_t::samp, },
              +
              1248 { "script", element_t::script, },
              +
              1249 { "select", element_t::select, },
              +
              1250 { "small", element_t::small, },
              +
              1251 { "span", element_t::span, },
              +
              1252 { "strike", element_t::strike, },
              +
              1253 { "strong", element_t::strong, },
              +
              1254 { "style", element_t::style, },
              +
              1255 { "sub", element_t::sub, },
              +
              1256 { "sup", element_t::sup, },
              +
              1257 { "table", element_t::table, },
              +
              1258 { "tbody", element_t::tbody, },
              +
              1259 { "td", element_t::td, },
              +
              1260 { "textarea", element_t::textarea, },
              +
              1261 { "tfoot", element_t::tfoot, },
              +
              1262 { "th", element_t::th, },
              +
              1263 { "thead", element_t::thead, },
              +
              1264 { "title", element_t::title, },
              +
              1265 { "tr", element_t::tr, },
              +
              1266 { "tt", element_t::tt, },
              +
              1267 { "u", element_t::u, },
              +
              1268 { "ul", element_t::ul, },
              +
              1269 { "var", element_t::var, },
              +
              1270 { "wbr", element_t::wbr, },
              +
              1271 { "xmp", element_t::xmp, },
              +
              1272 };
              +
              1273#ifdef _DEBUG
              +
              1274 // The mapping table MUST be sorted and all names in lowercase.
              +
              1275 for (size_t i = 1; i < _countof(mapping); i++)
              +
              1276 _Assume_(stdex::strcmp(mapping[i - 1].name, mapping[i].name) <= 0);
              +
              1277 const auto& ctype = std::use_facet<std::ctype<char>>(stdex::std_locale_C);
              +
              1278 for (size_t i = 0; i < _countof(mapping); i++) {
              +
              1279 for (size_t j = 0; mapping[i].name[j]; j++)
              +
              1280 _Assume_(ctype.is(ctype.lower | ctype.digit, mapping[i].name[j]));
              +
              1281 }
              +
              1282#endif
              +
              1283 const auto& ctypeT = std::use_facet<std::ctype<T>>(stdex::std_locale_C);
              +
              1284 for (size_t i = 0, j = _countof(mapping); i < j; ) {
              +
              1285 size_t m = (i + j) / 2;
              +
              1286 int r = 0;
              +
              1287 for (size_t i1 = 0, i2 = 0;;) {
              +
              1288 if (!mapping[m].name[i1]) {
              +
              1289 r = i2 >= num_chars || !name[i2] ? 0 : -1;
              +
              1290 break;
              +
              1291 }
              +
              1292 if (i2 >= num_chars || !name[i2]) {
              +
              1293 r = 1;
              +
              1294 break;
              +
              1295 }
              +
              1296
              +
              1297 auto chr = static_cast<char>(ctypeT.tolower(name[i2++]));
              +
              1298 if (mapping[m].name[i1] > chr) {
              +
              1299 r = 1;
              +
              1300 break;
              +
              1301 }
              +
              1302 if (mapping[m].name[i1] < chr) {
              +
              1303 r = -1;
              +
              1304 break;
              +
              1305 }
              +
              1306 i1++;
              +
              1307 }
              +
              1308
              +
              1309 if (r < 0)
              +
              1310 i = m + 1;
              +
              1311 else if (r > 0)
              +
              1312 j = m;
              +
              1313 else
              +
              1314 return mapping[m].code;
              +
              1315 }
              +
              1316 return element_t::unknown;
              +
              1317 }
              +
              1318
              +
              1319 public:
              +
              1320 element_t code;
              + +
              1322 std::vector<stdex::parser::html_attribute> attributes;
              +
              1323 };
              +
              +
              1324
              +
              1325 class element_end;
              +
              1326
              +
              +
              1330 class element_start : public element
              +
              1331 {
              +
              1332 public:
              +
              1333 template <class T>
              +
              1334 inline element_start(_Inout_ stdex::parser::basic_html_tag<T>&& tag, _In_z_ const T* src, _In_opt_ sequence* parent = nullptr, _In_opt_ sequence* _end = nullptr) :
              +
              1335 element(std::move(tag), src, parent),
              +
              1336 end(_end)
              +
              1337 {}
              +
              1338
              +
              1339 public:
              + +
              1341 };
              +
              +
              1342
              +
              +
              1346 class element_end : public sequence
              +
              1347 {
              +
              1348 public:
              +
              1349 template <class T>
              +
              1350 inline element_end(_Inout_ stdex::parser::basic_html_tag<T>&& tag, _In_z_ const T* src, _In_opt_ sequence* parent = nullptr, _In_opt_ element_start* _start = nullptr) :
              +
              1351 sequence(tag.type, tag.interval.start, tag.interval.end, parent),
              +
              1352 code(element::element_code(src + tag.name.start, tag.name.size())),
              +
              1353 name(std::move(tag.name)),
              +
              1354 start(_start)
              +
              1355 {}
              +
              1356
              +
              1357 public:
              +
              1358 element_t code;
              + + +
              1361 };
              +
              +
              1362
              +
              +
              1366 class declaration : public sequence
              +
              1367 {
              +
              1368 public:
              +
              1369 template <class T>
              +
              1370 inline declaration(_Inout_ stdex::parser::basic_html_tag<T>&& tag, _In_opt_ sequence* parent = nullptr) :
              +
              1371 sequence(tag.type, tag.interval.start, tag.interval.end, parent),
              +
              1372 name(std::move(tag.name)),
              +
              1373 attributes(std::move(tag.attributes))
              +
              1374 {}
              +
              1375
              +
              1376 public:
              + +
              1378 std::vector<stdex::parser::html_attribute> attributes;
              +
              1379 };
              +
              +
              1380
              +
              +
              1384 class comment : public sequence
              +
              1385 {
              +
              1386 public:
              +
              1387 template <class T>
              +
              1388 inline comment(_Inout_ stdex::parser::basic_html_tag<T>&& tag, _In_opt_ sequence* parent = nullptr) :
              +
              1389 sequence(tag.type, tag.interval.start, tag.interval.end, parent),
              +
              1390 content(std::move(tag.name))
              +
              1391 {}
              +
              1392
              +
              1393 public:
              + +
              1395 };
              +
              +
              1396
              +
              +
              1400 class instruction : public sequence
              +
              1401 {
              +
              1402 public:
              +
              1403 template <class T>
              +
              1404 inline instruction(_Inout_ stdex::parser::basic_html_tag<T>&& tag, _In_opt_ sequence* parent = nullptr) :
              +
              1405 sequence(tag.type, tag.interval.start, tag.interval.end, parent),
              +
              1406 content(std::move(tag.name))
              +
              1407 {}
              +
              1408
              +
              1409 public:
              + +
              1411 };
              +
              +
              1412
              +
              1416 template<class _Elem, class _Traits = std::char_traits<_Elem>, class _Alloc = std::allocator<_Elem>>
              +
              +
              1417 struct entity
              +
              1418 {
              + +
              1420 std::basic_string<_Elem, _Traits, _Alloc> value;
              +
              1421 };
              +
              +
              1422
              +
              1426 template<class _Elem, class _Traits = std::char_traits<_Elem>, class _Alloc = std::allocator<_Elem>>
              +
              1427 class parser;
              +
              1428
              +
              1432 template<class _Elem, class _Traits = std::char_traits<_Elem>, class _Alloc = std::allocator<_Elem>>
              +
              + +
              1434 {
              +
              1435 public:
              +
              1436 document() :
              +
              1437 m_num_parsed(0),
              +
              1438 m_charset(stdex::charset_id::system),
              +
              1439
              +
              1440 // Declaration parsing data
              + + +
              1443 m_is_cdata(false),
              +
              1444 m_is_rcdata(false),
              +
              1445
              +
              1446 // Element parsing data
              + +
              1448 {}
              +
              1449
              +
              +
              1453 void clear()
              +
              1454 {
              +
              1455 m_source.clear();
              +
              1456 m_num_parsed = 0;
              +
              1457 m_charset = stdex::charset_id::system;
              +
              1458
              +
              1459 // Declaration parsing data
              + +
              1461 m_is_cdata = m_is_rcdata = false;
              +
              1462 m_entities.clear();
              +
              1463
              +
              1464 // Element parsing data
              +
              1465 m_sequences.clear();
              +
              1466
              +
              1467 m_element_stack.clear();
              +
              1468 m_is_special_element = false;
              +
              1469 }
              +
              +
              1470
              +
              +
              1474 void append(_In_reads_or_z_opt_(num_chars) const _Elem* source, _In_ size_t num_chars = SIZE_MAX)
              +
              1475 {
              +
              1476 _Assume_(source || !num_chars);
              +
              1477 m_source.append(source, stdex::strnlen(source, num_chars));
              +
              1478 source = m_source.data();
              +
              1479 num_chars = m_source.size();
              +
              1480
              +
              1481 for (size_t i = m_num_parsed; i < num_chars;) {
              +
              1482 if (m_is_cdata || m_is_rcdata) {
              +
              1483 if (m_condition_end.match(source, i, num_chars)) {
              +
              1484 m_sequences.push_back(std::move(std::unique_ptr<sequence>(new sequence(
              +
              1485 m_is_cdata ? stdex::parser::html_sequence_t::CDATA : stdex::parser::html_sequence_t::PCDATA,
              +
              1486 m_num_parsed, i,
              +
              1487 active_element()))));
              +
              1488 m_is_cdata = m_is_rcdata = false;
              +
              1489 i = m_num_parsed = m_condition_end.interval.end;
              +
              1490 continue;
              +
              1491 }
              +
              1492 goto next_char;
              +
              1493 }
              +
              1494
              + +
              1496 if (m_condition_end.match(source, i, num_chars)) {
              + +
              1498 i = m_num_parsed = m_condition_end.interval.end;
              +
              1499 continue;
              +
              1500 }
              +
              1501 goto next_char;
              +
              1502 }
              +
              1503
              +
              1504 if (m_num_valid_conditions && m_condition_end.match(source, i, num_chars)) {
              +
              1505 if (m_num_parsed < i)
              +
              1506 m_sequences.push_back(std::move(std::unique_ptr<sequence>(new sequence(stdex::parser::html_sequence_t::text, m_num_parsed, i, active_element()))));
              +
              1507
              + +
              1509 i = m_num_parsed = m_condition_end.interval.end;
              +
              1510 continue;
              +
              1511 }
              +
              1512
              +
              1513 if (m_condition_start.match(source, i, num_chars)) {
              +
              1514 auto condition_src(replace_entities(source + m_condition_start.condition.start, m_condition_start.condition.size()));
              +
              1515 if (!stdex::strcmp(condition_src.c_str(), "CDATA"))
              +
              1516 m_is_cdata = true;
              +
              1517 else if (!stdex::strcmp(condition_src.c_str(), "RCDATA"))
              +
              1518 m_is_rcdata = true;
              + + +
              1521 else if (!stdex::strcmp(condition_src.c_str(), "IGNORE"))
              + +
              1523 else
              + +
              1525
              +
              1526 i = m_num_parsed = m_condition_start.interval.end;
              +
              1527 continue;
              +
              1528 }
              +
              1529
              + +
              1531 auto parent = active_element();
              +
              1532 _Assume_(parent);
              +
              1533 if (m_tag.match(source, i, num_chars) &&
              +
              1534 m_tag.type == stdex::parser::html_sequence_t::element_end &&
              +
              1535 element::element_code(source + m_tag.name.start, m_tag.name.size()) == parent->code)
              +
              1536 {
              +
              1537 if (m_num_parsed < i)
              +
              1538 m_sequences.push_back(std::move(std::unique_ptr<sequence>(new sequence(stdex::parser::html_sequence_t::text, m_num_parsed, i, parent))));
              +
              1539 i = m_num_parsed = m_tag.interval.end;
              +
              1540 std::unique_ptr<element_end> e(new element_end(std::move(m_tag), source, parent->parent, parent));
              +
              1541 parent->end = e.get();
              +
              1542 m_sequences.push_back(std::move(e));
              +
              1543 m_element_stack.pop_back();
              +
              1544 m_is_special_element = false;
              +
              1545 continue;
              +
              1546 }
              +
              1547 goto next_char;
              +
              1548 }
              +
              1549
              +
              1550 if (m_tag.match(source, i, num_chars)) {
              +
              1551 if (m_num_parsed < i)
              +
              1552 m_sequences.push_back(std::move(std::unique_ptr<sequence>(new sequence(stdex::parser::html_sequence_t::text, m_num_parsed, i, active_element()))));
              +
              1553 i = m_num_parsed = m_tag.interval.end;
              +
              1554
              +
              1555 switch (m_tag.type) {
              +
              1556 case stdex::parser::html_sequence_t::element:
              +
              1557 case stdex::parser::html_sequence_t::element_start: {
              +
              1558 std::unique_ptr<element> e(
              +
              1559 m_tag.type == stdex::parser::html_sequence_t::element ? new element(std::move(m_tag), source) :
              +
              1560 m_tag.type == stdex::parser::html_sequence_t::element_start ? new element_start(std::move(m_tag), source) :
              +
              1561 nullptr);
              +
              1562
              +
              1563 // Does this tag end any of the started elements?
              +
              1564 for (size_t j = m_element_stack.size(); j--; ) {
              +
              1565 auto starting_tag = m_element_stack[j];
              +
              1566 _Assume_(starting_tag && starting_tag->type == stdex::parser::html_sequence_t::element_start);
              +
              1567 if (element_traits::may_contain(starting_tag->code, e->code)) {
              +
              1568 e->parent = starting_tag;
              +
              1569 break;
              +
              1570 }
              +
              1571 e->parent = starting_tag->parent;
              +
              1572 starting_tag->end = e.get();
              +
              1573 m_element_stack.resize(j);
              +
              1574 }
              +
              1575
              +
              1576 if (e->type == stdex::parser::html_sequence_t::element_start) {
              +
              1577 auto e_start = static_cast<element_start*>(e.get());
              +
              1578 if (element_traits::span(e->code) == element_span_t::immediate)
              +
              1579 e_start->end = e.get();
              +
              1580 else {
              +
              1581 m_element_stack.push_back(e_start);
              +
              1582 switch (e->code) {
              +
              1583 case element_t::code:
              +
              1584 case element_t::comment:
              +
              1585 case element_t::script:
              +
              1586 case element_t::style:
              +
              1587 m_is_special_element = true;
              +
              1588 break;
              +
              1589 }
              +
              1590 }
              +
              1591 }
              +
              1592
              +
              1593 if (e->code == element_t::meta && m_charset == stdex::charset_id::system) {
              +
              1594 bool is_content_type = false;
              +
              1595 stdex::parser::html_attribute* content_attr = nullptr;
              +
              1596 for (auto& attr : e->attributes) {
              +
              1597 if (!stdex::strnicmp(source + attr.name.start, attr.name.size(), "http-equiv", SIZE_MAX, stdex::std_locale_C) &&
              +
              1598 !stdex::strnicmp(source + attr.value.start, attr.value.size(), "content-type", SIZE_MAX, stdex::std_locale_C))
              +
              1599 is_content_type = true;
              +
              1600 else if (!stdex::strnicmp(source + attr.name.start, attr.name.size(), "content", SIZE_MAX, stdex::std_locale_C))
              +
              1601 content_attr = &attr;
              +
              1602 }
              +
              1603 if (is_content_type && content_attr) {
              +
              1604 // <meta http-equiv="Content-Type" content="..."> found.
              + +
              1606 if (content.match(source, content_attr->value.start, content_attr->value.end) &&
              +
              1607 content.charset)
              +
              1608 {
              +
              1609 std::string str;
              +
              1610 str.reserve(content.charset.size());
              +
              1611 for (size_t j = content.charset.start; j < content.charset.end; ++j)
              +
              1612 str.push_back(static_cast<char>(source[j]));
              +
              1613 m_charset = stdex::charset_from_name(str.c_str());
              +
              1614 }
              +
              1615 }
              +
              1616 }
              +
              1617
              +
              1618 m_sequences.push_back(std::move(e));
              +
              1619 break;
              +
              1620 }
              +
              1621 case stdex::parser::html_sequence_t::element_end: {
              +
              1622 std::unique_ptr<element_end> e(new element_end(std::move(m_tag), source, active_element()));
              +
              1623
              +
              1624 for (size_t j = m_element_stack.size(); j--; ) {
              +
              1625 auto starting_tag = m_element_stack[j];
              +
              1626 _Assume_(starting_tag && starting_tag->type == stdex::parser::html_sequence_t::element_start);
              +
              1627 if (starting_tag->code == e->code ||
              +
              1628 starting_tag->code == element_t::unknown && e->code == element_t::unknown && !stdex::strnicmp(source + starting_tag->name.start, starting_tag->name.size(), source + e->name.start, e->name.size(), stdex::std_locale_C))
              +
              1629 {
              +
              1630 e->start = starting_tag;
              +
              1631 e->parent = starting_tag->parent;
              +
              1632 starting_tag->end = e.get();
              +
              1633 m_element_stack.resize(j);
              +
              1634 break;
              +
              1635 }
              +
              1636 }
              +
              1637
              +
              1638 m_sequences.push_back(std::move(e));
              +
              1639 break;
              +
              1640 }
              +
              1641 case stdex::parser::html_sequence_t::declaration:
              +
              1642 if (m_tag.attributes.size() > 3 &&
              +
              1643 !stdex::strnicmp(source + m_tag.attributes[0].name.start, m_tag.attributes[0].name.size(), "entity", SIZE_MAX, stdex::std_locale_C))
              +
              1644 {
              +
              1645 if (!stdex::strncmp(source + m_tag.attributes[1].name.start, m_tag.attributes[1].name.size(), "%", SIZE_MAX) &&
              +
              1646 stdex::strncmp(source + m_tag.attributes[3].name.start, m_tag.attributes[3].name.size(), "SYSTEM", SIZE_MAX) &&
              +
              1647 stdex::strncmp(source + m_tag.attributes[3].name.start, m_tag.attributes[3].name.size(), "PUBLIC", SIZE_MAX))
              +
              1648 {
              +
              1649 std::unique_ptr<entity<_Elem, _Traits, _Alloc>> e(new entity<_Elem, _Traits, _Alloc>());
              +
              1650 e->name = m_tag.attributes[2].name;
              +
              1651 e->value = std::move(replace_entities(source + m_tag.attributes[3].name.start, m_tag.attributes[3].name.size()));
              +
              1652 m_entities.push_back(std::move(e));
              +
              1653 }
              +
              1654
              +
              1655 // TODO: Parse & entities and entities in SYSTEM and PUBLIC external files.
              +
              1656 }
              +
              1657 m_sequences.push_back(std::move(std::unique_ptr<sequence>(new declaration(std::move(m_tag), active_element()))));
              +
              1658 break;
              +
              1659 case stdex::parser::html_sequence_t::comment:
              +
              1660 m_sequences.push_back(std::move(std::unique_ptr<sequence>(new comment(std::move(m_tag), active_element()))));
              +
              1661 break;
              +
              1662 case stdex::parser::html_sequence_t::instruction:
              +
              1663 m_sequences.push_back(std::move(std::unique_ptr<sequence>(new instruction(std::move(m_tag), active_element()))));
              +
              1664 break;
              +
              1665 default:
              +
              1666 throw std::invalid_argument("unknown tag type");
              +
              1667 }
              +
              1668
              +
              1669 continue;
              +
              1670 }
              +
              1671
              +
              1672 next_char:
              +
              1673 if (m_any_char.match(source, i, num_chars)) {
              +
              1674 // Skip any character, but don't declare it as parsed yet. It might be a part of unfinished tag.
              +
              1675 i = m_any_char.interval.end;
              +
              1676 }
              +
              1677 else
              +
              1678 break;
              +
              1679 }
              +
              1680 }
              +
              +
              1681
              +
              + +
              1686 {
              +
              1687 size_t i = m_source.size();
              +
              1688 if (m_num_parsed < i)
              +
              1689 m_sequences.push_back(std::move(std::unique_ptr<sequence>(new sequence(stdex::parser::html_sequence_t::text, m_num_parsed, i, active_element()))));
              +
              1690 m_num_parsed = i;
              +
              1691 m_element_stack.clear();
              +
              1692 }
              +
              +
              1693
              +
              +
              1697 inline void assign(_In_reads_or_z_opt_(num_chars) const _Elem* source, _In_ size_t num_chars = SIZE_MAX)
              +
              1698 {
              +
              1699 clear();
              +
              1700 append(source, num_chars);
              +
              1701 finalize();
              +
              1702 }
              +
              +
              1703
              +
              1707 inline const std::basic_string<_Elem, _Traits, _Alloc>& source() const { return m_source; }
              +
              1708
              +
              1709 friend class parser<_Elem, _Traits, _Alloc>;
              +
              1710
              +
              1711 protected:
              +
              + +
              1716 {
              +
              1717 return m_element_stack.empty() ? nullptr : m_element_stack.back();
              +
              1718 }
              +
              +
              1719
              +
              +
              1723 std::basic_string<_Elem, _Traits, _Alloc> replace_entities(_In_reads_or_z_opt_(num_chars) const _Elem* input, _In_ size_t num_chars) const
              +
              1724 {
              +
              1725 _Assume_(input || !num_chars);
              +
              1726 const size_t num_entities = m_entities.size();
              +
              1727 const _Elem* source = m_source.data();
              +
              1728 std::basic_string<_Elem, _Traits, _Alloc> output;
              +
              1729 for (size_t i = 0; i < num_chars && input[i];) {
              +
              1730 if (input[i] == '%') {
              +
              1731 for (size_t j = 0; j < num_entities; j++) {
              +
              1732 auto& e = m_entities[j];
              +
              1733 size_t entity_size = e->name.size();
              +
              1734 if (i + entity_size + 1 < num_chars &&
              +
              1735 !stdex::strncmp(input + i + 1, source + e->name.start, entity_size) &&
              +
              1736 input[i + entity_size + 1] == ';')
              +
              1737 {
              +
              1738 output += e->value;
              +
              1739 i += entity_size + 2;
              +
              1740 goto next_char;
              +
              1741 }
              +
              1742 }
              +
              1743 throw std::runtime_error("undefined entity");
              +
              1744 }
              +
              1745 output += input[i++];
              +
              1746 next_char:;
              +
              1747 }
              +
              1748 return output;
              +
              1749 }
              +
              +
              1750
              +
              1751 protected:
              +
              1752 std::basic_string<_Elem, _Traits, _Alloc> m_source;
              + +
              1754 stdex::charset_id m_charset;
              +
              1755
              +
              1756 // Declaration parsing data
              + + + + + + + +
              1764 std::vector<std::unique_ptr<entity<_Elem, _Traits, _Alloc>>> m_entities;
              +
              1765
              +
              1766 // Element parsing data
              + +
              1768 sequence_store m_sequences;
              +
              1769 std::vector<element_start*> m_element_stack;
              + +
              1771 };
              +
              +
              1772
              +
              1776 enum class token_t {
              +
              1777 root = 0,
              +
              1778 complete,
              +
              1779 starting,
              +
              1780 ending,
              +
              1781 url,
              +
              1782 };
              +
              1783
              +
              1787 constexpr size_t token_tag_max =
              +
              1788 sizeof(void*) * 2 // Memory address in hexadecimal
              +
              1789 + 2 // Leading and trailing parenthesis
              +
              1790 + 1; // Zero terminator
              +
              1791
              +
              1796 constexpr char token_tag_start = '\x12';
              +
              1797
              +
              1802 constexpr char token_tag_end = '\x13';
              +
              1803
              +
              +
              1807 class token
              +
              1808 {
              +
              1809 protected:
              +
              1810 inline token(_In_ token_t _type = token_t::root, _In_opt_ sequence* _sequence = nullptr, _In_ uintptr_t _data = 0) :
              +
              1811 type(_type),
              +
              1812 sequence(_sequence),
              +
              1813 data(_data)
              +
              1814 {}
              +
              1815
              +
              1816 template<class _Elem, class _Traits, class _Alloc>
              +
              1817 friend class parser;
              +
              1818
              +
              1819 public:
              +
              1820 virtual ~token() {} // make polymorphic
              +
              1821
              +
              1829 template<class _Traits = std::char_traits<char>, class _Alloc = std::allocator<char>>
              +
              +
              1830 inline size_t append_tag(_Inout_ std::basic_string<char, _Traits, _Alloc>& str) const
              +
              1831 {
              +
              1832 size_t n = str.size();
              +
              1833 // Use %X instead of %p to ommit leading zeros and save space.
              +
              1834 stdex::appendf(str, "%c%zX%c", stdex::locale_C.get(), token_tag_start, reinterpret_cast<uintptr_t>(this), token_tag_end);
              +
              1835 return str.size() - n;
              +
              1836 }
              +
              +
              1837
              +
              1845 template<class _Traits = std::char_traits<wchar_t>, class _Alloc = std::allocator<wchar_t>>
              +
              +
              1846 inline size_t append_tag(_Inout_ std::basic_string<wchar_t, _Traits, _Alloc>& str) const
              +
              1847 {
              +
              1848 // Use %X instead of %p to ommit leading zeros and save space.
              +
              1849 return stdex::appendf(str, L"%c%zX%c", stdex::locale_C.get(), static_cast<wchar_t>(token_tag_start), reinterpret_cast<uintptr_t>(this), static_cast<wchar_t>(token_tag_end));
              +
              1850 }
              +
              +
              1851
              +
              1852 template<class T>
              +
              1853 static inline token* parse_tag(const T* str, size_t& offset)
              +
              1854 {
              +
              1855 if (str[offset] != static_cast<T>(token_tag_start))
              +
              1856 return nullptr;
              +
              1857
              +
              1858 // Locate tag end.
              +
              1859 size_t end;
              +
              1860 for (end = offset + 1; ; end++) {
              +
              1861 if (!str[end])
              +
              1862 return nullptr;
              +
              1863 if (str[end] == token_tag_end)
              +
              1864 break;
              +
              1865 }
              +
              1866
              +
              1867 // Parse hexadecimal token memory address.
              +
              1868 token* t = reinterpret_cast<token*>(stdex::strtouint<T, uintptr_t>(str + offset + 1, end - offset - 1, nullptr, 16));
              +
              1869 if (!t)
              +
              1870 throw std::invalid_argument("null token");
              +
              1871 offset = end + 1;
              +
              1872 return t;
              +
              1873 }
              +
              1874
              +
              1875 public:
              +
              1876 token_t type;
              + +
              1878 uintptr_t data;
              +
              1879 };
              +
              +
              1880
              +
              1881 using token_vector = std::vector<std::unique_ptr<token>>;
              +
              1882 using token_list = std::list<token*>;
              +
              1883
              +
              1887 enum text_type_flag_t : uint32_t {
              +
              1888 has_tokens = 1 << 0,
              +
              1889 has_text = 1 << 1,
              +
              1890 is_title = 1 << 2,
              +
              1891 is_bullet = 1 << 3,
              +
              1892 };
              +
              1893
              +
              1897 template<class _Elem, class _Traits = std::char_traits<_Elem>, class _Alloc = std::allocator<_Elem>>
              +
              +
              1898 class text_token : public token
              +
              1899 {
              +
              1900 protected:
              +
              1901 inline text_token(
              +
              1902 _In_ token_t type = token_t::complete,
              +
              1903 _In_reads_or_z_opt_(num_chars) const _Elem* _text = nullptr, _In_ size_t num_chars = 0,
              +
              1904 _In_ uint32_t _text_type = 0,
              +
              1905 _In_opt_ stdex::html::sequence* sequence = nullptr, _In_ uintptr_t data = 0) :
              + +
              1907 text(_text, num_chars),
              +
              1908 text_type(_text_type)
              +
              1909 {}
              +
              1910
              +
              1911 friend class parser<_Elem, _Traits, _Alloc>;
              +
              1912
              +
              1913 public:
              +
              1914 std::basic_string<_Elem, _Traits, _Alloc> text;
              +
              1915 uint32_t text_type;
              +
              1916 stdex::mapping_vector<size_t> mapping;
              +
              1917 };
              +
              +
              1918
              +
              1922 template<class _Elem, class _Traits = std::char_traits<_Elem>, class _Alloc = std::allocator<_Elem>>
              +
              +
              1923 class starting_token : public text_token<_Elem, _Traits, _Alloc>
              +
              1924 {
              +
              1925 protected:
              +
              1926 inline starting_token(
              +
              1927 _In_reads_or_z_opt_(num_chars_text) const _Elem* _text = nullptr, _In_ size_t num_chars_text = 0,
              +
              1928 _In_reads_or_z_opt_(num_chars_name) const _Elem* _name = nullptr, _In_ size_t num_chars_name = 0,
              +
              1929 _In_ uint32_t text_type = 0,
              +
              1930 _In_opt_ stdex::html::sequence* sequence = nullptr,
              +
              1931 _In_opt_ stdex::html::sequence* _end_sequence = nullptr,
              +
              1932 _In_ uintptr_t data = 0) :
              +
              1933 text_token(token_t::starting, _text, num_chars_text, text_type, sequence, data),
              +
              1934 name(_name, num_chars_name),
              +
              1935 end_sequence(_end_sequence)
              +
              1936 {}
              +
              1937
              +
              1938 friend class parser<_Elem, _Traits, _Alloc>;
              +
              1939
              +
              1940 public:
              +
              1941 std::basic_string<_Elem, _Traits, _Alloc> name;
              + +
              1943 };
              +
              +
              1944
              +
              1948 enum class token_url_t {
              +
              1949 plain = 0, // URL is not using any particular encoding scheme (as-is)
              +
              1950 sgml, // URL is encoded using SGML entities
              +
              1951 css, // URL is encoded using CSS escaping scheme
              +
              1952 };
              +
              1953
              +
              1957 template<class _Elem, class _Traits = std::char_traits<_Elem>, class _Alloc = std::allocator<_Elem>>
              +
              +
              1958 class url_token : public token
              +
              1959 {
              +
              1960 protected:
              +
              1961 inline url_token(
              +
              1962 _In_reads_or_z_opt_(num_chars) const _Elem* _url = nullptr, _In_ size_t num_chars = 0,
              +
              1963 token_url_t _encoding = token_url_t::plain,
              +
              1964 _In_opt_ stdex::html::sequence* sequence = nullptr, _In_ uintptr_t data = 0) :
              +
              1965 token(token_t::url, sequence, data),
              +
              1966 url(_url, num_chars),
              +
              1967 encoding(_encoding)
              +
              1968 {}
              +
              1969
              +
              1970 friend class parser<_Elem, _Traits, _Alloc>;
              +
              1971
              +
              1972 public:
              +
              1973 std::basic_string<_Elem, _Traits, _Alloc> url;
              +
              1974 token_url_t encoding;
              +
              1975 };
              +
              +
              1976
              +
              + + +
              1982 std::list<stdex::html::token*> active_tokens;
              +
              1983 size_t word_index;
              + +
              1985 };
              +
              +
              1986
              +
              1987 using inserted_token_list = std::list<inserted_token>;
              +
              1988
              +
              1989 template<class _Elem, class _Traits, class _Alloc>
              +
              + +
              1991 {
              +
              1992 public:
              +
              1993 inline parser(
              + +
              1995 _In_reads_or_z_opt_(num_chars) const stdex::schar_t* url = nullptr, _In_ size_t num_chars = 0,
              +
              1996 _In_ bool parse_frames = false, _In_ stdex::progress<size_t>* progress = nullptr) :
              + +
              1998 m_url(url, stdex::strnlen(url, num_chars)),
              +
              1999 m_parse_frames(parse_frames),
              + +
              2001 m_source(nullptr)
              +
              2002 {}
              +
              2003
              +
              + +
              2008 {
              +
              2009 _Assume_(m_tokens.empty());
              +
              2010
              +
              2011 if (m_progress) {
              +
              2012 m_progress->set_range(0, m_document.source().size());
              +
              2013 m_progress->set(0);
              +
              2014 }
              +
              2015
              +
              2016 m_source = m_document.source().data();
              + +
              2018 return parse(m_document.m_sequences.end());
              +
              2019 }
              +
              +
              2020
              +
              +
              2027 static void link(_Inout_ std::basic_string<_Elem, _Traits, _Alloc>& source, _In_ const text_token<_Elem, _Traits, _Alloc>* t)
              +
              2028 {
              +
              2029 _Assume_(t);
              +
              2030 _Assume_(
              +
              2031 t->type == token_t::complete ||
              +
              2032 t->type == token_t::starting ||
              +
              2033 t->type == token_t::ending ||
              +
              2034 t->type == token_t::root);
              +
              2035
              +
              2036 if (t->text_type & has_tokens) {
              +
              2037 const _Elem* root = t->text.data();
              +
              2038 for (size_t i = 0, num_chars = t->text.size(); i < num_chars && root[i];) {
              +
              2039 _Assume_(root[i] != token_tag_end);
              +
              2040 const token* t2 = token::parse_tag(root, i);
              +
              2041 if (t2) {
              +
              2042 switch (t2->type) {
              +
              2043 case token_t::complete:
              +
              2044 case token_t::starting:
              +
              2045 case token_t::ending:
              +
              2046 case token_t::root:
              +
              2047 link(source, dynamic_cast<const text_token<_Elem, _Traits, _Alloc>*>(t2));
              +
              2048 break;
              +
              2049 case token_t::url: {
              +
              2050 auto t2_url = dynamic_cast<const url_token<_Elem, _Traits, _Alloc>*>(t2);
              +
              2051 switch (t2_url->encoding) {
              +
              2052 case token_url_t::plain:
              +
              2053 source += t2_url->url;
              +
              2054 break;
              +
              2055 case token_url_t::sgml:
              +
              2056 escape(source, t2_url->url.data(), t2_url->url.size());
              +
              2057 break;
              +
              2058 case token_url_t::css:
              +
              2059 css_escape(source, t2_url->url.data(), t2_url->url.size());
              +
              2060 break;
              +
              2061 default:
              +
              2062 throw std::invalid_argument("unsupported URL encoding");
              +
              2063 }
              +
              2064 break;
              +
              2065 }
              +
              2066 default:
              +
              2067 throw std::invalid_argument("unsupported token type");
              +
              2068 }
              +
              2069 }
              +
              2070 else if (t->text_type & has_text) {
              +
              2071 escape_min(source, root[i]);
              +
              2072 i++;
              +
              2073 }
              +
              2074 else
              +
              2075 source += root[i++];
              +
              2076 }
              +
              2077 }
              +
              2078 else if (t->text_type & has_text) {
              +
              2079 // Token contains no references to other tokens. But, it does contain text that requires escaping.
              +
              2080 escape_min(source, t->text.data(), t->text.size());
              +
              2081 }
              +
              2082 else
              +
              2083 source += t->text;
              +
              2084 }
              +
              +
              2085
              +
              +
              2094 static void start_tokens(_Inout_ std::basic_string<_Elem, _Traits, _Alloc>& source, _Inout_ token_list& active_tokens, _In_ const token_list& new_tokens, _In_ token_list::const_iterator from)
              +
              2095 {
              +
              2096 for (; from != new_tokens.cend(); ++from) {
              +
              2097 auto t = *from;
              +
              2098 t->append_tag(source);
              +
              2099 active_tokens.push_back(t);
              +
              2100 }
              +
              2101 }
              +
              +
              2102
              +
              +
              2112 token_list::const_iterator end_tokens(_Inout_ std::basic_string<_Elem, _Traits, _Alloc>& source, _Inout_ token_list& active_tokens, _In_ const token_list& new_tokens)
              +
              2113 {
              +
              2114 // Skip matching tokens in active_tokens and new_tokens.
              +
              2115 token_list::const_iterator i1, i2;
              +
              2116 for (i1 = active_tokens.cbegin(), i2 = new_tokens.cbegin(); i1 != active_tokens.cend(); ++i1, ++i2) {
              +
              2117 if (i2 == new_tokens.cend() || *i1 != *i2) {
              +
              2118 // Got two tokens, where lists don't match anymore, or new_tokens list is out.
              +
              2119 // End tokens not relevant anymore in reverse order of starting.
              +
              2120 for (auto i = active_tokens.cend(); i != active_tokens.cbegin(); ) {
              +
              2121 auto t1 = dynamic_cast<starting_token<_Elem, _Traits, _Alloc>*>(*(--i));
              +
              2122 _Assume_(t1 && t1->type == token_t::starting);
              +
              2123
              +
              2124 std::unique_ptr<text_token<_Elem, _Traits, _Alloc>> t2(new text_token<_Elem, _Traits, _Alloc>(token_t::ending));
              +
              2125 t2->text.reserve(t1->name.size() + 3);
              +
              2126 t2->text += '<';
              +
              2127 t2->text += '/';
              +
              2128 t2->text += t1->name;
              +
              2129 t2->text += '>';
              +
              2130 append_token(std::move(t2), source);
              +
              2131
              +
              2132 // Pop the active token.
              +
              2133 if (i1 == i) {
              +
              2134 active_tokens.erase(i);
              +
              2135 break;
              +
              2136 }
              +
              2137 active_tokens.erase(i);
              +
              2138 i = active_tokens.cend();
              +
              2139 }
              +
              2140 break;
              +
              2141 }
              +
              2142 }
              +
              2143 return i2;
              +
              2144 }
              +
              +
              2145
              +
              +
              2155 void append_inserted_tokens(_Inout_ std::basic_string<_Elem, _Traits, _Alloc>& source, _Inout_ inserted_token_list& inserted_tokens,
              +
              2156 _In_ size_t word_index, _In_ bool after_word,
              +
              2157 _Inout_ token_list& active_tokens)
              +
              2158 {
              +
              2159 for (auto i = inserted_tokens.begin(); i != inserted_tokens.end(); ) {
              +
              2160 auto& t = *i;
              +
              2161 _Assume_(t.token);
              +
              2162 if (t.word_index == word_index && t.after_word == after_word) {
              +
              2163 if (t.token->type != token_t::ending)
              +
              2164 start_tokens(source, active_tokens, t.active_tokens, end_tokens(source, active_tokens, t.active_tokens));
              +
              2165 t.token->append_tag(source);
              +
              2166 inserted_tokens.erase(i++);
              +
              2167 }
              +
              2168 else
              +
              2169 ++i;
              +
              2170 }
              +
              2171 }
              +
              +
              2172
              +
              +
              2179 static void merge(_Inout_ token_list& a, _In_ const token_list& b)
              +
              2180 {
              +
              2181 for (auto i2 = b.begin(); i2 != b.end(); ++i2) {
              +
              2182 auto t2 = *i2;
              +
              2183 for (auto i1 = a.begin(); i1 != a.end(); ++i1) {
              +
              2184 if (i1 == a.end()) {
              +
              2185 a.push_back(t2);
              +
              2186 break;
              +
              2187 }
              +
              2188 auto t1 = *i1;
              +
              2189 if (t1 == t2)
              +
              2190 break;
              +
              2191 }
              +
              2192 }
              +
              2193 }
              +
              +
              2194
              +
              +
              2198 void make_absolute_url(std::basic_string<_Elem, _Traits, _Alloc>& rel)
              +
              2199 {
              +
              2200 _Unreferenced_(rel);
              +
              2201
              +
              2202 if (m_url.empty())
              +
              2203 return;
              +
              2204
              +
              2205 // TODO: Implement!
              +
              2206 }
              +
              +
              2207
              +
              2211 inline const token_vector& tokens() const { return m_tokens; }
              +
              2212
              +
              2213 protected:
              +
              2221 template <class T>
              +
              +
              2222 inline T* append_token(_Inout_ std::unique_ptr<T>&& token)
              +
              2223 {
              +
              2224 if (!token)
              +
              2225 return nullptr;
              +
              2226 auto t = token.get();
              +
              2227 m_tokens.push_back(std::move(token));
              +
              2228 return t;
              +
              2229 }
              +
              +
              2230
              +
              2239 template <class T>
              +
              +
              2240 inline size_t append_token(_Inout_ std::unique_ptr<T>&& token, _Inout_ std::basic_string<_Elem, _Traits, _Alloc>& source)
              +
              2241 {
              +
              2242 if (!token)
              +
              2243 return 0;
              +
              2244 size_t n = token->append_tag(source);
              +
              2245 m_tokens.push_back(std::move(token));
              +
              2246 return n;
              +
              2247 }
              +
              +
              2248
              +
              +
              2257 text_token<_Elem, _Traits, _Alloc>* parse(_In_ const sequence_store::const_iterator& end, _In_ uint32_t text_type = 0)
              +
              2258 {
              + +
              2260 std::unique_ptr<text_token<_Elem, _Traits, _Alloc>> token(new text_token<_Elem, _Traits, _Alloc>(
              +
              2261 token_t::complete,
              +
              2262 nullptr, 0,
              +
              2263 text_type,
              +
              2264 m_offset->get()));
              +
              2265
              +
              2266 while (m_offset != end) {
              +
              2267 auto& s = *m_offset;
              +
              2268
              +
              2269 if (m_progress) {
              +
              2270 if (m_progress->cancel())
              +
              2271 throw stdex::user_cancelled();
              +
              2272 m_progress->set(s->interval.start);
              +
              2273 }
              +
              2274
              +
              2275 // No token_tag_start and token_tag_end chars, please.
              +
              2276 _Assume_(
              +
              2277 stdex::strnchr(m_source + s->interval.start, s->interval.size(), static_cast<_Elem>(token_tag_start)) == stdex::npos &&
              +
              2278 stdex::strnchr(m_source + s->interval.start, s->interval.size(), static_cast<_Elem>(token_tag_end)) == stdex::npos);
              +
              2279
              +
              2280 if (s->type == stdex::parser::html_sequence_t::text) {
              +
              2281 rel.from = s->interval.start;
              +
              2282 token->mapping.push_back(rel);
              +
              2283 stdex::sgml2strcat(token->text, m_source + s->interval.start, s->interval.size(), 0, rel, &token->mapping);
              +
              2284 rel.to = token->text.size();
              +
              2285 if (!(token->text_type & has_text) &&
              +
              2286 !stdex::isblank(m_source + s->interval.start, s->interval.size(), stdex::std_locale_C))
              +
              2287 token->text_type |= has_text;
              +
              2288 ++m_offset;
              +
              2289 }
              +
              2290 else if (s->type == stdex::parser::html_sequence_t::element || s->type == stdex::parser::html_sequence_t::element_start) {
              +
              2291 const element* s_el = static_cast<const element*>(s.get());
              +
              2292 _Assume_(s_el);
              +
              2293 const element_start* s_el_start = s->type == stdex::parser::html_sequence_t::element_start ? static_cast<const element_start*>(s.get()) : nullptr;
              +
              2294 if (s_el->code == element_t::frameset && !m_parse_frames)
              +
              2295 throw std::invalid_argument("<frameset> detected");
              +
              2296
              +
              2297 {
              +
              2298 size_t offset = s->interval.start;
              +
              2299 std::unique_ptr<text_token<_Elem, _Traits, _Alloc>> t(s->type == stdex::parser::html_sequence_t::element || element_traits::span(s_el_start->code) == element_span_t::immediate ?
              +
              2300 new text_token<_Elem, _Traits, _Alloc>(token_t::complete, nullptr, 0, 0, s.get()) :
              +
              2301 new starting_token<_Elem, _Traits, _Alloc>(nullptr, 0, m_source + s_el_start->name.start, s_el_start->name.size(), 0, s.get(), s_el_start->end));
              +
              2302
              +
              2303 // Copy the tag contents, but mind any attributes containing localizable text.
              +
              2304 for (auto& a : s_el->attributes) {
              +
              2305 if (a.value.empty() ||
              +
              2306 stdex::isblank(m_source + a.value.start, a.value.size(), stdex::std_locale_C))
              +
              2307 continue;
              +
              2308
              +
              2309 if (element_traits::is_uri(s_el->code, m_source + a.name.start, a.name.size())) {
              +
              2310 t->text.append(m_source + offset, a.value.start - offset);
              +
              2311 std::unique_ptr<url_token<_Elem, _Traits, _Alloc>> t_url(new url_token<_Elem, _Traits, _Alloc>(
              +
              2312 nullptr, 0,
              +
              2313 token_url_t::sgml,
              +
              2314 s.get()));
              +
              2315 stdex::sgml2strcat(t_url->url, m_source + a.value.start, a.value.size());
              +
              2316 append_token(std::move(t_url), t->text);
              +
              2317 t->text_type |= has_tokens;
              +
              2318 offset = a.value.end;
              +
              2319 }
              +
              2320 else if (element_traits::is_localizable(s_el->code, m_source + a.name.start, a.name.size())) {
              +
              2321 t->text.append(m_source + offset, a.value.start - offset);
              +
              2322 std::unique_ptr<text_token<_Elem, _Traits, _Alloc>> t_value(new text_token<_Elem, _Traits, _Alloc>(
              +
              2323 token_t::complete,
              +
              2324 nullptr, 0,
              +
              2325 has_text | is_title,
              +
              2326 s.get()));
              +
              2327 stdex::mapping<size_t> rel_value(a.value.start, 0);
              +
              2328 t_value->mapping.push_back(rel_value);
              +
              2329 stdex::sgml2strcpy(t_value->text, m_source + a.value.start, a.value.size(), 0, rel_value, &t_value->mapping);
              +
              2330 append_token(std::move(t_value), t->text);
              +
              2331 t->text_type |= has_tokens;
              +
              2332 offset = a.value.end;
              +
              2333 }
              +
              2334 }
              +
              2335
              +
              2336 t->text.append(m_source + offset, s->interval.end - offset);
              +
              2337 rel.from = s->interval.start;
              +
              2338 token->mapping.push_back(rel);
              +
              2339 rel.to += append_token(std::move(t), token->text);
              +
              2340 token->text_type |= has_tokens;
              +
              2341 }
              +
              2342 ++m_offset;
              +
              2343
              +
              2344 if (s_el_start) {
              +
              2345 if (s_el_start->code == element_t::address ||
              +
              2346 s_el_start->code == element_t::code ||
              +
              2347 s_el_start->code == element_t::comment ||
              +
              2348 s_el_start->code == element_t::cite ||
              +
              2349 s_el_start->code == element_t::kbd ||
              +
              2350 s_el_start->code == element_t::samp ||
              +
              2351 s_el_start->code == element_t::script ||
              +
              2352 s_el_start->code == element_t::style)
              +
              2353 {
              +
              2354 // Non-localizable
              +
              2355 auto s_end = s_el_start->end;
              +
              2356 _Assume_(s_end);
              +
              2357
              +
              2358 if (s->interval.end < s_end->interval.start) {
              +
              2359 if (s_el_start->code != element_t::style) {
              +
              2360 rel.from = s->interval.start;
              +
              2361 token->mapping.push_back(rel);
              +
              2362 rel.to += append_token(std::move(std::unique_ptr<text_token<_Elem, _Traits, _Alloc>>(
              + +
              2364 token_t::complete,
              +
              2365 m_source + s->interval.end, s_end->interval.start - s->interval.end,
              +
              2366 0,
              +
              2367 m_offset->get()))),
              +
              2368 token->text);
              +
              2369 }
              +
              2370 else {
              +
              2371 // Partially parse CSS. It may contain URLs we need to make absolute.
              +
              2372 auto t = parse_css(s->interval.end, s_end->interval.start);
              +
              2373 _Assume_(t);
              +
              2374 rel.from = s->interval.start;
              +
              2375 token->mapping.push_back(rel);
              +
              2376 rel.to += t->append_tag(token->text);
              +
              2377 }
              +
              2378 token->text_type |= has_tokens;
              +
              2379 }
              +
              2380 while (m_offset != end && m_offset->get() != s_end)
              +
              2381 ++m_offset;
              +
              2382 }
              +
              2383 else if (element_traits::is_group(s_el_start->code)) {
              +
              2384 auto limit = m_offset;
              +
              2385 while (limit != end && limit->get() != s_el_start->end)
              +
              2386 ++limit;
              +
              2387 auto t = parse(limit,
              +
              2388 (element_traits::is_heading(s_el_start->code) || s_el_start->code == element_t::dt || s_el_start->code == element_t::title ? is_title : 0) |
              +
              2389 (element_traits::is_list(s_el_start->code) ? is_bullet : 0));
              +
              2390 rel.from = s->interval.start;
              +
              2391 token->mapping.push_back(rel);
              +
              2392 rel.to += t->append_tag(token->text);
              +
              2393 token->text_type |= has_tokens;
              +
              2394 }
              +
              2395 }
              +
              2396 }
              +
              2397 else if (s->type == stdex::parser::html_sequence_t::element_end) {
              +
              2398 rel.from = s->interval.start;
              +
              2399 token->mapping.push_back(rel);
              +
              2400 rel.to += append_token(std::move(std::unique_ptr<text_token<_Elem, _Traits, _Alloc>>(
              + +
              2402 token_t::ending,
              +
              2403 m_source + s->interval.start, s->interval.size(),
              +
              2404 0,
              +
              2405 s.get()))),
              +
              2406 token->text);
              +
              2407 token->text_type |= has_tokens;
              +
              2408 ++m_offset;
              +
              2409 }
              +
              2410 else {
              +
              2411 // Declaration, instruction, (P)CDATA section, comment...
              +
              2412 rel.from = s->interval.start;
              +
              2413 token->mapping.push_back(rel);
              +
              2414 rel.to += append_token(std::move(std::unique_ptr<text_token<_Elem, _Traits, _Alloc>>(
              + +
              2416 token_t::complete,
              +
              2417 m_source + s->interval.start, s->interval.size(),
              +
              2418 0,
              +
              2419 s.get()))),
              +
              2420 token->text);
              +
              2421 token->text_type |= has_tokens;
              +
              2422 ++m_offset;
              +
              2423 }
              +
              2424 }
              +
              2425
              +
              2426 return append_token(std::move(token));
              +
              2427 }
              +
              +
              2428
              +
              + +
              2433 {
              +
              2434 stdex::interval<size_t> section, content;
              +
              2435 std::unique_ptr<text_token<_Elem, _Traits, _Alloc>> token(
              + +
              2437 token_t::complete,
              +
              2438 nullptr, 0,
              +
              2439 0,
              +
              2440 m_offset->get()));
              +
              2441
              +
              2442 for (;;) {
              +
              2443 if (m_css_comment.match(m_source, start, end)) {
              +
              2444 token->text.append(m_source + start, m_css_comment.interval.end - start);
              +
              2445 start = m_css_comment.interval.end;
              +
              2446 }
              +
              2447 else if (m_css_cdo.match(m_source, start, end)) {
              +
              2448 token->text.append(m_source + start, m_css_cdo.interval.end - start);
              +
              2449 start = m_css_cdo.interval.end;
              +
              2450 }
              +
              2451 else if (m_css_cdc.match(m_source, start, end)) {
              +
              2452 token->text.append(m_source + start, m_css_cdc.interval.end - start);
              +
              2453 start = m_css_cdc.interval.end;
              +
              2454 }
              +
              2455 else if (
              +
              2456 m_css_import.match(m_source, start, end) && (section = m_css_import.interval, content = m_css_import.content, true) ||
              +
              2457 m_css_uri.match(m_source, start, end) && (section = m_css_uri.interval, content = m_css_uri.content, true))
              +
              2458 {
              +
              2459 std::unique_ptr<url_token<_Elem, _Traits, _Alloc>> t_url(
              + +
              2461 nullptr, 0,
              +
              2462 token_url_t::css,
              +
              2463 m_offset->get()));
              +
              2464 css_unescape(t_url->url, m_source + content.start, content.size());
              +
              2465 token->text.append(m_source + start, content.start - start);
              +
              2466 append_token(std::move(t_url), token->text);
              +
              2467 token->text.append(m_source + content.end, section.end - content.end);
              +
              2468 token->text_type |= has_tokens;
              +
              2469 start = section.end;
              +
              2470 }
              +
              2471 else if (m_any_char.match(m_source, start, end)) {
              +
              2472 token->text.append(m_source + start, m_any_char.interval.end - start);
              +
              2473 start = m_any_char.interval.end;
              +
              2474 }
              +
              2475 else
              +
              2476 break;
              +
              2477 }
              +
              2478
              +
              2479 return append_token(std::move(token));
              +
              2480 }
              +
              +
              2481
              +
              2482 protected:
              + +
              2484 const stdex::sys_string m_url;
              +
              2485 const bool m_parse_frames;
              + +
              2487 const _Elem* m_source;
              +
              2488 token_vector m_tokens;
              +
              2489 sequence_store::const_iterator m_offset;
              +
              2490
              +
              2491 // For detecting URLs in CSS
              + + + + + + + +
              2499 };
              +
              +
              2500 }
              +
              2501}
              +
              HTML comment.
              Definition html.hpp:1385
              +
              stdex::interval< size_t > content
              Comment content position in source.
              Definition html.hpp:1394
              +
              HTML declaration.
              Definition html.hpp:1367
              +
              stdex::interval< size_t > name
              Declaration name position in source.
              Definition html.hpp:1377
              +
              std::vector< stdex::parser::html_attribute > attributes
              Declaration attribute positions in source.
              Definition html.hpp:1378
              +
              HTML document.
              Definition html.hpp:1434
              +
              std::vector< element_start * > m_element_stack
              LIFO stack of started elements.
              Definition html.hpp:1769
              +
              void finalize()
              Finalizes document when no more appending is planned.
              Definition html.hpp:1685
              +
              stdex::charset_id m_charset
              Document charset.
              Definition html.hpp:1754
              +
              bool m_is_rcdata
              Inside of RCDATA?
              Definition html.hpp:1760
              +
              bool m_is_special_element
              Inside of a special element (<SCRIPT>, <STYLE>, ...)?
              Definition html.hpp:1770
              +
              void append(_In_reads_or_z_opt_(num_chars) const _Elem *source, size_t num_chars=SIZE_MAX)
              Parses HTML source code by chunks.
              Definition html.hpp:1474
              +
              sequence_store m_sequences
              Store of sequences.
              Definition html.hpp:1768
              +
              size_t m_num_invalid_conditions
              Number of started invalid conditions.
              Definition html.hpp:1758
              +
              void assign(_In_reads_or_z_opt_(num_chars) const _Elem *source, size_t num_chars=SIZE_MAX)
              Parses HTML document source code.
              Definition html.hpp:1697
              +
              std::vector< std::unique_ptr< entity< _Elem, _Traits, _Alloc > > > m_entities
              Array of entities.
              Definition html.hpp:1764
              +
              std::basic_string< _Elem, _Traits, _Alloc > m_source
              Document HTML source code.
              Definition html.hpp:1752
              +
              element_start * active_element() const
              Returns starting tag of currently active element or nullptr if no element is known to be started.
              Definition html.hpp:1715
              +
              std::basic_string< _Elem, _Traits, _Alloc > replace_entities(_In_reads_or_z_opt_(num_chars) const _Elem *input, size_t num_chars) const
              Replaces entities with their content.
              Definition html.hpp:1723
              +
              void clear()
              Empties document.
              Definition html.hpp:1453
              +
              size_t m_num_valid_conditions
              Number of started valid conditions.
              Definition html.hpp:1757
              +
              const std::basic_string< _Elem, _Traits, _Alloc > & source() const
              Returns document HTML source code.
              Definition html.hpp:1707
              +
              size_t m_num_parsed
              Number of characters already parsed.
              Definition html.hpp:1753
              +
              bool m_is_cdata
              Inside of CDATA?
              Definition html.hpp:1759
              +
              Ending tag of an HTML element </...>
              Definition html.hpp:1347
              +
              stdex::interval< size_t > name
              Element name position in source.
              Definition html.hpp:1359
              +
              element_start * start
              Corresponding starting tag.
              Definition html.hpp:1360
              +
              element_t code
              Element code.
              Definition html.hpp:1358
              +
              Starting tag of an HTML element <...>
              Definition html.hpp:1331
              +
              sequence * end
              Corresponding ending tag of type element_end; When element is ended by a start of another element,...
              Definition html.hpp:1340
              +
              HTML element <.../>
              Definition html.hpp:1150
              +
              stdex::interval< size_t > name
              Element name position in source.
              Definition html.hpp:1321
              +
              std::vector< stdex::parser::html_attribute > attributes
              Element attribute positions in source.
              Definition html.hpp:1322
              +
              element_t code
              Element code.
              Definition html.hpp:1320
              +
              HTML instruction.
              Definition html.hpp:1401
              +
              stdex::interval< size_t > content
              Instruction content position in source.
              Definition html.hpp:1410
              +
              HTML parser.
              Definition html.hpp:1991
              +
              stdex::progress< size_t > * m_progress
              Progress indicator.
              Definition html.hpp:2486
              +
              text_token< _Elem, _Traits, _Alloc > * parse_css(size_t start, size_t end)
              Parses CSS.
              Definition html.hpp:2432
              +
              static void merge(token_list &a, const token_list &b)
              Adds tokens from list b to list a creating an union.
              Definition html.hpp:2179
              +
              token_list::const_iterator end_tokens(std::basic_string< _Elem, _Traits, _Alloc > &source, token_list &active_tokens, const token_list &new_tokens)
              Pops ending tokens from the active token list and append their tags to the source code string.
              Definition html.hpp:2112
              +
              static void link(std::basic_string< _Elem, _Traits, _Alloc > &source, const text_token< _Elem, _Traits, _Alloc > *t)
              Rebuilds HTML source code from the token tree.
              Definition html.hpp:2027
              +
              text_token< _Elem, _Traits, _Alloc > * parse(const sequence_store::const_iterator &end, uint32_t text_type=0)
              Recursively parses HTML document.
              Definition html.hpp:2257
              +
              const _Elem * m_source
              HTML source code.
              Definition html.hpp:2487
              +
              token_vector m_tokens
              HTML token storage.
              Definition html.hpp:2488
              +
              text_token< _Elem, _Traits, _Alloc > * parse()
              Parses HTML document.
              Definition html.hpp:2007
              +
              const document< _Elem, _Traits, _Alloc > & m_document
              Document being analyzed.
              Definition html.hpp:2483
              +
              void make_absolute_url(std::basic_string< _Elem, _Traits, _Alloc > &rel)
              Converts URL to absolute.
              Definition html.hpp:2198
              +
              size_t append_token(std::unique_ptr< T > &&token, std::basic_string< _Elem, _Traits, _Alloc > &source)
              Adds token to the collection and appends its tag to the source code string.
              Definition html.hpp:2240
              +
              const token_vector & tokens() const
              Returns collection of tokens.
              Definition html.hpp:2211
              +
              const stdex::sys_string m_url
              Absolute document URL.
              Definition html.hpp:2484
              +
              const bool m_parse_frames
              Parse frames.
              Definition html.hpp:2485
              +
              static void start_tokens(std::basic_string< _Elem, _Traits, _Alloc > &source, token_list &active_tokens, const token_list &new_tokens, token_list::const_iterator from)
              Pushes tokens to the active token list and appends their tags to the source code string.
              Definition html.hpp:2094
              +
              T * append_token(std::unique_ptr< T > &&token)
              Adds token to the collection.
              Definition html.hpp:2222
              +
              void append_inserted_tokens(std::basic_string< _Elem, _Traits, _Alloc > &source, inserted_token_list &inserted_tokens, size_t word_index, bool after_word, token_list &active_tokens)
              Adds matching inserted tokens before/after the given word in source code.
              Definition html.hpp:2155
              +
              sequence_store::const_iterator m_offset
              Index of active section.
              Definition html.hpp:2489
              +
              Base class for HTML sequences.
              Definition html.hpp:1131
              +
              stdex::interval< size_t > interval
              Sequence position in source.
              Definition html.hpp:1134
              +
              stdex::parser::html_sequence_t type
              Sequence type. Enum is used for performance reasons (vs. dynamic_cast)
              Definition html.hpp:1133
              +
              sequence * parent
              Parent sequence.
              Definition html.hpp:1135
              +
              Token representing start HTML tag.
              Definition html.hpp:1924
              +
              stdex::html::sequence * end_sequence
              Ending tag sequence.
              Definition html.hpp:1942
              +
              std::basic_string< _Elem, _Traits, _Alloc > name
              Element name allowing later recreation of ending </tag>
              Definition html.hpp:1941
              +
              Token representing part of HTML text.
              Definition html.hpp:1899
              +
              stdex::mapping_vector< size_t > mapping
              Mapping between source and text positions.
              Definition html.hpp:1916
              +
              std::basic_string< _Elem, _Traits, _Alloc > text
              Token text.
              Definition html.hpp:1914
              +
              uint32_t text_type
              Mask of text_type_flag_t to specify text content.
              Definition html.hpp:1915
              +
              HTML token base class.
              Definition html.hpp:1808
              +
              sequence * sequence
              Pointer to the sequence this token represents or nullptr when it doesn't trivially represent one sequ...
              Definition html.hpp:1877
              +
              size_t append_tag(std::basic_string< char, _Traits, _Alloc > &str) const
              Appends token tag to the source code.
              Definition html.hpp:1830
              +
              uintptr_t data
              Any user-supplied data.
              Definition html.hpp:1878
              +
              token_t type
              Token type.
              Definition html.hpp:1876
              +
              size_t append_tag(std::basic_string< wchar_t, _Traits, _Alloc > &str) const
              Appends token tag to the source code.
              Definition html.hpp:1846
              +
              HTTP token representing an URL.
              Definition html.hpp:1959
              +
              token_url_t encoding
              URL encoding.
              Definition html.hpp:1974
              +
              std::basic_string< _Elem, _Traits, _Alloc > url
              URL.
              Definition html.hpp:1973
              +
              stdex::interval< size_t > content
              content position in source
              Definition parser.hpp:7835
              +
              stdex::interval< size_t > content
              content position in source
              Definition parser.hpp:7750
              +
              std::vector< html_attribute > attributes
              tag attributes
              Definition parser.hpp:8357
              +
              html_sequence_t type
              tag type
              Definition parser.hpp:8355
              +
              stdex::interval< size_t > name
              tag name position in source
              Definition parser.hpp:8356
              +
              stdex::interval< size_t > interval
              Region of the last match.
              Definition parser.hpp:172
              +
              Test for given string.
              Definition parser.hpp:818
              +
              Progress indicator base class.
              Definition progress.hpp:19
              +
              virtual bool cancel()
              Query whether user requested abort.
              Definition progress.hpp:65
              +
              virtual void set(T value)
              Set current progress.
              Definition progress.hpp:47
              +
              virtual void set_range(T start, T end)
              Set progress range extent.
              Definition progress.hpp:37
              +
              User cancelled exception.
              Definition exception.hpp:17
              +
              Describes attributes associated with a HTML element.
              Definition html.hpp:515
              +
              static bool is_group(element_t code)
              Does element represent a separate part of text?
              Definition html.hpp:920
              +
              static bool is_flow(element_t code)
              Does element typically represent text?
              Definition html.hpp:834
              +
              static bool is_heading(element_t code)
              Does element represent a heading?
              Definition html.hpp:752
              +
              static bool is_head_content(element_t code)
              Is element part of the document head?
              Definition html.hpp:844
              +
              static bool is_fontstyle(element_t code)
              Does element represent font styling?
              Definition html.hpp:640
              +
              static bool is_block(element_t code)
              Is element typically displayed as a stand-alone section of text?
              Definition html.hpp:803
              +
              static bool is_head_misc(element_t code)
              May element be a part of document head?
              Definition html.hpp:861
              +
              static bool is_list(element_t code)
              Does element represent a list of items?
              Definition html.hpp:771
              +
              static bool is_uri(element_t code, _In_reads_or_z_opt_(num_chars) const T *attr_name, size_t num_chars)
              Checks if expected element attribute value is URI.
              Definition html.hpp:1050
              +
              static bool is_preformatted(element_t code)
              Does element represent preformatted text, source code etc.?
              Definition html.hpp:788
              +
              static bool is_localizable(element_t code, const T *attr_name, size_t num_chars)
              Checks if expected element attribute value is localizable.
              Definition html.hpp:1105
              +
              static bool is_special(element_t code)
              Does element represent non-textual item in the document?
              Definition html.hpp:686
              +
              static bool is_pre_exclusion(element_t code)
              May element be a part of.
              Definition html.hpp:879
              +
              static bool is_inline(element_t code)
              Is element typically displayed inline with text?
              Definition html.hpp:737
              +
              static bool is_html_content(element_t code)
              Does element represent the document body?
              Definition html.hpp:904
              +
              static bool is_formctrl(element_t code)
              Does element represent a form control?
              Definition html.hpp:719
              +
              static bool is_phrase(element_t code)
              Does element represent a phrase-of-speech?
              Definition html.hpp:662
              +
              static bool may_contain(element_t parent, element_t child)
              Checks if one element may nest inside another.
              Definition html.hpp:950
              +
              static element_span_t span(element_t code)
              Returns expected element span in HTML code.
              Definition html.hpp:521
              +
              HTML entity.
              Definition html.hpp:1418
              +
              stdex::interval< size_t > name
              Name position in source.
              Definition html.hpp:1419
              +
              std::basic_string< _Elem, _Traits, _Alloc > value
              Entity value.
              Definition html.hpp:1420
              +
              Inserted HTML token.
              Definition html.hpp:1980
              +
              bool after_word
              true if token is anchored after the word; false if anchored before the word
              Definition html.hpp:1984
              +
              std::list< stdex::html::token * > active_tokens
              List of started tokens at inserted token.
              Definition html.hpp:1982
              +
              size_t word_index
              Index of the word, token is anchored to.
              Definition html.hpp:1983
              +
              token * token
              Points to the token.
              Definition html.hpp:1981
              +
              Numerical interval.
              Definition interval.hpp:18
              +
              T size() const
              Returns interval size.
              Definition interval.hpp:47
              +
              T end
              interval end
              Definition interval.hpp:20
              +
              T start
              interval start
              Definition interval.hpp:19
              +
              Maps index in source string to index in destination string.
              Definition mapping.hpp:17
              +
              mapping()
              Constructs a zero to zero mapping.
              Definition mapping.hpp:24
              +
              Tag attribute.
              Definition parser.hpp:8129
              +
              stdex::interval< size_t > value
              attribute value position in source
              Definition parser.hpp:8131
              +
              + + + + diff --git a/idrec_8hpp_source.html b/idrec_8hpp_source.html index e199c35a5..42a6c9810 100644 --- a/idrec_8hpp_source.html +++ b/idrec_8hpp_source.html @@ -471,7 +471,7 @@ $(document).ready(function() { init_codefold(0); }); diff --git a/include_2stdex_2compat_8hpp_source.html b/include_2stdex_2compat_8hpp_source.html index 471a0dcb9..40b3f6955 100644 --- a/include_2stdex_2compat_8hpp_source.html +++ b/include_2stdex_2compat_8hpp_source.html @@ -294,7 +294,7 @@ $(document).ready(function() { init_codefold(0); }); diff --git a/index.html b/index.html index cd0669efb..7555d1d4e 100644 --- a/index.html +++ b/index.html @@ -73,7 +73,7 @@ $(function() {
              stdex - Random stuff that didn't made it into std C++
              -

              +

              An auto-generated documentation is here.

              Requirements

                @@ -84,7 +84,7 @@ Requirements
              diff --git a/interval_8hpp_source.html b/interval_8hpp_source.html index 184dbed4d..7efa3e149 100644 --- a/interval_8hpp_source.html +++ b/interval_8hpp_source.html @@ -231,7 +231,7 @@ $(document).ready(function() { init_codefold(0); });
              diff --git a/locale_8hpp_source.html b/locale_8hpp_source.html index f9c7cec7f..ff4730171 100644 --- a/locale_8hpp_source.html +++ b/locale_8hpp_source.html @@ -142,14 +142,14 @@ $(document).ready(function() { init_codefold(0); });
              63 using locale = std::unique_ptr<struct __locale_struct, free_locale_delete>;
              64#endif
              65
              -
              69 const locale locale_C(create_locale(LC_ALL, "C"));
              +
              69 const inline locale locale_C(create_locale(LC_ALL, "C"));
              70}
              Deleter for unique_ptr using free_locale.
              Definition locale.hpp:45
              void operator()(locale_t locale) const
              Delete a pointer.
              Definition locale.hpp:49
              diff --git a/mapping_8hpp_source.html b/mapping_8hpp_source.html index 69b2fdbdf..a7a8d133b 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 4e7dda79f..a92e47bb2 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 da49ba935..0a608b603 100644 --- a/math_8hpp_source.html +++ b/math_8hpp_source.html @@ -147,7 +147,7 @@ $(document).ready(function() { init_codefold(0); }); diff --git a/memory_8hpp_source.html b/memory_8hpp_source.html index a4d4cfd00..a65afa5ab 100644 --- a/memory_8hpp_source.html +++ b/memory_8hpp_source.html @@ -129,7 +129,7 @@ $(document).ready(function() { init_codefold(0); }); diff --git a/menudata.js b/menudata.js index 051039d4a..52fc9d27f 100644 --- a/menudata.js +++ b/menudata.js @@ -92,6 +92,7 @@ var menudata={children:[ {text:"r",url:"functions_vars.html#index_r"}, {text:"s",url:"functions_vars.html#index_s"}, {text:"t",url:"functions_vars.html#index_t"}, +{text:"u",url:"functions_vars.html#index_u"}, {text:"v",url:"functions_vars.html#index_v"}, {text:"w",url:"functions_vars.html#index_w"}]}, {text:"Typedefs",url:"functions_type.html"}, diff --git a/parser_8cpp_source.html b/parser_8cpp_source.html index fa0934014..ab4d4dcf7 100644 --- a/parser_8cpp_source.html +++ b/parser_8cpp_source.html @@ -98,9 +98,9 @@ $(document).ready(function() { init_codefold(0); });
              14namespace Microsoft {
              15 namespace VisualStudio {
              16 namespace CppUnitTestFramework {
              -
              17 static std::wstring ToString(const stdex::interval<size_t>& q)
              +
              17 static std::wstring ToString(const stdex::interval<size_t>& q)
              18 {
              -
              19 return stdex::sprintf(L"<%zu, %zu>", nullptr, q.start, q.end);
              +
              19 return stdex::sprintf(L"<%zu, %zu>", nullptr, q.start, q.end);
              20 }
              21 }
              22 }
              @@ -114,379 +114,379 @@ $(document).ready(function() { init_codefold(0); });
              30 public:
              32 {
              -
              33 static const wchar_t text[] = L"This is a test.\nSecond line.";
              +
              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);
              +
              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);
              +
              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 {
              - -
              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);
              +
              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 {
              - -
              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);
              +
              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 {
              - -
              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);
              + +
              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);
              +
              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));
              +
              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);
              +
              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);
              +
              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);
              +
              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);
              +
              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({
              +
              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);
              +
              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({
              +
              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);
              +
              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);
              +
              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);
              +
              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 std::locale locale_slSI("sl_SI");
              191 wspace_cu space(false, locale_slSI);
              -
              192 wiban p(make_shared_no_delete(&space), locale_slSI);
              -
              193 Assert::IsTrue(p.match(L"SI56023120015226972", 0, SIZE_MAX));
              -
              194 Assert::IsTrue(p.is_valid);
              -
              195 Assert::AreEqual(L"SI", p.country);
              -
              196 Assert::AreEqual(L"56", p.check_digits);
              -
              197 Assert::AreEqual(L"023120015226972", p.bban);
              -
              198 Assert::IsTrue(p.match(L"SI56 0231 2001 5226 972", 0, SIZE_MAX));
              -
              199 Assert::IsTrue(p.is_valid);
              -
              200 Assert::AreEqual(L"SI", p.country);
              -
              201 Assert::AreEqual(L"56", p.check_digits);
              -
              202 Assert::AreEqual(L"023120015226972", p.bban);
              -
              203 Assert::IsFalse(p.match(L"si56 0231 2001 5226 972", 0, SIZE_MAX));
              -
              204 Assert::IsFalse(p.is_valid);
              -
              205 Assert::IsTrue(p.match(L"si56 0231 2001 5226 972", 0, SIZE_MAX, match_case_insensitive));
              -
              206 Assert::IsTrue(p.is_valid);
              -
              207 Assert::IsTrue(p.match(L"SI56 0231 2001 5226 9720", 0, SIZE_MAX));
              -
              208 Assert::AreEqual(stdex::interval<size_t>(0, 23), p.interval);
              -
              209 Assert::IsTrue(p.is_valid);
              -
              210 Assert::IsTrue(p.match(L"...SI56 0231 2001 5226 972...", 3, SIZE_MAX));
              -
              211 Assert::IsTrue(p.is_valid);
              -
              212 Assert::IsTrue(p.match(L"SI56 0231 2001 5226 972", 0, SIZE_MAX)); // no-break space
              -
              213 Assert::IsTrue(p.is_valid);
              +
              192 wiban p(make_shared_no_delete(&space), locale_slSI);
              +
              193 Assert::IsTrue(p.match(L"SI56023120015226972", 0, SIZE_MAX));
              +
              194 Assert::IsTrue(p.is_valid);
              +
              195 Assert::AreEqual(L"SI", p.country);
              +
              196 Assert::AreEqual(L"56", p.check_digits);
              +
              197 Assert::AreEqual(L"023120015226972", p.bban);
              +
              198 Assert::IsTrue(p.match(L"SI56 0231 2001 5226 972", 0, SIZE_MAX));
              +
              199 Assert::IsTrue(p.is_valid);
              +
              200 Assert::AreEqual(L"SI", p.country);
              +
              201 Assert::AreEqual(L"56", p.check_digits);
              +
              202 Assert::AreEqual(L"023120015226972", p.bban);
              +
              203 Assert::IsFalse(p.match(L"si56 0231 2001 5226 972", 0, SIZE_MAX));
              +
              204 Assert::IsFalse(p.is_valid);
              +
              205 Assert::IsTrue(p.match(L"si56 0231 2001 5226 972", 0, SIZE_MAX, match_case_insensitive));
              +
              206 Assert::IsTrue(p.is_valid);
              +
              207 Assert::IsTrue(p.match(L"SI56 0231 2001 5226 9720", 0, SIZE_MAX));
              +
              208 Assert::AreEqual(stdex::interval<size_t>(0, 23), p.interval);
              +
              209 Assert::IsTrue(p.is_valid);
              +
              210 Assert::IsTrue(p.match(L"...SI56 0231 2001 5226 972...", 3, SIZE_MAX));
              +
              211 Assert::IsTrue(p.is_valid);
              +
              212 Assert::IsTrue(p.match(L"SI56 0231 2001 5226 972", 0, SIZE_MAX)); // no-break space
              +
              213 Assert::IsTrue(p.is_valid);
              214
              -
              215 Assert::IsTrue(p.match(L"BE71 0961 2345 6769", 0, SIZE_MAX));
              -
              216 Assert::IsTrue(p.is_valid);
              -
              217 Assert::IsTrue(p.match(L"BR15 0000 0000 0000 1093 2840 814 P2", 0, SIZE_MAX));
              -
              218 Assert::IsTrue(p.is_valid);
              -
              219 Assert::IsTrue(p.match(L"CR99 0000 0000 0000 8888 88", 0, SIZE_MAX));
              -
              220 Assert::IsFalse(p.is_valid);
              -
              221 Assert::IsTrue(p.match(L"FR76 3000 6000 0112 3456 7890 189", 0, SIZE_MAX));
              -
              222 Assert::IsTrue(p.is_valid);
              -
              223 Assert::IsTrue(p.match(L"IE12 BOFI 9000 0112 3456 78", 0, SIZE_MAX));
              -
              224 Assert::IsFalse(p.is_valid);
              -
              225 Assert::IsTrue(p.match(L"DE91 1000 0000 0123 4567 89", 0, SIZE_MAX));
              -
              226 Assert::IsTrue(p.is_valid);
              -
              227 Assert::IsTrue(p.match(L"GR96 0810 0010 0000 0123 4567 890", 0, SIZE_MAX));
              -
              228 Assert::IsTrue(p.is_valid);
              -
              229 Assert::IsTrue(p.match(L"MU43 BOMM 0101 1234 5678 9101 000 MUR", 0, SIZE_MAX));
              -
              230 Assert::IsTrue(p.is_valid);
              -
              231 Assert::IsTrue(p.match(L"PK70 BANK 0000 1234 5678 9000", 0, SIZE_MAX));
              -
              232 Assert::IsTrue(p.is_valid);
              -
              233 Assert::IsTrue(p.match(L"PL10 1050 0099 7603 1234 5678 9123", 0, SIZE_MAX));
              -
              234 Assert::IsTrue(p.is_valid);
              -
              235 Assert::IsTrue(p.match(L"RO09 BCYP 0000 0012 3456 7890", 0, SIZE_MAX));
              -
              236 Assert::IsTrue(p.is_valid);
              -
              237 Assert::IsTrue(p.match(L"LC14 BOSL 1234 5678 9012 3456 7890 1234", 0, SIZE_MAX));
              -
              238 Assert::IsTrue(p.is_valid);
              -
              239 Assert::IsTrue(p.match(L"SA44 2000 0001 2345 6789 1234", 0, SIZE_MAX));
              -
              240 Assert::IsTrue(p.is_valid);
              -
              241 Assert::IsTrue(p.match(L"ES79 2100 0813 6101 2345 6789", 0, SIZE_MAX));
              -
              242 Assert::IsTrue(p.is_valid);
              -
              243 Assert::IsTrue(p.match(L"SE87 3000 0000 0101 2345 6789", 0, SIZE_MAX));
              -
              244 Assert::IsFalse(p.is_valid);
              -
              245 Assert::IsTrue(p.match(L"CH56 0483 5012 3456 7800 9", 0, SIZE_MAX));
              -
              246 Assert::IsTrue(p.is_valid);
              -
              247 Assert::IsTrue(p.match(L"GB98 MIDL 0700 9312 3456 78", 0, SIZE_MAX));
              -
              248 Assert::IsTrue(p.is_valid);
              +
              215 Assert::IsTrue(p.match(L"BE71 0961 2345 6769", 0, SIZE_MAX));
              +
              216 Assert::IsTrue(p.is_valid);
              +
              217 Assert::IsTrue(p.match(L"BR15 0000 0000 0000 1093 2840 814 P2", 0, SIZE_MAX));
              +
              218 Assert::IsTrue(p.is_valid);
              +
              219 Assert::IsTrue(p.match(L"CR99 0000 0000 0000 8888 88", 0, SIZE_MAX));
              +
              220 Assert::IsFalse(p.is_valid);
              +
              221 Assert::IsTrue(p.match(L"FR76 3000 6000 0112 3456 7890 189", 0, SIZE_MAX));
              +
              222 Assert::IsTrue(p.is_valid);
              +
              223 Assert::IsTrue(p.match(L"IE12 BOFI 9000 0112 3456 78", 0, SIZE_MAX));
              +
              224 Assert::IsFalse(p.is_valid);
              +
              225 Assert::IsTrue(p.match(L"DE91 1000 0000 0123 4567 89", 0, SIZE_MAX));
              +
              226 Assert::IsTrue(p.is_valid);
              +
              227 Assert::IsTrue(p.match(L"GR96 0810 0010 0000 0123 4567 890", 0, SIZE_MAX));
              +
              228 Assert::IsTrue(p.is_valid);
              +
              229 Assert::IsTrue(p.match(L"MU43 BOMM 0101 1234 5678 9101 000 MUR", 0, SIZE_MAX));
              +
              230 Assert::IsTrue(p.is_valid);
              +
              231 Assert::IsTrue(p.match(L"PK70 BANK 0000 1234 5678 9000", 0, SIZE_MAX));
              +
              232 Assert::IsTrue(p.is_valid);
              +
              233 Assert::IsTrue(p.match(L"PL10 1050 0099 7603 1234 5678 9123", 0, SIZE_MAX));
              +
              234 Assert::IsTrue(p.is_valid);
              +
              235 Assert::IsTrue(p.match(L"RO09 BCYP 0000 0012 3456 7890", 0, SIZE_MAX));
              +
              236 Assert::IsTrue(p.is_valid);
              +
              237 Assert::IsTrue(p.match(L"LC14 BOSL 1234 5678 9012 3456 7890 1234", 0, SIZE_MAX));
              +
              238 Assert::IsTrue(p.is_valid);
              +
              239 Assert::IsTrue(p.match(L"SA44 2000 0001 2345 6789 1234", 0, SIZE_MAX));
              +
              240 Assert::IsTrue(p.is_valid);
              +
              241 Assert::IsTrue(p.match(L"ES79 2100 0813 6101 2345 6789", 0, SIZE_MAX));
              +
              242 Assert::IsTrue(p.is_valid);
              +
              243 Assert::IsTrue(p.match(L"SE87 3000 0000 0101 2345 6789", 0, SIZE_MAX));
              +
              244 Assert::IsFalse(p.is_valid);
              +
              245 Assert::IsTrue(p.match(L"CH56 0483 5012 3456 7800 9", 0, SIZE_MAX));
              +
              246 Assert::IsTrue(p.is_valid);
              +
              247 Assert::IsTrue(p.match(L"GB98 MIDL 0700 9312 3456 78", 0, SIZE_MAX));
              +
              248 Assert::IsTrue(p.is_valid);
              249 }
              250
              251 {
              252 std::locale locale_slSI("sl_SI");
              253 wspace_cu space(false, locale_slSI);
              -
              254 wcreditor_reference p(make_shared_no_delete(&space), locale_slSI);
              -
              255 Assert::IsTrue(p.match(L"RF18539007547034", 0, SIZE_MAX));
              -
              256 Assert::IsTrue(p.is_valid);
              -
              257 Assert::AreEqual(L"18", p.check_digits);
              -
              258 Assert::AreEqual(L"000000000539007547034", p.reference);
              -
              259 Assert::IsTrue(p.match(L"RF18 5390 0754 7034", 0, SIZE_MAX));
              -
              260 Assert::IsTrue(p.is_valid);
              -
              261 Assert::AreEqual(L"18", p.check_digits);
              -
              262 Assert::AreEqual(L"000000000539007547034", p.reference);
              -
              263 Assert::IsFalse(p.match(L"rf18 5390 0754 7034", 0, SIZE_MAX));
              -
              264 Assert::IsFalse(p.is_valid);
              -
              265 Assert::IsTrue(p.match(L"rf18 5390 0754 7034", 0, SIZE_MAX, match_case_insensitive));
              -
              266 Assert::IsTrue(p.is_valid);
              -
              267 Assert::IsTrue(p.match(L"RF18 5390 0754 70340", 0, SIZE_MAX));
              -
              268 Assert::IsFalse(p.is_valid);
              -
              269 Assert::IsTrue(p.match(L"...RF18 5390 0754 7034...", 3, SIZE_MAX));
              -
              270 Assert::IsTrue(p.is_valid);
              -
              271 Assert::IsTrue(p.match(L"RF18 5390 0754 7034", 0, SIZE_MAX)); // no-break space
              -
              272 Assert::IsTrue(p.is_valid);
              +
              254 wcreditor_reference p(make_shared_no_delete(&space), locale_slSI);
              +
              255 Assert::IsTrue(p.match(L"RF18539007547034", 0, SIZE_MAX));
              +
              256 Assert::IsTrue(p.is_valid);
              +
              257 Assert::AreEqual(L"18", p.check_digits);
              +
              258 Assert::AreEqual(L"000000000539007547034", p.reference);
              +
              259 Assert::IsTrue(p.match(L"RF18 5390 0754 7034", 0, SIZE_MAX));
              +
              260 Assert::IsTrue(p.is_valid);
              +
              261 Assert::AreEqual(L"18", p.check_digits);
              +
              262 Assert::AreEqual(L"000000000539007547034", p.reference);
              +
              263 Assert::IsFalse(p.match(L"rf18 5390 0754 7034", 0, SIZE_MAX));
              +
              264 Assert::IsFalse(p.is_valid);
              +
              265 Assert::IsTrue(p.match(L"rf18 5390 0754 7034", 0, SIZE_MAX, match_case_insensitive));
              +
              266 Assert::IsTrue(p.is_valid);
              +
              267 Assert::IsTrue(p.match(L"RF18 5390 0754 70340", 0, SIZE_MAX));
              +
              268 Assert::IsFalse(p.is_valid);
              +
              269 Assert::IsTrue(p.match(L"...RF18 5390 0754 7034...", 3, SIZE_MAX));
              +
              270 Assert::IsTrue(p.is_valid);
              +
              271 Assert::IsTrue(p.match(L"RF18 5390 0754 7034", 0, SIZE_MAX)); // no-break space
              +
              272 Assert::IsTrue(p.is_valid);
              273 }
              274
              275 {
              276 std::locale locale_slSI("sl_SI");
              277 wspace_cu space(false, locale_slSI);
              -
              278 wsi_reference p(make_shared_no_delete(&space), locale_slSI);
              -
              279 Assert::IsTrue(p.match(L"SI121234567890120", 0, SIZE_MAX));
              -
              280 Assert::IsTrue(p.is_valid);
              -
              281 Assert::AreEqual(L"12", p.model);
              -
              282 Assert::AreEqual(stdex::interval<size_t>(4, 17), p.part1.interval);
              -
              283 Assert::IsTrue(p.match(L"SI12 1234567890120", 0, SIZE_MAX));
              -
              284 Assert::IsTrue(p.is_valid);
              -
              285 Assert::AreEqual(L"12", p.model);
              -
              286 Assert::AreEqual(stdex::interval<size_t>(5, 18), p.part1.interval);
              -
              287 Assert::IsFalse(p.match(L"si12 1234567890120", 0, SIZE_MAX));
              -
              288 Assert::IsTrue(p.match(L"si12 1234567890120", 0, SIZE_MAX, match_case_insensitive));
              -
              289 Assert::IsTrue(p.match(L"...SI12 1234567890120...", 3, SIZE_MAX));
              -
              290 Assert::IsTrue(p.match(L"SI12 1234567890120", 0, SIZE_MAX)); // no-break space
              +
              278 wsi_reference p(make_shared_no_delete(&space), locale_slSI);
              +
              279 Assert::IsTrue(p.match(L"SI121234567890120", 0, SIZE_MAX));
              +
              280 Assert::IsTrue(p.is_valid);
              +
              281 Assert::AreEqual(L"12", p.model);
              +
              282 Assert::AreEqual(stdex::interval<size_t>(4, 17), p.part1.interval);
              +
              283 Assert::IsTrue(p.match(L"SI12 1234567890120", 0, SIZE_MAX));
              +
              284 Assert::IsTrue(p.is_valid);
              +
              285 Assert::AreEqual(L"12", p.model);
              +
              286 Assert::AreEqual(stdex::interval<size_t>(5, 18), p.part1.interval);
              +
              287 Assert::IsFalse(p.match(L"si12 1234567890120", 0, SIZE_MAX));
              +
              288 Assert::IsTrue(p.match(L"si12 1234567890120", 0, SIZE_MAX, match_case_insensitive));
              +
              289 Assert::IsTrue(p.match(L"...SI12 1234567890120...", 3, SIZE_MAX));
              +
              290 Assert::IsTrue(p.match(L"SI12 1234567890120", 0, SIZE_MAX)); // no-break space
              291 }
              292 }
              293
              295 {
              296 std::locale locale_slSI("sl_SI");
              -
              297 static const char text[] = "V ko&zcaron;u&scaron;&ccaron;ku zlobnega mizarja stopiclja fant\nin kli&ccaron;e&nbsp;1234567890.";
              +
              297 static const char text[] = "V ko&zcaron;u&scaron;&ccaron;ku zlobnega mizarja stopiclja fant\nin kli&ccaron;e&nbsp;1234567890.";
              298
              299 {
              -
              300 sgml_noop p;
              -
              301 Assert::IsTrue(p.match(text));
              -
              302 Assert::AreEqual((size_t)0, p.interval.start);
              -
              303 Assert::AreEqual((size_t)0, p.interval.end);
              +
              300 sgml_noop p;
              +
              301 Assert::IsTrue(p.match(text));
              +
              302 Assert::AreEqual((size_t)0, p.interval.start);
              +
              303 Assert::AreEqual((size_t)0, p.interval.end);
              304 }
              305
              306 {
              -
              307 sgml_cp p("v");
              -
              308 Assert::IsFalse(p.match(text));
              -
              309 Assert::IsTrue(p.match(text, 0, _countof(text), match_case_insensitive));
              -
              310 Assert::AreEqual((size_t)0, p.interval.start);
              -
              311 Assert::AreEqual((size_t)1, p.interval.end);
              +
              307 sgml_cp p("v");
              +
              308 Assert::IsFalse(p.match(text));
              +
              309 Assert::IsTrue(p.match(text, 0, _countof(text), match_case_insensitive));
              +
              310 Assert::AreEqual((size_t)0, p.interval.start);
              +
              311 Assert::AreEqual((size_t)1, p.interval.end);
              312 }
              313
              314 {
              -
              315 sgml_cp p("&Zcaron;", SIZE_MAX, false, locale_slSI);
              -
              316 Assert::IsFalse(p.match(text, 4));
              -
              317 Assert::IsTrue(p.match(text, 4, _countof(text), match_case_insensitive));
              -
              318 Assert::AreEqual((size_t)4, p.interval.start);
              -
              319 Assert::AreEqual((size_t)12, p.interval.end);
              +
              315 sgml_cp p("&Zcaron;", SIZE_MAX, false, locale_slSI);
              +
              316 Assert::IsFalse(p.match(text, 4));
              +
              317 Assert::IsTrue(p.match(text, 4, _countof(text), match_case_insensitive));
              +
              318 Assert::AreEqual((size_t)4, p.interval.start);
              +
              319 Assert::AreEqual((size_t)12, p.interval.end);
              320 }
              321
              322 {
              - -
              324 Assert::IsFalse(p.match(text));
              -
              325 Assert::IsTrue(p.match(text, 1));
              -
              326 Assert::AreEqual((size_t)1, p.interval.start);
              -
              327 Assert::AreEqual((size_t)2, p.interval.end);
              -
              328 Assert::IsTrue(p.match(text, 79));
              -
              329 Assert::AreEqual((size_t)79, p.interval.start);
              -
              330 Assert::AreEqual((size_t)85, p.interval.end);
              +
              323 sgml_space_cp p(false, locale_slSI);
              +
              324 Assert::IsFalse(p.match(text));
              +
              325 Assert::IsTrue(p.match(text, 1));
              +
              326 Assert::AreEqual((size_t)1, p.interval.start);
              +
              327 Assert::AreEqual((size_t)2, p.interval.end);
              +
              328 Assert::IsTrue(p.match(text, 79));
              +
              329 Assert::AreEqual((size_t)79, p.interval.start);
              +
              330 Assert::AreEqual((size_t)85, p.interval.end);
              331 }
              332
              333 {
              -
              334 sgml_string_branch p(locale_slSI, "apple", "orange", "Ko&Zcaron;u&Scaron;&ccaron;Ku", nullptr);
              -
              335 Assert::IsFalse(p.match(text, 2));
              -
              336 Assert::IsTrue(p.match(text, 2, _countof(text), match_case_insensitive));
              -
              337 Assert::AreEqual((size_t)2, p.hit_offset);
              -
              338 Assert::AreEqual((size_t)2, p.interval.start);
              -
              339 Assert::AreEqual((size_t)31, p.interval.end);
              +
              334 sgml_string_branch p(locale_slSI, "apple", "orange", "Ko&Zcaron;u&Scaron;&ccaron;Ku", nullptr);
              +
              335 Assert::IsFalse(p.match(text, 2));
              +
              336 Assert::IsTrue(p.match(text, 2, _countof(text), match_case_insensitive));
              +
              337 Assert::AreEqual((size_t)2, p.hit_offset);
              +
              338 Assert::AreEqual((size_t)2, p.interval.start);
              +
              339 Assert::AreEqual((size_t)31, p.interval.end);
              340 }
              341
              342 {
              343 sgml_space_cp space(false, locale_slSI);
              -
              344 sgml_iban p(make_shared_no_delete(&space), locale_slSI);
              -
              345 Assert::IsTrue(p.match("SI56023120015226972", 0, SIZE_MAX));
              -
              346 Assert::IsTrue(p.is_valid);
              -
              347 Assert::AreEqual("SI", p.country);
              -
              348 Assert::AreEqual("56", p.check_digits);
              -
              349 Assert::AreEqual("023120015226972", p.bban);
              -
              350 Assert::IsTrue(p.match("SI56 0231 2001 5226 972", 0, SIZE_MAX));
              -
              351 Assert::IsTrue(p.is_valid);
              -
              352 Assert::AreEqual("SI", p.country);
              -
              353 Assert::AreEqual("56", p.check_digits);
              -
              354 Assert::AreEqual("023120015226972", p.bban);
              -
              355 Assert::IsFalse(p.match("si56 0231 2001 5226 972", 0, SIZE_MAX));
              -
              356 Assert::IsFalse(p.is_valid);
              -
              357 Assert::IsTrue(p.match("si56 0231 2001 5226 972", 0, SIZE_MAX, match_case_insensitive));
              -
              358 Assert::IsTrue(p.is_valid);
              -
              359 Assert::IsTrue(p.match("SI56 0231 2001 5226 9720", 0, SIZE_MAX));
              -
              360 Assert::AreEqual(stdex::interval<size_t>(0, 23), p.interval);
              -
              361 Assert::IsTrue(p.is_valid);
              -
              362 Assert::IsTrue(p.match("...SI56 0231 2001 5226 972...", 3, SIZE_MAX));
              -
              363 Assert::IsTrue(p.is_valid);
              -
              364 Assert::IsTrue(p.match("SI56&nbsp;0231&nbsp;2001&nbsp;5226&nbsp;972", 0, SIZE_MAX));
              -
              365 Assert::IsTrue(p.is_valid);
              +
              344 sgml_iban p(make_shared_no_delete(&space), locale_slSI);
              +
              345 Assert::IsTrue(p.match("SI56023120015226972", 0, SIZE_MAX));
              +
              346 Assert::IsTrue(p.is_valid);
              +
              347 Assert::AreEqual("SI", p.country);
              +
              348 Assert::AreEqual("56", p.check_digits);
              +
              349 Assert::AreEqual("023120015226972", p.bban);
              +
              350 Assert::IsTrue(p.match("SI56 0231 2001 5226 972", 0, SIZE_MAX));
              +
              351 Assert::IsTrue(p.is_valid);
              +
              352 Assert::AreEqual("SI", p.country);
              +
              353 Assert::AreEqual("56", p.check_digits);
              +
              354 Assert::AreEqual("023120015226972", p.bban);
              +
              355 Assert::IsFalse(p.match("si56 0231 2001 5226 972", 0, SIZE_MAX));
              +
              356 Assert::IsFalse(p.is_valid);
              +
              357 Assert::IsTrue(p.match("si56 0231 2001 5226 972", 0, SIZE_MAX, match_case_insensitive));
              +
              358 Assert::IsTrue(p.is_valid);
              +
              359 Assert::IsTrue(p.match("SI56 0231 2001 5226 9720", 0, SIZE_MAX));
              +
              360 Assert::AreEqual(stdex::interval<size_t>(0, 23), p.interval);
              +
              361 Assert::IsTrue(p.is_valid);
              +
              362 Assert::IsTrue(p.match("...SI56 0231 2001 5226 972...", 3, SIZE_MAX));
              +
              363 Assert::IsTrue(p.is_valid);
              +
              364 Assert::IsTrue(p.match("SI56&nbsp;0231&nbsp;2001&nbsp;5226&nbsp;972", 0, SIZE_MAX));
              +
              365 Assert::IsTrue(p.is_valid);
              366 }
              367
              368 {
              369 sgml_space_cp space(false, locale_slSI);
              -
              370 sgml_creditor_reference p(make_shared_no_delete(&space), locale_slSI);
              -
              371 Assert::IsTrue(p.match("RF18539007547034", 0, SIZE_MAX));
              -
              372 Assert::IsTrue(p.is_valid);
              -
              373 Assert::AreEqual("18", p.check_digits);
              -
              374 Assert::AreEqual("000000000539007547034", p.reference);
              -
              375 Assert::IsTrue(p.match("RF18 5390 0754 7034", 0, SIZE_MAX));
              -
              376 Assert::IsTrue(p.is_valid);
              -
              377 Assert::AreEqual("18", p.check_digits);
              -
              378 Assert::AreEqual("000000000539007547034", p.reference);
              -
              379 Assert::IsFalse(p.match("rf18 5390 0754 7034", 0, SIZE_MAX));
              -
              380 Assert::IsFalse(p.is_valid);
              -
              381 Assert::IsTrue(p.match("rf18 5390 0754 7034", 0, SIZE_MAX, match_case_insensitive));
              -
              382 Assert::IsTrue(p.is_valid);
              -
              383 Assert::IsTrue(p.match("RF18 5390 0754 70340", 0, SIZE_MAX));
              -
              384 Assert::IsFalse(p.is_valid);
              -
              385 Assert::IsTrue(p.match("...RF18 5390 0754 7034...", 3, SIZE_MAX));
              -
              386 Assert::IsTrue(p.is_valid);
              -
              387 Assert::IsTrue(p.match("RF18&nbsp;5390&nbsp;0754&nbsp;7034", 0, SIZE_MAX));
              -
              388 Assert::IsTrue(p.is_valid);
              +
              370 sgml_creditor_reference p(make_shared_no_delete(&space), locale_slSI);
              +
              371 Assert::IsTrue(p.match("RF18539007547034", 0, SIZE_MAX));
              +
              372 Assert::IsTrue(p.is_valid);
              +
              373 Assert::AreEqual("18", p.check_digits);
              +
              374 Assert::AreEqual("000000000539007547034", p.reference);
              +
              375 Assert::IsTrue(p.match("RF18 5390 0754 7034", 0, SIZE_MAX));
              +
              376 Assert::IsTrue(p.is_valid);
              +
              377 Assert::AreEqual("18", p.check_digits);
              +
              378 Assert::AreEqual("000000000539007547034", p.reference);
              +
              379 Assert::IsFalse(p.match("rf18 5390 0754 7034", 0, SIZE_MAX));
              +
              380 Assert::IsFalse(p.is_valid);
              +
              381 Assert::IsTrue(p.match("rf18 5390 0754 7034", 0, SIZE_MAX, match_case_insensitive));
              +
              382 Assert::IsTrue(p.is_valid);
              +
              383 Assert::IsTrue(p.match("RF18 5390 0754 70340", 0, SIZE_MAX));
              +
              384 Assert::IsFalse(p.is_valid);
              +
              385 Assert::IsTrue(p.match("...RF18 5390 0754 7034...", 3, SIZE_MAX));
              +
              386 Assert::IsTrue(p.is_valid);
              +
              387 Assert::IsTrue(p.match("RF18&nbsp;5390&nbsp;0754&nbsp;7034", 0, SIZE_MAX));
              +
              388 Assert::IsTrue(p.is_valid);
              389 }
              390
              391 {
              392 sgml_space_cp space(false, locale_slSI);
              -
              393 sgml_si_reference p(make_shared_no_delete(&space), locale_slSI);
              -
              394 Assert::IsTrue(p.match("SI121234567890120", 0, SIZE_MAX));
              -
              395 Assert::IsTrue(p.is_valid);
              -
              396 Assert::AreEqual("12", p.model);
              -
              397 Assert::AreEqual(stdex::interval<size_t>(4, 17), p.part1.interval);
              -
              398 Assert::IsTrue(p.match("SI12 1234567890120", 0, SIZE_MAX));
              -
              399 Assert::IsTrue(p.is_valid);
              -
              400 Assert::AreEqual("12", p.model);
              -
              401 Assert::AreEqual(stdex::interval<size_t>(5, 18), p.part1.interval);
              -
              402 Assert::IsFalse(p.match("si12 1234567890120", 0, SIZE_MAX));
              -
              403 Assert::IsTrue(p.match("si12 1234567890120", 0, SIZE_MAX, match_case_insensitive));
              -
              404 Assert::IsTrue(p.match("...SI12 1234567890120...", 3, SIZE_MAX));
              -
              405 Assert::IsTrue(p.match("SI12&nbsp;1234567890120", 0, SIZE_MAX));
              +
              393 sgml_si_reference p(make_shared_no_delete(&space), locale_slSI);
              +
              394 Assert::IsTrue(p.match("SI121234567890120", 0, SIZE_MAX));
              +
              395 Assert::IsTrue(p.is_valid);
              +
              396 Assert::AreEqual("12", p.model);
              +
              397 Assert::AreEqual(stdex::interval<size_t>(4, 17), p.part1.interval);
              +
              398 Assert::IsTrue(p.match("SI12 1234567890120", 0, SIZE_MAX));
              +
              399 Assert::IsTrue(p.is_valid);
              +
              400 Assert::AreEqual("12", p.model);
              +
              401 Assert::AreEqual(stdex::interval<size_t>(5, 18), p.part1.interval);
              +
              402 Assert::IsFalse(p.match("si12 1234567890120", 0, SIZE_MAX));
              +
              403 Assert::IsTrue(p.match("si12 1234567890120", 0, SIZE_MAX, match_case_insensitive));
              +
              404 Assert::IsTrue(p.match("...SI12 1234567890120...", 3, SIZE_MAX));
              +
              405 Assert::IsTrue(p.match("SI12&nbsp;1234567890120", 0, SIZE_MAX));
              406 }
              407 }
              408
              @@ -513,26 +513,26 @@ $(document).ready(function() { init_codefold(0); });
              429 "\r\n";
              430
              431 {
              -
              432 http_request p(locale);
              -
              433 Assert::IsTrue(p.match(request));
              -
              434 Assert::AreEqual((size_t)0, p.interval.start);
              -
              435 Assert::AreEqual((size_t)14, p.interval.end);
              -
              436 Assert::AreEqual((size_t)0, p.verb.start);
              -
              437 Assert::AreEqual((size_t)3, p.verb.end);
              -
              438 Assert::AreEqual((size_t)4, p.url.interval.start);
              -
              439 Assert::AreEqual((size_t)5, p.url.interval.end);
              -
              440 Assert::AreEqual((size_t)6, p.protocol.interval.start);
              -
              441 Assert::AreEqual((size_t)12, p.protocol.interval.end);
              -
              442 Assert::AreEqual((uint16_t)0x200, p.protocol.version);
              +
              432 http_request p(locale);
              +
              433 Assert::IsTrue(p.match(request));
              +
              434 Assert::AreEqual((size_t)0, p.interval.start);
              +
              435 Assert::AreEqual((size_t)14, p.interval.end);
              +
              436 Assert::AreEqual((size_t)0, p.verb.start);
              +
              437 Assert::AreEqual((size_t)3, p.verb.end);
              +
              438 Assert::AreEqual((size_t)4, p.url.interval.start);
              +
              439 Assert::AreEqual((size_t)5, p.url.interval.end);
              +
              440 Assert::AreEqual((size_t)6, p.protocol.interval.start);
              +
              441 Assert::AreEqual((size_t)12, p.protocol.interval.end);
              +
              442 Assert::AreEqual((uint16_t)0x200, p.protocol.version);
              443 }
              444
              445 {
              446 std::list<http_header> hdrs;
              -
              447 size_t offset = 14;
              +
              447 size_t offset = 14;
              448 for (;;) {
              -
              450 if (h.match(request, offset)) {
              -
              451 offset = h.interval.end;
              +
              450 if (h.match(request, offset)) {
              +
              452 hdrs.push_back(std::move(h));
              453 }
              454 else
              @@ -584,12 +584,12 @@ $(document).ready(function() { init_codefold(0); });
              500 };
              501}
              -
              stdex::interval< size_t > interval
              Region of the last match.
              Definition parser.hpp:173
              -
              Test for given string.
              Definition parser.hpp:819
              -
              Test for HTTP header.
              Definition parser.hpp:7151
              -
              Test for HTTP request.
              Definition parser.hpp:7013
              -
              Test for specific SGML code point.
              Definition parser.hpp:344
              -
              Test for any SGML space code point.
              Definition parser.hpp:431
              +
              stdex::interval< size_t > interval
              Region of the last match.
              Definition parser.hpp:172
              +
              Test for given string.
              Definition parser.hpp:818
              +
              Test for HTTP header.
              Definition parser.hpp:7147
              +
              Test for HTTP request.
              Definition parser.hpp:7010
              +
              Test for specific SGML code point.
              Definition parser.hpp:343
              +
              Test for any SGML space code point.
              Definition parser.hpp:430
              Numerical interval.
              Definition interval.hpp:18
              T size() const
              Returns interval size.
              Definition interval.hpp:47
              T end
              interval end
              Definition interval.hpp:20
              @@ -597,7 +597,7 @@ $(document).ready(function() { init_codefold(0); }); diff --git a/parser_8hpp_source.html b/parser_8hpp_source.html index 37cd84900..73dae8b84 100644 --- a/parser_8hpp_source.html +++ b/parser_8hpp_source.html @@ -156,7455 +156,8488 @@ $(document).ready(function() { init_codefold(0); });
              77 virtual ~basic_parser() {}
              78
              79 bool search(
              -
              80 _In_reads_or_z_(end) const T* text,
              +
              80 _In_reads_or_z_(end) const T* text,
              81 _In_ size_t start = 0,
              -
              82 _In_ size_t end = (size_t)-1,
              +
              82 _In_ size_t end = SIZE_MAX,
              83 _In_ int flags = match_default)
              84 {
              -
              85 for (size_t i = start; i < end && text[i]; i++)
              -
              86 if (match(text, i, end, flags))
              +
              85 for (size_t i = start; i < end && text[i]; i++)
              +
              86 if (match(text, i, end, flags))
              87 return true;
              88 return false;
              89 }
              90
              91 virtual bool match(
              -
              92 _In_reads_or_z_(end) const T* text,
              +
              92 _In_reads_or_z_(end) const T* text,
              93 _In_ size_t start = 0,
              -
              94 _In_ size_t end = (size_t)-1,
              +
              94 _In_ size_t end = SIZE_MAX,
              95 _In_ int flags = match_default) = 0;
              96
              97 template<class _Traits, class _Ax>
              98 inline bool match(
              -
              99 const std::basic_string<T, _Traits, _Ax>& text,
              +
              99 const std::basic_string<T, _Traits, _Ax>& text,
              100 _In_ size_t start = 0,
              -
              101 _In_ size_t end = (size_t)-1,
              +
              101 _In_ size_t end = SIZE_MAX,
              102 _In_ int flags = match_default)
              103 {
              -
              104 return match(text.c_str(), start, std::min<size_t>(end, text.size()), flags);
              +
              104 return match(text.c_str(), start, std::min<size_t>(end, text.size()), flags);
              105 }
              106
              107 virtual void invalidate()
              108 {
              -
              109 this->interval.start = 1;
              -
              110 this->interval.end = 0;
              -
              111 }
              -
              112
              -
              113 protected:
              -
              115 const wchar_t* next_sgml_cp(_In_ const char* text, _In_ size_t start, _In_ size_t end, _Out_ size_t& chr_end, _Out_ wchar_t(&buf)[3])
              -
              116 {
              -
              117 if (text[start] == '&') {
              -
              118 // Potential entity start
              -
              119 const auto& ctype = std::use_facet<std::ctype<T>>(m_locale);
              -
              120 for (chr_end = start + 1;; chr_end++) {
              -
              121 if (chr_end >= end || text[chr_end] == 0) {
              -
              122 // Unterminated entity
              -
              123 break;
              -
              124 }
              -
              125 if (text[chr_end] == ';') {
              -
              126 // Entity end
              -
              127 size_t n = chr_end - start - 1;
              -
              128 if (n >= 2 && text[start + 1] == '#') {
              -
              129 // Numerical entity
              -
              130 char32_t unicode;
              -
              131 if (text[start + 2] == 'x' || text[start + 2] == 'X')
              -
              132 unicode = strtou32(text + start + 3, n - 2, nullptr, 16);
              -
              133 else
              -
              134 unicode = strtou32(text + start + 2, n - 1, nullptr, 10);
              -
              135#ifdef _WIN32
              -
              136 if (unicode < 0x10000) {
              -
              137 buf[0] = (wchar_t)unicode;
              -
              138 buf[1] = 0;
              -
              139 }
              -
              140 else {
              -
              141 ucs4_to_surrogate_pair(buf, unicode);
              -
              142 buf[2] = 0;
              -
              143 }
              -
              144#else
              -
              145 buf[0] = (wchar_t)unicode;
              -
              146 buf[1] = 0;
              -
              147#endif
              -
              148 chr_end++;
              -
              149 return buf;
              -
              150 }
              -
              151 const wchar_t* entity_w = sgml2uni(text + start + 1, n);
              -
              152 if (entity_w) {
              -
              153 chr_end++;
              -
              154 return entity_w;
              -
              155 }
              -
              156 // Unknown entity.
              -
              157 break;
              -
              158 }
              -
              159 else if (text[chr_end] == '&' || ctype.is(ctype.space, text[chr_end])) {
              -
              160 // This char cannot possibly be a part of entity.
              -
              161 break;
              -
              162 }
              -
              163 }
              -
              164 }
              -
              165 buf[0] = text[start];
              -
              166 buf[1] = 0;
              -
              167 chr_end = start + 1;
              -
              168 return buf;
              -
              169 }
              -
              171
              -
              172 public:
              - -
              174
              -
              175 protected:
              -
              176 std::locale m_locale;
              -
              177 };
              +
              109 this->interval.invalidate();
              +
              110 }
              +
              111
              +
              112 protected:
              +
              114 const wchar_t* next_sgml_cp(_In_ const char* text, _In_ size_t start, _In_ size_t end, _Out_ size_t& chr_end, _Out_ wchar_t(&buf)[3])
              +
              115 {
              +
              116 if (text[start] == '&') {
              +
              117 // Potential entity start
              +
              118 const auto& ctype = std::use_facet<std::ctype<T>>(m_locale);
              +
              119 for (chr_end = start + 1;; chr_end++) {
              +
              120 if (chr_end >= end || text[chr_end] == 0) {
              +
              121 // Unterminated entity
              +
              122 break;
              +
              123 }
              +
              124 if (text[chr_end] == ';') {
              +
              125 // Entity end
              +
              126 size_t n = chr_end - start - 1;
              +
              127 if (n >= 2 && text[start + 1] == '#') {
              +
              128 // Numerical entity
              +
              129 char32_t unicode;
              +
              130 if (text[start + 2] == 'x' || text[start + 2] == 'X')
              +
              131 unicode = strtou32(text + start + 3, n - 2, nullptr, 16);
              +
              132 else
              +
              133 unicode = strtou32(text + start + 2, n - 1, nullptr, 10);
              +
              134#ifdef _WIN32
              +
              135 if (unicode < 0x10000) {
              +
              136 buf[0] = (wchar_t)unicode;
              +
              137 buf[1] = 0;
              +
              138 }
              +
              139 else {
              +
              140 ucs4_to_surrogate_pair(buf, unicode);
              +
              141 buf[2] = 0;
              +
              142 }
              +
              143#else
              +
              144 buf[0] = (wchar_t)unicode;
              +
              145 buf[1] = 0;
              +
              146#endif
              +
              147 chr_end++;
              +
              148 return buf;
              +
              149 }
              +
              150 const wchar_t* entity_w = sgml2uni(text + start + 1, n);
              +
              151 if (entity_w) {
              +
              152 chr_end++;
              +
              153 return entity_w;
              +
              154 }
              +
              155 // Unknown entity.
              +
              156 break;
              +
              157 }
              +
              158 else if (text[chr_end] == '&' || ctype.is(ctype.space, text[chr_end])) {
              +
              159 // This char cannot possibly be a part of entity.
              +
              160 break;
              +
              161 }
              +
              162 }
              +
              163 }
              +
              164 buf[0] = text[start];
              +
              165 buf[1] = 0;
              +
              166 chr_end = start + 1;
              +
              167 return buf;
              +
              168 }
              +
              170
              +
              171 public:
              + +
              173
              +
              174 protected:
              +
              175 std::locale m_locale;
              +
              176 };
              -
              178
              - - -
              181#ifdef _UNICODE
              -
              182 using tparser = wparser;
              -
              183#else
              -
              184 using tparser = parser;
              -
              185#endif
              - -
              187
              -
              191 template <class T>
              -
              -
              192 class basic_noop : public basic_parser<T>
              -
              193 {
              -
              194 public:
              -
              195 virtual bool match(
              -
              196 _In_reads_or_z_(end) const T* text,
              -
              197 _In_ size_t start = 0,
              -
              198 _In_ size_t end = (size_t)-1,
              -
              199 _In_ int flags = match_default)
              -
              200 {
              -
              201 _Assume_(text || start >= end);
              -
              202 if (start < end && text[start]) {
              -
              203 this->interval.start = this->interval.end = start;
              -
              204 return true;
              -
              205 }
              -
              206 this->interval.start = (this->interval.end = start) + 1;
              -
              207 return false;
              -
              208 }
              -
              209 };
              +
              177
              + + +
              180#ifdef _UNICODE
              +
              181 using tparser = wparser;
              +
              182#else
              +
              183 using tparser = parser;
              +
              184#endif
              + +
              186
              +
              190 template <class T>
              +
              +
              191 class basic_noop : public basic_parser<T>
              +
              192 {
              +
              193 public:
              +
              194 virtual bool match(
              +
              195 _In_reads_or_z_(end) const T* text,
              +
              196 _In_ size_t start = 0,
              +
              197 _In_ size_t end = SIZE_MAX,
              +
              198 _In_ int flags = match_default)
              +
              199 {
              +
              200 _Assume_(text || start >= end);
              +
              201 if (start < end && text[start]) {
              +
              202 this->interval.start = this->interval.end = start;
              +
              203 return true;
              +
              204 }
              +
              205 this->interval.invalidate();
              +
              206 return false;
              +
              207 }
              +
              208 };
              -
              210
              -
              211 using noop = basic_noop<char>;
              - -
              213#ifdef _UNICODE
              -
              214 using tnoop = wnoop;
              -
              215#else
              -
              216 using tnoop = noop;
              -
              217#endif
              - -
              219
              -
              223 template <class T>
              -
              -
              224 class basic_any_cu : public basic_parser<T>
              -
              225 {
              -
              226 public:
              -
              227 basic_any_cu(_In_ const std::locale& locale = std::locale()) : basic_parser<T>(locale) {}
              -
              228
              -
              229 virtual bool match(
              -
              230 _In_reads_or_z_(end) const T* text,
              -
              231 _In_ size_t start = 0,
              -
              232 _In_ size_t end = (size_t)-1,
              -
              233 _In_ int flags = match_default)
              -
              234 {
              -
              235 _Assume_(text || start >= end);
              -
              236 if (start < end && text[start]) {
              -
              237 this->interval.end = (this->interval.start = start) + 1;
              -
              238 return true;
              -
              239 }
              -
              240 this->interval.start = (this->interval.end = start) + 1;
              -
              241 return false;
              -
              242 }
              -
              243 };
              +
              209
              +
              210 using noop = basic_noop<char>;
              + +
              212#ifdef _UNICODE
              +
              213 using tnoop = wnoop;
              +
              214#else
              +
              215 using tnoop = noop;
              +
              216#endif
              + +
              218
              +
              222 template <class T>
              +
              +
              223 class basic_any_cu : public basic_parser<T>
              +
              224 {
              +
              225 public:
              +
              226 basic_any_cu(_In_ const std::locale& locale = std::locale()) : basic_parser<T>(locale) {}
              +
              227
              +
              228 virtual bool match(
              +
              229 _In_reads_or_z_(end) const T* text,
              +
              230 _In_ size_t start = 0,
              +
              231 _In_ size_t end = SIZE_MAX,
              +
              232 _In_ int flags = match_default)
              +
              233 {
              +
              234 _Assume_(text || start >= end);
              +
              235 if (start < end && text[start]) {
              +
              236 this->interval.end = (this->interval.start = start) + 1;
              +
              237 return true;
              +
              238 }
              +
              239 this->interval.invalidate();
              +
              240 return false;
              +
              241 }
              +
              242 };
              -
              244
              - - -
              247#ifdef _UNICODE
              -
              248 using tany_cu = wany_cu;
              -
              249#else
              -
              250 using tany_cu = any_cu;
              -
              251#endif
              -
              252
              -
              -
              256 class sgml_any_cp : public basic_any_cu<char>
              -
              257 {
              -
              258 public:
              -
              259 sgml_any_cp(_In_ const std::locale& locale = std::locale()) : basic_any_cu<char>(locale) {}
              -
              260
              -
              261 virtual bool match(
              -
              262 _In_reads_or_z_(end) const char* text,
              -
              263 _In_ size_t start = 0,
              -
              264 _In_ size_t end = (size_t)-1,
              -
              265 _In_ int flags = match_default)
              -
              266 {
              -
              267 _Assume_(text || start >= end);
              -
              268 if (start < end && text[start]) {
              -
              269 if (text[start] == '&') {
              -
              270 // SGML entity
              -
              271 const auto& ctype = std::use_facet<std::ctype<char>>(m_locale);
              -
              272 for (this->interval.end = start + 1; this->interval.end < end && text[this->interval.end]; this->interval.end++)
              -
              273 if (text[this->interval.end] == ';') {
              -
              274 this->interval.end++;
              -
              275 this->interval.start = start;
              -
              276 return true;
              -
              277 }
              -
              278 else if (text[this->interval.end] == '&' || ctype.is(ctype.space, text[this->interval.end]))
              -
              279 break;
              -
              280 // Unterminated entity
              -
              281 }
              -
              282 this->interval.end = (this->interval.start = start) + 1;
              -
              283 return true;
              -
              284 }
              -
              285 this->interval.start = (this->interval.end = start) + 1;
              -
              286 return false;
              -
              287 }
              -
              288 };
              +
              243
              + + +
              246#ifdef _UNICODE
              +
              247 using tany_cu = wany_cu;
              +
              248#else
              +
              249 using tany_cu = any_cu;
              +
              250#endif
              +
              251
              +
              +
              255 class sgml_any_cp : public basic_any_cu<char>
              +
              256 {
              +
              257 public:
              +
              258 sgml_any_cp(_In_ const std::locale& locale = std::locale()) : basic_any_cu<char>(locale) {}
              +
              259
              +
              260 virtual bool match(
              +
              261 _In_reads_or_z_(end) const char* text,
              +
              262 _In_ size_t start = 0,
              +
              263 _In_ size_t end = SIZE_MAX,
              +
              264 _In_ int flags = match_default)
              +
              265 {
              +
              266 _Assume_(text || start >= end);
              +
              267 if (start < end && text[start]) {
              +
              268 if (text[start] == '&') {
              +
              269 // SGML entity
              +
              270 const auto& ctype = std::use_facet<std::ctype<char>>(m_locale);
              +
              271 for (this->interval.end = start + 1; this->interval.end < end && text[this->interval.end]; this->interval.end++)
              +
              272 if (text[this->interval.end] == ';') {
              +
              273 this->interval.end++;
              +
              274 this->interval.start = start;
              +
              275 return true;
              +
              276 }
              +
              277 else if (text[this->interval.end] == '&' || ctype.is(ctype.space, text[this->interval.end]))
              +
              278 break;
              +
              279 // Unterminated entity
              +
              280 }
              +
              281 this->interval.end = (this->interval.start = start) + 1;
              +
              282 return true;
              +
              283 }
              +
              284 this->interval.invalidate();
              +
              285 return false;
              +
              286 }
              +
              287 };
              -
              289
              -
              293 template <class T>
              -
              -
              294 class basic_cu : public basic_parser<T>
              -
              295 {
              -
              296 public:
              -
              297 basic_cu(T chr, bool invert = false, _In_ const std::locale& locale = std::locale()) :
              -
              298 basic_parser<T>(locale),
              -
              299 m_chr(chr),
              -
              300 m_invert(invert)
              -
              301 {}
              -
              302
              -
              303 virtual bool match(
              -
              304 _In_reads_or_z_(end) const T* text,
              -
              305 _In_ size_t start = 0,
              -
              306 _In_ size_t end = (size_t)-1,
              -
              307 _In_ int flags = match_default)
              -
              308 {
              -
              309 _Assume_(text || start >= end);
              -
              310 if (start < end && text[start]) {
              -
              311 bool r;
              -
              312 if (flags & match_case_insensitive) {
              -
              313 const auto& ctype = std::use_facet<std::ctype<T>>(this->m_locale);
              -
              314 r = ctype.tolower(text[start]) == ctype.tolower(m_chr);
              -
              315 }
              -
              316 else
              -
              317 r = text[start] == m_chr;
              -
              318 if ((r && !m_invert) || (!r && m_invert)) {
              -
              319 this->interval.end = (this->interval.start = start) + 1;
              -
              320 return true;
              -
              321 }
              -
              322 }
              -
              323 this->interval.start = (this->interval.end = start) + 1;
              -
              324 return false;
              -
              325 }
              -
              326
              -
              327 protected:
              -
              328 T m_chr;
              -
              329 bool m_invert;
              -
              330 };
              +
              288
              +
              292 template <class T>
              +
              +
              293 class basic_cu : public basic_parser<T>
              +
              294 {
              +
              295 public:
              +
              296 basic_cu(T chr, bool invert = false, _In_ const std::locale& locale = std::locale()) :
              +
              297 basic_parser<T>(locale),
              +
              298 m_chr(chr),
              +
              299 m_invert(invert)
              +
              300 {}
              +
              301
              +
              302 virtual bool match(
              +
              303 _In_reads_or_z_(end) const T* text,
              +
              304 _In_ size_t start = 0,
              +
              305 _In_ size_t end = SIZE_MAX,
              +
              306 _In_ int flags = match_default)
              +
              307 {
              +
              308 _Assume_(text || start >= end);
              +
              309 if (start < end && text[start]) {
              +
              310 bool r;
              +
              311 if (flags & match_case_insensitive) {
              +
              312 const auto& ctype = std::use_facet<std::ctype<T>>(this->m_locale);
              +
              313 r = ctype.tolower(text[start]) == ctype.tolower(m_chr);
              +
              314 }
              +
              315 else
              +
              316 r = text[start] == m_chr;
              +
              317 if ((r && !m_invert) || (!r && m_invert)) {
              +
              318 this->interval.end = (this->interval.start = start) + 1;
              +
              319 return true;
              +
              320 }
              +
              321 }
              +
              322 this->interval.invalidate();
              +
              323 return false;
              +
              324 }
              +
              325
              +
              326 protected:
              +
              327 T m_chr;
              +
              328 bool m_invert;
              +
              329 };
              -
              331
              -
              332 using cu = basic_cu<char>;
              -
              333 using wcu = basic_cu<wchar_t>;
              -
              334#ifdef _UNICODE
              -
              335 using tcu = wcu;
              -
              336#else
              -
              337 using tcu = cu;
              -
              338#endif
              -
              339
              -
              -
              343 class sgml_cp : public sgml_parser
              -
              344 {
              -
              345 public:
              -
              346 sgml_cp(const char* chr, size_t count = (size_t)-1, bool invert = false, _In_ const std::locale& locale = std::locale()) :
              -
              347 sgml_parser(locale),
              -
              348 m_invert(invert)
              -
              349 {
              -
              350 _Assume_(chr || !count);
              -
              351 wchar_t buf[3];
              -
              352 size_t chr_end;
              -
              353 m_chr.assign(count ? next_sgml_cp(chr, 0, count, chr_end, buf) : L"");
              -
              354 }
              -
              355
              -
              356 virtual bool match(
              -
              357 _In_reads_or_z_(end) const char* text,
              -
              358 _In_ size_t start = 0,
              -
              359 _In_ size_t end = (size_t)-1,
              -
              360 _In_ int flags = match_default)
              -
              361 {
              -
              362 _Assume_(text || start >= end);
              -
              363 if (start < end && text[start]) {
              -
              364 wchar_t buf[3];
              -
              365 const wchar_t* chr = next_sgml_cp(text, start, end, this->interval.end, buf);
              -
              366 bool r = ((flags & match_case_insensitive) ?
              -
              367 stdex::strnicmp(chr, (size_t)-1, m_chr.c_str(), m_chr.size(), m_locale) :
              -
              368 stdex::strncmp(chr, (size_t)-1, m_chr.c_str(), m_chr.size())) == 0;
              -
              369 if ((r && !m_invert) || (!r && m_invert)) {
              -
              370 this->interval.start = start;
              -
              371 return true;
              -
              372 }
              -
              373 }
              -
              374 this->interval.start = (this->interval.end = start) + 1;
              -
              375 return false;
              -
              376 }
              -
              377
              -
              378 protected:
              -
              379 std::wstring m_chr;
              -
              380 bool m_invert;
              -
              381 };
              +
              330
              +
              331 using cu = basic_cu<char>;
              +
              332 using wcu = basic_cu<wchar_t>;
              +
              333#ifdef _UNICODE
              +
              334 using tcu = wcu;
              +
              335#else
              +
              336 using tcu = cu;
              +
              337#endif
              +
              338
              +
              +
              342 class sgml_cp : public sgml_parser
              +
              343 {
              +
              344 public:
              +
              345 sgml_cp(const char* chr, size_t count = SIZE_MAX, bool invert = false, _In_ const std::locale& locale = std::locale()) :
              +
              346 sgml_parser(locale),
              +
              347 m_invert(invert)
              +
              348 {
              +
              349 _Assume_(chr || !count);
              +
              350 wchar_t buf[3];
              +
              351 size_t chr_end;
              +
              352 m_chr.assign(count ? next_sgml_cp(chr, 0, count, chr_end, buf) : L"");
              +
              353 }
              +
              354
              +
              355 virtual bool match(
              +
              356 _In_reads_or_z_(end) const char* text,
              +
              357 _In_ size_t start = 0,
              +
              358 _In_ size_t end = SIZE_MAX,
              +
              359 _In_ int flags = match_default)
              +
              360 {
              +
              361 _Assume_(text || start >= end);
              +
              362 if (start < end && text[start]) {
              +
              363 wchar_t buf[3];
              +
              364 const wchar_t* chr = next_sgml_cp(text, start, end, this->interval.end, buf);
              +
              365 bool r = ((flags & match_case_insensitive) ?
              +
              366 stdex::strnicmp(chr, SIZE_MAX, m_chr.c_str(), m_chr.size(), m_locale) :
              +
              367 stdex::strncmp(chr, SIZE_MAX, m_chr.c_str(), m_chr.size())) == 0;
              +
              368 if ((r && !m_invert) || (!r && m_invert)) {
              +
              369 this->interval.start = start;
              +
              370 return true;
              +
              371 }
              +
              372 }
              +
              373 this->interval.invalidate();
              +
              374 return false;
              +
              375 }
              +
              376
              +
              377 protected:
              +
              378 std::wstring m_chr;
              +
              379 bool m_invert;
              +
              380 };
              -
              382
              -
              386 template <class T>
              -
              -
              387 class basic_space_cu : public basic_parser<T>
              -
              388 {
              -
              389 public:
              -
              390 basic_space_cu(bool invert = false, _In_ const std::locale& locale = std::locale()) :
              -
              391 basic_parser<T>(locale),
              -
              392 m_invert(invert)
              -
              393 {}
              -
              394
              -
              395 virtual bool match(
              -
              396 _In_reads_or_z_(end) const T* text,
              -
              397 _In_ size_t start = 0,
              -
              398 _In_ size_t end = (size_t)-1,
              -
              399 _In_ int flags = match_default)
              -
              400 {
              -
              401 _Assume_(text || start >= end);
              -
              402 if (start < end && text[start]) {
              -
              403 bool r =
              -
              404 ((flags & match_multiline) || !islbreak(text[start])) &&
              -
              405 std::use_facet<std::ctype<T>>(this->m_locale).is(std::ctype_base::space, text[start]);
              -
              406 if ((r && !m_invert) || (!r && m_invert)) {
              -
              407 this->interval.end = (this->interval.start = start) + 1;
              -
              408 return true;
              -
              409 }
              -
              410 }
              -
              411 this->interval.start = (this->interval.end = start) + 1;
              -
              412 return false;
              -
              413 }
              -
              414
              -
              415 protected:
              -
              416 bool m_invert;
              -
              417 };
              +
              381
              +
              385 template <class T>
              +
              +
              386 class basic_space_cu : public basic_parser<T>
              +
              387 {
              +
              388 public:
              +
              389 basic_space_cu(bool invert = false, _In_ const std::locale& locale = std::locale()) :
              +
              390 basic_parser<T>(locale),
              +
              391 m_invert(invert)
              +
              392 {}
              +
              393
              +
              394 virtual bool match(
              +
              395 _In_reads_or_z_(end) const T* text,
              +
              396 _In_ size_t start = 0,
              +
              397 _In_ size_t end = SIZE_MAX,
              +
              398 _In_ int flags = match_default)
              +
              399 {
              +
              400 _Assume_(text || start >= end);
              +
              401 if (start < end && text[start]) {
              +
              402 bool r =
              +
              403 ((flags & match_multiline) || !islbreak(text[start])) &&
              +
              404 std::use_facet<std::ctype<T>>(this->m_locale).is(std::ctype_base::space, text[start]);
              +
              405 if ((r && !m_invert) || (!r && m_invert)) {
              +
              406 this->interval.end = (this->interval.start = start) + 1;
              +
              407 return true;
              +
              408 }
              +
              409 }
              +
              410 this->interval.invalidate();
              +
              411 return false;
              +
              412 }
              +
              413
              +
              414 protected:
              +
              415 bool m_invert;
              +
              416 };
              -
              418
              - - -
              421#ifdef _UNICODE
              -
              422 using tspace_cu = wspace_cu;
              -
              423#else
              -
              424 using tspace_cu = space_cu;
              -
              425#endif
              -
              426
              -
              -
              430 class sgml_space_cp : public basic_space_cu<char>
              -
              431 {
              -
              432 public:
              -
              433 sgml_space_cp(_In_ bool invert = false, _In_ const std::locale& locale = std::locale()) :
              - -
              435 {}
              -
              436
              -
              437 virtual bool match(
              -
              438 _In_reads_or_z_(end) const char* text,
              -
              439 _In_ size_t start = 0,
              -
              440 _In_ size_t end = (size_t)-1,
              -
              441 _In_ int flags = match_default)
              -
              442 {
              -
              443 _Assume_(text || start >= end);
              -
              444 if (start < end && text[start]) {
              -
              445 wchar_t buf[3];
              -
              446 const wchar_t* chr = next_sgml_cp(text, start, end, this->interval.end, buf);
              -
              447 const wchar_t* chr_end = chr + stdex::strlen(chr);
              -
              448 bool r =
              -
              449 ((flags & match_multiline) || !islbreak(chr, (size_t)-1)) &&
              -
              450 std::use_facet<std::ctype<wchar_t>>(m_locale).scan_not(std::ctype_base::space, chr, chr_end) == chr_end;
              -
              451 if ((r && !m_invert) || (!r && m_invert)) {
              -
              452 this->interval.start = start;
              -
              453 return true;
              -
              454 }
              -
              455 }
              -
              456
              -
              457 this->interval.start = (this->interval.end = start) + 1;
              -
              458 return false;
              -
              459 }
              -
              460 };
              +
              417
              + + +
              420#ifdef _UNICODE
              +
              421 using tspace_cu = wspace_cu;
              +
              422#else
              +
              423 using tspace_cu = space_cu;
              +
              424#endif
              +
              425
              +
              +
              429 class sgml_space_cp : public basic_space_cu<char>
              +
              430 {
              +
              431 public:
              +
              432 sgml_space_cp(_In_ bool invert = false, _In_ const std::locale& locale = std::locale()) :
              + +
              434 {}
              +
              435
              +
              436 virtual bool match(
              +
              437 _In_reads_or_z_(end) const char* text,
              +
              438 _In_ size_t start = 0,
              +
              439 _In_ size_t end = SIZE_MAX,
              +
              440 _In_ int flags = match_default)
              +
              441 {
              +
              442 _Assume_(text || start >= end);
              +
              443 if (start < end && text[start]) {
              +
              444 wchar_t buf[3];
              +
              445 const wchar_t* chr = next_sgml_cp(text, start, end, this->interval.end, buf);
              +
              446 const wchar_t* chr_end = chr + stdex::strlen(chr);
              +
              447 bool r =
              +
              448 ((flags & match_multiline) || !islbreak(chr, SIZE_MAX)) &&
              +
              449 std::use_facet<std::ctype<wchar_t>>(m_locale).scan_not(std::ctype_base::space, chr, chr_end) == chr_end;
              +
              450 if ((r && !m_invert) || (!r && m_invert)) {
              +
              451 this->interval.start = start;
              +
              452 return true;
              +
              453 }
              +
              454 }
              +
              455
              +
              456 this->interval.invalidate();
              +
              457 return false;
              +
              458 }
              +
              459 };
              -
              461
              -
              465 template <class T>
              -
              -
              466 class basic_punct_cu : public basic_parser<T>
              -
              467 {
              -
              468 public:
              -
              469 basic_punct_cu(bool invert = false, _In_ const std::locale& locale = std::locale()) :
              -
              470 basic_parser<T>(locale),
              -
              471 m_invert(invert)
              -
              472 {}
              -
              473
              -
              474 virtual bool match(
              -
              475 _In_reads_or_z_(end) const T* text,
              -
              476 _In_ size_t start = 0,
              -
              477 _In_ size_t end = (size_t)-1,
              -
              478 _In_ int flags = match_default)
              -
              479 {
              -
              480 _Assume_(text || start >= end);
              -
              481 if (start < end && text[start]) {
              -
              482 bool r = std::use_facet<std::ctype<T>>(this->m_locale).is(std::ctype_base::punct, text[start]);
              -
              483 if ((r && !m_invert) || (!r && m_invert)) {
              -
              484 this->interval.end = (this->interval.start = start) + 1;
              -
              485 return true;
              -
              486 }
              -
              487 }
              -
              488 this->interval.start = (this->interval.end = start) + 1;
              -
              489 return false;
              -
              490 }
              -
              491
              -
              492 protected:
              -
              493 bool m_invert;
              -
              494 };
              +
              460
              +
              464 template <class T>
              +
              +
              465 class basic_punct_cu : public basic_parser<T>
              +
              466 {
              +
              467 public:
              +
              468 basic_punct_cu(bool invert = false, _In_ const std::locale& locale = std::locale()) :
              +
              469 basic_parser<T>(locale),
              +
              470 m_invert(invert)
              +
              471 {}
              +
              472
              +
              473 virtual bool match(
              +
              474 _In_reads_or_z_(end) const T* text,
              +
              475 _In_ size_t start = 0,
              +
              476 _In_ size_t end = SIZE_MAX,
              +
              477 _In_ int flags = match_default)
              +
              478 {
              +
              479 _Assume_(text || start >= end);
              +
              480 if (start < end && text[start]) {
              +
              481 bool r = std::use_facet<std::ctype<T>>(this->m_locale).is(std::ctype_base::punct, text[start]);
              +
              482 if ((r && !m_invert) || (!r && m_invert)) {
              +
              483 this->interval.end = (this->interval.start = start) + 1;
              +
              484 return true;
              +
              485 }
              +
              486 }
              +
              487 this->interval.invalidate();
              +
              488 return false;
              +
              489 }
              +
              490
              +
              491 protected:
              +
              492 bool m_invert;
              +
              493 };
              -
              495
              - - -
              498#ifdef _UNICODE
              -
              499 using tpunct_cu = wpunct_cu;
              -
              500#else
              -
              501 using tpunct_cu = punct_cu;
              -
              502#endif
              -
              503
              -
              -
              507 class sgml_punct_cp : public basic_punct_cu<char>
              -
              508 {
              -
              509 public:
              -
              510 sgml_punct_cp(bool invert = false, _In_ const std::locale& locale = std::locale()) :
              - -
              512 {}
              -
              513
              -
              514 virtual bool match(
              -
              515 _In_reads_or_z_(end) const char* text,
              -
              516 _In_ size_t start = 0,
              -
              517 _In_ size_t end = (size_t)-1,
              -
              518 _In_ int flags = match_default)
              -
              519 {
              -
              520 _Assume_(text || start >= end);
              -
              521 if (start < end && text[start]) {
              -
              522 wchar_t buf[3];
              -
              523 const wchar_t* chr = next_sgml_cp(text, start, end, this->interval.end, buf);
              -
              524 const wchar_t* chr_end = chr + stdex::strlen(chr);
              -
              525 bool r = std::use_facet<std::ctype<wchar_t>>(m_locale).scan_not(std::ctype_base::punct, chr, chr_end) == chr_end;
              -
              526 if ((r && !m_invert) || (!r && m_invert)) {
              -
              527 this->interval.start = start;
              -
              528 return true;
              -
              529 }
              -
              530 }
              -
              531 this->interval.start = (this->interval.end = start) + 1;
              -
              532 return false;
              -
              533 }
              -
              534 };
              +
              494
              + + +
              497#ifdef _UNICODE
              +
              498 using tpunct_cu = wpunct_cu;
              +
              499#else
              +
              500 using tpunct_cu = punct_cu;
              +
              501#endif
              +
              502
              +
              +
              506 class sgml_punct_cp : public basic_punct_cu<char>
              +
              507 {
              +
              508 public:
              +
              509 sgml_punct_cp(bool invert = false, _In_ const std::locale& locale = std::locale()) :
              + +
              511 {}
              +
              512
              +
              513 virtual bool match(
              +
              514 _In_reads_or_z_(end) const char* text,
              +
              515 _In_ size_t start = 0,
              +
              516 _In_ size_t end = SIZE_MAX,
              +
              517 _In_ int flags = match_default)
              +
              518 {
              +
              519 _Assume_(text || start >= end);
              +
              520 if (start < end && text[start]) {
              +
              521 wchar_t buf[3];
              +
              522 const wchar_t* chr = next_sgml_cp(text, start, end, this->interval.end, buf);
              +
              523 const wchar_t* chr_end = chr + stdex::strlen(chr);
              +
              524 bool r = std::use_facet<std::ctype<wchar_t>>(m_locale).scan_not(std::ctype_base::punct, chr, chr_end) == chr_end;
              +
              525 if ((r && !m_invert) || (!r && m_invert)) {
              +
              526 this->interval.start = start;
              +
              527 return true;
              +
              528 }
              +
              529 }
              +
              530 this->interval.invalidate();
              +
              531 return false;
              +
              532 }
              +
              533 };
              -
              535
              -
              539 template <class T>
              -
              - -
              541 {
              -
              542 public:
              -
              543 basic_space_or_punct_cu(bool invert = false, _In_ const std::locale& locale = std::locale()) :
              -
              544 basic_parser<T>(locale),
              -
              545 m_invert(invert)
              -
              546 {}
              -
              547
              -
              548 virtual bool match(
              -
              549 _In_reads_or_z_(end) const T* text,
              -
              550 _In_ size_t start = 0,
              -
              551 _In_ size_t end = (size_t)-1,
              -
              552 _In_ int flags = match_default)
              -
              553 {
              -
              554 _Assume_(text || start >= end);
              -
              555 if (start < end && text[start]) {
              -
              556 bool r =
              -
              557 ((flags & match_multiline) || !islbreak(text[start])) &&
              -
              558 std::use_facet<std::ctype<T>>(this->m_locale).is(std::ctype_base::space | std::ctype_base::punct, text[start]);
              -
              559 if ((r && !m_invert) || (!r && m_invert)) {
              -
              560 this->interval.end = (this->interval.start = start) + 1;
              -
              561 return true;
              -
              562 }
              -
              563 }
              -
              564 this->interval.start = (this->interval.end = start) + 1;
              -
              565 return false;
              -
              566 }
              -
              567
              -
              568 protected:
              -
              569 bool m_invert;
              -
              570 };
              +
              534
              +
              538 template <class T>
              +
              + +
              540 {
              +
              541 public:
              +
              542 basic_space_or_punct_cu(bool invert = false, _In_ const std::locale& locale = std::locale()) :
              +
              543 basic_parser<T>(locale),
              +
              544 m_invert(invert)
              +
              545 {}
              +
              546
              +
              547 virtual bool match(
              +
              548 _In_reads_or_z_(end) const T* text,
              +
              549 _In_ size_t start = 0,
              +
              550 _In_ size_t end = SIZE_MAX,
              +
              551 _In_ int flags = match_default)
              +
              552 {
              +
              553 _Assume_(text || start >= end);
              +
              554 if (start < end && text[start]) {
              +
              555 bool r =
              +
              556 ((flags & match_multiline) || !islbreak(text[start])) &&
              +
              557 std::use_facet<std::ctype<T>>(this->m_locale).is(std::ctype_base::space | std::ctype_base::punct, text[start]);
              +
              558 if ((r && !m_invert) || (!r && m_invert)) {
              +
              559 this->interval.end = (this->interval.start = start) + 1;
              +
              560 return true;
              +
              561 }
              +
              562 }
              +
              563 this->interval.invalidate();
              +
              564 return false;
              +
              565 }
              +
              566
              +
              567 protected:
              +
              568 bool m_invert;
              +
              569 };
              -
              571
              - - -
              574#ifdef _UNICODE
              - -
              576#else
              - -
              578#endif
              -
              579
              -
              - -
              584 {
              -
              585 public:
              -
              586 sgml_space_or_punct_cp(bool invert = false, _In_ const std::locale& locale = std::locale()) :
              - -
              588 {}
              -
              589
              -
              590 virtual bool match(
              -
              591 _In_reads_or_z_(end) const char* text,
              -
              592 _In_ size_t start = 0,
              -
              593 _In_ size_t end = (size_t)-1,
              -
              594 _In_ int flags = match_default)
              -
              595 {
              -
              596 _Assume_(text || start >= end);
              -
              597 if (start < end && text[start]) {
              -
              598 wchar_t buf[3];
              -
              599 const wchar_t* chr = next_sgml_cp(text, start, end, this->interval.end, buf);
              -
              600 const wchar_t* chr_end = chr + stdex::strlen(chr);
              -
              601 bool r =
              -
              602 ((flags & match_multiline) || !islbreak(chr, (size_t)-1)) &&
              -
              603 std::use_facet<std::ctype<wchar_t>>(m_locale).scan_not(std::ctype_base::space | std::ctype_base::punct, chr, chr_end) == chr_end;
              -
              604 if ((r && !m_invert) || (!r && m_invert)) {
              -
              605 this->interval.start = start;
              -
              606 return true;
              -
              607 }
              -
              608 }
              -
              609 this->interval.start = (this->interval.end = start) + 1;
              -
              610 return false;
              -
              611 }
              -
              612 };
              +
              570
              + + +
              573#ifdef _UNICODE
              + +
              575#else
              + +
              577#endif
              +
              578
              +
              + +
              583 {
              +
              584 public:
              +
              585 sgml_space_or_punct_cp(bool invert = false, _In_ const std::locale& locale = std::locale()) :
              + +
              587 {}
              +
              588
              +
              589 virtual bool match(
              +
              590 _In_reads_or_z_(end) const char* text,
              +
              591 _In_ size_t start = 0,
              +
              592 _In_ size_t end = SIZE_MAX,
              +
              593 _In_ int flags = match_default)
              +
              594 {
              +
              595 _Assume_(text || start >= end);
              +
              596 if (start < end && text[start]) {
              +
              597 wchar_t buf[3];
              +
              598 const wchar_t* chr = next_sgml_cp(text, start, end, this->interval.end, buf);
              +
              599 const wchar_t* chr_end = chr + stdex::strlen(chr);
              +
              600 bool r =
              +
              601 ((flags & match_multiline) || !islbreak(chr, SIZE_MAX)) &&
              +
              602 std::use_facet<std::ctype<wchar_t>>(m_locale).scan_not(std::ctype_base::space | std::ctype_base::punct, chr, chr_end) == chr_end;
              +
              603 if ((r && !m_invert) || (!r && m_invert)) {
              +
              604 this->interval.start = start;
              +
              605 return true;
              +
              606 }
              +
              607 }
              +
              608 this->interval.invalidate();
              +
              609 return false;
              +
              610 }
              +
              611 };
              -
              613
              -
              617 template <class T>
              -
              -
              618 class basic_bol : public basic_parser<T>
              -
              619 {
              -
              620 public:
              -
              621 basic_bol(bool invert = false) : m_invert(invert) {}
              -
              622
              -
              623 virtual bool match(
              -
              624 _In_reads_or_z_(end) const T* text,
              -
              625 _In_ size_t start = 0,
              -
              626 _In_ size_t end = (size_t)-1,
              -
              627 _In_ int flags = match_default)
              -
              628 {
              -
              629 _Assume_(text || start >= end);
              -
              630 bool r = start == 0 || (start <= end && islbreak(text[start - 1]));
              -
              631 if ((r && !m_invert) || (!r && m_invert)) {
              -
              632 this->interval.end = this->interval.start = start;
              -
              633 return true;
              -
              634 }
              -
              635 this->interval.start = (this->interval.end = start) + 1;
              -
              636 return false;
              -
              637 }
              -
              638
              -
              639 protected:
              -
              640 bool m_invert;
              -
              641 };
              +
              612
              +
              616 template <class T>
              +
              +
              617 class basic_bol : public basic_parser<T>
              +
              618 {
              +
              619 public:
              +
              620 basic_bol(bool invert = false) : m_invert(invert) {}
              +
              621
              +
              622 virtual bool match(
              +
              623 _In_reads_or_z_(end) const T* text,
              +
              624 _In_ size_t start = 0,
              +
              625 _In_ size_t end = SIZE_MAX,
              +
              626 _In_ int flags = match_default)
              +
              627 {
              +
              628 _Assume_(text || start >= end);
              +
              629 bool r = start == 0 || (start <= end && islbreak(text[start - 1]));
              +
              630 if ((r && !m_invert) || (!r && m_invert)) {
              +
              631 this->interval.end = this->interval.start = start;
              +
              632 return true;
              +
              633 }
              +
              634 this->interval.invalidate();
              +
              635 return false;
              +
              636 }
              +
              637
              +
              638 protected:
              +
              639 bool m_invert;
              +
              640 };
              -
              642
              -
              643 using bol = basic_bol<char>;
              -
              644 using wbol = basic_bol<wchar_t>;
              -
              645#ifdef _UNICODE
              -
              646 using tbol = wbol;
              -
              647#else
              -
              648 using tbol = bol;
              -
              649#endif
              - -
              651
              -
              655 template <class T>
              -
              -
              656 class basic_eol : public basic_parser<T>
              -
              657 {
              -
              658 public:
              -
              659 basic_eol(bool invert = false) : m_invert(invert) {}
              -
              660
              -
              661 virtual bool match(
              -
              662 _In_reads_or_z_(end) const T* text,
              -
              663 _In_ size_t start = 0,
              -
              664 _In_ size_t end = (size_t)-1,
              -
              665 _In_ int flags = match_default)
              -
              666 {
              -
              667 _Assume_(text || start >= end);
              -
              668 bool r = islbreak(text[start]);
              -
              669 if ((r && !m_invert) || (!r && m_invert)) {
              -
              670 this->interval.end = this->interval.start = start;
              -
              671 return true;
              -
              672 }
              -
              673 this->interval.start = (this->interval.end = start) + 1;
              -
              674 return false;
              -
              675 }
              -
              676
              -
              677 protected:
              -
              678 bool m_invert;
              -
              679 };
              +
              641
              +
              642 using bol = basic_bol<char>;
              +
              643 using wbol = basic_bol<wchar_t>;
              +
              644#ifdef _UNICODE
              +
              645 using tbol = wbol;
              +
              646#else
              +
              647 using tbol = bol;
              +
              648#endif
              + +
              650
              +
              654 template <class T>
              +
              +
              655 class basic_eol : public basic_parser<T>
              +
              656 {
              +
              657 public:
              +
              658 basic_eol(bool invert = false) : m_invert(invert) {}
              +
              659
              +
              660 virtual bool match(
              +
              661 _In_reads_or_z_(end) const T* text,
              +
              662 _In_ size_t start = 0,
              +
              663 _In_ size_t end = SIZE_MAX,
              +
              664 _In_ int flags = match_default)
              +
              665 {
              +
              666 _Assume_(text || start >= end);
              +
              667 bool r = islbreak(text[start]);
              +
              668 if ((r && !m_invert) || (!r && m_invert)) {
              +
              669 this->interval.end = this->interval.start = start;
              +
              670 return true;
              +
              671 }
              +
              672 this->interval.invalidate();
              +
              673 return false;
              +
              674 }
              +
              675
              +
              676 protected:
              +
              677 bool m_invert;
              +
              678 };
              -
              680
              -
              681 using eol = basic_eol<char>;
              -
              682 using weol = basic_eol<wchar_t>;
              -
              683#ifdef _UNICODE
              -
              684 using teol = weol;
              -
              685#else
              -
              686 using teol = eol;
              -
              687#endif
              - -
              689
              -
              690 template <class T>
              -
              -
              691 class basic_set : public basic_parser<T>
              -
              692 {
              -
              693 public:
              -
              694 basic_set(bool invert = false, _In_ const std::locale& locale = std::locale()) :
              -
              695 basic_parser<T>(locale),
              -
              696 hit_offset((size_t)-1),
              -
              697 m_invert(invert)
              -
              698 {}
              -
              699
              -
              700 virtual bool match(
              -
              701 _In_reads_or_z_(end) const T* text,
              -
              702 _In_ size_t start = 0,
              -
              703 _In_ size_t end = (size_t)-1,
              -
              704 _In_ int flags = match_default) = 0;
              -
              705
              -
              706 virtual void invalidate()
              -
              707 {
              -
              708 hit_offset = (size_t)-1;
              - -
              710 }
              -
              711
              -
              712 public:
              -
              713 size_t hit_offset;
              -
              714
              -
              715 protected:
              -
              716 bool m_invert;
              -
              717 };
              +
              679
              +
              680 using eol = basic_eol<char>;
              +
              681 using weol = basic_eol<wchar_t>;
              +
              682#ifdef _UNICODE
              +
              683 using teol = weol;
              +
              684#else
              +
              685 using teol = eol;
              +
              686#endif
              + +
              688
              +
              689 template <class T>
              +
              +
              690 class basic_set : public basic_parser<T>
              +
              691 {
              +
              692 public:
              +
              693 basic_set(bool invert = false, _In_ const std::locale& locale = std::locale()) :
              +
              694 basic_parser<T>(locale),
              +
              695 hit_offset(SIZE_MAX),
              +
              696 m_invert(invert)
              +
              697 {}
              +
              698
              +
              699 virtual bool match(
              +
              700 _In_reads_or_z_(end) const T* text,
              +
              701 _In_ size_t start = 0,
              +
              702 _In_ size_t end = SIZE_MAX,
              +
              703 _In_ int flags = match_default) = 0;
              +
              704
              +
              705 virtual void invalidate()
              +
              706 {
              +
              707 hit_offset = SIZE_MAX;
              + +
              709 }
              +
              710
              +
              711 public:
              +
              712 size_t hit_offset;
              +
              713
              +
              714 protected:
              +
              715 bool m_invert;
              +
              716 };
              -
              718
              -
              722 template <class T>
              -
              -
              723 class basic_cu_set : public basic_set<T>
              -
              724 {
              -
              725 public:
              - -
              727 _In_reads_or_z_(count) const T* set,
              -
              728 _In_ size_t count = (size_t)-1,
              -
              729 _In_ bool invert = false,
              -
              730 _In_ const std::locale& locale = std::locale()) :
              -
              731 basic_set<T>(invert, locale)
              -
              732 {
              -
              733 if (set)
              -
              734 m_set.assign(set, set + stdex::strnlen(set, count));
              -
              735 }
              -
              736
              -
              737 virtual bool match(
              -
              738 _In_reads_or_z_(end) const T* text,
              -
              739 _In_ size_t start = 0,
              -
              740 _In_ size_t end = (size_t)-1,
              -
              741 _In_ int flags = match_default)
              -
              742 {
              -
              743 _Assume_(text || start >= end);
              -
              744 if (start < end && text[start]) {
              -
              745 const T* set = m_set.c_str();
              -
              746 size_t r = (flags & match_case_insensitive) ?
              -
              747 stdex::strnichr(set, m_set.size(), text[start], this->m_locale) :
              -
              748 stdex::strnchr(set, m_set.size(), text[start]);
              -
              749 if ((r != stdex::npos && !this->m_invert) || (r == stdex::npos && this->m_invert)) {
              -
              750 this->hit_offset = r;
              -
              751 this->interval.end = (this->interval.start = start) + 1;
              -
              752 return true;
              -
              753 }
              -
              754 }
              -
              755 this->hit_offset = (size_t)-1;
              -
              756 this->interval.start = (this->interval.end = start) + 1;
              -
              757 return false;
              -
              758 }
              -
              759
              -
              760 protected:
              -
              761 std::basic_string<T> m_set;
              -
              762 };
              +
              717
              +
              721 template <class T>
              +
              +
              722 class basic_cu_set : public basic_set<T>
              +
              723 {
              +
              724 public:
              + +
              726 _In_reads_or_z_(count) const T* set,
              +
              727 _In_ size_t count = SIZE_MAX,
              +
              728 _In_ bool invert = false,
              +
              729 _In_ const std::locale& locale = std::locale()) :
              +
              730 basic_set<T>(invert, locale)
              +
              731 {
              +
              732 if (set)
              +
              733 m_set.assign(set, set + stdex::strnlen(set, count));
              +
              734 }
              +
              735
              +
              736 virtual bool match(
              +
              737 _In_reads_or_z_(end) const T* text,
              +
              738 _In_ size_t start = 0,
              +
              739 _In_ size_t end = SIZE_MAX,
              +
              740 _In_ int flags = match_default)
              +
              741 {
              +
              742 _Assume_(text || start >= end);
              +
              743 if (start < end && text[start]) {
              +
              744 const T* set = m_set.c_str();
              +
              745 size_t r = (flags & match_case_insensitive) ?
              +
              746 stdex::strnichr(set, m_set.size(), text[start], this->m_locale) :
              +
              747 stdex::strnchr(set, m_set.size(), text[start]);
              +
              748 if ((r != stdex::npos && !this->m_invert) || (r == stdex::npos && this->m_invert)) {
              +
              749 this->hit_offset = r;
              +
              750 this->interval.end = (this->interval.start = start) + 1;
              +
              751 return true;
              +
              752 }
              +
              753 }
              +
              754 this->hit_offset = SIZE_MAX;
              +
              755 this->interval.invalidate();
              +
              756 return false;
              +
              757 }
              +
              758
              +
              759 protected:
              +
              760 std::basic_string<T> m_set;
              +
              761 };
              -
              763
              - - -
              766#ifdef _UNICODE
              -
              767 using tcu_set = wcu_set;
              -
              768#else
              -
              769 using tcu_set = cu_set;
              -
              770#endif
              -
              771
              -
              -
              775 class sgml_cp_set : public basic_set<char>
              -
              776 {
              -
              777 public:
              -
              778 sgml_cp_set(const char* set, size_t count = (size_t)-1, bool invert = false, _In_ const std::locale& locale = std::locale()) :
              -
              779 basic_set<char>(invert, locale)
              -
              780 {
              -
              781 if (set)
              -
              782 m_set = sgml2wstr(set, count);
              -
              783 }
              -
              784
              -
              785 virtual bool match(
              -
              786 _In_reads_or_z_(end) const char* text,
              -
              787 _In_ size_t start = 0,
              -
              788 _In_ size_t end = (size_t)-1,
              -
              789 _In_ int flags = match_default)
              -
              790 {
              -
              791 _Assume_(text || start >= end);
              -
              792 if (start < end && text[start]) {
              -
              793 wchar_t buf[3];
              -
              794 const wchar_t* chr = next_sgml_cp(text, start, end, this->interval.end, buf);
              -
              795 const wchar_t* set = m_set.c_str();
              -
              796 size_t r = (flags & match_case_insensitive) ?
              -
              797 stdex::strnistr(set, m_set.size(), chr, m_locale) :
              -
              798 stdex::strnstr(set, m_set.size(), chr);
              -
              799 if ((r != stdex::npos && !m_invert) || (r == stdex::npos && m_invert)) {
              -
              800 hit_offset = r;
              -
              801 this->interval.start = start;
              -
              802 return true;
              -
              803 }
              -
              804 }
              -
              805 hit_offset = (size_t)-1;
              -
              806 this->interval.start = (this->interval.end = start) + 1;
              -
              807 return false;
              -
              808 }
              -
              809
              -
              810 protected:
              -
              811 std::wstring m_set;
              -
              812 };
              +
              762
              + + +
              765#ifdef _UNICODE
              +
              766 using tcu_set = wcu_set;
              +
              767#else
              +
              768 using tcu_set = cu_set;
              +
              769#endif
              +
              770
              +
              +
              774 class sgml_cp_set : public basic_set<char>
              +
              775 {
              +
              776 public:
              +
              777 sgml_cp_set(const char* set, size_t count = SIZE_MAX, bool invert = false, _In_ const std::locale& locale = std::locale()) :
              +
              778 basic_set<char>(invert, locale)
              +
              779 {
              +
              780 if (set)
              +
              781 m_set = sgml2str(set, count);
              +
              782 }
              +
              783
              +
              784 virtual bool match(
              +
              785 _In_reads_or_z_(end) const char* text,
              +
              786 _In_ size_t start = 0,
              +
              787 _In_ size_t end = SIZE_MAX,
              +
              788 _In_ int flags = match_default)
              +
              789 {
              +
              790 _Assume_(text || start >= end);
              +
              791 if (start < end && text[start]) {
              +
              792 wchar_t buf[3];
              +
              793 const wchar_t* chr = next_sgml_cp(text, start, end, this->interval.end, buf);
              +
              794 const wchar_t* set = m_set.c_str();
              +
              795 size_t r = (flags & match_case_insensitive) ?
              +
              796 stdex::strnistr(set, m_set.size(), chr, m_locale) :
              +
              797 stdex::strnstr(set, m_set.size(), chr);
              +
              798 if ((r != stdex::npos && !m_invert) || (r == stdex::npos && m_invert)) {
              +
              799 hit_offset = r;
              +
              800 this->interval.start = start;
              +
              801 return true;
              +
              802 }
              +
              803 }
              +
              804 hit_offset = SIZE_MAX;
              +
              805 this->interval.invalidate();
              +
              806 return false;
              +
              807 }
              +
              808
              +
              809 protected:
              +
              810 std::wstring m_set;
              +
              811 };
              -
              813
              -
              817 template <class T>
              -
              -
              818 class basic_string : public basic_parser<T>
              -
              819 {
              -
              820 public:
              - -
              822 _In_reads_or_z_(count) const T* str,
              -
              823 _In_ size_t count = (size_t)-1,
              -
              824 _In_ const std::locale& locale = std::locale()) :
              -
              825 basic_parser<T>(locale),
              -
              826 m_str(str, str + stdex::strnlen(str, count))
              -
              827 {}
              -
              828
              -
              829 virtual bool match(
              -
              830 _In_reads_or_z_(end) const T* text,
              -
              831 _In_ size_t start = 0,
              -
              832 _In_ size_t end = (size_t)-1,
              -
              833 _In_ int flags = match_default)
              -
              834 {
              -
              835 _Assume_(text || start >= end);
              -
              836 size_t
              -
              837 m = m_str.size(),
              -
              838 n = std::min<size_t>(end - start, m);
              -
              839 bool r = ((flags & match_case_insensitive) ?
              -
              840 stdex::strnicmp(text + start, n, m_str.c_str(), m, this->m_locale) :
              -
              841 stdex::strncmp(text + start, n, m_str.c_str(), m)) == 0;
              -
              842 if (r) {
              -
              843 this->interval.end = (this->interval.start = start) + n;
              -
              844 return true;
              -
              845 }
              -
              846 this->interval.start = (this->interval.end = start) + 1;
              -
              847 return false;
              -
              848 }
              -
              849
              -
              850 protected:
              -
              851 std::basic_string<T> m_str;
              -
              852 };
              +
              812
              +
              816 template <class T>
              +
              +
              817 class basic_string : public basic_parser<T>
              +
              818 {
              +
              819 public:
              + +
              821 _In_reads_or_z_(count) const T* str,
              +
              822 _In_ size_t count = SIZE_MAX,
              +
              823 _In_ const std::locale& locale = std::locale()) :
              +
              824 basic_parser<T>(locale),
              +
              825 m_str(str, str + stdex::strnlen(str, count))
              +
              826 {}
              +
              827
              +
              828 virtual bool match(
              +
              829 _In_reads_or_z_(end) const T* text,
              +
              830 _In_ size_t start = 0,
              +
              831 _In_ size_t end = SIZE_MAX,
              +
              832 _In_ int flags = match_default)
              +
              833 {
              +
              834 _Assume_(text || start >= end);
              +
              835 size_t
              +
              836 m = m_str.size(),
              +
              837 n = std::min<size_t>(end - start, m);
              +
              838 bool r = ((flags & match_case_insensitive) ?
              +
              839 stdex::strnicmp(text + start, n, m_str.c_str(), m, this->m_locale) :
              +
              840 stdex::strncmp(text + start, n, m_str.c_str(), m)) == 0;
              +
              841 if (r) {
              +
              842 this->interval.end = (this->interval.start = start) + n;
              +
              843 return true;
              +
              844 }
              +
              845 this->interval.invalidate();
              +
              846 return false;
              +
              847 }
              +
              848
              +
              849 protected:
              +
              850 std::basic_string<T> m_str;
              +
              851 };
              -
              853
              - - -
              856#ifdef _UNICODE
              -
              857 using tstring = wstring;
              -
              858#else
              -
              859 using tstring = string;
              -
              860#endif
              -
              861
              -
              - -
              866 {
              -
              867 public:
              -
              868 sgml_string(const char* str, size_t count = (size_t)-1, _In_ const std::locale& locale = std::locale()) :
              -
              869 sgml_parser(locale),
              -
              870 m_str(sgml2wstr(str, count))
              -
              871 {}
              -
              872
              -
              873 virtual bool match(
              -
              874 _In_reads_or_z_(end) const char* text,
              -
              875 _In_ size_t start = 0,
              -
              876 _In_ size_t end = (size_t)-1,
              -
              877 _In_ int flags = match_default)
              -
              878 {
              -
              879 _Assume_(text || start >= end);
              -
              880 const wchar_t* str = m_str.c_str();
              -
              881 const bool case_insensitive = flags & match_case_insensitive ? true : false;
              -
              882 const auto& ctype = std::use_facet<std::ctype<wchar_t>>(m_locale);
              -
              883 for (this->interval.end = start;;) {
              -
              884 if (!*str) {
              -
              885 this->interval.start = start;
              -
              886 return true;
              -
              887 }
              -
              888 if (this->interval.end >= end || !text[this->interval.end]) {
              -
              889 this->interval.start = (this->interval.end = start) + 1;
              -
              890 return false;
              -
              891 }
              -
              892 wchar_t buf[3];
              -
              893 const wchar_t* chr = next_sgml_cp(text, this->interval.end, end, this->interval.end, buf);
              -
              894 for (; *chr; ++str, ++chr) {
              -
              895 if (!*str ||
              -
              896 (case_insensitive ? ctype.tolower(*str) != ctype.tolower(*chr) : *str != *chr))
              -
              897 {
              -
              898 this->interval.start = (this->interval.end = start) + 1;
              -
              899 return false;
              -
              900 }
              -
              901 }
              -
              902 }
              -
              903 }
              -
              904
              -
              905 protected:
              -
              906 std::wstring m_str;
              -
              907 };
              +
              852
              + + +
              855#ifdef _UNICODE
              +
              856 using tstring = wstring;
              +
              857#else
              +
              858 using tstring = string;
              +
              859#endif
              +
              860
              +
              + +
              865 {
              +
              866 public:
              +
              867 sgml_string(const char* str, size_t count = SIZE_MAX, _In_ const std::locale& locale = std::locale()) :
              +
              868 sgml_parser(locale),
              +
              869 m_str(sgml2str(str, count))
              +
              870 {}
              +
              871
              +
              872 virtual bool match(
              +
              873 _In_reads_or_z_(end) const char* text,
              +
              874 _In_ size_t start = 0,
              +
              875 _In_ size_t end = SIZE_MAX,
              +
              876 _In_ int flags = match_default)
              +
              877 {
              +
              878 _Assume_(text || start >= end);
              +
              879 const wchar_t* str = m_str.c_str();
              +
              880 const bool case_insensitive = flags & match_case_insensitive ? true : false;
              +
              881 const auto& ctype = std::use_facet<std::ctype<wchar_t>>(m_locale);
              +
              882 for (this->interval.end = start;;) {
              +
              883 if (!*str) {
              +
              884 this->interval.start = start;
              +
              885 return true;
              +
              886 }
              +
              887 if (this->interval.end >= end || !text[this->interval.end]) {
              +
              888 this->interval.invalidate();
              +
              889 return false;
              +
              890 }
              +
              891 wchar_t buf[3];
              +
              892 const wchar_t* chr = next_sgml_cp(text, this->interval.end, end, this->interval.end, buf);
              +
              893 for (; *chr; ++str, ++chr) {
              +
              894 if (!*str ||
              +
              895 (case_insensitive ? ctype.tolower(*str) != ctype.tolower(*chr) : *str != *chr))
              +
              896 {
              +
              897 this->interval.invalidate();
              +
              898 return false;
              +
              899 }
              +
              900 }
              +
              901 }
              +
              902 }
              +
              903
              +
              904 protected:
              +
              905 std::wstring m_str;
              +
              906 };
              -
              908
              -
              912 template <class T>
              -
              - -
              914 {
              -
              915 public:
              -
              916 basic_iterations(const std::shared_ptr<basic_parser<T>>& el, size_t min_iterations = 0, size_t max_iterations = (size_t)-1, bool greedy = true) :
              -
              917 m_el(el),
              - - - -
              921 {}
              -
              922
              -
              923 virtual bool match(
              -
              924 _In_reads_or_z_(end) const T* text,
              -
              925 _In_ size_t start = 0,
              -
              926 _In_ size_t end = (size_t)-1,
              -
              927 _In_ int flags = match_default)
              -
              928 {
              -
              929 _Assume_(text || start >= end);
              -
              930 this->interval.start = this->interval.end = start;
              -
              931 for (size_t i = 0; ; i++) {
              -
              932 if ((!m_greedy && i >= m_min_iterations) || i >= m_max_iterations)
              -
              933 return true;
              -
              934 if (!m_el->match(text, this->interval.end, end, flags)) {
              -
              935 if (i >= m_min_iterations)
              -
              936 return true;
              -
              937 break;
              -
              938 }
              -
              939 if (m_el->interval.end == this->interval.end) {
              -
              940 // Element did match, but the matching interval was empty. Quit instead of spinning.
              -
              941 return true;
              -
              942 }
              -
              943 this->interval.end = m_el->interval.end;
              -
              944 }
              -
              945 this->interval.start = (this->interval.end = start) + 1;
              -
              946 return false;
              -
              947 }
              -
              948
              -
              949 protected:
              -
              950 std::shared_ptr<basic_parser<T>> m_el;
              - - -
              953 bool m_greedy;
              -
              954 };
              +
              907
              +
              911 template <class T>
              +
              + +
              913 {
              +
              914 public:
              +
              915 basic_iterations(const std::shared_ptr<basic_parser<T>>& el, size_t min_iterations = 0, size_t max_iterations = SIZE_MAX, bool greedy = true) :
              +
              916 m_el(el),
              + + + +
              920 {}
              +
              921
              +
              922 virtual bool match(
              +
              923 _In_reads_or_z_(end) const T* text,
              +
              924 _In_ size_t start = 0,
              +
              925 _In_ size_t end = SIZE_MAX,
              +
              926 _In_ int flags = match_default)
              +
              927 {
              +
              928 _Assume_(text || start >= end);
              +
              929 this->interval.start = this->interval.end = start;
              +
              930 for (size_t i = 0; ; i++) {
              +
              931 if ((!m_greedy && i >= m_min_iterations) || i >= m_max_iterations)
              +
              932 return true;
              +
              933 if (!m_el->match(text, this->interval.end, end, flags)) {
              +
              934 if (i >= m_min_iterations)
              +
              935 return true;
              +
              936 break;
              +
              937 }
              +
              938 if (m_el->interval.end == this->interval.end) {
              +
              939 // Element did match, but the matching interval was empty. Quit instead of spinning.
              +
              940 return true;
              +
              941 }
              +
              942 this->interval.end = m_el->interval.end;
              +
              943 }
              +
              944 this->interval.invalidate();
              +
              945 return false;
              +
              946 }
              +
              947
              +
              948 protected:
              +
              949 std::shared_ptr<basic_parser<T>> m_el;
              + + +
              952 bool m_greedy;
              +
              953 };
              -
              955
              - - -
              958#ifdef _UNICODE
              -
              959 using titerations = witerations;
              -
              960#else
              -
              961 using titerations = iterations;
              -
              962#endif
              - -
              964
              -
              968 template <class T>
              -
              - -
              970 {
              -
              971 protected:
              -
              972 parser_collection(_In_ const std::locale& locale) : basic_parser<T>(locale) {}
              -
              973
              -
              974 public:
              - -
              976 _In_count_(count) const std::shared_ptr<basic_parser<T>>* el,
              -
              977 _In_ size_t count,
              -
              978 _In_ const std::locale& locale = std::locale()) :
              -
              979 basic_parser<T>(locale)
              -
              980 {
              -
              981 _Assume_(el || !count);
              -
              982 m_collection.reserve(count);
              -
              983 for (size_t i = 0; i < count; i++)
              -
              984 m_collection.push_back(el[i]);
              -
              985 }
              -
              986
              - -
              988 _Inout_ std::vector<std::shared_ptr<basic_parser<T>>>&& collection,
              -
              989 _In_ const std::locale& locale = std::locale()) :
              -
              990 basic_parser<T>(locale),
              -
              991 m_collection(std::move(collection))
              -
              992 {}
              -
              993
              -
              994 virtual void invalidate()
              -
              995 {
              -
              996 for (auto& el: m_collection)
              -
              997 el->invalidate();
              - -
              999 }
              -
              1000
              -
              1001 protected:
              -
              1002 std::vector<std::shared_ptr<basic_parser<T>>> m_collection;
              -
              1003 };
              +
              954
              + + +
              957#ifdef _UNICODE
              +
              958 using titerations = witerations;
              +
              959#else
              +
              960 using titerations = iterations;
              +
              961#endif
              + +
              963
              +
              967 template <class T>
              +
              + +
              969 {
              +
              970 protected:
              +
              971 parser_collection(_In_ const std::locale& locale) : basic_parser<T>(locale) {}
              +
              972
              +
              973 public:
              + +
              975 _In_count_(count) const std::shared_ptr<basic_parser<T>>* el,
              +
              976 _In_ size_t count,
              +
              977 _In_ const std::locale& locale = std::locale()) :
              +
              978 basic_parser<T>(locale)
              +
              979 {
              +
              980 _Assume_(el || !count);
              +
              981 m_collection.reserve(count);
              +
              982 for (size_t i = 0; i < count; i++)
              +
              983 m_collection.push_back(el[i]);
              +
              984 }
              +
              985
              + +
              987 _Inout_ std::vector<std::shared_ptr<basic_parser<T>>>&& collection,
              +
              988 _In_ const std::locale& locale = std::locale()) :
              +
              989 basic_parser<T>(locale),
              +
              990 m_collection(std::move(collection))
              +
              991 {}
              +
              992
              +
              993 virtual void invalidate()
              +
              994 {
              +
              995 for (auto& el : m_collection)
              +
              996 el->invalidate();
              + +
              998 }
              +
              999
              +
              1000 protected:
              +
              1001 std::vector<std::shared_ptr<basic_parser<T>>> m_collection;
              +
              1002 };
              -
              1004
              -
              1008 template <class T>
              -
              - -
              1010 {
              -
              1011 public:
              - -
              1013 _In_count_(count) const std::shared_ptr<basic_parser<T>>* el = nullptr,
              -
              1014 _In_ size_t count = 0,
              -
              1015 _In_ const std::locale& locale = std::locale()) :
              -
              1016 parser_collection<T>(el, count, locale)
              -
              1017 {}
              -
              1018
              - -
              1020 _Inout_ std::vector<std::shared_ptr<basic_parser<T>>>&& collection,
              -
              1021 _In_ const std::locale& locale = std::locale()) :
              -
              1022 parser_collection<T>(std::move(collection), locale)
              -
              1023 {}
              -
              1024
              -
              1025 virtual bool match(
              -
              1026 _In_reads_or_z_(end) const T* text,
              -
              1027 _In_ size_t start = 0,
              -
              1028 _In_ size_t end = (size_t)-1,
              -
              1029 _In_ int flags = match_default)
              -
              1030 {
              -
              1031 _Assume_(text || start >= end);
              -
              1032 this->interval.end = start;
              -
              1033 for (auto i = this->m_collection.begin(); i != this->m_collection.end(); ++i) {
              -
              1034 if (!(*i)->match(text, this->interval.end, end, flags)) {
              -
              1035 for (++i; i != this->m_collection.end(); ++i)
              -
              1036 (*i)->invalidate();
              -
              1037 this->interval.start = (this->interval.end = start) + 1;
              -
              1038 return false;
              -
              1039 }
              -
              1040 this->interval.end = (*i)->interval.end;
              -
              1041 }
              -
              1042 this->interval.start = start;
              -
              1043 return true;
              -
              1044 }
              -
              1045 };
              +
              1003
              +
              1007 template <class T>
              +
              + +
              1009 {
              +
              1010 public:
              + +
              1012 _In_count_(count) const std::shared_ptr<basic_parser<T>>* el = nullptr,
              +
              1013 _In_ size_t count = 0,
              +
              1014 _In_ const std::locale& locale = std::locale()) :
              +
              1015 parser_collection<T>(el, count, locale)
              +
              1016 {}
              +
              1017
              + +
              1019 _Inout_ std::vector<std::shared_ptr<basic_parser<T>>>&& collection,
              +
              1020 _In_ const std::locale& locale = std::locale()) :
              +
              1021 parser_collection<T>(std::move(collection), locale)
              +
              1022 {}
              +
              1023
              +
              1024 virtual bool match(
              +
              1025 _In_reads_or_z_(end) const T* text,
              +
              1026 _In_ size_t start = 0,
              +
              1027 _In_ size_t end = SIZE_MAX,
              +
              1028 _In_ int flags = match_default)
              +
              1029 {
              +
              1030 _Assume_(text || start >= end);
              +
              1031 this->interval.end = start;
              +
              1032 for (auto i = this->m_collection.begin(); i != this->m_collection.end(); ++i) {
              +
              1033 if (!(*i)->match(text, this->interval.end, end, flags)) {
              +
              1034 for (++i; i != this->m_collection.end(); ++i)
              +
              1035 (*i)->invalidate();
              +
              1036 this->interval.invalidate();
              +
              1037 return false;
              +
              1038 }
              +
              1039 this->interval.end = (*i)->interval.end;
              +
              1040 }
              +
              1041 this->interval.start = start;
              +
              1042 return true;
              +
              1043 }
              +
              1044 };
              -
              1046
              - - -
              1049#ifdef _UNICODE
              -
              1050 using tsequence = wsequence;
              -
              1051#else
              -
              1052 using tsequence = sequence;
              -
              1053#endif
              - -
              1055
              -
              1059 template <class T>
              -
              - -
              1061 {
              -
              1062 protected:
              -
              1063 basic_branch(_In_ const std::locale& locale) :
              -
              1064 parser_collection<T>(locale),
              -
              1065 hit_offset((size_t)-1)
              -
              1066 {}
              -
              1067
              -
              1068 public:
              - -
              1070 _In_count_(count) const std::shared_ptr<basic_parser<T>>* el = nullptr,
              -
              1071 _In_ size_t count = 0,
              -
              1072 _In_ const std::locale& locale = std::locale()) :
              -
              1073 parser_collection<T>(el, count, locale),
              -
              1074 hit_offset((size_t)-1)
              -
              1075 {}
              -
              1076
              - -
              1078 _Inout_ std::vector<std::shared_ptr<basic_parser<T>>>&& collection,
              -
              1079 _In_ const std::locale& locale = std::locale()) :
              -
              1080 parser_collection<T>(std::move(collection), locale),
              -
              1081 hit_offset((size_t)-1)
              -
              1082 {}
              -
              1083
              -
              1084 virtual bool match(
              -
              1085 _In_reads_or_z_(end) const T* text,
              -
              1086 _In_ size_t start = 0,
              -
              1087 _In_ size_t end = (size_t)-1,
              -
              1088 _In_ int flags = match_default)
              -
              1089 {
              -
              1090 _Assume_(text || start >= end);
              -
              1091 hit_offset = 0;
              -
              1092 for (auto i = this->m_collection.begin(); i != this->m_collection.end(); ++i, ++hit_offset) {
              -
              1093 if ((*i)->match(text, start, end, flags)) {
              -
              1094 this->interval = (*i)->interval;
              -
              1095 for (++i; i != this->m_collection.end(); ++i)
              -
              1096 (*i)->invalidate();
              -
              1097 return true;
              -
              1098 }
              -
              1099 }
              -
              1100 hit_offset = (size_t)-1;
              -
              1101 this->interval.start = (this->interval.end = start) + 1;
              -
              1102 return false;
              -
              1103 }
              -
              1104
              -
              1105 virtual void invalidate()
              -
              1106 {
              -
              1107 hit_offset = (size_t)-1;
              - -
              1109 }
              -
              1110
              -
              1111 public:
              -
              1112 size_t hit_offset;
              -
              1113 };
              +
              1045
              + + +
              1048#ifdef _UNICODE
              +
              1049 using tsequence = wsequence;
              +
              1050#else
              +
              1051 using tsequence = sequence;
              +
              1052#endif
              + +
              1054
              +
              1058 template <class T>
              +
              + +
              1060 {
              +
              1061 protected:
              +
              1062 basic_branch(_In_ const std::locale& locale) :
              +
              1063 parser_collection<T>(locale),
              +
              1064 hit_offset(SIZE_MAX)
              +
              1065 {}
              +
              1066
              +
              1067 public:
              + +
              1069 _In_count_(count) const std::shared_ptr<basic_parser<T>>* el = nullptr,
              +
              1070 _In_ size_t count = 0,
              +
              1071 _In_ const std::locale& locale = std::locale()) :
              +
              1072 parser_collection<T>(el, count, locale),
              +
              1073 hit_offset(SIZE_MAX)
              +
              1074 {}
              +
              1075
              + +
              1077 _Inout_ std::vector<std::shared_ptr<basic_parser<T>>>&& collection,
              +
              1078 _In_ const std::locale& locale = std::locale()) :
              +
              1079 parser_collection<T>(std::move(collection), locale),
              +
              1080 hit_offset(SIZE_MAX)
              +
              1081 {}
              +
              1082
              +
              1083 virtual bool match(
              +
              1084 _In_reads_or_z_(end) const T* text,
              +
              1085 _In_ size_t start = 0,
              +
              1086 _In_ size_t end = SIZE_MAX,
              +
              1087 _In_ int flags = match_default)
              +
              1088 {
              +
              1089 _Assume_(text || start >= end);
              +
              1090 hit_offset = 0;
              +
              1091 for (auto i = this->m_collection.begin(); i != this->m_collection.end(); ++i, ++hit_offset) {
              +
              1092 if ((*i)->match(text, start, end, flags)) {
              +
              1093 this->interval = (*i)->interval;
              +
              1094 for (++i; i != this->m_collection.end(); ++i)
              +
              1095 (*i)->invalidate();
              +
              1096 return true;
              +
              1097 }
              +
              1098 }
              +
              1099 hit_offset = SIZE_MAX;
              +
              1100 this->interval.invalidate();
              +
              1101 return false;
              +
              1102 }
              +
              1103
              +
              1104 virtual void invalidate()
              +
              1105 {
              +
              1106 hit_offset = SIZE_MAX;
              + +
              1108 }
              +
              1109
              +
              1110 public:
              +
              1111 size_t hit_offset;
              +
              1112 };
              -
              1114
              -
              1115 using branch = basic_branch<char>;
              - -
              1117#ifdef _UNICODE
              -
              1118 using tbranch = wbranch;
              -
              1119#else
              -
              1120 using tbranch = branch;
              -
              1121#endif
              - -
              1123
              -
              1127 template <class T, class T_parser = basic_string<T>>
              -
              - -
              1129 {
              -
              1130 public:
              -
              1131 inline basic_string_branch(
              -
              1132 _In_reads_(count) const T* str_z = nullptr,
              -
              1133 _In_ size_t count = 0,
              -
              1134 _In_ const std::locale& locale = std::locale()) :
              -
              1135 basic_branch<T>(locale)
              -
              1136 {
              -
              1137 build(str_z, count);
              -
              1138 }
              -
              1139
              -
              1140 inline basic_string_branch(_In_z_ const T* str, ...) :
              -
              1141 basic_branch<T>(std::locale())
              -
              1142 {
              -
              1143 va_list params;
              -
              1144 va_start(params, str);
              -
              1145 build(str, params);
              -
              1146 va_end(params);
              -
              1147 }
              -
              1148
              -
              1149 inline basic_string_branch(_In_ const std::locale& locale, _In_z_ const T* str, ...) :
              -
              1150 basic_branch<T>(locale)
              -
              1151 {
              -
              1152 va_list params;
              -
              1153 va_start(params, str);
              -
              1154 build(str, params);
              -
              1155 va_end(params);
              -
              1156 }
              -
              1157
              -
              1158 protected:
              -
              1159 void build(_In_reads_(count) const T* str_z, _In_ size_t count)
              -
              1160 {
              -
              1161 _Assume_(str_z || !count);
              -
              1162 if (count) {
              -
              1163 size_t offset, n;
              -
              1164 for (
              -
              1165 offset = n = 0;
              -
              1166 offset < count && str_z[offset];
              -
              1167 offset += stdex::strnlen(str_z + offset, count - offset) + 1, ++n);
              -
              1168 this->m_collection.reserve(n);
              -
              1169 for (
              -
              1170 offset = 0;
              -
              1171 offset < count && str_z[offset];
              -
              1172 offset += stdex::strnlen(str_z + offset, count - offset) + 1)
              -
              1173 this->m_collection.push_back(std::move(std::make_shared<T_parser>(str_z + offset, count - offset, this->m_locale)));
              -
              1174 }
              -
              1175 }
              -
              1176
              -
              1177 void build(_In_z_ const T* str, _In_ va_list params)
              -
              1178 {
              -
              1179 const T* p;
              -
              1180 for (
              -
              1181 this->m_collection.push_back(std::move(std::make_shared<T_parser>(str, (size_t)-1, this->m_locale)));
              -
              1182 (p = va_arg(params, const T*)) != nullptr;
              -
              1183 this->m_collection.push_back(std::move(std::make_shared<T_parser>(p, (size_t)-1, this->m_locale))));
              -
              1184 }
              -
              1185 };
              +
              1113
              +
              1114 using branch = basic_branch<char>;
              + +
              1116#ifdef _UNICODE
              +
              1117 using tbranch = wbranch;
              +
              1118#else
              +
              1119 using tbranch = branch;
              +
              1120#endif
              + +
              1122
              +
              1126 template <class T, class T_parser = basic_string<T>>
              +
              + +
              1128 {
              +
              1129 public:
              +
              1130 inline basic_string_branch(
              +
              1131 _In_reads_(count) const T* str_z = nullptr,
              +
              1132 _In_ size_t count = 0,
              +
              1133 _In_ const std::locale& locale = std::locale()) :
              +
              1134 basic_branch<T>(locale)
              +
              1135 {
              +
              1136 build(str_z, count);
              +
              1137 }
              +
              1138
              +
              1139 inline basic_string_branch(_In_z_ const T* str, ...) :
              +
              1140 basic_branch<T>(std::locale())
              +
              1141 {
              +
              1142 va_list params;
              +
              1143 va_start(params, str);
              +
              1144 build(str, params);
              +
              1145 va_end(params);
              +
              1146 }
              +
              1147
              +
              1148 inline basic_string_branch(_In_ const std::locale& locale, _In_z_ const T* str, ...) :
              +
              1149 basic_branch<T>(locale)
              +
              1150 {
              +
              1151 va_list params;
              +
              1152 va_start(params, str);
              +
              1153 build(str, params);
              +
              1154 va_end(params);
              +
              1155 }
              +
              1156
              +
              1157 protected:
              +
              1158 void build(_In_reads_(count) const T* str_z, _In_ size_t count)
              +
              1159 {
              +
              1160 _Assume_(str_z || !count);
              +
              1161 if (count) {
              +
              1162 size_t offset, n;
              +
              1163 for (
              +
              1164 offset = n = 0;
              +
              1165 offset < count && str_z[offset];
              +
              1166 offset += stdex::strnlen(str_z + offset, count - offset) + 1, ++n);
              +
              1167 this->m_collection.reserve(n);
              +
              1168 for (
              +
              1169 offset = 0;
              +
              1170 offset < count && str_z[offset];
              +
              1171 offset += stdex::strnlen(str_z + offset, count - offset) + 1)
              +
              1172 this->m_collection.push_back(std::move(std::make_shared<T_parser>(str_z + offset, count - offset, this->m_locale)));
              +
              1173 }
              +
              1174 }
              +
              1175
              +
              1176 void build(_In_z_ const T* str, _In_ va_list params)
              +
              1177 {
              +
              1178 const T* p;
              +
              1179 for (
              +
              1180 this->m_collection.push_back(std::move(std::make_shared<T_parser>(str, SIZE_MAX, this->m_locale)));
              +
              1181 (p = va_arg(params, const T*)) != nullptr;
              +
              1182 this->m_collection.push_back(std::move(std::make_shared<T_parser>(p, SIZE_MAX, this->m_locale))));
              +
              1183 }
              +
              1184 };
              -
              1186
              - - -
              1189#ifdef _UNICODE
              - -
              1191#else
              - -
              1193#endif
              - -
              1195
              -
              1199 template <class T>
              -
              - -
              1201 {
              -
              1202 public:
              - -
              1204 _In_count_(count) const std::shared_ptr<basic_parser<T>>* el = nullptr,
              -
              1205 _In_ size_t count = 0,
              -
              1206 _In_ const std::locale& locale = std::locale()) :
              -
              1207 parser_collection<T>(el, count, locale)
              -
              1208 {}
              -
              1209
              - -
              1211 _Inout_ std::vector<std::shared_ptr<basic_parser<T>>>&& collection,
              -
              1212 _In_ const std::locale& locale = std::locale()) :
              -
              1213 parser_collection<T>(std::move(collection), locale)
              -
              1214 {}
              -
              1215
              -
              1216 virtual bool match(
              -
              1217 _In_reads_or_z_(end) const T* text,
              -
              1218 _In_ size_t start = 0,
              -
              1219 _In_ size_t end = (size_t)-1,
              -
              1220 _In_ int flags = match_default)
              -
              1221 {
              -
              1222 _Assume_(text || start >= end);
              -
              1223 for (auto& el: this->m_collection)
              -
              1224 el->invalidate();
              -
              1225 if (match_recursively(text, start, end, flags)) {
              -
              1226 this->interval.start = start;
              -
              1227 return true;
              -
              1228 }
              -
              1229 this->interval.start = (this->interval.end = start) + 1;
              -
              1230 return false;
              -
              1231 }
              -
              1232
              -
              1233 protected:
              -
              1234 bool match_recursively(
              -
              1235 _In_reads_or_z_(end) const T* text,
              -
              1236 _In_ size_t start = 0,
              -
              1237 _In_ size_t end = (size_t)-1,
              -
              1238 _In_ int flags = match_default)
              -
              1239 {
              -
              1240 bool all_matched = true;
              -
              1241 for (auto& el: this->m_collection) {
              -
              1242 if (!el->interval) {
              -
              1243 // Element was not matched in permutatuion yet.
              -
              1244 all_matched = false;
              -
              1245 if (el->match(text, start, end, flags)) {
              -
              1246 // Element matched for the first time.
              -
              1247 if (match_recursively(text, el->interval.end, end, flags)) {
              -
              1248 // Rest of the elements matched too.
              -
              1249 return true;
              -
              1250 }
              -
              1251 el->invalidate();
              -
              1252 }
              -
              1253 }
              -
              1254 }
              -
              1255 if (all_matched) {
              -
              1256 this->interval.end = start;
              -
              1257 return true;
              -
              1258 }
              -
              1259 return false;
              -
              1260 }
              -
              1261 };
              +
              1185
              + + +
              1188#ifdef _UNICODE
              + +
              1190#else
              + +
              1192#endif
              + +
              1194
              +
              1198 template <class T>
              +
              + +
              1200 {
              +
              1201 public:
              + +
              1203 _In_count_(count) const std::shared_ptr<basic_parser<T>>* el = nullptr,
              +
              1204 _In_ size_t count = 0,
              +
              1205 _In_ const std::locale& locale = std::locale()) :
              +
              1206 parser_collection<T>(el, count, locale)
              +
              1207 {}
              +
              1208
              + +
              1210 _Inout_ std::vector<std::shared_ptr<basic_parser<T>>>&& collection,
              +
              1211 _In_ const std::locale& locale = std::locale()) :
              +
              1212 parser_collection<T>(std::move(collection), locale)
              +
              1213 {}
              +
              1214
              +
              1215 virtual bool match(
              +
              1216 _In_reads_or_z_(end) const T* text,
              +
              1217 _In_ size_t start = 0,
              +
              1218 _In_ size_t end = SIZE_MAX,
              +
              1219 _In_ int flags = match_default)
              +
              1220 {
              +
              1221 _Assume_(text || start >= end);
              +
              1222 for (auto& el : this->m_collection)
              +
              1223 el->invalidate();
              +
              1224 if (match_recursively(text, start, end, flags)) {
              +
              1225 this->interval.start = start;
              +
              1226 return true;
              +
              1227 }
              +
              1228 this->interval.invalidate();
              +
              1229 return false;
              +
              1230 }
              +
              1231
              +
              1232 protected:
              +
              1233 bool match_recursively(
              +
              1234 _In_reads_or_z_(end) const T* text,
              +
              1235 _In_ size_t start = 0,
              +
              1236 _In_ size_t end = SIZE_MAX,
              +
              1237 _In_ int flags = match_default)
              +
              1238 {
              +
              1239 bool all_matched = true;
              +
              1240 for (auto& el : this->m_collection) {
              +
              1241 if (!el->interval) {
              +
              1242 // Element was not matched in permutatuion yet.
              +
              1243 all_matched = false;
              +
              1244 if (el->match(text, start, end, flags)) {
              +
              1245 // Element matched for the first time.
              +
              1246 if (match_recursively(text, el->interval.end, end, flags)) {
              +
              1247 // Rest of the elements matched too.
              +
              1248 return true;
              +
              1249 }
              +
              1250 el->invalidate();
              +
              1251 }
              +
              1252 }
              +
              1253 }
              +
              1254 if (all_matched) {
              +
              1255 this->interval.end = start;
              +
              1256 return true;
              +
              1257 }
              +
              1258 return false;
              +
              1259 }
              +
              1260 };
              -
              1262
              - - -
              1265#ifdef _UNICODE
              -
              1266 using tpermutation = wpermutation;
              -
              1267#else
              -
              1268 using tpermutation = permutation;
              -
              1269#endif
              - -
              1271
              -
              1275 template <class T>
              -
              -
              1276 class basic_integer : public basic_parser<T>
              -
              1277 {
              -
              1278 public:
              -
              1279 basic_integer(_In_ const std::locale& locale = std::locale()) :
              -
              1280 basic_parser<T>(locale),
              -
              1281 value(0)
              -
              1282 {}
              -
              1283
              -
              1284 virtual void invalidate()
              -
              1285 {
              -
              1286 value = 0;
              - -
              1288 }
              -
              1289
              -
              1290 public:
              -
              1291 size_t value;
              -
              1292 };
              +
              1261
              + + +
              1264#ifdef _UNICODE
              +
              1265 using tpermutation = wpermutation;
              +
              1266#else
              +
              1267 using tpermutation = permutation;
              +
              1268#endif
              + +
              1270
              +
              1274 template <class T>
              +
              +
              1275 class basic_integer : public basic_parser<T>
              +
              1276 {
              +
              1277 public:
              +
              1278 basic_integer(_In_ const std::locale& locale = std::locale()) :
              +
              1279 basic_parser<T>(locale),
              +
              1280 value(0)
              +
              1281 {}
              +
              1282
              +
              1283 virtual void invalidate()
              +
              1284 {
              +
              1285 value = 0;
              + +
              1287 }
              +
              1288
              +
              1289 public:
              +
              1290 size_t value;
              +
              1291 };
              -
              1293
              -
              1297 template <class T>
              -
              - -
              1299 {
              -
              1300 public:
              - -
              1302 _In_ const std::shared_ptr<basic_parser<T>>& digit_0,
              -
              1303 _In_ const std::shared_ptr<basic_parser<T>>& digit_1,
              -
              1304 _In_ const std::shared_ptr<basic_parser<T>>& digit_2,
              -
              1305 _In_ const std::shared_ptr<basic_parser<T>>& digit_3,
              -
              1306 _In_ const std::shared_ptr<basic_parser<T>>& digit_4,
              -
              1307 _In_ const std::shared_ptr<basic_parser<T>>& digit_5,
              -
              1308 _In_ const std::shared_ptr<basic_parser<T>>& digit_6,
              -
              1309 _In_ const std::shared_ptr<basic_parser<T>>& digit_7,
              -
              1310 _In_ const std::shared_ptr<basic_parser<T>>& digit_8,
              -
              1311 _In_ const std::shared_ptr<basic_parser<T>>& digit_9,
              -
              1312 _In_ const std::locale& locale = std::locale()) :
              -
              1313 basic_integer<T>(locale),
              -
              1314 m_digit_0(digit_0),
              -
              1315 m_digit_1(digit_1),
              -
              1316 m_digit_2(digit_2),
              -
              1317 m_digit_3(digit_3),
              -
              1318 m_digit_4(digit_4),
              -
              1319 m_digit_5(digit_5),
              -
              1320 m_digit_6(digit_6),
              -
              1321 m_digit_7(digit_7),
              -
              1322 m_digit_8(digit_8),
              -
              1323 m_digit_9(digit_9)
              -
              1324 {}
              -
              1325
              -
              1326 virtual bool match(
              -
              1327 _In_reads_or_z_(end) const T* text,
              -
              1328 _In_ size_t start = 0,
              -
              1329 _In_ size_t end = (size_t)-1,
              -
              1330 _In_ int flags = match_default)
              -
              1331 {
              -
              1332 _Assume_(text || start >= end);
              -
              1333 for (this->interval.end = start, this->value = 0; this->interval.end < end && text[this->interval.end];) {
              -
              1334 size_t dig;
              -
              1335 if (m_digit_0->match(text, this->interval.end, end, flags)) { dig = 0; this->interval.end = m_digit_0->interval.end; }
              -
              1336 else if (m_digit_1->match(text, this->interval.end, end, flags)) { dig = 1; this->interval.end = m_digit_1->interval.end; }
              -
              1337 else if (m_digit_2->match(text, this->interval.end, end, flags)) { dig = 2; this->interval.end = m_digit_2->interval.end; }
              -
              1338 else if (m_digit_3->match(text, this->interval.end, end, flags)) { dig = 3; this->interval.end = m_digit_3->interval.end; }
              -
              1339 else if (m_digit_4->match(text, this->interval.end, end, flags)) { dig = 4; this->interval.end = m_digit_4->interval.end; }
              -
              1340 else if (m_digit_5->match(text, this->interval.end, end, flags)) { dig = 5; this->interval.end = m_digit_5->interval.end; }
              -
              1341 else if (m_digit_6->match(text, this->interval.end, end, flags)) { dig = 6; this->interval.end = m_digit_6->interval.end; }
              -
              1342 else if (m_digit_7->match(text, this->interval.end, end, flags)) { dig = 7; this->interval.end = m_digit_7->interval.end; }
              -
              1343 else if (m_digit_8->match(text, this->interval.end, end, flags)) { dig = 8; this->interval.end = m_digit_8->interval.end; }
              -
              1344 else if (m_digit_9->match(text, this->interval.end, end, flags)) { dig = 9; this->interval.end = m_digit_9->interval.end; }
              -
              1345 else break;
              -
              1346 this->value = this->value * 10 + dig;
              -
              1347 }
              - -
              1349 this->interval.start = start;
              -
              1350 return true;
              -
              1351 }
              -
              1352 this->interval.start = (this->interval.end = start) + 1;
              -
              1353 return false;
              -
              1354 }
              -
              1355
              -
              1356 protected:
              -
              1357 std::shared_ptr<basic_parser<T>>
              -
              1358 m_digit_0,
              -
              1359 m_digit_1,
              -
              1360 m_digit_2,
              -
              1361 m_digit_3,
              -
              1362 m_digit_4,
              -
              1363 m_digit_5,
              -
              1364 m_digit_6,
              -
              1365 m_digit_7,
              -
              1366 m_digit_8,
              -
              1367 m_digit_9;
              -
              1368 };
              +
              1292
              +
              1296 template <class T>
              +
              + +
              1298 {
              +
              1299 public:
              + +
              1301 _In_ const std::shared_ptr<basic_parser<T>>& digit_0,
              +
              1302 _In_ const std::shared_ptr<basic_parser<T>>& digit_1,
              +
              1303 _In_ const std::shared_ptr<basic_parser<T>>& digit_2,
              +
              1304 _In_ const std::shared_ptr<basic_parser<T>>& digit_3,
              +
              1305 _In_ const std::shared_ptr<basic_parser<T>>& digit_4,
              +
              1306 _In_ const std::shared_ptr<basic_parser<T>>& digit_5,
              +
              1307 _In_ const std::shared_ptr<basic_parser<T>>& digit_6,
              +
              1308 _In_ const std::shared_ptr<basic_parser<T>>& digit_7,
              +
              1309 _In_ const std::shared_ptr<basic_parser<T>>& digit_8,
              +
              1310 _In_ const std::shared_ptr<basic_parser<T>>& digit_9,
              +
              1311 _In_ const std::locale& locale = std::locale()) :
              +
              1312 basic_integer<T>(locale),
              +
              1313 m_digit_0(digit_0),
              +
              1314 m_digit_1(digit_1),
              +
              1315 m_digit_2(digit_2),
              +
              1316 m_digit_3(digit_3),
              +
              1317 m_digit_4(digit_4),
              +
              1318 m_digit_5(digit_5),
              +
              1319 m_digit_6(digit_6),
              +
              1320 m_digit_7(digit_7),
              +
              1321 m_digit_8(digit_8),
              +
              1322 m_digit_9(digit_9)
              +
              1323 {}
              +
              1324
              +
              1325 virtual bool match(
              +
              1326 _In_reads_or_z_(end) const T* text,
              +
              1327 _In_ size_t start = 0,
              +
              1328 _In_ size_t end = SIZE_MAX,
              +
              1329 _In_ int flags = match_default)
              +
              1330 {
              +
              1331 _Assume_(text || start >= end);
              +
              1332 for (this->interval.end = start, this->value = 0; this->interval.end < end && text[this->interval.end];) {
              +
              1333 size_t dig;
              +
              1334 if (m_digit_0->match(text, this->interval.end, end, flags)) { dig = 0; this->interval.end = m_digit_0->interval.end; }
              +
              1335 else if (m_digit_1->match(text, this->interval.end, end, flags)) { dig = 1; this->interval.end = m_digit_1->interval.end; }
              +
              1336 else if (m_digit_2->match(text, this->interval.end, end, flags)) { dig = 2; this->interval.end = m_digit_2->interval.end; }
              +
              1337 else if (m_digit_3->match(text, this->interval.end, end, flags)) { dig = 3; this->interval.end = m_digit_3->interval.end; }
              +
              1338 else if (m_digit_4->match(text, this->interval.end, end, flags)) { dig = 4; this->interval.end = m_digit_4->interval.end; }
              +
              1339 else if (m_digit_5->match(text, this->interval.end, end, flags)) { dig = 5; this->interval.end = m_digit_5->interval.end; }
              +
              1340 else if (m_digit_6->match(text, this->interval.end, end, flags)) { dig = 6; this->interval.end = m_digit_6->interval.end; }
              +
              1341 else if (m_digit_7->match(text, this->interval.end, end, flags)) { dig = 7; this->interval.end = m_digit_7->interval.end; }
              +
              1342 else if (m_digit_8->match(text, this->interval.end, end, flags)) { dig = 8; this->interval.end = m_digit_8->interval.end; }
              +
              1343 else if (m_digit_9->match(text, this->interval.end, end, flags)) { dig = 9; this->interval.end = m_digit_9->interval.end; }
              +
              1344 else break;
              +
              1345 this->value = this->value * 10 + dig;
              +
              1346 }
              + +
              1348 this->interval.start = start;
              +
              1349 return true;
              +
              1350 }
              +
              1351 this->interval.invalidate();
              +
              1352 return false;
              +
              1353 }
              +
              1354
              +
              1355 protected:
              +
              1356 std::shared_ptr<basic_parser<T>>
              +
              1357 m_digit_0,
              +
              1358 m_digit_1,
              +
              1359 m_digit_2,
              +
              1360 m_digit_3,
              +
              1361 m_digit_4,
              +
              1362 m_digit_5,
              +
              1363 m_digit_6,
              +
              1364 m_digit_7,
              +
              1365 m_digit_8,
              +
              1366 m_digit_9;
              +
              1367 };
              -
              1369
              - - -
              1372#ifdef _UNICODE
              -
              1373 using tinteger10 = winteger10;
              -
              1374#else
              -
              1375 using tinteger10 = integer10;
              -
              1376#endif
              - -
              1378
              -
              1382 template <class T>
              -
              - -
              1384 {
              -
              1385 public:
              - -
              1387 _In_ const std::shared_ptr<basic_integer10<T>>& digits,
              -
              1388 _In_ const std::shared_ptr<basic_set<T>>& separator,
              -
              1389 _In_ const std::locale& locale = std::locale()) :
              -
              1390 basic_integer<T>(locale),
              -
              1391 digit_count(0),
              -
              1392 has_separators(false),
              -
              1393 m_digits(digits),
              -
              1394 m_separator(separator)
              -
              1395 {}
              -
              1396
              -
              1397 virtual bool match(
              -
              1398 _In_reads_or_z_(end) const T* text,
              -
              1399 _In_ size_t start = 0,
              -
              1400 _In_ size_t end = (size_t)-1,
              -
              1401 _In_ int flags = match_default)
              -
              1402 {
              -
              1403 _Assume_(text || start >= end);
              -
              1404 if (m_digits->match(text, start, end, flags)) {
              -
              1405 // Leading part match.
              -
              1406 this->value = m_digits->value;
              -
              1407 digit_count = m_digits->interval.size();
              -
              1408 has_separators = false;
              -
              1409 this->interval.start = start;
              -
              1410 this->interval.end = m_digits->interval.end;
              -
              1411 if (m_digits->interval.size() <= 3) {
              -
              1412 // Maybe separated with thousand separators?
              -
              1413 size_t hit_offset = (size_t)-1;
              -
              1414 while (m_separator->match(text, this->interval.end, end, flags) &&
              -
              1415 (hit_offset == (size_t)-1 || hit_offset == m_separator->hit_offset) && // All separators must be the same, no mixing.
              -
              1416 m_digits->match(text, m_separator->interval.end, end, flags) &&
              -
              1417 m_digits->interval.size() == 3)
              -
              1418 {
              -
              1419 // Thousand separator and three-digit integer followed.
              -
              1420 this->value = this->value * 1000 + m_digits->value;
              -
              1421 digit_count += 3;
              -
              1422 has_separators = true;
              -
              1423 this->interval.end = m_digits->interval.end;
              -
              1424 hit_offset = m_separator->hit_offset;
              -
              1425 }
              -
              1426 }
              -
              1427
              -
              1428 return true;
              -
              1429 }
              -
              1430 this->value = 0;
              -
              1431 this->interval.start = (this->interval.end = start) + 1;
              -
              1432 return false;
              -
              1433 }
              -
              1434
              -
              1435 virtual void invalidate()
              -
              1436 {
              -
              1437 digit_count = 0;
              -
              1438 has_separators = false;
              - -
              1440 }
              -
              1441
              -
              1442 public:
              - - -
              1445
              -
              1446 protected:
              -
              1447 std::shared_ptr<basic_integer10<T>> m_digits;
              -
              1448 std::shared_ptr<basic_set<T>> m_separator;
              -
              1449 };
              +
              1368
              + + +
              1371#ifdef _UNICODE
              +
              1372 using tinteger10 = winteger10;
              +
              1373#else
              +
              1374 using tinteger10 = integer10;
              +
              1375#endif
              + +
              1377
              +
              1381 template <class T>
              +
              + +
              1383 {
              +
              1384 public:
              + +
              1386 _In_ const std::shared_ptr<basic_integer10<T>>& digits,
              +
              1387 _In_ const std::shared_ptr<basic_set<T>>& separator,
              +
              1388 _In_ const std::locale& locale = std::locale()) :
              +
              1389 basic_integer<T>(locale),
              +
              1390 digit_count(0),
              +
              1391 has_separators(false),
              +
              1392 m_digits(digits),
              +
              1393 m_separator(separator)
              +
              1394 {}
              +
              1395
              +
              1396 virtual bool match(
              +
              1397 _In_reads_or_z_(end) const T* text,
              +
              1398 _In_ size_t start = 0,
              +
              1399 _In_ size_t end = SIZE_MAX,
              +
              1400 _In_ int flags = match_default)
              +
              1401 {
              +
              1402 _Assume_(text || start >= end);
              +
              1403 if (m_digits->match(text, start, end, flags)) {
              +
              1404 // Leading part match.
              +
              1405 this->value = m_digits->value;
              +
              1406 digit_count = m_digits->interval.size();
              +
              1407 has_separators = false;
              +
              1408 this->interval.start = start;
              +
              1409 this->interval.end = m_digits->interval.end;
              +
              1410 if (m_digits->interval.size() <= 3) {
              +
              1411 // Maybe separated with thousand separators?
              +
              1412 size_t hit_offset = SIZE_MAX;
              +
              1413 while (m_separator->match(text, this->interval.end, end, flags) &&
              +
              1414 (hit_offset == SIZE_MAX || hit_offset == m_separator->hit_offset) && // All separators must be the same, no mixing.
              +
              1415 m_digits->match(text, m_separator->interval.end, end, flags) &&
              +
              1416 m_digits->interval.size() == 3)
              +
              1417 {
              +
              1418 // Thousand separator and three-digit integer followed.
              +
              1419 this->value = this->value * 1000 + m_digits->value;
              +
              1420 digit_count += 3;
              +
              1421 has_separators = true;
              +
              1422 this->interval.end = m_digits->interval.end;
              +
              1423 hit_offset = m_separator->hit_offset;
              +
              1424 }
              +
              1425 }
              +
              1426
              +
              1427 return true;
              +
              1428 }
              +
              1429 this->value = 0;
              +
              1430 this->interval.invalidate();
              +
              1431 return false;
              +
              1432 }
              +
              1433
              +
              1434 virtual void invalidate()
              +
              1435 {
              +
              1436 digit_count = 0;
              +
              1437 has_separators = false;
              + +
              1439 }
              +
              1440
              +
              1441 public:
              + + +
              1444
              +
              1445 protected:
              +
              1446 std::shared_ptr<basic_integer10<T>> m_digits;
              +
              1447 std::shared_ptr<basic_set<T>> m_separator;
              +
              1448 };
              -
              1450
              - - -
              1453#ifdef _UNICODE
              -
              1454 using tinteger10ts = winteger10ts;
              -
              1455#else
              -
              1456 using tinteger10ts = integer10ts;
              -
              1457#endif
              - -
              1459
              -
              1463 template <class T>
              -
              - -
              1465 {
              -
              1466 public:
              - -
              1468 _In_ const std::shared_ptr<basic_parser<T>>& digit_0,
              -
              1469 _In_ const std::shared_ptr<basic_parser<T>>& digit_1,
              -
              1470 _In_ const std::shared_ptr<basic_parser<T>>& digit_2,
              -
              1471 _In_ const std::shared_ptr<basic_parser<T>>& digit_3,
              -
              1472 _In_ const std::shared_ptr<basic_parser<T>>& digit_4,
              -
              1473 _In_ const std::shared_ptr<basic_parser<T>>& digit_5,
              -
              1474 _In_ const std::shared_ptr<basic_parser<T>>& digit_6,
              -
              1475 _In_ const std::shared_ptr<basic_parser<T>>& digit_7,
              -
              1476 _In_ const std::shared_ptr<basic_parser<T>>& digit_8,
              -
              1477 _In_ const std::shared_ptr<basic_parser<T>>& digit_9,
              -
              1478 _In_ const std::shared_ptr<basic_parser<T>>& digit_10,
              -
              1479 _In_ const std::shared_ptr<basic_parser<T>>& digit_11,
              -
              1480 _In_ const std::shared_ptr<basic_parser<T>>& digit_12,
              -
              1481 _In_ const std::shared_ptr<basic_parser<T>>& digit_13,
              -
              1482 _In_ const std::shared_ptr<basic_parser<T>>& digit_14,
              -
              1483 _In_ const std::shared_ptr<basic_parser<T>>& digit_15,
              -
              1484 _In_ const std::locale& locale = std::locale()) :
              -
              1485 basic_integer<T>(locale),
              -
              1486 m_digit_0(digit_0),
              -
              1487 m_digit_1(digit_1),
              -
              1488 m_digit_2(digit_2),
              -
              1489 m_digit_3(digit_3),
              -
              1490 m_digit_4(digit_4),
              -
              1491 m_digit_5(digit_5),
              -
              1492 m_digit_6(digit_6),
              -
              1493 m_digit_7(digit_7),
              -
              1494 m_digit_8(digit_8),
              -
              1495 m_digit_9(digit_9),
              -
              1496 m_digit_10(digit_10),
              -
              1497 m_digit_11(digit_11),
              -
              1498 m_digit_12(digit_12),
              -
              1499 m_digit_13(digit_13),
              -
              1500 m_digit_14(digit_14),
              -
              1501 m_digit_15(digit_15)
              -
              1502 {}
              -
              1503
              -
              1504 virtual bool match(
              -
              1505 _In_reads_or_z_(end) const T* text,
              -
              1506 _In_ size_t start = 0,
              -
              1507 _In_ size_t end = (size_t)-1,
              -
              1508 _In_ int flags = match_default)
              -
              1509 {
              -
              1510 _Assume_(text || start >= end);
              -
              1511 for (this->interval.end = start, this->value = 0; this->interval.end < end && text[this->interval.end];) {
              -
              1512 size_t dig;
              -
              1513 if (m_digit_0->match(text, this->interval.end, end, flags)) { dig = 0; this->interval.end = m_digit_0->interval.end; }
              -
              1514 else if (m_digit_1->match(text, this->interval.end, end, flags)) { dig = 1; this->interval.end = m_digit_1->interval.end; }
              -
              1515 else if (m_digit_2->match(text, this->interval.end, end, flags)) { dig = 2; this->interval.end = m_digit_2->interval.end; }
              -
              1516 else if (m_digit_3->match(text, this->interval.end, end, flags)) { dig = 3; this->interval.end = m_digit_3->interval.end; }
              -
              1517 else if (m_digit_4->match(text, this->interval.end, end, flags)) { dig = 4; this->interval.end = m_digit_4->interval.end; }
              -
              1518 else if (m_digit_5->match(text, this->interval.end, end, flags)) { dig = 5; this->interval.end = m_digit_5->interval.end; }
              -
              1519 else if (m_digit_6->match(text, this->interval.end, end, flags)) { dig = 6; this->interval.end = m_digit_6->interval.end; }
              -
              1520 else if (m_digit_7->match(text, this->interval.end, end, flags)) { dig = 7; this->interval.end = m_digit_7->interval.end; }
              -
              1521 else if (m_digit_8->match(text, this->interval.end, end, flags)) { dig = 8; this->interval.end = m_digit_8->interval.end; }
              -
              1522 else if (m_digit_9->match(text, this->interval.end, end, flags)) { dig = 9; this->interval.end = m_digit_9->interval.end; }
              -
              1523 else if (m_digit_10->match(text, this->interval.end, end, flags)) { dig = 10; this->interval.end = m_digit_10->interval.end; }
              -
              1524 else if (m_digit_11->match(text, this->interval.end, end, flags)) { dig = 11; this->interval.end = m_digit_11->interval.end; }
              -
              1525 else if (m_digit_12->match(text, this->interval.end, end, flags)) { dig = 12; this->interval.end = m_digit_12->interval.end; }
              -
              1526 else if (m_digit_13->match(text, this->interval.end, end, flags)) { dig = 13; this->interval.end = m_digit_13->interval.end; }
              -
              1527 else if (m_digit_14->match(text, this->interval.end, end, flags)) { dig = 14; this->interval.end = m_digit_14->interval.end; }
              -
              1528 else if (m_digit_15->match(text, this->interval.end, end, flags)) { dig = 15; this->interval.end = m_digit_15->interval.end; }
              -
              1529 else break;
              -
              1530 this->value = this->value * 16 + dig;
              -
              1531 }
              - -
              1533 this->interval.start = start;
              -
              1534 return true;
              -
              1535 }
              -
              1536 this->interval.start = (this->interval.end = start) + 1;
              -
              1537 return false;
              -
              1538 }
              -
              1539
              -
              1540 protected:
              -
              1541 std::shared_ptr<basic_parser<T>>
              -
              1542 m_digit_0,
              -
              1543 m_digit_1,
              -
              1544 m_digit_2,
              -
              1545 m_digit_3,
              -
              1546 m_digit_4,
              -
              1547 m_digit_5,
              -
              1548 m_digit_6,
              -
              1549 m_digit_7,
              -
              1550 m_digit_8,
              -
              1551 m_digit_9,
              -
              1552 m_digit_10,
              -
              1553 m_digit_11,
              -
              1554 m_digit_12,
              -
              1555 m_digit_13,
              -
              1556 m_digit_14,
              -
              1557 m_digit_15;
              -
              1558 };
              +
              1449
              + + +
              1452#ifdef _UNICODE
              +
              1453 using tinteger10ts = winteger10ts;
              +
              1454#else
              +
              1455 using tinteger10ts = integer10ts;
              +
              1456#endif
              + +
              1458
              +
              1462 template <class T>
              +
              + +
              1464 {
              +
              1465 public:
              + +
              1467 _In_ const std::shared_ptr<basic_parser<T>>& digit_0,
              +
              1468 _In_ const std::shared_ptr<basic_parser<T>>& digit_1,
              +
              1469 _In_ const std::shared_ptr<basic_parser<T>>& digit_2,
              +
              1470 _In_ const std::shared_ptr<basic_parser<T>>& digit_3,
              +
              1471 _In_ const std::shared_ptr<basic_parser<T>>& digit_4,
              +
              1472 _In_ const std::shared_ptr<basic_parser<T>>& digit_5,
              +
              1473 _In_ const std::shared_ptr<basic_parser<T>>& digit_6,
              +
              1474 _In_ const std::shared_ptr<basic_parser<T>>& digit_7,
              +
              1475 _In_ const std::shared_ptr<basic_parser<T>>& digit_8,
              +
              1476 _In_ const std::shared_ptr<basic_parser<T>>& digit_9,
              +
              1477 _In_ const std::shared_ptr<basic_parser<T>>& digit_10,
              +
              1478 _In_ const std::shared_ptr<basic_parser<T>>& digit_11,
              +
              1479 _In_ const std::shared_ptr<basic_parser<T>>& digit_12,
              +
              1480 _In_ const std::shared_ptr<basic_parser<T>>& digit_13,
              +
              1481 _In_ const std::shared_ptr<basic_parser<T>>& digit_14,
              +
              1482 _In_ const std::shared_ptr<basic_parser<T>>& digit_15,
              +
              1483 _In_ const std::locale& locale = std::locale()) :
              +
              1484 basic_integer<T>(locale),
              +
              1485 m_digit_0(digit_0),
              +
              1486 m_digit_1(digit_1),
              +
              1487 m_digit_2(digit_2),
              +
              1488 m_digit_3(digit_3),
              +
              1489 m_digit_4(digit_4),
              +
              1490 m_digit_5(digit_5),
              +
              1491 m_digit_6(digit_6),
              +
              1492 m_digit_7(digit_7),
              +
              1493 m_digit_8(digit_8),
              +
              1494 m_digit_9(digit_9),
              +
              1495 m_digit_10(digit_10),
              +
              1496 m_digit_11(digit_11),
              +
              1497 m_digit_12(digit_12),
              +
              1498 m_digit_13(digit_13),
              +
              1499 m_digit_14(digit_14),
              +
              1500 m_digit_15(digit_15)
              +
              1501 {}
              +
              1502
              +
              1503 virtual bool match(
              +
              1504 _In_reads_or_z_(end) const T* text,
              +
              1505 _In_ size_t start = 0,
              +
              1506 _In_ size_t end = SIZE_MAX,
              +
              1507 _In_ int flags = match_default)
              +
              1508 {
              +
              1509 _Assume_(text || start >= end);
              +
              1510 for (this->interval.end = start, this->value = 0; this->interval.end < end && text[this->interval.end];) {
              +
              1511 size_t dig;
              +
              1512 if (m_digit_0->match(text, this->interval.end, end, flags)) { dig = 0; this->interval.end = m_digit_0->interval.end; }
              +
              1513 else if (m_digit_1->match(text, this->interval.end, end, flags)) { dig = 1; this->interval.end = m_digit_1->interval.end; }
              +
              1514 else if (m_digit_2->match(text, this->interval.end, end, flags)) { dig = 2; this->interval.end = m_digit_2->interval.end; }
              +
              1515 else if (m_digit_3->match(text, this->interval.end, end, flags)) { dig = 3; this->interval.end = m_digit_3->interval.end; }
              +
              1516 else if (m_digit_4->match(text, this->interval.end, end, flags)) { dig = 4; this->interval.end = m_digit_4->interval.end; }
              +
              1517 else if (m_digit_5->match(text, this->interval.end, end, flags)) { dig = 5; this->interval.end = m_digit_5->interval.end; }
              +
              1518 else if (m_digit_6->match(text, this->interval.end, end, flags)) { dig = 6; this->interval.end = m_digit_6->interval.end; }
              +
              1519 else if (m_digit_7->match(text, this->interval.end, end, flags)) { dig = 7; this->interval.end = m_digit_7->interval.end; }
              +
              1520 else if (m_digit_8->match(text, this->interval.end, end, flags)) { dig = 8; this->interval.end = m_digit_8->interval.end; }
              +
              1521 else if (m_digit_9->match(text, this->interval.end, end, flags)) { dig = 9; this->interval.end = m_digit_9->interval.end; }
              +
              1522 else if (m_digit_10->match(text, this->interval.end, end, flags)) { dig = 10; this->interval.end = m_digit_10->interval.end; }
              +
              1523 else if (m_digit_11->match(text, this->interval.end, end, flags)) { dig = 11; this->interval.end = m_digit_11->interval.end; }
              +
              1524 else if (m_digit_12->match(text, this->interval.end, end, flags)) { dig = 12; this->interval.end = m_digit_12->interval.end; }
              +
              1525 else if (m_digit_13->match(text, this->interval.end, end, flags)) { dig = 13; this->interval.end = m_digit_13->interval.end; }
              +
              1526 else if (m_digit_14->match(text, this->interval.end, end, flags)) { dig = 14; this->interval.end = m_digit_14->interval.end; }
              +
              1527 else if (m_digit_15->match(text, this->interval.end, end, flags)) { dig = 15; this->interval.end = m_digit_15->interval.end; }
              +
              1528 else break;
              +
              1529 this->value = this->value * 16 + dig;
              +
              1530 }
              + +
              1532 this->interval.start = start;
              +
              1533 return true;
              +
              1534 }
              +
              1535 this->interval.invalidate();
              +
              1536 return false;
              +
              1537 }
              +
              1538
              +
              1539 protected:
              +
              1540 std::shared_ptr<basic_parser<T>>
              +
              1541 m_digit_0,
              +
              1542 m_digit_1,
              +
              1543 m_digit_2,
              +
              1544 m_digit_3,
              +
              1545 m_digit_4,
              +
              1546 m_digit_5,
              +
              1547 m_digit_6,
              +
              1548 m_digit_7,
              +
              1549 m_digit_8,
              +
              1550 m_digit_9,
              +
              1551 m_digit_10,
              +
              1552 m_digit_11,
              +
              1553 m_digit_12,
              +
              1554 m_digit_13,
              +
              1555 m_digit_14,
              +
              1556 m_digit_15;
              +
              1557 };
              -
              1559
              - - -
              1562#ifdef _UNICODE
              -
              1563 using tinteger16 = winteger16;
              -
              1564#else
              -
              1565 using tinteger16 = integer16;
              -
              1566#endif
              - -
              1568
              -
              1572 template <class T>
              -
              - -
              1574 {
              -
              1575 public:
              - -
              1577 _In_ const std::shared_ptr<basic_parser<T>>& digit_1,
              -
              1578 _In_ const std::shared_ptr<basic_parser<T>>& digit_5,
              -
              1579 _In_ const std::shared_ptr<basic_parser<T>>& digit_10,
              -
              1580 _In_ const std::shared_ptr<basic_parser<T>>& digit_50,
              -
              1581 _In_ const std::shared_ptr<basic_parser<T>>& digit_100,
              -
              1582 _In_ const std::shared_ptr<basic_parser<T>>& digit_500,
              -
              1583 _In_ const std::shared_ptr<basic_parser<T>>& digit_1000,
              -
              1584 _In_ const std::shared_ptr<basic_parser<T>>& digit_5000,
              -
              1585 _In_ const std::shared_ptr<basic_parser<T>>& digit_10000,
              -
              1586 _In_ const std::locale& locale = std::locale()) :
              -
              1587 basic_integer<T>(locale),
              -
              1588 m_digit_1(digit_1),
              -
              1589 m_digit_5(digit_5),
              -
              1590 m_digit_10(digit_10),
              -
              1591 m_digit_50(digit_50),
              -
              1592 m_digit_100(digit_100),
              -
              1593 m_digit_500(digit_500),
              -
              1594 m_digit_1000(digit_1000),
              -
              1595 m_digit_5000(digit_5000),
              -
              1596 m_digit_10000(digit_10000)
              -
              1597 {}
              -
              1598
              -
              1599 virtual bool match(
              -
              1600 _In_reads_or_z_(end) const T* text,
              -
              1601 _In_ size_t start = 0,
              -
              1602 _In_ size_t end = (size_t)-1,
              -
              1603 _In_ int flags = match_default)
              -
              1604 {
              -
              1605 _Assume_(text || start >= end);
              -
              1606 size_t
              -
              1607 dig[5] = { (size_t)-1, (size_t)-1, (size_t)-1, (size_t)-1, (size_t)-1 },
              -
              1608 end2;
              -
              1609
              -
              1610 for (this->interval.end = start, this->value = 0; this->interval.end < end && text[this->interval.end]; dig[3] = dig[2], dig[2] = dig[1], dig[1] = dig[0], this->interval.end = end2) {
              -
              1611 if (m_digit_1 && m_digit_1->match(text, this->interval.end, end, flags)) { dig[0] = 1; end2 = m_digit_1->interval.end; }
              -
              1612 else if (m_digit_5 && m_digit_5->match(text, this->interval.end, end, flags)) { dig[0] = 5; end2 = m_digit_5->interval.end; }
              -
              1613 else if (m_digit_10 && m_digit_10->match(text, this->interval.end, end, flags)) { dig[0] = 10; end2 = m_digit_10->interval.end; }
              -
              1614 else if (m_digit_50 && m_digit_50->match(text, this->interval.end, end, flags)) { dig[0] = 50; end2 = m_digit_50->interval.end; }
              -
              1615 else if (m_digit_100 && m_digit_100->match(text, this->interval.end, end, flags)) { dig[0] = 100; end2 = m_digit_100->interval.end; }
              -
              1616 else if (m_digit_500 && m_digit_500->match(text, this->interval.end, end, flags)) { dig[0] = 500; end2 = m_digit_500->interval.end; }
              -
              1617 else if (m_digit_1000 && m_digit_1000->match(text, this->interval.end, end, flags)) { dig[0] = 1000; end2 = m_digit_1000->interval.end; }
              -
              1618 else if (m_digit_5000 && m_digit_5000->match(text, this->interval.end, end, flags)) { dig[0] = 5000; end2 = m_digit_5000->interval.end; }
              -
              1619 else if (m_digit_10000 && m_digit_10000->match(text, this->interval.end, end, flags)) { dig[0] = 10000; end2 = m_digit_10000->interval.end; }
              -
              1620 else break;
              -
              1621
              -
              1622 // Store first digit.
              -
              1623 if (dig[4] == (size_t)-1) dig[4] = dig[0];
              -
              1624
              -
              1625 if (dig[3] == dig[2] && dig[2] == dig[1] && dig[1] == dig[0] && dig[0] != dig[4]) {
              -
              1626 // Same digit repeated four times. No-go, unless first digit. E.g. XIIII vs. XIV. MMMMMCD allowed, IIII also...
              -
              1627 break;
              -
              1628 }
              -
              1629 if (dig[0] <= dig[1]) {
              -
              1630 // Digit is less or equal previous one: add.
              -
              1631 this->value += dig[0];
              -
              1632 }
              -
              1633 else if (
              -
              1634 (dig[1] == 1 && (dig[0] == 5 || dig[0] == 10)) ||
              -
              1635 (dig[1] == 10 && (dig[0] == 50 || dig[0] == 100)) ||
              -
              1636 (dig[1] == 100 && (dig[0] == 500 || dig[0] == 1000)) ||
              -
              1637 (dig[1] == 1000 && (dig[0] == 5000 || dig[0] == 10000)))
              -
              1638 {
              -
              1639 // Digit is up to two orders bigger than previous one: subtract. But...
              -
              1640 if (dig[2] < dig[0]) {
              -
              1641 // Digit is also bigger than pre-previous one. E.g. VIX (V < X => invalid)
              -
              1642 break;
              -
              1643 }
              -
              1644 this->value -= dig[1]; // Cancel addition in the previous step.
              -
              1645 dig[0] -= dig[1]; // Combine last two digits.
              -
              1646 dig[1] = dig[2]; // The true previous digit is now pre-previous one. :)
              -
              1647 dig[2] = dig[3]; // The true pre-previous digit is now pre-pre-previous one. :)
              -
              1648 this->value += dig[0]; // Add combined value.
              -
              1649 }
              -
              1650 else {
              -
              1651 // New digit is too big than the previous one. E.g. VX (V < X => invalid)
              -
              1652 break;
              -
              1653 }
              -
              1654 }
              -
              1655 if (this->value) {
              -
              1656 this->interval.start = start;
              -
              1657 return true;
              -
              1658 }
              -
              1659 this->interval.start = (this->interval.end = start) + 1;
              -
              1660 return false;
              -
              1661 }
              -
              1662
              -
              1663 protected:
              -
              1664 std::shared_ptr<basic_parser<T>>
              -
              1665 m_digit_1,
              -
              1666 m_digit_5,
              -
              1667 m_digit_10,
              -
              1668 m_digit_50,
              -
              1669 m_digit_100,
              -
              1670 m_digit_500,
              -
              1671 m_digit_1000,
              -
              1672 m_digit_5000,
              -
              1673 m_digit_10000;
              -
              1674 };
              +
              1558
              + + +
              1561#ifdef _UNICODE
              +
              1562 using tinteger16 = winteger16;
              +
              1563#else
              +
              1564 using tinteger16 = integer16;
              +
              1565#endif
              + +
              1567
              +
              1571 template <class T>
              +
              + +
              1573 {
              +
              1574 public:
              + +
              1576 _In_ const std::shared_ptr<basic_parser<T>>& digit_1,
              +
              1577 _In_ const std::shared_ptr<basic_parser<T>>& digit_5,
              +
              1578 _In_ const std::shared_ptr<basic_parser<T>>& digit_10,
              +
              1579 _In_ const std::shared_ptr<basic_parser<T>>& digit_50,
              +
              1580 _In_ const std::shared_ptr<basic_parser<T>>& digit_100,
              +
              1581 _In_ const std::shared_ptr<basic_parser<T>>& digit_500,
              +
              1582 _In_ const std::shared_ptr<basic_parser<T>>& digit_1000,
              +
              1583 _In_ const std::shared_ptr<basic_parser<T>>& digit_5000,
              +
              1584 _In_ const std::shared_ptr<basic_parser<T>>& digit_10000,
              +
              1585 _In_ const std::locale& locale = std::locale()) :
              +
              1586 basic_integer<T>(locale),
              +
              1587 m_digit_1(digit_1),
              +
              1588 m_digit_5(digit_5),
              +
              1589 m_digit_10(digit_10),
              +
              1590 m_digit_50(digit_50),
              +
              1591 m_digit_100(digit_100),
              +
              1592 m_digit_500(digit_500),
              +
              1593 m_digit_1000(digit_1000),
              +
              1594 m_digit_5000(digit_5000),
              +
              1595 m_digit_10000(digit_10000)
              +
              1596 {}
              +
              1597
              +
              1598 virtual bool match(
              +
              1599 _In_reads_or_z_(end) const T* text,
              +
              1600 _In_ size_t start = 0,
              +
              1601 _In_ size_t end = SIZE_MAX,
              +
              1602 _In_ int flags = match_default)
              +
              1603 {
              +
              1604 _Assume_(text || start >= end);
              +
              1605 size_t
              + +
              1607 end2;
              +
              1608
              +
              1609 for (this->interval.end = start, this->value = 0; this->interval.end < end && text[this->interval.end]; dig[3] = dig[2], dig[2] = dig[1], dig[1] = dig[0], this->interval.end = end2) {
              +
              1610 if (m_digit_1 && m_digit_1->match(text, this->interval.end, end, flags)) { dig[0] = 1; end2 = m_digit_1->interval.end; }
              +
              1611 else if (m_digit_5 && m_digit_5->match(text, this->interval.end, end, flags)) { dig[0] = 5; end2 = m_digit_5->interval.end; }
              +
              1612 else if (m_digit_10 && m_digit_10->match(text, this->interval.end, end, flags)) { dig[0] = 10; end2 = m_digit_10->interval.end; }
              +
              1613 else if (m_digit_50 && m_digit_50->match(text, this->interval.end, end, flags)) { dig[0] = 50; end2 = m_digit_50->interval.end; }
              +
              1614 else if (m_digit_100 && m_digit_100->match(text, this->interval.end, end, flags)) { dig[0] = 100; end2 = m_digit_100->interval.end; }
              +
              1615 else if (m_digit_500 && m_digit_500->match(text, this->interval.end, end, flags)) { dig[0] = 500; end2 = m_digit_500->interval.end; }
              +
              1616 else if (m_digit_1000 && m_digit_1000->match(text, this->interval.end, end, flags)) { dig[0] = 1000; end2 = m_digit_1000->interval.end; }
              +
              1617 else if (m_digit_5000 && m_digit_5000->match(text, this->interval.end, end, flags)) { dig[0] = 5000; end2 = m_digit_5000->interval.end; }
              +
              1618 else if (m_digit_10000 && m_digit_10000->match(text, this->interval.end, end, flags)) { dig[0] = 10000; end2 = m_digit_10000->interval.end; }
              +
              1619 else break;
              +
              1620
              +
              1621 // Store first digit.
              +
              1622 if (dig[4] == SIZE_MAX) dig[4] = dig[0];
              +
              1623
              +
              1624 if (dig[3] == dig[2] && dig[2] == dig[1] && dig[1] == dig[0] && dig[0] != dig[4]) {
              +
              1625 // Same digit repeated four times. No-go, unless first digit. E.g. XIIII vs. XIV. MMMMMCD allowed, IIII also...
              +
              1626 break;
              +
              1627 }
              +
              1628 if (dig[0] <= dig[1]) {
              +
              1629 // Digit is less or equal previous one: add.
              +
              1630 this->value += dig[0];
              +
              1631 }
              +
              1632 else if (
              +
              1633 (dig[1] == 1 && (dig[0] == 5 || dig[0] == 10)) ||
              +
              1634 (dig[1] == 10 && (dig[0] == 50 || dig[0] == 100)) ||
              +
              1635 (dig[1] == 100 && (dig[0] == 500 || dig[0] == 1000)) ||
              +
              1636 (dig[1] == 1000 && (dig[0] == 5000 || dig[0] == 10000)))
              +
              1637 {
              +
              1638 // Digit is up to two orders bigger than previous one: subtract. But...
              +
              1639 if (dig[2] < dig[0]) {
              +
              1640 // Digit is also bigger than pre-previous one. E.g. VIX (V < X => invalid)
              +
              1641 break;
              +
              1642 }
              +
              1643 this->value -= dig[1]; // Cancel addition in the previous step.
              +
              1644 dig[0] -= dig[1]; // Combine last two digits.
              +
              1645 dig[1] = dig[2]; // The true previous digit is now pre-previous one. :)
              +
              1646 dig[2] = dig[3]; // The true pre-previous digit is now pre-pre-previous one. :)
              +
              1647 this->value += dig[0]; // Add combined value.
              +
              1648 }
              +
              1649 else {
              +
              1650 // New digit is too big than the previous one. E.g. VX (V < X => invalid)
              +
              1651 break;
              +
              1652 }
              +
              1653 }
              +
              1654 if (this->value) {
              +
              1655 this->interval.start = start;
              +
              1656 return true;
              +
              1657 }
              +
              1658 this->interval.invalidate();
              +
              1659 return false;
              +
              1660 }
              +
              1661
              +
              1662 protected:
              +
              1663 std::shared_ptr<basic_parser<T>>
              +
              1664 m_digit_1,
              +
              1665 m_digit_5,
              +
              1666 m_digit_10,
              +
              1667 m_digit_50,
              +
              1668 m_digit_100,
              +
              1669 m_digit_500,
              +
              1670 m_digit_1000,
              +
              1671 m_digit_5000,
              +
              1672 m_digit_10000;
              +
              1673 };
              -
              1675
              - - -
              1678#ifdef _UNICODE
              - -
              1680#else
              - -
              1682#endif
              - -
              1684
              -
              1688 template <class T>
              -
              - -
              1690 {
              -
              1691 public:
              - -
              1693 _In_ const std::shared_ptr<basic_parser<T>>& _numerator,
              -
              1694 _In_ const std::shared_ptr<basic_parser<T>>& _fraction_line,
              -
              1695 _In_ const std::shared_ptr<basic_parser<T>>& _denominator,
              -
              1696 _In_ const std::locale& locale = std::locale()) :
              -
              1697 basic_parser<T>(locale),
              -
              1698 numerator(_numerator),
              -
              1699 fraction_line(_fraction_line),
              -
              1700 denominator(_denominator)
              -
              1701 {}
              -
              1702
              -
              1703 virtual bool match(
              -
              1704 _In_reads_or_z_(end) const T* text,
              -
              1705 _In_ size_t start = 0,
              -
              1706 _In_ size_t end = (size_t)-1,
              -
              1707 _In_ int flags = match_default)
              -
              1708 {
              -
              1709 _Assume_(text || start >= end);
              -
              1710 if (numerator->match(text, start, end, flags) &&
              -
              1711 fraction_line->match(text, numerator->interval.end, end, flags) &&
              -
              1712 denominator->match(text, fraction_line->interval.end, end, flags))
              -
              1713 {
              -
              1714 this->interval.start = start;
              -
              1715 this->interval.end = denominator->interval.end;
              -
              1716 return true;
              -
              1717 }
              -
              1718 numerator->invalidate();
              -
              1719 fraction_line->invalidate();
              -
              1720 denominator->invalidate();
              -
              1721 this->interval.start = (this->interval.end = start) + 1;
              -
              1722 return false;
              -
              1723 }
              -
              1724
              -
              1725 virtual void invalidate()
              -
              1726 {
              -
              1727 numerator->invalidate();
              -
              1728 fraction_line->invalidate();
              -
              1729 denominator->invalidate();
              - -
              1731 }
              -
              1732
              -
              1733 public:
              -
              1734 std::shared_ptr<basic_parser<T>> numerator;
              -
              1735 std::shared_ptr<basic_parser<T>> fraction_line;
              -
              1736 std::shared_ptr<basic_parser<T>> denominator;
              -
              1737 };
              +
              1674
              + + +
              1677#ifdef _UNICODE
              + +
              1679#else
              + +
              1681#endif
              + +
              1683
              +
              1687 template <class T>
              +
              + +
              1689 {
              +
              1690 public:
              + +
              1692 _In_ const std::shared_ptr<basic_parser<T>>& _numerator,
              +
              1693 _In_ const std::shared_ptr<basic_parser<T>>& _fraction_line,
              +
              1694 _In_ const std::shared_ptr<basic_parser<T>>& _denominator,
              +
              1695 _In_ const std::locale& locale = std::locale()) :
              +
              1696 basic_parser<T>(locale),
              +
              1697 numerator(_numerator),
              +
              1698 fraction_line(_fraction_line),
              +
              1699 denominator(_denominator)
              +
              1700 {}
              +
              1701
              +
              1702 virtual bool match(
              +
              1703 _In_reads_or_z_(end) const T* text,
              +
              1704 _In_ size_t start = 0,
              +
              1705 _In_ size_t end = SIZE_MAX,
              +
              1706 _In_ int flags = match_default)
              +
              1707 {
              +
              1708 _Assume_(text || start >= end);
              +
              1709 if (numerator->match(text, start, end, flags) &&
              +
              1710 fraction_line->match(text, numerator->interval.end, end, flags) &&
              +
              1711 denominator->match(text, fraction_line->interval.end, end, flags))
              +
              1712 {
              +
              1713 this->interval.start = start;
              +
              1714 this->interval.end = denominator->interval.end;
              +
              1715 return true;
              +
              1716 }
              +
              1717 numerator->invalidate();
              +
              1718 fraction_line->invalidate();
              +
              1719 denominator->invalidate();
              +
              1720 this->interval.invalidate();
              +
              1721 return false;
              +
              1722 }
              +
              1723
              +
              1724 virtual void invalidate()
              +
              1725 {
              +
              1726 numerator->invalidate();
              +
              1727 fraction_line->invalidate();
              +
              1728 denominator->invalidate();
              + +
              1730 }
              +
              1731
              +
              1732 public:
              +
              1733 std::shared_ptr<basic_parser<T>> numerator;
              +
              1734 std::shared_ptr<basic_parser<T>> fraction_line;
              +
              1735 std::shared_ptr<basic_parser<T>> denominator;
              +
              1736 };
              -
              1738
              - - -
              1741#ifdef _UNICODE
              -
              1742 using tfraction = wfraction;
              -
              1743#else
              -
              1744 using tfraction = fraction;
              -
              1745#endif
              - -
              1747
              -
              1751 template <class T>
              -
              -
              1752 class basic_score : public basic_parser<T>
              -
              1753 {
              -
              1754 public:
              - -
              1756 _In_ const std::shared_ptr<basic_parser<T>>& _home,
              -
              1757 _In_ const std::shared_ptr<basic_parser<T>>& _separator,
              -
              1758 _In_ const std::shared_ptr<basic_parser<T>>& _guest,
              -
              1759 _In_ const std::shared_ptr<basic_parser<T>>& space,
              -
              1760 _In_ const std::locale& locale = std::locale()) :
              -
              1761 basic_parser<T>(locale),
              -
              1762 home(_home),
              -
              1763 separator(_separator),
              -
              1764 guest(_guest),
              -
              1765 m_space(space)
              -
              1766 {}
              -
              1767
              -
              1768 virtual bool match(
              -
              1769 _In_reads_or_z_(end) const T* text,
              -
              1770 _In_ size_t start = 0,
              -
              1771 _In_ size_t end = (size_t)-1,
              -
              1772 _In_ int flags = match_default)
              -
              1773 {
              -
              1774 _Assume_(text || start >= end);
              -
              1775 this->interval.end = start;
              -
              1776
              -
              1777 const int space_match_flags = flags & ~match_multiline; // Spaces in score must never be broken in new line.
              -
              1778
              -
              1779 if (home->match(text, this->interval.end, end, flags))
              -
              1780 this->interval.end = home->interval.end;
              -
              1781 else
              -
              1782 goto end;
              -
              1783
              -
              1784 for (; m_space->match(text, this->interval.end, end, space_match_flags); this->interval.end = m_space->interval.end);
              -
              1785
              -
              1786 if (separator->match(text, this->interval.end, end, flags))
              -
              1787 this->interval.end = separator->interval.end;
              -
              1788 else
              -
              1789 goto end;
              -
              1790
              -
              1791 for (; m_space->match(text, this->interval.end, end, space_match_flags); this->interval.end = m_space->interval.end);
              -
              1792
              -
              1793 if (guest->match(text, this->interval.end, end, flags))
              -
              1794 this->interval.end = guest->interval.end;
              -
              1795 else
              -
              1796 goto end;
              -
              1797
              -
              1798 this->interval.start = start;
              -
              1799 return true;
              -
              1800
              -
              1801 end:
              -
              1802 home->invalidate();
              -
              1803 separator->invalidate();
              -
              1804 guest->invalidate();
              -
              1805 this->interval.start = (this->interval.end = start) + 1;
              -
              1806 return false;
              -
              1807 }
              -
              1808
              -
              1809 virtual void invalidate()
              -
              1810 {
              -
              1811 home->invalidate();
              -
              1812 separator->invalidate();
              -
              1813 guest->invalidate();
              - -
              1815 }
              -
              1816
              -
              1817 public:
              -
              1818 std::shared_ptr<basic_parser<T>> home;
              -
              1819 std::shared_ptr<basic_parser<T>> separator;
              -
              1820 std::shared_ptr<basic_parser<T>> guest;
              -
              1821
              -
              1822 protected:
              -
              1823 std::shared_ptr<basic_parser<T>> m_space;
              -
              1824 };
              +
              1737
              + + +
              1740#ifdef _UNICODE
              +
              1741 using tfraction = wfraction;
              +
              1742#else
              +
              1743 using tfraction = fraction;
              +
              1744#endif
              + +
              1746
              +
              1750 template <class T>
              +
              +
              1751 class basic_score : public basic_parser<T>
              +
              1752 {
              +
              1753 public:
              + +
              1755 _In_ const std::shared_ptr<basic_parser<T>>& _home,
              +
              1756 _In_ const std::shared_ptr<basic_parser<T>>& _separator,
              +
              1757 _In_ const std::shared_ptr<basic_parser<T>>& _guest,
              +
              1758 _In_ const std::shared_ptr<basic_parser<T>>& space,
              +
              1759 _In_ const std::locale& locale = std::locale()) :
              +
              1760 basic_parser<T>(locale),
              +
              1761 home(_home),
              +
              1762 separator(_separator),
              +
              1763 guest(_guest),
              +
              1764 m_space(space)
              +
              1765 {}
              +
              1766
              +
              1767 virtual bool match(
              +
              1768 _In_reads_or_z_(end) const T* text,
              +
              1769 _In_ size_t start = 0,
              +
              1770 _In_ size_t end = SIZE_MAX,
              +
              1771 _In_ int flags = match_default)
              +
              1772 {
              +
              1773 _Assume_(text || start >= end);
              +
              1774 this->interval.end = start;
              +
              1775
              +
              1776 const int space_match_flags = flags & ~match_multiline; // Spaces in score must never be broken in new line.
              +
              1777
              +
              1778 if (home->match(text, this->interval.end, end, flags))
              +
              1779 this->interval.end = home->interval.end;
              +
              1780 else
              +
              1781 goto end;
              +
              1782
              +
              1783 for (; m_space->match(text, this->interval.end, end, space_match_flags); this->interval.end = m_space->interval.end);
              +
              1784
              +
              1785 if (separator->match(text, this->interval.end, end, flags))
              +
              1786 this->interval.end = separator->interval.end;
              +
              1787 else
              +
              1788 goto end;
              +
              1789
              +
              1790 for (; m_space->match(text, this->interval.end, end, space_match_flags); this->interval.end = m_space->interval.end);
              +
              1791
              +
              1792 if (guest->match(text, this->interval.end, end, flags))
              +
              1793 this->interval.end = guest->interval.end;
              +
              1794 else
              +
              1795 goto end;
              +
              1796
              +
              1797 this->interval.start = start;
              +
              1798 return true;
              +
              1799
              +
              1800 end:
              +
              1801 home->invalidate();
              +
              1802 separator->invalidate();
              +
              1803 guest->invalidate();
              +
              1804 this->interval.invalidate();
              +
              1805 return false;
              +
              1806 }
              +
              1807
              +
              1808 virtual void invalidate()
              +
              1809 {
              +
              1810 home->invalidate();
              +
              1811 separator->invalidate();
              +
              1812 guest->invalidate();
              + +
              1814 }
              +
              1815
              +
              1816 public:
              +
              1817 std::shared_ptr<basic_parser<T>> home;
              +
              1818 std::shared_ptr<basic_parser<T>> separator;
              +
              1819 std::shared_ptr<basic_parser<T>> guest;
              +
              1820
              +
              1821 protected:
              +
              1822 std::shared_ptr<basic_parser<T>> m_space;
              +
              1823 };
              -
              1825
              -
              1826 using score = basic_score<char>;
              - -
              1828#ifdef _UNICODE
              -
              1829 using tscore = wscore;
              -
              1830#else
              -
              1831 using tscore = score;
              -
              1832#endif
              - -
              1834
              -
              1838 template <class T>
              -
              - -
              1840 {
              -
              1841 public:
              - -
              1843 _In_ const std::shared_ptr<basic_parser<T>>& _positive_sign,
              -
              1844 _In_ const std::shared_ptr<basic_parser<T>>& _negative_sign,
              -
              1845 _In_ const std::shared_ptr<basic_parser<T>>& _special_sign,
              -
              1846 _In_ const std::shared_ptr<basic_parser<T>>& _number,
              -
              1847 _In_ const std::locale& locale = std::locale()) :
              -
              1848 basic_parser<T>(locale),
              - - - - -
              1853 {}
              -
              1854
              -
              1855 virtual bool match(
              -
              1856 _In_reads_or_z_(end) const T* text,
              -
              1857 _In_ size_t start = 0,
              -
              1858 _In_ size_t end = (size_t)-1,
              -
              1859 _In_ int flags = match_default)
              -
              1860 {
              -
              1861 _Assume_(text || start >= end);
              -
              1862 this->interval.end = start;
              -
              1863 if (positive_sign && positive_sign->match(text, this->interval.end, end, flags)) {
              -
              1864 this->interval.end = positive_sign->interval.end;
              -
              1865 if (negative_sign) negative_sign->invalidate();
              -
              1866 if (special_sign) special_sign->invalidate();
              -
              1867 }
              -
              1868 else if (negative_sign && negative_sign->match(text, this->interval.end, end, flags)) {
              -
              1869 this->interval.end = negative_sign->interval.end;
              -
              1870 if (positive_sign) positive_sign->invalidate();
              -
              1871 if (special_sign) special_sign->invalidate();
              -
              1872 }
              -
              1873 else if (special_sign && special_sign->match(text, this->interval.end, end, flags)) {
              -
              1874 this->interval.end = special_sign->interval.end;
              -
              1875 if (positive_sign) positive_sign->invalidate();
              -
              1876 if (negative_sign) negative_sign->invalidate();
              -
              1877 }
              -
              1878 else {
              -
              1879 if (positive_sign) positive_sign->invalidate();
              -
              1880 if (negative_sign) negative_sign->invalidate();
              -
              1881 if (special_sign) special_sign->invalidate();
              -
              1882 }
              -
              1883 if (number->match(text, this->interval.end, end, flags)) {
              -
              1884 this->interval.start = start;
              -
              1885 this->interval.end = number->interval.end;
              -
              1886 return true;
              -
              1887 }
              -
              1888 if (positive_sign) positive_sign->invalidate();
              -
              1889 if (negative_sign) negative_sign->invalidate();
              -
              1890 if (special_sign) special_sign->invalidate();
              -
              1891 number->invalidate();
              -
              1892 this->interval.start = (this->interval.end = start) + 1;
              -
              1893 return false;
              -
              1894 }
              -
              1895
              -
              1896 virtual void invalidate()
              -
              1897 {
              -
              1898 if (positive_sign) positive_sign->invalidate();
              -
              1899 if (negative_sign) negative_sign->invalidate();
              -
              1900 if (special_sign) special_sign->invalidate();
              -
              1901 number->invalidate();
              - -
              1903 }
              -
              1904
              -
              1905 public:
              -
              1906 std::shared_ptr<basic_parser<T>> positive_sign;
              -
              1907 std::shared_ptr<basic_parser<T>> negative_sign;
              -
              1908 std::shared_ptr<basic_parser<T>> special_sign;
              -
              1909 std::shared_ptr<basic_parser<T>> number;
              -
              1910 };
              +
              1824
              +
              1825 using score = basic_score<char>;
              + +
              1827#ifdef _UNICODE
              +
              1828 using tscore = wscore;
              +
              1829#else
              +
              1830 using tscore = score;
              +
              1831#endif
              + +
              1833
              +
              1837 template <class T>
              +
              + +
              1839 {
              +
              1840 public:
              + +
              1842 _In_ const std::shared_ptr<basic_parser<T>>& _positive_sign,
              +
              1843 _In_ const std::shared_ptr<basic_parser<T>>& _negative_sign,
              +
              1844 _In_ const std::shared_ptr<basic_parser<T>>& _special_sign,
              +
              1845 _In_ const std::shared_ptr<basic_parser<T>>& _number,
              +
              1846 _In_ const std::locale& locale = std::locale()) :
              +
              1847 basic_parser<T>(locale),
              + + + + +
              1852 {}
              +
              1853
              +
              1854 virtual bool match(
              +
              1855 _In_reads_or_z_(end) const T* text,
              +
              1856 _In_ size_t start = 0,
              +
              1857 _In_ size_t end = SIZE_MAX,
              +
              1858 _In_ int flags = match_default)
              +
              1859 {
              +
              1860 _Assume_(text || start >= end);
              +
              1861 this->interval.end = start;
              +
              1862 if (positive_sign && positive_sign->match(text, this->interval.end, end, flags)) {
              +
              1863 this->interval.end = positive_sign->interval.end;
              +
              1864 if (negative_sign) negative_sign->invalidate();
              +
              1865 if (special_sign) special_sign->invalidate();
              +
              1866 }
              +
              1867 else if (negative_sign && negative_sign->match(text, this->interval.end, end, flags)) {
              +
              1868 this->interval.end = negative_sign->interval.end;
              +
              1869 if (positive_sign) positive_sign->invalidate();
              +
              1870 if (special_sign) special_sign->invalidate();
              +
              1871 }
              +
              1872 else if (special_sign && special_sign->match(text, this->interval.end, end, flags)) {
              +
              1873 this->interval.end = special_sign->interval.end;
              +
              1874 if (positive_sign) positive_sign->invalidate();
              +
              1875 if (negative_sign) negative_sign->invalidate();
              +
              1876 }
              +
              1877 else {
              +
              1878 if (positive_sign) positive_sign->invalidate();
              +
              1879 if (negative_sign) negative_sign->invalidate();
              +
              1880 if (special_sign) special_sign->invalidate();
              +
              1881 }
              +
              1882 if (number->match(text, this->interval.end, end, flags)) {
              +
              1883 this->interval.start = start;
              +
              1884 this->interval.end = number->interval.end;
              +
              1885 return true;
              +
              1886 }
              +
              1887 if (positive_sign) positive_sign->invalidate();
              +
              1888 if (negative_sign) negative_sign->invalidate();
              +
              1889 if (special_sign) special_sign->invalidate();
              +
              1890 number->invalidate();
              +
              1891 this->interval.invalidate();
              +
              1892 return false;
              +
              1893 }
              +
              1894
              +
              1895 virtual void invalidate()
              +
              1896 {
              +
              1897 if (positive_sign) positive_sign->invalidate();
              +
              1898 if (negative_sign) negative_sign->invalidate();
              +
              1899 if (special_sign) special_sign->invalidate();
              +
              1900 number->invalidate();
              + +
              1902 }
              +
              1903
              +
              1904 public:
              +
              1905 std::shared_ptr<basic_parser<T>> positive_sign;
              +
              1906 std::shared_ptr<basic_parser<T>> negative_sign;
              +
              1907 std::shared_ptr<basic_parser<T>> special_sign;
              +
              1908 std::shared_ptr<basic_parser<T>> number;
              +
              1909 };
              -
              1911
              - - -
              1914#ifdef _UNICODE
              - -
              1916#else
              - -
              1918#endif
              - -
              1920
              -
              1924 template <class T>
              -
              - -
              1926 {
              -
              1927 public:
              - -
              1929 _In_ const std::shared_ptr<basic_parser<T>>& _positive_sign,
              -
              1930 _In_ const std::shared_ptr<basic_parser<T>>& _negative_sign,
              -
              1931 _In_ const std::shared_ptr<basic_parser<T>>& _special_sign,
              -
              1932 _In_ const std::shared_ptr<basic_parser<T>>& _integer,
              -
              1933 _In_ const std::shared_ptr<basic_parser<T>>& space,
              -
              1934 _In_ const std::shared_ptr<basic_parser<T>>& _fraction,
              -
              1935 _In_ const std::locale& locale = std::locale()) :
              -
              1936 basic_parser<T>(locale),
              - - - - - -
              1942 m_space(space)
              -
              1943 {}
              -
              1944
              -
              1945 virtual bool match(
              -
              1946 _In_reads_or_z_(end) const T* text,
              -
              1947 _In_ size_t start = 0,
              -
              1948 _In_ size_t end = (size_t)-1,
              -
              1949 _In_ int flags = match_default)
              -
              1950 {
              -
              1951 _Assume_(text || start >= end);
              -
              1952 this->interval.end = start;
              -
              1953
              -
              1954 if (positive_sign && positive_sign->match(text, this->interval.end, end, flags)) {
              -
              1955 this->interval.end = positive_sign->interval.end;
              -
              1956 if (negative_sign) negative_sign->invalidate();
              -
              1957 if (special_sign) special_sign->invalidate();
              -
              1958 }
              -
              1959 else if (negative_sign && negative_sign->match(text, this->interval.end, end, flags)) {
              -
              1960 this->interval.end = negative_sign->interval.end;
              -
              1961 if (positive_sign) positive_sign->invalidate();
              -
              1962 if (special_sign) special_sign->invalidate();
              -
              1963 }
              -
              1964 else if (special_sign && special_sign->match(text, this->interval.end, end, flags)) {
              -
              1965 this->interval.end = special_sign->interval.end;
              -
              1966 if (positive_sign) positive_sign->invalidate();
              -
              1967 if (negative_sign) negative_sign->invalidate();
              -
              1968 }
              -
              1969 else {
              -
              1970 if (positive_sign) positive_sign->invalidate();
              -
              1971 if (negative_sign) negative_sign->invalidate();
              -
              1972 if (special_sign) special_sign->invalidate();
              -
              1973 }
              -
              1974
              -
              1975 // Check for <integer> <fraction>
              -
              1976 const int space_match_flags = flags & ~match_multiline; // Spaces in fractions must never be broken in new line.
              -
              1977 if (integer->match(text, this->interval.end, end, flags) &&
              -
              1978 m_space->match(text, integer->interval.end, end, space_match_flags))
              -
              1979 {
              -
              1980 for (this->interval.end = m_space->interval.end; m_space->match(text, this->interval.end, end, space_match_flags); this->interval.end = m_space->interval.end);
              -
              1981 if (fraction->match(text, this->interval.end, end, flags)) {
              -
              1982 this->interval.start = start;
              -
              1983 this->interval.end = fraction->interval.end;
              -
              1984 return true;
              -
              1985 }
              -
              1986 fraction->invalidate();
              -
              1987 this->interval.start = start;
              -
              1988 this->interval.end = integer->interval.end;
              -
              1989 return true;
              -
              1990 }
              -
              1991
              -
              1992 // Check for <fraction>
              -
              1993 if (fraction->match(text, this->interval.end, end, flags)) {
              -
              1994 integer->invalidate();
              -
              1995 this->interval.start = start;
              -
              1996 this->interval.end = fraction->interval.end;
              -
              1997 return true;
              -
              1998 }
              -
              1999
              -
              2000 // Check for <integer>
              -
              2001 if (integer->match(text, this->interval.end, end, flags)) {
              -
              2002 fraction->invalidate();
              -
              2003 this->interval.start = start;
              -
              2004 this->interval.end = integer->interval.end;
              -
              2005 return true;
              -
              2006 }
              -
              2007
              -
              2008 if (positive_sign) positive_sign->invalidate();
              -
              2009 if (negative_sign) negative_sign->invalidate();
              -
              2010 if (special_sign) special_sign->invalidate();
              -
              2011 integer->invalidate();
              -
              2012 fraction->invalidate();
              -
              2013 this->interval.start = (this->interval.end = start) + 1;
              -
              2014 return false;
              -
              2015 }
              -
              2016
              -
              2017 virtual void invalidate()
              -
              2018 {
              -
              2019 if (positive_sign) positive_sign->invalidate();
              -
              2020 if (negative_sign) negative_sign->invalidate();
              -
              2021 if (special_sign) special_sign->invalidate();
              -
              2022 integer->invalidate();
              -
              2023 fraction->invalidate();
              - -
              2025 }
              -
              2026
              -
              2027 public:
              -
              2028 std::shared_ptr<basic_parser<T>> positive_sign;
              -
              2029 std::shared_ptr<basic_parser<T>> negative_sign;
              -
              2030 std::shared_ptr<basic_parser<T>> special_sign;
              -
              2031 std::shared_ptr<basic_parser<T>> integer;
              -
              2032 std::shared_ptr<basic_parser<T>> fraction;
              -
              2033
              -
              2034 protected:
              -
              2035 std::shared_ptr<basic_parser<T>> m_space;
              -
              2036 };
              +
              1910
              + + +
              1913#ifdef _UNICODE
              + +
              1915#else
              + +
              1917#endif
              + +
              1919
              +
              1923 template <class T>
              +
              + +
              1925 {
              +
              1926 public:
              + +
              1928 _In_ const std::shared_ptr<basic_parser<T>>& _positive_sign,
              +
              1929 _In_ const std::shared_ptr<basic_parser<T>>& _negative_sign,
              +
              1930 _In_ const std::shared_ptr<basic_parser<T>>& _special_sign,
              +
              1931 _In_ const std::shared_ptr<basic_parser<T>>& _integer,
              +
              1932 _In_ const std::shared_ptr<basic_parser<T>>& space,
              +
              1933 _In_ const std::shared_ptr<basic_parser<T>>& _fraction,
              +
              1934 _In_ const std::locale& locale = std::locale()) :
              +
              1935 basic_parser<T>(locale),
              + + + + + +
              1941 m_space(space)
              +
              1942 {}
              +
              1943
              +
              1944 virtual bool match(
              +
              1945 _In_reads_or_z_(end) const T* text,
              +
              1946 _In_ size_t start = 0,
              +
              1947 _In_ size_t end = SIZE_MAX,
              +
              1948 _In_ int flags = match_default)
              +
              1949 {
              +
              1950 _Assume_(text || start >= end);
              +
              1951 this->interval.end = start;
              +
              1952
              +
              1953 if (positive_sign && positive_sign->match(text, this->interval.end, end, flags)) {
              +
              1954 this->interval.end = positive_sign->interval.end;
              +
              1955 if (negative_sign) negative_sign->invalidate();
              +
              1956 if (special_sign) special_sign->invalidate();
              +
              1957 }
              +
              1958 else if (negative_sign && negative_sign->match(text, this->interval.end, end, flags)) {
              +
              1959 this->interval.end = negative_sign->interval.end;
              +
              1960 if (positive_sign) positive_sign->invalidate();
              +
              1961 if (special_sign) special_sign->invalidate();
              +
              1962 }
              +
              1963 else if (special_sign && special_sign->match(text, this->interval.end, end, flags)) {
              +
              1964 this->interval.end = special_sign->interval.end;
              +
              1965 if (positive_sign) positive_sign->invalidate();
              +
              1966 if (negative_sign) negative_sign->invalidate();
              +
              1967 }
              +
              1968 else {
              +
              1969 if (positive_sign) positive_sign->invalidate();
              +
              1970 if (negative_sign) negative_sign->invalidate();
              +
              1971 if (special_sign) special_sign->invalidate();
              +
              1972 }
              +
              1973
              +
              1974 // Check for <integer> <fraction>
              +
              1975 const int space_match_flags = flags & ~match_multiline; // Spaces in fractions must never be broken in new line.
              +
              1976 if (integer->match(text, this->interval.end, end, flags) &&
              +
              1977 m_space->match(text, integer->interval.end, end, space_match_flags))
              +
              1978 {
              +
              1979 for (this->interval.end = m_space->interval.end; m_space->match(text, this->interval.end, end, space_match_flags); this->interval.end = m_space->interval.end);
              +
              1980 if (fraction->match(text, this->interval.end, end, flags)) {
              +
              1981 this->interval.start = start;
              +
              1982 this->interval.end = fraction->interval.end;
              +
              1983 return true;
              +
              1984 }
              +
              1985 fraction->invalidate();
              +
              1986 this->interval.start = start;
              +
              1987 this->interval.end = integer->interval.end;
              +
              1988 return true;
              +
              1989 }
              +
              1990
              +
              1991 // Check for <fraction>
              +
              1992 if (fraction->match(text, this->interval.end, end, flags)) {
              +
              1993 integer->invalidate();
              +
              1994 this->interval.start = start;
              +
              1995 this->interval.end = fraction->interval.end;
              +
              1996 return true;
              +
              1997 }
              +
              1998
              +
              1999 // Check for <integer>
              +
              2000 if (integer->match(text, this->interval.end, end, flags)) {
              +
              2001 fraction->invalidate();
              +
              2002 this->interval.start = start;
              +
              2003 this->interval.end = integer->interval.end;
              +
              2004 return true;
              +
              2005 }
              +
              2006
              +
              2007 if (positive_sign) positive_sign->invalidate();
              +
              2008 if (negative_sign) negative_sign->invalidate();
              +
              2009 if (special_sign) special_sign->invalidate();
              +
              2010 integer->invalidate();
              +
              2011 fraction->invalidate();
              +
              2012 this->interval.invalidate();
              +
              2013 return false;
              +
              2014 }
              +
              2015
              +
              2016 virtual void invalidate()
              +
              2017 {
              +
              2018 if (positive_sign) positive_sign->invalidate();
              +
              2019 if (negative_sign) negative_sign->invalidate();
              +
              2020 if (special_sign) special_sign->invalidate();
              +
              2021 integer->invalidate();
              +
              2022 fraction->invalidate();
              + +
              2024 }
              +
              2025
              +
              2026 public:
              +
              2027 std::shared_ptr<basic_parser<T>> positive_sign;
              +
              2028 std::shared_ptr<basic_parser<T>> negative_sign;
              +
              2029 std::shared_ptr<basic_parser<T>> special_sign;
              +
              2030 std::shared_ptr<basic_parser<T>> integer;
              +
              2031 std::shared_ptr<basic_parser<T>> fraction;
              +
              2032
              +
              2033 protected:
              +
              2034 std::shared_ptr<basic_parser<T>> m_space;
              +
              2035 };
              -
              2037
              - - -
              2040#ifdef _UNICODE
              - -
              2042#else
              - -
              2044#endif
              - -
              2046
              -
              2050 template <class T>
              -
              - -
              2052 {
              -
              2053 public:
              - -
              2055 _In_ const std::shared_ptr<basic_parser<T>>& _positive_sign,
              -
              2056 _In_ const std::shared_ptr<basic_parser<T>>& _negative_sign,
              -
              2057 _In_ const std::shared_ptr<basic_parser<T>>& _special_sign,
              -
              2058 _In_ const std::shared_ptr<basic_integer<T>>& _integer,
              -
              2059 _In_ const std::shared_ptr<basic_parser<T>>& _decimal_separator,
              -
              2060 _In_ const std::shared_ptr<basic_integer<T>>& _decimal,
              -
              2061 _In_ const std::shared_ptr<basic_parser<T>>& _exponent_symbol,
              -
              2062 _In_ const std::shared_ptr<basic_parser<T>>& _positive_exp_sign,
              -
              2063 _In_ const std::shared_ptr<basic_parser<T>>& _negative_exp_sign,
              -
              2064 _In_ const std::shared_ptr<basic_integer<T>>& _exponent,
              -
              2065 _In_ const std::locale& locale = std::locale()) :
              -
              2066 basic_parser<T>(locale),
              - - - - - - - - - - -
              2077 value(std::numeric_limits<double>::quiet_NaN())
              -
              2078 {}
              -
              2079
              -
              2080 virtual bool match(
              -
              2081 _In_reads_or_z_(end) const T* text,
              -
              2082 _In_ size_t start = 0,
              -
              2083 _In_ size_t end = (size_t)-1,
              -
              2084 _In_ int flags = match_default)
              -
              2085 {
              -
              2086 _Assume_(text || start >= end);
              -
              2087 this->interval.end = start;
              -
              2088
              -
              2089 if (positive_sign && positive_sign->match(text, this->interval.end, end, flags)) {
              -
              2090 this->interval.end = positive_sign->interval.end;
              -
              2091 if (negative_sign) negative_sign->invalidate();
              -
              2092 if (special_sign) special_sign->invalidate();
              -
              2093 }
              -
              2094 else if (negative_sign && negative_sign->match(text, this->interval.end, end, flags)) {
              -
              2095 this->interval.end = negative_sign->interval.end;
              -
              2096 if (positive_sign) positive_sign->invalidate();
              -
              2097 if (special_sign) special_sign->invalidate();
              -
              2098 }
              -
              2099 else if (special_sign && special_sign->match(text, this->interval.end, end, flags)) {
              -
              2100 this->interval.end = special_sign->interval.end;
              -
              2101 if (positive_sign) positive_sign->invalidate();
              -
              2102 if (negative_sign) negative_sign->invalidate();
              -
              2103 }
              -
              2104 else {
              -
              2105 if (positive_sign) positive_sign->invalidate();
              -
              2106 if (negative_sign) negative_sign->invalidate();
              -
              2107 if (special_sign) special_sign->invalidate();
              -
              2108 }
              -
              2109
              -
              2110 if (integer->match(text, this->interval.end, end, flags))
              -
              2111 this->interval.end = integer->interval.end;
              -
              2112
              -
              2113 if (decimal_separator->match(text, this->interval.end, end, flags) &&
              - -
              2115 this->interval.end = decimal->interval.end;
              -
              2116 else {
              -
              2117 decimal_separator->invalidate();
              -
              2118 decimal->invalidate();
              -
              2119 }
              -
              2120
              -
              2121 if (integer->interval.empty() &&
              -
              2122 decimal->interval.empty())
              -
              2123 {
              -
              2124 // No integer part, no decimal part.
              -
              2125 if (positive_sign) positive_sign->invalidate();
              -
              2126 if (negative_sign) negative_sign->invalidate();
              -
              2127 if (special_sign) special_sign->invalidate();
              -
              2128 integer->invalidate();
              -
              2129 decimal_separator->invalidate();
              -
              2130 decimal->invalidate();
              -
              2131 if (exponent_symbol) exponent_symbol->invalidate();
              -
              2132 if (positive_exp_sign) positive_exp_sign->invalidate();
              -
              2133 if (negative_exp_sign) negative_exp_sign->invalidate();
              -
              2134 if (exponent) exponent->invalidate();
              -
              2135 this->interval.start = (this->interval.end = start) + 1;
              -
              2136 return false;
              -
              2137 }
              -
              2138
              -
              2139 if (exponent_symbol && exponent_symbol->match(text, this->interval.end, end, flags) &&
              - - -
              2142 (exponent && exponent->match(text, exponent_symbol->interval.end, end, flags))))
              -
              2143 {
              -
              2144 this->interval.end = exponent->interval.end;
              -
              2145 if (negative_exp_sign) negative_exp_sign->invalidate();
              -
              2146 }
              -
              2147 else if (exponent_symbol && exponent_symbol->match(text, this->interval.end, end, flags) &&
              - - -
              2150 {
              -
              2151 this->interval.end = exponent->interval.end;
              -
              2152 if (positive_exp_sign) positive_exp_sign->invalidate();
              -
              2153 }
              -
              2154 else {
              -
              2155 if (exponent_symbol) exponent_symbol->invalidate();
              -
              2156 if (positive_exp_sign) positive_exp_sign->invalidate();
              -
              2157 if (negative_exp_sign) negative_exp_sign->invalidate();
              -
              2158 if (exponent) exponent->invalidate();
              -
              2159 }
              -
              2160
              -
              2161 value = (double)integer->value;
              -
              2162 if (decimal->interval)
              -
              2163 value += (double)decimal->value * pow(10.0, -(double)decimal->interval.size());
              -
              2164 if (negative_sign && negative_sign->interval)
              -
              2165 value = -value;
              -
              2166 if (exponent && exponent->interval) {
              -
              2167 double e = (double)exponent->value;
              -
              2168 if (negative_exp_sign && negative_exp_sign->interval)
              -
              2169 e = -e;
              -
              2170 value *= pow(10.0, e);
              -
              2171 }
              -
              2172
              -
              2173 this->interval.start = start;
              -
              2174 return true;
              -
              2175 }
              -
              2176
              -
              2177 virtual void invalidate()
              -
              2178 {
              -
              2179 if (positive_sign) positive_sign->invalidate();
              -
              2180 if (negative_sign) negative_sign->invalidate();
              -
              2181 if (special_sign) special_sign->invalidate();
              -
              2182 integer->invalidate();
              -
              2183 decimal_separator->invalidate();
              -
              2184 decimal->invalidate();
              -
              2185 if (exponent_symbol) exponent_symbol->invalidate();
              -
              2186 if (positive_exp_sign) positive_exp_sign->invalidate();
              -
              2187 if (negative_exp_sign) negative_exp_sign->invalidate();
              -
              2188 if (exponent) exponent->invalidate();
              -
              2189 value = std::numeric_limits<double>::quiet_NaN();
              - -
              2191 }
              -
              2192
              -
              2193 public:
              -
              2194 std::shared_ptr<basic_parser<T>> positive_sign;
              -
              2195 std::shared_ptr<basic_parser<T>> negative_sign;
              -
              2196 std::shared_ptr<basic_parser<T>> special_sign;
              -
              2197 std::shared_ptr<basic_integer<T>> integer;
              -
              2198 std::shared_ptr<basic_parser<T>> decimal_separator;
              -
              2199 std::shared_ptr<basic_integer<T>> decimal;
              -
              2200 std::shared_ptr<basic_parser<T>> exponent_symbol;
              -
              2201 std::shared_ptr<basic_parser<T>> positive_exp_sign;
              -
              2202 std::shared_ptr<basic_parser<T>> negative_exp_sign;
              -
              2203 std::shared_ptr<basic_integer<T>> exponent;
              -
              2204 double value;
              -
              2205 };
              +
              2036
              + + +
              2039#ifdef _UNICODE
              + +
              2041#else
              + +
              2043#endif
              + +
              2045
              +
              2049 template <class T>
              +
              + +
              2051 {
              +
              2052 public:
              + +
              2054 _In_ const std::shared_ptr<basic_parser<T>>& _positive_sign,
              +
              2055 _In_ const std::shared_ptr<basic_parser<T>>& _negative_sign,
              +
              2056 _In_ const std::shared_ptr<basic_parser<T>>& _special_sign,
              +
              2057 _In_ const std::shared_ptr<basic_integer<T>>& _integer,
              +
              2058 _In_ const std::shared_ptr<basic_parser<T>>& _decimal_separator,
              +
              2059 _In_ const std::shared_ptr<basic_integer<T>>& _decimal,
              +
              2060 _In_ const std::shared_ptr<basic_parser<T>>& _exponent_symbol,
              +
              2061 _In_ const std::shared_ptr<basic_parser<T>>& _positive_exp_sign,
              +
              2062 _In_ const std::shared_ptr<basic_parser<T>>& _negative_exp_sign,
              +
              2063 _In_ const std::shared_ptr<basic_integer<T>>& _exponent,
              +
              2064 _In_ const std::locale& locale = std::locale()) :
              +
              2065 basic_parser<T>(locale),
              + + + + + + + + + + +
              2076 value(std::numeric_limits<double>::quiet_NaN())
              +
              2077 {}
              +
              2078
              +
              2079 virtual bool match(
              +
              2080 _In_reads_or_z_(end) const T* text,
              +
              2081 _In_ size_t start = 0,
              +
              2082 _In_ size_t end = SIZE_MAX,
              +
              2083 _In_ int flags = match_default)
              +
              2084 {
              +
              2085 _Assume_(text || start >= end);
              +
              2086 this->interval.end = start;
              +
              2087
              +
              2088 if (positive_sign && positive_sign->match(text, this->interval.end, end, flags)) {
              +
              2089 this->interval.end = positive_sign->interval.end;
              +
              2090 if (negative_sign) negative_sign->invalidate();
              +
              2091 if (special_sign) special_sign->invalidate();
              +
              2092 }
              +
              2093 else if (negative_sign && negative_sign->match(text, this->interval.end, end, flags)) {
              +
              2094 this->interval.end = negative_sign->interval.end;
              +
              2095 if (positive_sign) positive_sign->invalidate();
              +
              2096 if (special_sign) special_sign->invalidate();
              +
              2097 }
              +
              2098 else if (special_sign && special_sign->match(text, this->interval.end, end, flags)) {
              +
              2099 this->interval.end = special_sign->interval.end;
              +
              2100 if (positive_sign) positive_sign->invalidate();
              +
              2101 if (negative_sign) negative_sign->invalidate();
              +
              2102 }
              +
              2103 else {
              +
              2104 if (positive_sign) positive_sign->invalidate();
              +
              2105 if (negative_sign) negative_sign->invalidate();
              +
              2106 if (special_sign) special_sign->invalidate();
              +
              2107 }
              +
              2108
              +
              2109 if (integer->match(text, this->interval.end, end, flags))
              +
              2110 this->interval.end = integer->interval.end;
              +
              2111
              +
              2112 if (decimal_separator->match(text, this->interval.end, end, flags) &&
              +
              2113 decimal->match(text, decimal_separator->interval.end, end, flags))
              +
              2114 this->interval.end = decimal->interval.end;
              +
              2115 else {
              +
              2116 decimal_separator->invalidate();
              +
              2117 decimal->invalidate();
              +
              2118 }
              +
              2119
              +
              2120 if (integer->interval.empty() &&
              +
              2121 decimal->interval.empty())
              +
              2122 {
              +
              2123 // No integer part, no decimal part.
              +
              2124 if (positive_sign) positive_sign->invalidate();
              +
              2125 if (negative_sign) negative_sign->invalidate();
              +
              2126 if (special_sign) special_sign->invalidate();
              +
              2127 integer->invalidate();
              +
              2128 decimal_separator->invalidate();
              +
              2129 decimal->invalidate();
              +
              2130 if (exponent_symbol) exponent_symbol->invalidate();
              +
              2131 if (positive_exp_sign) positive_exp_sign->invalidate();
              +
              2132 if (negative_exp_sign) negative_exp_sign->invalidate();
              +
              2133 if (exponent) exponent->invalidate();
              +
              2134 this->interval.invalidate();
              +
              2135 return false;
              +
              2136 }
              +
              2137
              +
              2138 if (exponent_symbol && exponent_symbol->match(text, this->interval.end, end, flags) &&
              +
              2139 ((positive_exp_sign && positive_exp_sign->match(text, exponent_symbol->interval.end, end, flags) &&
              +
              2140 exponent && exponent->match(text, positive_exp_sign->interval.end, end, flags)) ||
              +
              2141 (exponent && exponent->match(text, exponent_symbol->interval.end, end, flags))))
              +
              2142 {
              +
              2143 this->interval.end = exponent->interval.end;
              +
              2144 if (negative_exp_sign) negative_exp_sign->invalidate();
              +
              2145 }
              +
              2146 else if (exponent_symbol && exponent_symbol->match(text, this->interval.end, end, flags) &&
              +
              2147 negative_exp_sign && negative_exp_sign->match(text, exponent_symbol->interval.end, end, flags) &&
              +
              2148 exponent && exponent->match(text, negative_exp_sign->interval.end, end, flags))
              +
              2149 {
              +
              2150 this->interval.end = exponent->interval.end;
              +
              2151 if (positive_exp_sign) positive_exp_sign->invalidate();
              +
              2152 }
              +
              2153 else {
              +
              2154 if (exponent_symbol) exponent_symbol->invalidate();
              +
              2155 if (positive_exp_sign) positive_exp_sign->invalidate();
              +
              2156 if (negative_exp_sign) negative_exp_sign->invalidate();
              +
              2157 if (exponent) exponent->invalidate();
              +
              2158 }
              +
              2159
              +
              2160 value = (double)integer->value;
              +
              2161 if (decimal->interval)
              +
              2162 value += (double)decimal->value * pow(10.0, -(double)decimal->interval.size());
              +
              2163 if (negative_sign && negative_sign->interval)
              +
              2164 value = -value;
              +
              2165 if (exponent && exponent->interval) {
              +
              2166 double e = (double)exponent->value;
              +
              2167 if (negative_exp_sign && negative_exp_sign->interval)
              +
              2168 e = -e;
              +
              2169 value *= pow(10.0, e);
              +
              2170 }
              +
              2171
              +
              2172 this->interval.start = start;
              +
              2173 return true;
              +
              2174 }
              +
              2175
              +
              2176 virtual void invalidate()
              +
              2177 {
              +
              2178 if (positive_sign) positive_sign->invalidate();
              +
              2179 if (negative_sign) negative_sign->invalidate();
              +
              2180 if (special_sign) special_sign->invalidate();
              +
              2181 integer->invalidate();
              +
              2182 decimal_separator->invalidate();
              +
              2183 decimal->invalidate();
              +
              2184 if (exponent_symbol) exponent_symbol->invalidate();
              +
              2185 if (positive_exp_sign) positive_exp_sign->invalidate();
              +
              2186 if (negative_exp_sign) negative_exp_sign->invalidate();
              +
              2187 if (exponent) exponent->invalidate();
              +
              2188 value = std::numeric_limits<double>::quiet_NaN();
              + +
              2190 }
              +
              2191
              +
              2192 public:
              +
              2193 std::shared_ptr<basic_parser<T>> positive_sign;
              +
              2194 std::shared_ptr<basic_parser<T>> negative_sign;
              +
              2195 std::shared_ptr<basic_parser<T>> special_sign;
              +
              2196 std::shared_ptr<basic_integer<T>> integer;
              +
              2197 std::shared_ptr<basic_parser<T>> decimal_separator;
              +
              2198 std::shared_ptr<basic_integer<T>> decimal;
              +
              2199 std::shared_ptr<basic_parser<T>> exponent_symbol;
              +
              2200 std::shared_ptr<basic_parser<T>> positive_exp_sign;
              +
              2201 std::shared_ptr<basic_parser<T>> negative_exp_sign;
              +
              2202 std::shared_ptr<basic_integer<T>> exponent;
              +
              2203 double value;
              +
              2204 };
              -
              2206
              - - -
              2209#ifdef _UNICODE
              - -
              2211#else
              - -
              2213#endif
              - -
              2215
              -
              2219 template <class T>
              -
              - -
              2221 {
              -
              2222 public:
              - -
              2224 _In_ const std::shared_ptr<basic_parser<T>>& _positive_sign,
              -
              2225 _In_ const std::shared_ptr<basic_parser<T>>& _negative_sign,
              -
              2226 _In_ const std::shared_ptr<basic_parser<T>>& _special_sign,
              -
              2227 _In_ const std::shared_ptr<basic_parser<T>>& _currency,
              -
              2228 _In_ const std::shared_ptr<basic_parser<T>>& _integer,
              -
              2229 _In_ const std::shared_ptr<basic_parser<T>>& _decimal_separator,
              -
              2230 _In_ const std::shared_ptr<basic_parser<T>>& _decimal,
              -
              2231 _In_ const std::locale& locale = std::locale()) :
              -
              2232 basic_parser<T>(locale),
              - - - - - - - -
              2240 {}
              -
              2241
              -
              2242 virtual bool match(
              -
              2243 _In_reads_or_z_(end) const T* text,
              -
              2244 _In_ size_t start = 0,
              -
              2245 _In_ size_t end = (size_t)-1,
              -
              2246 _In_ int flags = match_default)
              -
              2247 {
              -
              2248 _Assume_(text || start >= end);
              -
              2249 this->interval.end = start;
              -
              2250
              -
              2251 if (positive_sign->match(text, this->interval.end, end, flags)) {
              -
              2252 this->interval.end = positive_sign->interval.end;
              -
              2253 if (negative_sign) negative_sign->invalidate();
              -
              2254 if (special_sign) special_sign->invalidate();
              -
              2255 }
              -
              2256 else if (negative_sign->match(text, this->interval.end, end, flags)) {
              -
              2257 this->interval.end = negative_sign->interval.end;
              -
              2258 if (positive_sign) positive_sign->invalidate();
              -
              2259 if (special_sign) special_sign->invalidate();
              -
              2260 }
              -
              2261 else if (special_sign->match(text, this->interval.end, end, flags)) {
              -
              2262 this->interval.end = special_sign->interval.end;
              -
              2263 if (positive_sign) positive_sign->invalidate();
              -
              2264 if (negative_sign) negative_sign->invalidate();
              -
              2265 }
              -
              2266 else {
              -
              2267 if (positive_sign) positive_sign->invalidate();
              -
              2268 if (negative_sign) negative_sign->invalidate();
              -
              2269 if (special_sign) special_sign->invalidate();
              -
              2270 }
              -
              2271
              -
              2272 if (currency->match(text, this->interval.end, end, flags))
              -
              2273 this->interval.end = currency->interval.end;
              -
              2274 else {
              -
              2275 if (positive_sign) positive_sign->invalidate();
              -
              2276 if (negative_sign) negative_sign->invalidate();
              -
              2277 if (special_sign) special_sign->invalidate();
              -
              2278 integer->invalidate();
              -
              2279 decimal_separator->invalidate();
              -
              2280 decimal->invalidate();
              -
              2281 this->interval.start = (this->interval.end = start) + 1;
              -
              2282 return false;
              -
              2283 }
              -
              2284
              -
              2285 if (integer->match(text, this->interval.end, end, flags))
              -
              2286 this->interval.end = integer->interval.end;
              -
              2287 if (decimal_separator->match(text, this->interval.end, end, flags) &&
              - -
              2289 this->interval.end = decimal->interval.end;
              -
              2290 else {
              -
              2291 decimal_separator->invalidate();
              -
              2292 decimal->invalidate();
              -
              2293 }
              -
              2294
              -
              2295 if (integer->interval.empty() &&
              -
              2296 decimal->interval.empty())
              -
              2297 {
              -
              2298 // No integer part, no decimal part.
              -
              2299 if (positive_sign) positive_sign->invalidate();
              -
              2300 if (negative_sign) negative_sign->invalidate();
              -
              2301 if (special_sign) special_sign->invalidate();
              -
              2302 currency->invalidate();
              -
              2303 integer->invalidate();
              -
              2304 decimal_separator->invalidate();
              -
              2305 decimal->invalidate();
              -
              2306 this->interval.start = (this->interval.end = start) + 1;
              -
              2307 return false;
              -
              2308 }
              -
              2309
              -
              2310 this->interval.start = start;
              -
              2311 return true;
              -
              2312 }
              -
              2313
              -
              2314 virtual void invalidate()
              -
              2315 {
              -
              2316 if (positive_sign) positive_sign->invalidate();
              -
              2317 if (negative_sign) negative_sign->invalidate();
              -
              2318 if (special_sign) special_sign->invalidate();
              -
              2319 currency->invalidate();
              -
              2320 integer->invalidate();
              -
              2321 decimal_separator->invalidate();
              -
              2322 decimal->invalidate();
              - -
              2324 }
              -
              2325
              -
              2326 public:
              -
              2327 std::shared_ptr<basic_parser<T>> positive_sign;
              -
              2328 std::shared_ptr<basic_parser<T>> negative_sign;
              -
              2329 std::shared_ptr<basic_parser<T>> special_sign;
              -
              2330 std::shared_ptr<basic_parser<T>> currency;
              -
              2331 std::shared_ptr<basic_parser<T>> integer;
              -
              2332 std::shared_ptr<basic_parser<T>> decimal_separator;
              -
              2333 std::shared_ptr<basic_parser<T>> decimal;
              -
              2334 };
              +
              2205
              + + +
              2208#ifdef _UNICODE
              + +
              2210#else
              + +
              2212#endif
              + +
              2214
              +
              2218 template <class T>
              +
              + +
              2220 {
              +
              2221 public:
              + +
              2223 _In_ const std::shared_ptr<basic_parser<T>>& _positive_sign,
              +
              2224 _In_ const std::shared_ptr<basic_parser<T>>& _negative_sign,
              +
              2225 _In_ const std::shared_ptr<basic_parser<T>>& _special_sign,
              +
              2226 _In_ const std::shared_ptr<basic_parser<T>>& _currency,
              +
              2227 _In_ const std::shared_ptr<basic_parser<T>>& _integer,
              +
              2228 _In_ const std::shared_ptr<basic_parser<T>>& _decimal_separator,
              +
              2229 _In_ const std::shared_ptr<basic_parser<T>>& _decimal,
              +
              2230 _In_ const std::locale& locale = std::locale()) :
              +
              2231 basic_parser<T>(locale),
              + + + + + + + +
              2239 {}
              +
              2240
              +
              2241 virtual bool match(
              +
              2242 _In_reads_or_z_(end) const T* text,
              +
              2243 _In_ size_t start = 0,
              +
              2244 _In_ size_t end = SIZE_MAX,
              +
              2245 _In_ int flags = match_default)
              +
              2246 {
              +
              2247 _Assume_(text || start >= end);
              +
              2248 this->interval.end = start;
              +
              2249
              +
              2250 if (positive_sign->match(text, this->interval.end, end, flags)) {
              +
              2251 this->interval.end = positive_sign->interval.end;
              +
              2252 if (negative_sign) negative_sign->invalidate();
              +
              2253 if (special_sign) special_sign->invalidate();
              +
              2254 }
              +
              2255 else if (negative_sign->match(text, this->interval.end, end, flags)) {
              +
              2256 this->interval.end = negative_sign->interval.end;
              +
              2257 if (positive_sign) positive_sign->invalidate();
              +
              2258 if (special_sign) special_sign->invalidate();
              +
              2259 }
              +
              2260 else if (special_sign->match(text, this->interval.end, end, flags)) {
              +
              2261 this->interval.end = special_sign->interval.end;
              +
              2262 if (positive_sign) positive_sign->invalidate();
              +
              2263 if (negative_sign) negative_sign->invalidate();
              +
              2264 }
              +
              2265 else {
              +
              2266 if (positive_sign) positive_sign->invalidate();
              +
              2267 if (negative_sign) negative_sign->invalidate();
              +
              2268 if (special_sign) special_sign->invalidate();
              +
              2269 }
              +
              2270
              +
              2271 if (currency->match(text, this->interval.end, end, flags))
              +
              2272 this->interval.end = currency->interval.end;
              +
              2273 else {
              +
              2274 if (positive_sign) positive_sign->invalidate();
              +
              2275 if (negative_sign) negative_sign->invalidate();
              +
              2276 if (special_sign) special_sign->invalidate();
              +
              2277 integer->invalidate();
              +
              2278 decimal_separator->invalidate();
              +
              2279 decimal->invalidate();
              +
              2280 this->interval.invalidate();
              +
              2281 return false;
              +
              2282 }
              +
              2283
              +
              2284 if (integer->match(text, this->interval.end, end, flags))
              +
              2285 this->interval.end = integer->interval.end;
              +
              2286 if (decimal_separator->match(text, this->interval.end, end, flags) &&
              +
              2287 decimal->match(text, decimal_separator->interval.end, end, flags))
              +
              2288 this->interval.end = decimal->interval.end;
              +
              2289 else {
              +
              2290 decimal_separator->invalidate();
              +
              2291 decimal->invalidate();
              +
              2292 }
              +
              2293
              +
              2294 if (integer->interval.empty() &&
              +
              2295 decimal->interval.empty())
              +
              2296 {
              +
              2297 // No integer part, no decimal part.
              +
              2298 if (positive_sign) positive_sign->invalidate();
              +
              2299 if (negative_sign) negative_sign->invalidate();
              +
              2300 if (special_sign) special_sign->invalidate();
              +
              2301 currency->invalidate();
              +
              2302 integer->invalidate();
              +
              2303 decimal_separator->invalidate();
              +
              2304 decimal->invalidate();
              +
              2305 this->interval.invalidate();
              +
              2306 return false;
              +
              2307 }
              +
              2308
              +
              2309 this->interval.start = start;
              +
              2310 return true;
              +
              2311 }
              +
              2312
              +
              2313 virtual void invalidate()
              +
              2314 {
              +
              2315 if (positive_sign) positive_sign->invalidate();
              +
              2316 if (negative_sign) negative_sign->invalidate();
              +
              2317 if (special_sign) special_sign->invalidate();
              +
              2318 currency->invalidate();
              +
              2319 integer->invalidate();
              +
              2320 decimal_separator->invalidate();
              +
              2321 decimal->invalidate();
              + +
              2323 }
              +
              2324
              +
              2325 public:
              +
              2326 std::shared_ptr<basic_parser<T>> positive_sign;
              +
              2327 std::shared_ptr<basic_parser<T>> negative_sign;
              +
              2328 std::shared_ptr<basic_parser<T>> special_sign;
              +
              2329 std::shared_ptr<basic_parser<T>> currency;
              +
              2330 std::shared_ptr<basic_parser<T>> integer;
              +
              2331 std::shared_ptr<basic_parser<T>> decimal_separator;
              +
              2332 std::shared_ptr<basic_parser<T>> decimal;
              +
              2333 };
              -
              2335
              - - -
              2338#ifdef _UNICODE
              - -
              2340#else
              - -
              2342#endif
              - -
              2344
              -
              2348 template <class T>
              -
              - -
              2350 {
              -
              2351 public:
              - -
              2353 _In_ const std::shared_ptr<basic_parser<T>>& digit_0,
              -
              2354 _In_ const std::shared_ptr<basic_parser<T>>& digit_1,
              -
              2355 _In_ const std::shared_ptr<basic_parser<T>>& digit_2,
              -
              2356 _In_ const std::shared_ptr<basic_parser<T>>& digit_3,
              -
              2357 _In_ const std::shared_ptr<basic_parser<T>>& digit_4,
              -
              2358 _In_ const std::shared_ptr<basic_parser<T>>& digit_5,
              -
              2359 _In_ const std::shared_ptr<basic_parser<T>>& digit_6,
              -
              2360 _In_ const std::shared_ptr<basic_parser<T>>& digit_7,
              -
              2361 _In_ const std::shared_ptr<basic_parser<T>>& digit_8,
              -
              2362 _In_ const std::shared_ptr<basic_parser<T>>& digit_9,
              -
              2363 _In_ const std::shared_ptr<basic_parser<T>>& separator,
              -
              2364 _In_ const std::locale& locale = std::locale()) :
              -
              2365 basic_parser<T>(locale),
              -
              2366 m_digit_0(digit_0),
              -
              2367 m_digit_1(digit_1),
              -
              2368 m_digit_2(digit_2),
              -
              2369 m_digit_3(digit_3),
              -
              2370 m_digit_4(digit_4),
              -
              2371 m_digit_5(digit_5),
              -
              2372 m_digit_6(digit_6),
              -
              2373 m_digit_7(digit_7),
              -
              2374 m_digit_8(digit_8),
              -
              2375 m_digit_9(digit_9),
              -
              2376 m_separator(separator)
              -
              2377 {
              -
              2378 value.s_addr = 0;
              -
              2379 }
              -
              2380
              -
              2381 virtual bool match(
              -
              2382 _In_reads_or_z_(end) const T* text,
              -
              2383 _In_ size_t start = 0,
              -
              2384 _In_ size_t end = (size_t)-1,
              -
              2385 _In_ int flags = match_default)
              -
              2386 {
              -
              2387 _Assume_(text || start >= end);
              -
              2388 this->interval.end = start;
              -
              2389 value.s_addr = 0;
              -
              2390
              -
              2391 size_t i;
              -
              2392 for (i = 0; i < 4; i++) {
              -
              2393 if (i) {
              -
              2394 if (m_separator->match(text, this->interval.end, end, flags))
              -
              2395 this->interval.end = m_separator->interval.end;
              -
              2396 else
              -
              2397 goto error;
              -
              2398 }
              -
              2399
              -
              2400 components[i].start = this->interval.end;
              -
              2401 bool is_empty = true;
              -
              2402 size_t x;
              -
              2403 for (x = 0; this->interval.end < end && text[this->interval.end];) {
              -
              2404 size_t dig, digit_end;
              -
              2405 if (m_digit_0->match(text, this->interval.end, end, flags)) { dig = 0; digit_end = m_digit_0->interval.end; }
              -
              2406 else if (m_digit_1->match(text, this->interval.end, end, flags)) { dig = 1; digit_end = m_digit_1->interval.end; }
              -
              2407 else if (m_digit_2->match(text, this->interval.end, end, flags)) { dig = 2; digit_end = m_digit_2->interval.end; }
              -
              2408 else if (m_digit_3->match(text, this->interval.end, end, flags)) { dig = 3; digit_end = m_digit_3->interval.end; }
              -
              2409 else if (m_digit_4->match(text, this->interval.end, end, flags)) { dig = 4; digit_end = m_digit_4->interval.end; }
              -
              2410 else if (m_digit_5->match(text, this->interval.end, end, flags)) { dig = 5; digit_end = m_digit_5->interval.end; }
              -
              2411 else if (m_digit_6->match(text, this->interval.end, end, flags)) { dig = 6; digit_end = m_digit_6->interval.end; }
              -
              2412 else if (m_digit_7->match(text, this->interval.end, end, flags)) { dig = 7; digit_end = m_digit_7->interval.end; }
              -
              2413 else if (m_digit_8->match(text, this->interval.end, end, flags)) { dig = 8; digit_end = m_digit_8->interval.end; }
              -
              2414 else if (m_digit_9->match(text, this->interval.end, end, flags)) { dig = 9; digit_end = m_digit_9->interval.end; }
              -
              2415 else break;
              -
              2416 size_t x_n = x * 10 + dig;
              -
              2417 if (x_n <= 255) {
              -
              2418 x = x_n;
              -
              2419 this->interval.end = digit_end;
              -
              2420 is_empty = false;
              -
              2421 }
              -
              2422 else
              -
              2423 break;
              -
              2424 }
              -
              2425 if (is_empty)
              -
              2426 goto error;
              -
              2427 components[i].end = this->interval.end;
              -
              2428 value.s_addr = (value.s_addr << 8) | (uint8_t)x;
              -
              2429 }
              -
              2430 if (i < 4)
              -
              2431 goto error;
              -
              2432
              -
              2433 this->interval.start = start;
              -
              2434 return true;
              -
              2435
              -
              2436 error:
              -
              2437 components[0].start = 1;
              -
              2438 components[0].end = 0;
              -
              2439 components[1].start = 1;
              -
              2440 components[1].end = 0;
              -
              2441 components[2].start = 1;
              -
              2442 components[2].end = 0;
              -
              2443 components[3].start = 1;
              -
              2444 components[3].end = 0;
              -
              2445 value.s_addr = 0;
              -
              2446 this->interval.start = (this->interval.end = start) + 1;
              -
              2447 return false;
              -
              2448 }
              -
              2449
              -
              2450 virtual void invalidate()
              -
              2451 {
              -
              2452 components[0].start = 1;
              -
              2453 components[0].end = 0;
              -
              2454 components[1].start = 1;
              -
              2455 components[1].end = 0;
              -
              2456 components[2].start = 1;
              -
              2457 components[2].end = 0;
              -
              2458 components[3].start = 1;
              -
              2459 components[3].end = 0;
              -
              2460 value.s_addr = 0;
              - -
              2462 }
              -
              2463
              -
              2464 public:
              - - -
              2467
              -
              2468 protected:
              -
              2469 std::shared_ptr<basic_parser<T>>
              -
              2470 m_digit_0,
              -
              2471 m_digit_1,
              -
              2472 m_digit_2,
              -
              2473 m_digit_3,
              -
              2474 m_digit_4,
              -
              2475 m_digit_5,
              -
              2476 m_digit_6,
              -
              2477 m_digit_7,
              -
              2478 m_digit_8,
              -
              2479 m_digit_9;
              -
              2480 std::shared_ptr<basic_parser<T>> m_separator;
              -
              2481 };
              +
              2334
              + + +
              2337#ifdef _UNICODE
              + +
              2339#else
              + +
              2341#endif
              + +
              2343
              +
              2347 template <class T>
              +
              + +
              2349 {
              +
              2350 public:
              + +
              2352 _In_ const std::shared_ptr<basic_parser<T>>& digit_0,
              +
              2353 _In_ const std::shared_ptr<basic_parser<T>>& digit_1,
              +
              2354 _In_ const std::shared_ptr<basic_parser<T>>& digit_2,
              +
              2355 _In_ const std::shared_ptr<basic_parser<T>>& digit_3,
              +
              2356 _In_ const std::shared_ptr<basic_parser<T>>& digit_4,
              +
              2357 _In_ const std::shared_ptr<basic_parser<T>>& digit_5,
              +
              2358 _In_ const std::shared_ptr<basic_parser<T>>& digit_6,
              +
              2359 _In_ const std::shared_ptr<basic_parser<T>>& digit_7,
              +
              2360 _In_ const std::shared_ptr<basic_parser<T>>& digit_8,
              +
              2361 _In_ const std::shared_ptr<basic_parser<T>>& digit_9,
              +
              2362 _In_ const std::shared_ptr<basic_parser<T>>& separator,
              +
              2363 _In_ const std::locale& locale = std::locale()) :
              +
              2364 basic_parser<T>(locale),
              +
              2365 m_digit_0(digit_0),
              +
              2366 m_digit_1(digit_1),
              +
              2367 m_digit_2(digit_2),
              +
              2368 m_digit_3(digit_3),
              +
              2369 m_digit_4(digit_4),
              +
              2370 m_digit_5(digit_5),
              +
              2371 m_digit_6(digit_6),
              +
              2372 m_digit_7(digit_7),
              +
              2373 m_digit_8(digit_8),
              +
              2374 m_digit_9(digit_9),
              +
              2375 m_separator(separator)
              +
              2376 {
              +
              2377 value.s_addr = 0;
              +
              2378 }
              +
              2379
              +
              2380 virtual bool match(
              +
              2381 _In_reads_or_z_(end) const T* text,
              +
              2382 _In_ size_t start = 0,
              +
              2383 _In_ size_t end = SIZE_MAX,
              +
              2384 _In_ int flags = match_default)
              +
              2385 {
              +
              2386 _Assume_(text || start >= end);
              +
              2387 this->interval.end = start;
              +
              2388 value.s_addr = 0;
              +
              2389
              +
              2390 size_t i;
              +
              2391 for (i = 0; i < 4; i++) {
              +
              2392 if (i) {
              +
              2393 if (m_separator->match(text, this->interval.end, end, flags))
              +
              2394 this->interval.end = m_separator->interval.end;
              +
              2395 else
              +
              2396 goto error;
              +
              2397 }
              +
              2398
              +
              2399 components[i].start = this->interval.end;
              +
              2400 bool is_empty = true;
              +
              2401 size_t x;
              +
              2402 for (x = 0; this->interval.end < end && text[this->interval.end];) {
              +
              2403 size_t dig, digit_end;
              +
              2404 if (m_digit_0->match(text, this->interval.end, end, flags)) { dig = 0; digit_end = m_digit_0->interval.end; }
              +
              2405 else if (m_digit_1->match(text, this->interval.end, end, flags)) { dig = 1; digit_end = m_digit_1->interval.end; }
              +
              2406 else if (m_digit_2->match(text, this->interval.end, end, flags)) { dig = 2; digit_end = m_digit_2->interval.end; }
              +
              2407 else if (m_digit_3->match(text, this->interval.end, end, flags)) { dig = 3; digit_end = m_digit_3->interval.end; }
              +
              2408 else if (m_digit_4->match(text, this->interval.end, end, flags)) { dig = 4; digit_end = m_digit_4->interval.end; }
              +
              2409 else if (m_digit_5->match(text, this->interval.end, end, flags)) { dig = 5; digit_end = m_digit_5->interval.end; }
              +
              2410 else if (m_digit_6->match(text, this->interval.end, end, flags)) { dig = 6; digit_end = m_digit_6->interval.end; }
              +
              2411 else if (m_digit_7->match(text, this->interval.end, end, flags)) { dig = 7; digit_end = m_digit_7->interval.end; }
              +
              2412 else if (m_digit_8->match(text, this->interval.end, end, flags)) { dig = 8; digit_end = m_digit_8->interval.end; }
              +
              2413 else if (m_digit_9->match(text, this->interval.end, end, flags)) { dig = 9; digit_end = m_digit_9->interval.end; }
              +
              2414 else break;
              +
              2415 size_t x_n = x * 10 + dig;
              +
              2416 if (x_n <= 255) {
              +
              2417 x = x_n;
              +
              2418 this->interval.end = digit_end;
              +
              2419 is_empty = false;
              +
              2420 }
              +
              2421 else
              +
              2422 break;
              +
              2423 }
              +
              2424 if (is_empty)
              +
              2425 goto error;
              +
              2426 components[i].end = this->interval.end;
              +
              2427 value.s_addr = (value.s_addr << 8) | (uint8_t)x;
              +
              2428 }
              +
              2429 if (i < 4)
              +
              2430 goto error;
              +
              2431
              +
              2432 this->interval.start = start;
              +
              2433 return true;
              +
              2434
              +
              2435 error:
              +
              2436 components[0].start = 1;
              +
              2437 components[0].end = 0;
              +
              2438 components[1].start = 1;
              +
              2439 components[1].end = 0;
              +
              2440 components[2].start = 1;
              +
              2441 components[2].end = 0;
              +
              2442 components[3].start = 1;
              +
              2443 components[3].end = 0;
              +
              2444 value.s_addr = 0;
              +
              2445 this->interval.invalidate();
              +
              2446 return false;
              +
              2447 }
              +
              2448
              +
              2449 virtual void invalidate()
              +
              2450 {
              +
              2451 components[0].start = 1;
              +
              2452 components[0].end = 0;
              +
              2453 components[1].start = 1;
              +
              2454 components[1].end = 0;
              +
              2455 components[2].start = 1;
              +
              2456 components[2].end = 0;
              +
              2457 components[3].start = 1;
              +
              2458 components[3].end = 0;
              +
              2459 value.s_addr = 0;
              + +
              2461 }
              +
              2462
              +
              2463 public:
              + + +
              2466
              +
              2467 protected:
              +
              2468 std::shared_ptr<basic_parser<T>>
              +
              2469 m_digit_0,
              +
              2470 m_digit_1,
              +
              2471 m_digit_2,
              +
              2472 m_digit_3,
              +
              2473 m_digit_4,
              +
              2474 m_digit_5,
              +
              2475 m_digit_6,
              +
              2476 m_digit_7,
              +
              2477 m_digit_8,
              +
              2478 m_digit_9;
              +
              2479 std::shared_ptr<basic_parser<T>> m_separator;
              +
              2480 };
              -
              2482
              - - -
              2485#ifdef _UNICODE
              - -
              2487#else
              - -
              2489#endif
              - -
              2491
              -
              2495 template <class T>
              -
              - -
              2497 {
              -
              2498 public:
              -
              2499 basic_ipv6_scope_id_char(_In_ const std::locale& locale = std::locale()) : basic_parser<T>(locale) {}
              -
              2500
              -
              2501 virtual bool match(
              -
              2502 _In_reads_or_z_(end) const T* text,
              -
              2503 _In_ size_t start = 0,
              -
              2504 _In_ size_t end = (size_t)-1,
              -
              2505 _In_ int flags = match_default)
              -
              2506 {
              -
              2507 _Assume_(text || start >= end);
              -
              2508 if (start < end && text[start]) {
              -
              2509 if (text[start] == '-' ||
              -
              2510 text[start] == '_' ||
              -
              2511 text[start] == ':' ||
              -
              2512 std::use_facet<std::ctype<T>>(this->m_locale).is(std::ctype_base::alnum, text[start]))
              -
              2513 {
              -
              2514 this->interval.end = (this->interval.start = start) + 1;
              -
              2515 return true;
              -
              2516 }
              -
              2517 }
              -
              2518 this->interval.start = (this->interval.end = start) + 1;
              -
              2519 return false;
              -
              2520 }
              -
              2521 };
              +
              2481
              + + +
              2484#ifdef _UNICODE
              + +
              2486#else
              + +
              2488#endif
              + +
              2490
              +
              2494 template <class T>
              +
              + +
              2496 {
              +
              2497 public:
              +
              2498 basic_ipv6_scope_id_char(_In_ const std::locale& locale = std::locale()) : basic_parser<T>(locale) {}
              +
              2499
              +
              2500 virtual bool match(
              +
              2501 _In_reads_or_z_(end) const T* text,
              +
              2502 _In_ size_t start = 0,
              +
              2503 _In_ size_t end = SIZE_MAX,
              +
              2504 _In_ int flags = match_default)
              +
              2505 {
              +
              2506 _Assume_(text || start >= end);
              +
              2507 if (start < end && text[start]) {
              +
              2508 if (text[start] == '-' ||
              +
              2509 text[start] == '_' ||
              +
              2510 text[start] == ':' ||
              +
              2511 std::use_facet<std::ctype<T>>(this->m_locale).is(std::ctype_base::alnum, text[start]))
              +
              2512 {
              +
              2513 this->interval.end = (this->interval.start = start) + 1;
              +
              2514 return true;
              +
              2515 }
              +
              2516 }
              +
              2517 this->interval.invalidate();
              +
              2518 return false;
              +
              2519 }
              +
              2520 };
              -
              2522
              - - -
              2525#ifdef _UNICODE
              - -
              2527#else
              - -
              2529#endif
              -
              2530
              -
              - -
              2535 {
              -
              2536 public:
              -
              2537 sgml_ipv6_scope_id_char(_In_ const std::locale& locale = std::locale()) : sgml_parser(locale) {}
              -
              2538
              -
              2539 virtual bool match(
              -
              2540 _In_reads_or_z_(end) const char* text,
              -
              2541 _In_ size_t start = 0,
              -
              2542 _In_ size_t end = (size_t)-1,
              -
              2543 _In_ int flags = match_default)
              -
              2544 {
              -
              2545 _Assume_(text || start >= end);
              -
              2546 if (start < end && text[start]) {
              -
              2547 wchar_t buf[3];
              -
              2548 const wchar_t* chr = next_sgml_cp(text, start, end, this->interval.end, buf);
              -
              2549 const wchar_t* chr_end = chr + stdex::strlen(chr);
              -
              2550 if (((chr[0] == L'-' ||
              -
              2551 chr[0] == L'_' ||
              -
              2552 chr[0] == L':') && chr[1] == 0) ||
              -
              2553 std::use_facet<std::ctype<wchar_t>>(m_locale).scan_not(std::ctype_base::alnum, chr, chr_end) == chr_end)
              -
              2554 {
              -
              2555 this->interval.start = start;
              -
              2556 return true;
              -
              2557 }
              -
              2558 }
              -
              2559 this->interval.start = (this->interval.end = start) + 1;
              -
              2560 return false;
              -
              2561 }
              -
              2562 };
              +
              2521
              + + +
              2524#ifdef _UNICODE
              + +
              2526#else
              + +
              2528#endif
              +
              2529
              +
              + +
              2534 {
              +
              2535 public:
              +
              2536 sgml_ipv6_scope_id_char(_In_ const std::locale& locale = std::locale()) : sgml_parser(locale) {}
              +
              2537
              +
              2538 virtual bool match(
              +
              2539 _In_reads_or_z_(end) const char* text,
              +
              2540 _In_ size_t start = 0,
              +
              2541 _In_ size_t end = SIZE_MAX,
              +
              2542 _In_ int flags = match_default)
              +
              2543 {
              +
              2544 _Assume_(text || start >= end);
              +
              2545 if (start < end && text[start]) {
              +
              2546 wchar_t buf[3];
              +
              2547 const wchar_t* chr = next_sgml_cp(text, start, end, this->interval.end, buf);
              +
              2548 const wchar_t* chr_end = chr + stdex::strlen(chr);
              +
              2549 if (((chr[0] == L'-' ||
              +
              2550 chr[0] == L'_' ||
              +
              2551 chr[0] == L':') && chr[1] == 0) ||
              +
              2552 std::use_facet<std::ctype<wchar_t>>(m_locale).scan_not(std::ctype_base::alnum, chr, chr_end) == chr_end)
              +
              2553 {
              +
              2554 this->interval.start = start;
              +
              2555 return true;
              +
              2556 }
              +
              2557 }
              +
              2558 this->interval.invalidate();
              +
              2559 return false;
              +
              2560 }
              +
              2561 };
              -
              2563
              -
              2567 template <class T>
              -
              - -
              2569 {
              -
              2570 public:
              - -
              2572 _In_ const std::shared_ptr<basic_parser<T>>& digit_0,
              -
              2573 _In_ const std::shared_ptr<basic_parser<T>>& digit_1,
              -
              2574 _In_ const std::shared_ptr<basic_parser<T>>& digit_2,
              -
              2575 _In_ const std::shared_ptr<basic_parser<T>>& digit_3,
              -
              2576 _In_ const std::shared_ptr<basic_parser<T>>& digit_4,
              -
              2577 _In_ const std::shared_ptr<basic_parser<T>>& digit_5,
              -
              2578 _In_ const std::shared_ptr<basic_parser<T>>& digit_6,
              -
              2579 _In_ const std::shared_ptr<basic_parser<T>>& digit_7,
              -
              2580 _In_ const std::shared_ptr<basic_parser<T>>& digit_8,
              -
              2581 _In_ const std::shared_ptr<basic_parser<T>>& digit_9,
              -
              2582 _In_ const std::shared_ptr<basic_parser<T>>& digit_10,
              -
              2583 _In_ const std::shared_ptr<basic_parser<T>>& digit_11,
              -
              2584 _In_ const std::shared_ptr<basic_parser<T>>& digit_12,
              -
              2585 _In_ const std::shared_ptr<basic_parser<T>>& digit_13,
              -
              2586 _In_ const std::shared_ptr<basic_parser<T>>& digit_14,
              -
              2587 _In_ const std::shared_ptr<basic_parser<T>>& digit_15,
              -
              2588 _In_ const std::shared_ptr<basic_parser<T>>& separator,
              -
              2589 _In_ const std::shared_ptr<basic_parser<T>>& scope_id_separator = nullptr,
              -
              2590 _In_ const std::shared_ptr<basic_parser<T>>& _scope_id = nullptr,
              -
              2591 _In_ const std::locale& locale = std::locale()) :
              -
              2592 basic_parser<T>(locale),
              -
              2593 m_digit_0(digit_0),
              -
              2594 m_digit_1(digit_1),
              -
              2595 m_digit_2(digit_2),
              -
              2596 m_digit_3(digit_3),
              -
              2597 m_digit_4(digit_4),
              -
              2598 m_digit_5(digit_5),
              -
              2599 m_digit_6(digit_6),
              -
              2600 m_digit_7(digit_7),
              -
              2601 m_digit_8(digit_8),
              -
              2602 m_digit_9(digit_9),
              -
              2603 m_digit_10(digit_10),
              -
              2604 m_digit_11(digit_11),
              -
              2605 m_digit_12(digit_12),
              -
              2606 m_digit_13(digit_13),
              -
              2607 m_digit_14(digit_14),
              -
              2608 m_digit_15(digit_15),
              -
              2609 m_separator(separator),
              -
              2610 m_scope_id_separator(scope_id_separator),
              - -
              2612 {
              -
              2613 memset(&value, 0, sizeof(value));
              -
              2614 }
              -
              2615
              -
              2616 virtual bool match(
              -
              2617 _In_reads_or_z_(end) const T* text,
              -
              2618 _In_ size_t start = 0,
              -
              2619 _In_ size_t end = (size_t)-1,
              -
              2620 _In_ int flags = match_default)
              -
              2621 {
              -
              2622 _Assume_(text || start >= end);
              -
              2623 this->interval.end = start;
              -
              2624 memset(&value, 0, sizeof(value));
              -
              2625
              -
              2626 size_t i, compaction_i = (size_t)-1, compaction_start = start;
              -
              2627 for (i = 0; i < 8; i++) {
              -
              2628 bool is_empty = true;
              -
              2629
              -
              2630 if (m_separator->match(text, this->interval.end, end, flags)) {
              -
              2631 if (m_separator->match(text, m_separator->interval.end, end, flags)) {
              -
              2632 // :: found
              -
              2633 if (compaction_i == (size_t)-1) {
              -
              2634 // Zero compaction start
              -
              2635 compaction_i = i;
              -
              2636 compaction_start = m_separator->interval.start;
              -
              2637 this->interval.end = m_separator->interval.end;
              -
              2638 }
              -
              2639 else {
              -
              2640 // More than one zero compaction
              -
              2641 break;
              -
              2642 }
              -
              2643 }
              -
              2644 else if (i) {
              -
              2645 // Inner : found
              -
              2646 this->interval.end = m_separator->interval.end;
              -
              2647 }
              -
              2648 else {
              -
              2649 // Leading : found
              -
              2650 goto error;
              -
              2651 }
              -
              2652 }
              -
              2653 else if (i) {
              -
              2654 // : missing
              -
              2655 break;
              -
              2656 }
              -
              2657
              -
              2658 components[i].start = this->interval.end;
              -
              2659 size_t x;
              -
              2660 for (x = 0; this->interval.end < end && text[this->interval.end];) {
              -
              2661 size_t dig, digit_end;
              -
              2662 if (m_digit_0->match(text, this->interval.end, end, flags)) { dig = 0; digit_end = m_digit_0->interval.end; }
              -
              2663 else if (m_digit_1->match(text, this->interval.end, end, flags)) { dig = 1; digit_end = m_digit_1->interval.end; }
              -
              2664 else if (m_digit_2->match(text, this->interval.end, end, flags)) { dig = 2; digit_end = m_digit_2->interval.end; }
              -
              2665 else if (m_digit_3->match(text, this->interval.end, end, flags)) { dig = 3; digit_end = m_digit_3->interval.end; }
              -
              2666 else if (m_digit_4->match(text, this->interval.end, end, flags)) { dig = 4; digit_end = m_digit_4->interval.end; }
              -
              2667 else if (m_digit_5->match(text, this->interval.end, end, flags)) { dig = 5; digit_end = m_digit_5->interval.end; }
              -
              2668 else if (m_digit_6->match(text, this->interval.end, end, flags)) { dig = 6; digit_end = m_digit_6->interval.end; }
              -
              2669 else if (m_digit_7->match(text, this->interval.end, end, flags)) { dig = 7; digit_end = m_digit_7->interval.end; }
              -
              2670 else if (m_digit_8->match(text, this->interval.end, end, flags)) { dig = 8; digit_end = m_digit_8->interval.end; }
              -
              2671 else if (m_digit_9->match(text, this->interval.end, end, flags)) { dig = 9; digit_end = m_digit_9->interval.end; }
              -
              2672 else if (m_digit_10->match(text, this->interval.end, end, flags)) { dig = 10; digit_end = m_digit_10->interval.end; }
              -
              2673 else if (m_digit_11->match(text, this->interval.end, end, flags)) { dig = 11; digit_end = m_digit_11->interval.end; }
              -
              2674 else if (m_digit_12->match(text, this->interval.end, end, flags)) { dig = 12; digit_end = m_digit_12->interval.end; }
              -
              2675 else if (m_digit_13->match(text, this->interval.end, end, flags)) { dig = 13; digit_end = m_digit_13->interval.end; }
              -
              2676 else if (m_digit_14->match(text, this->interval.end, end, flags)) { dig = 14; digit_end = m_digit_14->interval.end; }
              -
              2677 else if (m_digit_15->match(text, this->interval.end, end, flags)) { dig = 15; digit_end = m_digit_15->interval.end; }
              -
              2678 else break;
              -
              2679 size_t x_n = x * 16 + dig;
              -
              2680 if (x_n <= 0xffff) {
              -
              2681 x = x_n;
              -
              2682 this->interval.end = digit_end;
              -
              2683 is_empty = false;
              -
              2684 }
              -
              2685 else
              -
              2686 break;
              -
              2687 }
              -
              2688 if (is_empty) {
              -
              2689 if (compaction_i != (size_t)-1) {
              -
              2690 // Zero compaction active: no sweat.
              -
              2691 break;
              -
              2692 }
              -
              2693 goto error;
              -
              2694 }
              -
              2695 components[i].end = this->interval.end;
              -
              2696 this->value.s6_words[i] = (uint16_t)x;
              -
              2697 }
              -
              2698
              -
              2699 if (compaction_i != (size_t)-1) {
              -
              2700 // Align components right due to zero compaction.
              -
              2701 size_t j, k;
              -
              2702 for (j = 8, k = i; k > compaction_i;) {
              -
              2703 this->value.s6_words[--j] = this->value.s6_words[--k];
              - -
              2705 }
              -
              2706 for (; j > compaction_i;) {
              -
              2707 this->value.s6_words[--j] = 0;
              -
              2708 components[j].start =
              - -
              2710 }
              -
              2711 }
              -
              2712 else if (i < 8)
              -
              2713 goto error;
              -
              2714
              -
              2715 if (m_scope_id_separator && m_scope_id_separator->match(text, this->interval.end, end, flags) &&
              -
              2716 scope_id && scope_id->match(text, m_scope_id_separator->interval.end, end, flags))
              -
              2717 this->interval.end = scope_id->interval.end;
              -
              2718 else if (scope_id)
              -
              2719 scope_id->invalidate();
              -
              2720
              -
              2721 this->interval.start = start;
              -
              2722 return true;
              -
              2723
              -
              2724 error:
              -
              2725 components[0].start = 1;
              -
              2726 components[0].end = 0;
              -
              2727 components[1].start = 1;
              -
              2728 components[1].end = 0;
              -
              2729 components[2].start = 1;
              -
              2730 components[2].end = 0;
              -
              2731 components[3].start = 1;
              -
              2732 components[3].end = 0;
              -
              2733 components[4].start = 1;
              -
              2734 components[4].end = 0;
              -
              2735 components[5].start = 1;
              -
              2736 components[5].end = 0;
              -
              2737 components[6].start = 1;
              -
              2738 components[6].end = 0;
              -
              2739 components[7].start = 1;
              -
              2740 components[7].end = 0;
              -
              2741 memset(&value, 0, sizeof(value));
              -
              2742 if (scope_id) scope_id->invalidate();
              -
              2743 this->interval.start = (this->interval.end = start) + 1;
              -
              2744 return false;
              -
              2745 }
              -
              2746
              -
              2747 virtual void invalidate()
              -
              2748 {
              -
              2749 components[0].start = 1;
              -
              2750 components[0].end = 0;
              -
              2751 components[1].start = 1;
              -
              2752 components[1].end = 0;
              -
              2753 components[2].start = 1;
              -
              2754 components[2].end = 0;
              -
              2755 components[3].start = 1;
              -
              2756 components[3].end = 0;
              -
              2757 components[4].start = 1;
              -
              2758 components[4].end = 0;
              -
              2759 components[5].start = 1;
              -
              2760 components[5].end = 0;
              -
              2761 components[6].start = 1;
              -
              2762 components[6].end = 0;
              -
              2763 components[7].start = 1;
              -
              2764 components[7].end = 0;
              -
              2765 memset(&value, 0, sizeof(value));
              -
              2766 if (scope_id) scope_id->invalidate();
              - -
              2768 }
              -
              2769
              -
              2770 public:
              - - -
              2773 std::shared_ptr<basic_parser<T>> scope_id;
              -
              2774
              -
              2775 protected:
              -
              2776 std::shared_ptr<basic_parser<T>>
              -
              2777 m_digit_0,
              -
              2778 m_digit_1,
              -
              2779 m_digit_2,
              -
              2780 m_digit_3,
              -
              2781 m_digit_4,
              -
              2782 m_digit_5,
              -
              2783 m_digit_6,
              -
              2784 m_digit_7,
              -
              2785 m_digit_8,
              -
              2786 m_digit_9,
              -
              2787 m_digit_10,
              -
              2788 m_digit_11,
              -
              2789 m_digit_12,
              -
              2790 m_digit_13,
              -
              2791 m_digit_14,
              -
              2792 m_digit_15;
              -
              2793 std::shared_ptr<basic_parser<T>> m_separator, m_scope_id_separator;
              -
              2794 };
              +
              2562
              +
              2566 template <class T>
              +
              + +
              2568 {
              +
              2569 public:
              + +
              2571 _In_ const std::shared_ptr<basic_parser<T>>& digit_0,
              +
              2572 _In_ const std::shared_ptr<basic_parser<T>>& digit_1,
              +
              2573 _In_ const std::shared_ptr<basic_parser<T>>& digit_2,
              +
              2574 _In_ const std::shared_ptr<basic_parser<T>>& digit_3,
              +
              2575 _In_ const std::shared_ptr<basic_parser<T>>& digit_4,
              +
              2576 _In_ const std::shared_ptr<basic_parser<T>>& digit_5,
              +
              2577 _In_ const std::shared_ptr<basic_parser<T>>& digit_6,
              +
              2578 _In_ const std::shared_ptr<basic_parser<T>>& digit_7,
              +
              2579 _In_ const std::shared_ptr<basic_parser<T>>& digit_8,
              +
              2580 _In_ const std::shared_ptr<basic_parser<T>>& digit_9,
              +
              2581 _In_ const std::shared_ptr<basic_parser<T>>& digit_10,
              +
              2582 _In_ const std::shared_ptr<basic_parser<T>>& digit_11,
              +
              2583 _In_ const std::shared_ptr<basic_parser<T>>& digit_12,
              +
              2584 _In_ const std::shared_ptr<basic_parser<T>>& digit_13,
              +
              2585 _In_ const std::shared_ptr<basic_parser<T>>& digit_14,
              +
              2586 _In_ const std::shared_ptr<basic_parser<T>>& digit_15,
              +
              2587 _In_ const std::shared_ptr<basic_parser<T>>& separator,
              +
              2588 _In_ const std::shared_ptr<basic_parser<T>>& scope_id_separator = nullptr,
              +
              2589 _In_ const std::shared_ptr<basic_parser<T>>& _scope_id = nullptr,
              +
              2590 _In_ const std::locale& locale = std::locale()) :
              +
              2591 basic_parser<T>(locale),
              +
              2592 m_digit_0(digit_0),
              +
              2593 m_digit_1(digit_1),
              +
              2594 m_digit_2(digit_2),
              +
              2595 m_digit_3(digit_3),
              +
              2596 m_digit_4(digit_4),
              +
              2597 m_digit_5(digit_5),
              +
              2598 m_digit_6(digit_6),
              +
              2599 m_digit_7(digit_7),
              +
              2600 m_digit_8(digit_8),
              +
              2601 m_digit_9(digit_9),
              +
              2602 m_digit_10(digit_10),
              +
              2603 m_digit_11(digit_11),
              +
              2604 m_digit_12(digit_12),
              +
              2605 m_digit_13(digit_13),
              +
              2606 m_digit_14(digit_14),
              +
              2607 m_digit_15(digit_15),
              +
              2608 m_separator(separator),
              +
              2609 m_scope_id_separator(scope_id_separator),
              + +
              2611 {
              +
              2612 memset(&value, 0, sizeof(value));
              +
              2613 }
              +
              2614
              +
              2615 virtual bool match(
              +
              2616 _In_reads_or_z_(end) const T* text,
              +
              2617 _In_ size_t start = 0,
              +
              2618 _In_ size_t end = SIZE_MAX,
              +
              2619 _In_ int flags = match_default)
              +
              2620 {
              +
              2621 _Assume_(text || start >= end);
              +
              2622 this->interval.end = start;
              +
              2623 memset(&value, 0, sizeof(value));
              +
              2624
              +
              2625 size_t i, compaction_i = SIZE_MAX, compaction_start = start;
              +
              2626 for (i = 0; i < 8; i++) {
              +
              2627 bool is_empty = true;
              +
              2628
              +
              2629 if (m_separator->match(text, this->interval.end, end, flags)) {
              +
              2630 if (m_separator->match(text, m_separator->interval.end, end, flags)) {
              +
              2631 // :: found
              +
              2632 if (compaction_i == SIZE_MAX) {
              +
              2633 // Zero compaction start
              +
              2634 compaction_i = i;
              +
              2635 compaction_start = m_separator->interval.start;
              +
              2636 this->interval.end = m_separator->interval.end;
              +
              2637 }
              +
              2638 else {
              +
              2639 // More than one zero compaction
              +
              2640 break;
              +
              2641 }
              +
              2642 }
              +
              2643 else if (i) {
              +
              2644 // Inner : found
              +
              2645 this->interval.end = m_separator->interval.end;
              +
              2646 }
              +
              2647 else {
              +
              2648 // Leading : found
              +
              2649 goto error;
              +
              2650 }
              +
              2651 }
              +
              2652 else if (i) {
              +
              2653 // : missing
              +
              2654 break;
              +
              2655 }
              +
              2656
              +
              2657 components[i].start = this->interval.end;
              +
              2658 size_t x;
              +
              2659 for (x = 0; this->interval.end < end && text[this->interval.end];) {
              +
              2660 size_t dig, digit_end;
              +
              2661 if (m_digit_0->match(text, this->interval.end, end, flags)) { dig = 0; digit_end = m_digit_0->interval.end; }
              +
              2662 else if (m_digit_1->match(text, this->interval.end, end, flags)) { dig = 1; digit_end = m_digit_1->interval.end; }
              +
              2663 else if (m_digit_2->match(text, this->interval.end, end, flags)) { dig = 2; digit_end = m_digit_2->interval.end; }
              +
              2664 else if (m_digit_3->match(text, this->interval.end, end, flags)) { dig = 3; digit_end = m_digit_3->interval.end; }
              +
              2665 else if (m_digit_4->match(text, this->interval.end, end, flags)) { dig = 4; digit_end = m_digit_4->interval.end; }
              +
              2666 else if (m_digit_5->match(text, this->interval.end, end, flags)) { dig = 5; digit_end = m_digit_5->interval.end; }
              +
              2667 else if (m_digit_6->match(text, this->interval.end, end, flags)) { dig = 6; digit_end = m_digit_6->interval.end; }
              +
              2668 else if (m_digit_7->match(text, this->interval.end, end, flags)) { dig = 7; digit_end = m_digit_7->interval.end; }
              +
              2669 else if (m_digit_8->match(text, this->interval.end, end, flags)) { dig = 8; digit_end = m_digit_8->interval.end; }
              +
              2670 else if (m_digit_9->match(text, this->interval.end, end, flags)) { dig = 9; digit_end = m_digit_9->interval.end; }
              +
              2671 else if (m_digit_10->match(text, this->interval.end, end, flags)) { dig = 10; digit_end = m_digit_10->interval.end; }
              +
              2672 else if (m_digit_11->match(text, this->interval.end, end, flags)) { dig = 11; digit_end = m_digit_11->interval.end; }
              +
              2673 else if (m_digit_12->match(text, this->interval.end, end, flags)) { dig = 12; digit_end = m_digit_12->interval.end; }
              +
              2674 else if (m_digit_13->match(text, this->interval.end, end, flags)) { dig = 13; digit_end = m_digit_13->interval.end; }
              +
              2675 else if (m_digit_14->match(text, this->interval.end, end, flags)) { dig = 14; digit_end = m_digit_14->interval.end; }
              +
              2676 else if (m_digit_15->match(text, this->interval.end, end, flags)) { dig = 15; digit_end = m_digit_15->interval.end; }
              +
              2677 else break;
              +
              2678 size_t x_n = x * 16 + dig;
              +
              2679 if (x_n <= 0xffff) {
              +
              2680 x = x_n;
              +
              2681 this->interval.end = digit_end;
              +
              2682 is_empty = false;
              +
              2683 }
              +
              2684 else
              +
              2685 break;
              +
              2686 }
              +
              2687 if (is_empty) {
              +
              2688 if (compaction_i != SIZE_MAX) {
              +
              2689 // Zero compaction active: no sweat.
              +
              2690 break;
              +
              2691 }
              +
              2692 goto error;
              +
              2693 }
              +
              2694 components[i].end = this->interval.end;
              +
              2695 this->value.s6_words[i] = (uint16_t)x;
              +
              2696 }
              +
              2697
              +
              2698 if (compaction_i != SIZE_MAX) {
              +
              2699 // Align components right due to zero compaction.
              +
              2700 size_t j, k;
              +
              2701 for (j = 8, k = i; k > compaction_i;) {
              +
              2702 this->value.s6_words[--j] = this->value.s6_words[--k];
              + +
              2704 }
              +
              2705 for (; j > compaction_i;) {
              +
              2706 this->value.s6_words[--j] = 0;
              +
              2707 components[j].start =
              + +
              2709 }
              +
              2710 }
              +
              2711 else if (i < 8)
              +
              2712 goto error;
              +
              2713
              +
              2714 if (m_scope_id_separator && m_scope_id_separator->match(text, this->interval.end, end, flags) &&
              +
              2715 scope_id && scope_id->match(text, m_scope_id_separator->interval.end, end, flags))
              +
              2716 this->interval.end = scope_id->interval.end;
              +
              2717 else if (scope_id)
              +
              2718 scope_id->invalidate();
              +
              2719
              +
              2720 this->interval.start = start;
              +
              2721 return true;
              +
              2722
              +
              2723 error:
              +
              2724 components[0].start = 1;
              +
              2725 components[0].end = 0;
              +
              2726 components[1].start = 1;
              +
              2727 components[1].end = 0;
              +
              2728 components[2].start = 1;
              +
              2729 components[2].end = 0;
              +
              2730 components[3].start = 1;
              +
              2731 components[3].end = 0;
              +
              2732 components[4].start = 1;
              +
              2733 components[4].end = 0;
              +
              2734 components[5].start = 1;
              +
              2735 components[5].end = 0;
              +
              2736 components[6].start = 1;
              +
              2737 components[6].end = 0;
              +
              2738 components[7].start = 1;
              +
              2739 components[7].end = 0;
              +
              2740 memset(&value, 0, sizeof(value));
              +
              2741 if (scope_id) scope_id->invalidate();
              +
              2742 this->interval.invalidate();
              +
              2743 return false;
              +
              2744 }
              +
              2745
              +
              2746 virtual void invalidate()
              +
              2747 {
              +
              2748 components[0].start = 1;
              +
              2749 components[0].end = 0;
              +
              2750 components[1].start = 1;
              +
              2751 components[1].end = 0;
              +
              2752 components[2].start = 1;
              +
              2753 components[2].end = 0;
              +
              2754 components[3].start = 1;
              +
              2755 components[3].end = 0;
              +
              2756 components[4].start = 1;
              +
              2757 components[4].end = 0;
              +
              2758 components[5].start = 1;
              +
              2759 components[5].end = 0;
              +
              2760 components[6].start = 1;
              +
              2761 components[6].end = 0;
              +
              2762 components[7].start = 1;
              +
              2763 components[7].end = 0;
              +
              2764 memset(&value, 0, sizeof(value));
              +
              2765 if (scope_id) scope_id->invalidate();
              + +
              2767 }
              +
              2768
              +
              2769 public:
              + + +
              2772 std::shared_ptr<basic_parser<T>> scope_id;
              +
              2773
              +
              2774 protected:
              +
              2775 std::shared_ptr<basic_parser<T>>
              +
              2776 m_digit_0,
              +
              2777 m_digit_1,
              +
              2778 m_digit_2,
              +
              2779 m_digit_3,
              +
              2780 m_digit_4,
              +
              2781 m_digit_5,
              +
              2782 m_digit_6,
              +
              2783 m_digit_7,
              +
              2784 m_digit_8,
              +
              2785 m_digit_9,
              +
              2786 m_digit_10,
              +
              2787 m_digit_11,
              +
              2788 m_digit_12,
              +
              2789 m_digit_13,
              +
              2790 m_digit_14,
              +
              2791 m_digit_15;
              +
              2792 std::shared_ptr<basic_parser<T>> m_separator, m_scope_id_separator;
              +
              2793 };
              -
              2795
              - - -
              2798#ifdef _UNICODE
              - -
              2800#else
              - -
              2802#endif
              - -
              2804
              -
              2808 template <class T>
              -
              - -
              2810 {
              -
              2811 public:
              - -
              2813 _In_ bool allow_idn,
              -
              2814 _In_ const std::locale& locale = std::locale()) :
              -
              2815 basic_parser<T>(locale),
              -
              2816 m_allow_idn(allow_idn),
              -
              2817 allow_on_edge(true)
              -
              2818 {}
              -
              2819
              -
              2820 virtual bool match(
              -
              2821 _In_reads_or_z_(end) const T* text,
              -
              2822 _In_ size_t start = 0,
              -
              2823 _In_ size_t end = (size_t)-1,
              -
              2824 _In_ int flags = match_default)
              -
              2825 {
              -
              2826 _Assume_(text || start >= end);
              -
              2827 if (start < end && text[start]) {
              -
              2828 if (('A' <= text[start] && text[start] <= 'Z') ||
              -
              2829 ('a' <= text[start] && text[start] <= 'z') ||
              -
              2830 ('0' <= text[start] && text[start] <= '9'))
              -
              2831 allow_on_edge = true;
              -
              2832 else if (text[start] == '-')
              -
              2833 allow_on_edge = false;
              -
              2834 else if (m_allow_idn && std::use_facet<std::ctype<T>>(this->m_locale).is(std::ctype_base::alnum, text[start]))
              -
              2835 allow_on_edge = true;
              -
              2836 else {
              -
              2837 this->interval.start = (this->interval.end = start) + 1;
              -
              2838 return false;
              -
              2839 }
              -
              2840 this->interval.end = (this->interval.start = start) + 1;
              -
              2841 return true;
              -
              2842 }
              -
              2843 this->interval.start = (this->interval.end = start) + 1;
              -
              2844 return false;
              -
              2845 }
              -
              2846
              -
              2847 public:
              - -
              2849
              -
              2850 protected:
              -
              2851 bool m_allow_idn;
              -
              2852 };
              +
              2794
              + + +
              2797#ifdef _UNICODE
              + +
              2799#else
              + +
              2801#endif
              + +
              2803
              +
              2807 template <class T>
              +
              + +
              2809 {
              +
              2810 public:
              + +
              2812 _In_ bool allow_idn,
              +
              2813 _In_ const std::locale& locale = std::locale()) :
              +
              2814 basic_parser<T>(locale),
              +
              2815 m_allow_idn(allow_idn),
              +
              2816 allow_on_edge(true)
              +
              2817 {}
              +
              2818
              +
              2819 virtual bool match(
              +
              2820 _In_reads_or_z_(end) const T* text,
              +
              2821 _In_ size_t start = 0,
              +
              2822 _In_ size_t end = SIZE_MAX,
              +
              2823 _In_ int flags = match_default)
              +
              2824 {
              +
              2825 _Assume_(text || start >= end);
              +
              2826 if (start < end && text[start]) {
              +
              2827 if (('A' <= text[start] && text[start] <= 'Z') ||
              +
              2828 ('a' <= text[start] && text[start] <= 'z') ||
              +
              2829 ('0' <= text[start] && text[start] <= '9'))
              +
              2830 allow_on_edge = true;
              +
              2831 else if (text[start] == '-')
              +
              2832 allow_on_edge = false;
              +
              2833 else if (m_allow_idn && std::use_facet<std::ctype<T>>(this->m_locale).is(std::ctype_base::alnum, text[start]))
              +
              2834 allow_on_edge = true;
              +
              2835 else {
              +
              2836 this->interval.invalidate();
              +
              2837 return false;
              +
              2838 }
              +
              2839 this->interval.end = (this->interval.start = start) + 1;
              +
              2840 return true;
              +
              2841 }
              +
              2842 this->interval.invalidate();
              +
              2843 return false;
              +
              2844 }
              +
              2845
              +
              2846 public:
              + +
              2848
              +
              2849 protected:
              +
              2850 bool m_allow_idn;
              +
              2851 };
              -
              2853
              - - -
              2856#ifdef _UNICODE
              - -
              2858#else
              - -
              2860#endif
              -
              2861
              -
              - -
              2866 {
              -
              2867 public:
              - -
              2869 _In_ bool allow_idn,
              -
              2870 _In_ const std::locale& locale = std::locale()) :
              - -
              2872 {}
              -
              2873
              -
              2874 virtual bool match(
              -
              2875 _In_reads_or_z_(end) const char* text,
              -
              2876 _In_ size_t start = 0,
              -
              2877 _In_ size_t end = (size_t)-1,
              -
              2878 _In_ int flags = match_default)
              -
              2879 {
              -
              2880 _Assume_(text || start >= end);
              -
              2881 if (start < end && text[start]) {
              -
              2882 wchar_t buf[3];
              -
              2883 const wchar_t* chr = next_sgml_cp(text, start, end, this->interval.end, buf);
              -
              2884 const wchar_t* chr_end = chr + stdex::strlen(chr);
              -
              2885 if ((('A' <= chr[0] && chr[0] <= 'Z') ||
              -
              2886 ('a' <= chr[0] && chr[0] <= 'z') ||
              -
              2887 ('0' <= chr[0] && chr[0] <= '9')) && chr[1] == 0)
              -
              2888 allow_on_edge = true;
              -
              2889 else if (chr[0] == '-' && chr[1] == 0)
              -
              2890 allow_on_edge = false;
              -
              2891 else if (m_allow_idn && std::use_facet<std::ctype<wchar_t>>(m_locale).scan_not(std::ctype_base::alnum, chr, chr_end) == chr_end)
              -
              2892 allow_on_edge = true;
              -
              2893 else {
              -
              2894 this->interval.start = (this->interval.end = start) + 1;
              -
              2895 return false;
              -
              2896 }
              -
              2897 this->interval.start = start;
              -
              2898 return true;
              -
              2899 }
              -
              2900 this->interval.start = (this->interval.end = start) + 1;
              -
              2901 return false;
              -
              2902 }
              -
              2903 };
              +
              2852
              + + +
              2855#ifdef _UNICODE
              + +
              2857#else
              + +
              2859#endif
              +
              2860
              +
              + +
              2865 {
              +
              2866 public:
              + +
              2868 _In_ bool allow_idn,
              +
              2869 _In_ const std::locale& locale = std::locale()) :
              + +
              2871 {}
              +
              2872
              +
              2873 virtual bool match(
              +
              2874 _In_reads_or_z_(end) const char* text,
              +
              2875 _In_ size_t start = 0,
              +
              2876 _In_ size_t end = SIZE_MAX,
              +
              2877 _In_ int flags = match_default)
              +
              2878 {
              +
              2879 _Assume_(text || start >= end);
              +
              2880 if (start < end && text[start]) {
              +
              2881 wchar_t buf[3];
              +
              2882 const wchar_t* chr = next_sgml_cp(text, start, end, this->interval.end, buf);
              +
              2883 const wchar_t* chr_end = chr + stdex::strlen(chr);
              +
              2884 if ((('A' <= chr[0] && chr[0] <= 'Z') ||
              +
              2885 ('a' <= chr[0] && chr[0] <= 'z') ||
              +
              2886 ('0' <= chr[0] && chr[0] <= '9')) && chr[1] == 0)
              +
              2887 allow_on_edge = true;
              +
              2888 else if (chr[0] == '-' && chr[1] == 0)
              +
              2889 allow_on_edge = false;
              +
              2890 else if (m_allow_idn && std::use_facet<std::ctype<wchar_t>>(m_locale).scan_not(std::ctype_base::alnum, chr, chr_end) == chr_end)
              +
              2891 allow_on_edge = true;
              +
              2892 else {
              +
              2893 this->interval.invalidate();
              +
              2894 return false;
              +
              2895 }
              +
              2896 this->interval.start = start;
              +
              2897 return true;
              +
              2898 }
              +
              2899 this->interval.invalidate();
              +
              2900 return false;
              +
              2901 }
              +
              2902 };
              -
              2904
              -
              2908 template <class T>
              -
              - -
              2910 {
              -
              2911 public:
              - -
              2913 _In_ bool allow_absolute,
              -
              2914 _In_ const std::shared_ptr<basic_dns_domain_char<T>>& domain_char,
              -
              2915 _In_ const std::shared_ptr<basic_parser<T>>& separator,
              -
              2916 _In_ const std::locale& locale = std::locale()) :
              -
              2917 basic_parser<T>(locale),
              - -
              2919 m_domain_char(domain_char),
              -
              2920 m_separator(separator)
              -
              2921 {}
              -
              2922
              -
              2923 virtual bool match(
              -
              2924 _In_reads_or_z_(end) const T* text,
              -
              2925 _In_ size_t start = 0,
              -
              2926 _In_ size_t end = (size_t)-1,
              -
              2927 _In_ int flags = match_default)
              -
              2928 {
              -
              2929 _Assume_(text || start >= end);
              -
              2930 size_t i = start, count;
              -
              2931 for (count = 0; i < end && text[i] && count < 127; count++) {
              -
              2932 if (m_domain_char->match(text, i, end, flags) &&
              -
              2933 m_domain_char->allow_on_edge)
              -
              2934 {
              -
              2935 // Domain start
              -
              2936 this->interval.end = i = m_domain_char->interval.end;
              -
              2937 while (i < end && text[i]) {
              -
              2938 if (m_domain_char->allow_on_edge &&
              -
              2939 m_separator->match(text, i, end, flags))
              -
              2940 {
              -
              2941 // Domain end
              -
              2942 if (m_allow_absolute)
              -
              2943 this->interval.end = i = m_separator->interval.end;
              -
              2944 else {
              -
              2945 this->interval.end = i;
              -
              2946 i = m_separator->interval.end;
              -
              2947 }
              -
              2948 break;
              -
              2949 }
              -
              2950 if (m_domain_char->match(text, i, end, flags)) {
              -
              2951 if (m_domain_char->allow_on_edge)
              -
              2952 this->interval.end = i = m_domain_char->interval.end;
              -
              2953 else
              -
              2954 i = m_domain_char->interval.end;
              -
              2955 }
              -
              2956 else {
              -
              2957 this->interval.start = start;
              -
              2958 return true;
              -
              2959 }
              -
              2960 }
              -
              2961 }
              -
              2962 else
              -
              2963 break;
              -
              2964 }
              -
              2965 if (count) {
              -
              2966 this->interval.start = start;
              -
              2967 return true;
              -
              2968 }
              -
              2969 this->interval.start = (this->interval.end = start) + 1;
              -
              2970 return false;
              -
              2971 }
              -
              2972
              -
              2973 protected:
              - -
              2975 std::shared_ptr<basic_dns_domain_char<T>> m_domain_char;
              -
              2976 std::shared_ptr<basic_parser<T>> m_separator;
              -
              2977 };
              +
              2903
              +
              2907 template <class T>
              +
              + +
              2909 {
              +
              2910 public:
              + +
              2912 _In_ bool allow_absolute,
              +
              2913 _In_ const std::shared_ptr<basic_dns_domain_char<T>>& domain_char,
              +
              2914 _In_ const std::shared_ptr<basic_parser<T>>& separator,
              +
              2915 _In_ const std::locale& locale = std::locale()) :
              +
              2916 basic_parser<T>(locale),
              + +
              2918 m_domain_char(domain_char),
              +
              2919 m_separator(separator)
              +
              2920 {}
              +
              2921
              +
              2922 virtual bool match(
              +
              2923 _In_reads_or_z_(end) const T* text,
              +
              2924 _In_ size_t start = 0,
              +
              2925 _In_ size_t end = SIZE_MAX,
              +
              2926 _In_ int flags = match_default)
              +
              2927 {
              +
              2928 _Assume_(text || start >= end);
              +
              2929 size_t i = start, count;
              +
              2930 for (count = 0; i < end && text[i] && count < 127; count++) {
              +
              2931 if (m_domain_char->match(text, i, end, flags) &&
              +
              2932 m_domain_char->allow_on_edge)
              +
              2933 {
              +
              2934 // Domain start
              +
              2935 this->interval.end = i = m_domain_char->interval.end;
              +
              2936 while (i < end && text[i]) {
              +
              2937 if (m_domain_char->allow_on_edge &&
              +
              2938 m_separator->match(text, i, end, flags))
              +
              2939 {
              +
              2940 // Domain end
              +
              2941 if (m_allow_absolute)
              +
              2942 this->interval.end = i = m_separator->interval.end;
              +
              2943 else {
              +
              2944 this->interval.end = i;
              +
              2945 i = m_separator->interval.end;
              +
              2946 }
              +
              2947 break;
              +
              2948 }
              +
              2949 if (m_domain_char->match(text, i, end, flags)) {
              +
              2950 if (m_domain_char->allow_on_edge)
              +
              2951 this->interval.end = i = m_domain_char->interval.end;
              +
              2952 else
              +
              2953 i = m_domain_char->interval.end;
              +
              2954 }
              +
              2955 else {
              +
              2956 this->interval.start = start;
              +
              2957 return true;
              +
              2958 }
              +
              2959 }
              +
              2960 }
              +
              2961 else
              +
              2962 break;
              +
              2963 }
              +
              2964 if (count) {
              +
              2965 this->interval.start = start;
              +
              2966 return true;
              +
              2967 }
              +
              2968 this->interval.invalidate();
              +
              2969 return false;
              +
              2970 }
              +
              2971
              +
              2972 protected:
              + +
              2974 std::shared_ptr<basic_dns_domain_char<T>> m_domain_char;
              +
              2975 std::shared_ptr<basic_parser<T>> m_separator;
              +
              2976 };
              -
              2978
              - - -
              2981#ifdef _UNICODE
              -
              2982 using tdns_name = wdns_name;
              -
              2983#else
              -
              2984 using tdns_name = dns_name;
              -
              2985#endif
              - -
              2987
              -
              2991 template <class T>
              -
              - -
              2993 {
              -
              2994 public:
              -
              2995 basic_url_username_char(_In_ const std::locale& locale = std::locale()) : basic_parser<T>(locale) {}
              -
              2996
              -
              2997 virtual bool match(
              -
              2998 _In_reads_or_z_(end) const T* text,
              -
              2999 _In_ size_t start = 0,
              -
              3000 _In_ size_t end = (size_t)-1,
              -
              3001 _In_ int flags = match_default)
              -
              3002 {
              -
              3003 _Assume_(text || start >= end);
              -
              3004 if (start < end && text[start]) {
              -
              3005 if (text[start] == '-' ||
              -
              3006 text[start] == '.' ||
              -
              3007 text[start] == '_' ||
              -
              3008 text[start] == '~' ||
              -
              3009 text[start] == '%' ||
              -
              3010 text[start] == '!' ||
              -
              3011 text[start] == '$' ||
              -
              3012 text[start] == '&' ||
              -
              3013 text[start] == '\'' ||
              -
              3014 //text[start] == '(' ||
              -
              3015 //text[start] == ')' ||
              -
              3016 text[start] == '*' ||
              -
              3017 text[start] == '+' ||
              -
              3018 text[start] == ',' ||
              -
              3019 text[start] == ';' ||
              -
              3020 text[start] == '=' ||
              -
              3021 std::use_facet<std::ctype<T>>(this->m_locale).is(std::ctype_base::alnum, text[start]))
              -
              3022 {
              -
              3023 this->interval.end = (this->interval.start = start) + 1;
              -
              3024 return true;
              -
              3025 }
              -
              3026 }
              -
              3027 this->interval.start = (this->interval.end = start) + 1;
              -
              3028 return false;
              -
              3029 }
              -
              3030 };
              +
              2977
              + + +
              2980#ifdef _UNICODE
              +
              2981 using tdns_name = wdns_name;
              +
              2982#else
              +
              2983 using tdns_name = dns_name;
              +
              2984#endif
              + +
              2986
              +
              2990 template <class T>
              +
              + +
              2992 {
              +
              2993 public:
              +
              2994 basic_url_username_char(_In_ const std::locale& locale = std::locale()) : basic_parser<T>(locale) {}
              +
              2995
              +
              2996 virtual bool match(
              +
              2997 _In_reads_or_z_(end) const T* text,
              +
              2998 _In_ size_t start = 0,
              +
              2999 _In_ size_t end = SIZE_MAX,
              +
              3000 _In_ int flags = match_default)
              +
              3001 {
              +
              3002 _Assume_(text || start >= end);
              +
              3003 if (start < end && text[start]) {
              +
              3004 if (text[start] == '-' ||
              +
              3005 text[start] == '.' ||
              +
              3006 text[start] == '_' ||
              +
              3007 text[start] == '~' ||
              +
              3008 text[start] == '%' ||
              +
              3009 text[start] == '!' ||
              +
              3010 text[start] == '$' ||
              +
              3011 text[start] == '&' ||
              +
              3012 text[start] == '\'' ||
              +
              3013 //text[start] == '(' ||
              +
              3014 //text[start] == ')' ||
              +
              3015 text[start] == '*' ||
              +
              3016 text[start] == '+' ||
              +
              3017 text[start] == ',' ||
              +
              3018 text[start] == ';' ||
              +
              3019 text[start] == '=' ||
              +
              3020 std::use_facet<std::ctype<T>>(this->m_locale).is(std::ctype_base::alnum, text[start]))
              +
              3021 {
              +
              3022 this->interval.end = (this->interval.start = start) + 1;
              +
              3023 return true;
              +
              3024 }
              +
              3025 }
              +
              3026 this->interval.invalidate();
              +
              3027 return false;
              +
              3028 }
              +
              3029 };
              -
              3031
              - - -
              3034#ifdef _UNICODE
              - -
              3036#else
              - -
              3038#endif
              -
              3039
              -
              - -
              3044 {
              -
              3045 public:
              -
              3046 sgml_url_username_char(_In_ const std::locale& locale = std::locale()) : basic_url_username_char<char>(locale) {}
              -
              3047
              -
              3048 virtual bool match(
              -
              3049 _In_reads_or_z_(end) const char* text,
              -
              3050 _In_ size_t start = 0,
              -
              3051 _In_ size_t end = (size_t)-1,
              -
              3052 _In_ int flags = match_default)
              -
              3053 {
              -
              3054 _Assume_(text || start >= end);
              -
              3055 if (start < end && text[start]) {
              -
              3056 wchar_t buf[3];
              -
              3057 const wchar_t* chr = next_sgml_cp(text, start, end, this->interval.end, buf);
              -
              3058 const wchar_t* chr_end = chr + stdex::strlen(chr);
              -
              3059 if (((chr[0] == L'-' ||
              -
              3060 chr[0] == L'.' ||
              -
              3061 chr[0] == L'_' ||
              -
              3062 chr[0] == L'~' ||
              -
              3063 chr[0] == L'%' ||
              -
              3064 chr[0] == L'!' ||
              -
              3065 chr[0] == L'$' ||
              -
              3066 chr[0] == L'&' ||
              -
              3067 chr[0] == L'\'' ||
              -
              3068 //chr[0] == L'(' ||
              -
              3069 //chr[0] == L')' ||
              -
              3070 chr[0] == L'*' ||
              -
              3071 chr[0] == L'+' ||
              -
              3072 chr[0] == L',' ||
              -
              3073 chr[0] == L';' ||
              -
              3074 chr[0] == L'=') && chr[1] == 0) ||
              -
              3075 std::use_facet<std::ctype<wchar_t>>(m_locale).scan_not(std::ctype_base::alnum, chr, chr_end) == chr_end)
              -
              3076 {
              -
              3077 this->interval.start = start;
              -
              3078 return true;
              -
              3079 }
              -
              3080 }
              -
              3081
              -
              3082 this->interval.start = (this->interval.end = start) + 1;
              -
              3083 return false;
              -
              3084 }
              -
              3085 };
              +
              3030
              + + +
              3033#ifdef _UNICODE
              + +
              3035#else
              + +
              3037#endif
              +
              3038
              +
              + +
              3043 {
              +
              3044 public:
              +
              3045 sgml_url_username_char(_In_ const std::locale& locale = std::locale()) : basic_url_username_char<char>(locale) {}
              +
              3046
              +
              3047 virtual bool match(
              +
              3048 _In_reads_or_z_(end) const char* text,
              +
              3049 _In_ size_t start = 0,
              +
              3050 _In_ size_t end = SIZE_MAX,
              +
              3051 _In_ int flags = match_default)
              +
              3052 {
              +
              3053 _Assume_(text || start >= end);
              +
              3054 if (start < end && text[start]) {
              +
              3055 wchar_t buf[3];
              +
              3056 const wchar_t* chr = next_sgml_cp(text, start, end, this->interval.end, buf);
              +
              3057 const wchar_t* chr_end = chr + stdex::strlen(chr);
              +
              3058 if (((chr[0] == L'-' ||
              +
              3059 chr[0] == L'.' ||
              +
              3060 chr[0] == L'_' ||
              +
              3061 chr[0] == L'~' ||
              +
              3062 chr[0] == L'%' ||
              +
              3063 chr[0] == L'!' ||
              +
              3064 chr[0] == L'$' ||
              +
              3065 chr[0] == L'&' ||
              +
              3066 chr[0] == L'\'' ||
              +
              3067 //chr[0] == L'(' ||
              +
              3068 //chr[0] == L')' ||
              +
              3069 chr[0] == L'*' ||
              +
              3070 chr[0] == L'+' ||
              +
              3071 chr[0] == L',' ||
              +
              3072 chr[0] == L';' ||
              +
              3073 chr[0] == L'=') && chr[1] == 0) ||
              +
              3074 std::use_facet<std::ctype<wchar_t>>(m_locale).scan_not(std::ctype_base::alnum, chr, chr_end) == chr_end)
              +
              3075 {
              +
              3076 this->interval.start = start;
              +
              3077 return true;
              +
              3078 }
              +
              3079 }
              +
              3080
              +
              3081 this->interval.invalidate();
              +
              3082 return false;
              +
              3083 }
              +
              3084 };
              -
              3086
              -
              3090 template <class T>
              -
              - -
              3092 {
              -
              3093 public:
              -
              3094 basic_url_password_char(_In_ const std::locale& locale = std::locale()) : basic_parser<T>(locale) {}
              -
              3095
              -
              3096 virtual bool match(
              -
              3097 _In_reads_or_z_(end) const T* text,
              -
              3098 _In_ size_t start = 0,
              -
              3099 _In_ size_t end = (size_t)-1,
              -
              3100 _In_ int flags = match_default)
              -
              3101 {
              -
              3102 _Assume_(text || start >= end);
              -
              3103 if (start < end && text[start]) {
              -
              3104 if (text[start] == '-' ||
              -
              3105 text[start] == '.' ||
              -
              3106 text[start] == '_' ||
              -
              3107 text[start] == '~' ||
              -
              3108 text[start] == '%' ||
              -
              3109 text[start] == '!' ||
              -
              3110 text[start] == '$' ||
              -
              3111 text[start] == '&' ||
              -
              3112 text[start] == '\'' ||
              -
              3113 text[start] == '(' ||
              -
              3114 text[start] == ')' ||
              -
              3115 text[start] == '*' ||
              -
              3116 text[start] == '+' ||
              -
              3117 text[start] == ',' ||
              -
              3118 text[start] == ';' ||
              -
              3119 text[start] == '=' ||
              -
              3120 text[start] == ':' ||
              -
              3121 std::use_facet<std::ctype<T>>(this->m_locale).is(std::ctype_base::alnum, text[start]))
              -
              3122 {
              -
              3123 this->interval.end = (this->interval.start = start) + 1;
              -
              3124 return true;
              -
              3125 }
              -
              3126 }
              -
              3127 this->interval.start = (this->interval.end = start) + 1;
              -
              3128 return false;
              -
              3129 }
              -
              3130 };
              +
              3085
              +
              3089 template <class T>
              +
              + +
              3091 {
              +
              3092 public:
              +
              3093 basic_url_password_char(_In_ const std::locale& locale = std::locale()) : basic_parser<T>(locale) {}
              +
              3094
              +
              3095 virtual bool match(
              +
              3096 _In_reads_or_z_(end) const T* text,
              +
              3097 _In_ size_t start = 0,
              +
              3098 _In_ size_t end = SIZE_MAX,
              +
              3099 _In_ int flags = match_default)
              +
              3100 {
              +
              3101 _Assume_(text || start >= end);
              +
              3102 if (start < end && text[start]) {
              +
              3103 if (text[start] == '-' ||
              +
              3104 text[start] == '.' ||
              +
              3105 text[start] == '_' ||
              +
              3106 text[start] == '~' ||
              +
              3107 text[start] == '%' ||
              +
              3108 text[start] == '!' ||
              +
              3109 text[start] == '$' ||
              +
              3110 text[start] == '&' ||
              +
              3111 text[start] == '\'' ||
              +
              3112 text[start] == '(' ||
              +
              3113 text[start] == ')' ||
              +
              3114 text[start] == '*' ||
              +
              3115 text[start] == '+' ||
              +
              3116 text[start] == ',' ||
              +
              3117 text[start] == ';' ||
              +
              3118 text[start] == '=' ||
              +
              3119 text[start] == ':' ||
              +
              3120 std::use_facet<std::ctype<T>>(this->m_locale).is(std::ctype_base::alnum, text[start]))
              +
              3121 {
              +
              3122 this->interval.end = (this->interval.start = start) + 1;
              +
              3123 return true;
              +
              3124 }
              +
              3125 }
              +
              3126 this->interval.invalidate();
              +
              3127 return false;
              +
              3128 }
              +
              3129 };
              -
              3131
              - - -
              3134#ifdef _UNICODE
              - -
              3136#else
              - -
              3138#endif
              -
              3139
              -
              - -
              3144 {
              -
              3145 public:
              -
              3146 sgml_url_password_char(_In_ const std::locale& locale = std::locale()) : basic_url_password_char<char>(locale) {}
              -
              3147
              -
              3148 virtual bool match(
              -
              3149 _In_reads_or_z_(end) const char* text,
              -
              3150 _In_ size_t start = 0,
              -
              3151 _In_ size_t end = (size_t)-1,
              -
              3152 _In_ int flags = match_default)
              -
              3153 {
              -
              3154 _Assume_(text || start >= end);
              -
              3155 if (start < end && text[start]) {
              -
              3156 wchar_t buf[3];
              -
              3157 const wchar_t* chr = next_sgml_cp(text, start, end, this->interval.end, buf);
              -
              3158 const wchar_t* chr_end = chr + stdex::strlen(chr);
              -
              3159 if (((chr[0] == L'-' ||
              -
              3160 chr[0] == L'.' ||
              -
              3161 chr[0] == L'_' ||
              -
              3162 chr[0] == L'~' ||
              -
              3163 chr[0] == L'%' ||
              -
              3164 chr[0] == L'!' ||
              -
              3165 chr[0] == L'$' ||
              -
              3166 chr[0] == L'&' ||
              -
              3167 chr[0] == L'\'' ||
              -
              3168 chr[0] == L'(' ||
              -
              3169 chr[0] == L')' ||
              -
              3170 chr[0] == L'*' ||
              -
              3171 chr[0] == L'+' ||
              -
              3172 chr[0] == L',' ||
              -
              3173 chr[0] == L';' ||
              -
              3174 chr[0] == L'=' ||
              -
              3175 chr[0] == L':') && chr[1] == 0) ||
              -
              3176 std::use_facet<std::ctype<wchar_t>>(m_locale).scan_not(std::ctype_base::alnum, chr, chr_end) == chr_end)
              -
              3177 {
              -
              3178 this->interval.start = start;
              -
              3179 return true;
              -
              3180 }
              -
              3181 }
              -
              3182 this->interval.start = (this->interval.end = start) + 1;
              -
              3183 return false;
              -
              3184 }
              -
              3185 };
              +
              3130
              + + +
              3133#ifdef _UNICODE
              + +
              3135#else
              + +
              3137#endif
              +
              3138
              +
              + +
              3143 {
              +
              3144 public:
              +
              3145 sgml_url_password_char(_In_ const std::locale& locale = std::locale()) : basic_url_password_char<char>(locale) {}
              +
              3146
              +
              3147 virtual bool match(
              +
              3148 _In_reads_or_z_(end) const char* text,
              +
              3149 _In_ size_t start = 0,
              +
              3150 _In_ size_t end = SIZE_MAX,
              +
              3151 _In_ int flags = match_default)
              +
              3152 {
              +
              3153 _Assume_(text || start >= end);
              +
              3154 if (start < end && text[start]) {
              +
              3155 wchar_t buf[3];
              +
              3156 const wchar_t* chr = next_sgml_cp(text, start, end, this->interval.end, buf);
              +
              3157 const wchar_t* chr_end = chr + stdex::strlen(chr);
              +
              3158 if (((chr[0] == L'-' ||
              +
              3159 chr[0] == L'.' ||
              +
              3160 chr[0] == L'_' ||
              +
              3161 chr[0] == L'~' ||
              +
              3162 chr[0] == L'%' ||
              +
              3163 chr[0] == L'!' ||
              +
              3164 chr[0] == L'$' ||
              +
              3165 chr[0] == L'&' ||
              +
              3166 chr[0] == L'\'' ||
              +
              3167 chr[0] == L'(' ||
              +
              3168 chr[0] == L')' ||
              +
              3169 chr[0] == L'*' ||
              +
              3170 chr[0] == L'+' ||
              +
              3171 chr[0] == L',' ||
              +
              3172 chr[0] == L';' ||
              +
              3173 chr[0] == L'=' ||
              +
              3174 chr[0] == L':') && chr[1] == 0) ||
              +
              3175 std::use_facet<std::ctype<wchar_t>>(m_locale).scan_not(std::ctype_base::alnum, chr, chr_end) == chr_end)
              +
              3176 {
              +
              3177 this->interval.start = start;
              +
              3178 return true;
              +
              3179 }
              +
              3180 }
              +
              3181 this->interval.invalidate();
              +
              3182 return false;
              +
              3183 }
              +
              3184 };
              -
              3186
              -
              3190 template <class T>
              -
              - -
              3192 {
              -
              3193 public:
              -
              3194 basic_url_path_char(_In_ const std::locale& locale = std::locale()) : basic_parser<T>(locale) {}
              -
              3195
              -
              3196 virtual bool match(
              -
              3197 _In_reads_or_z_(end) const T* text,
              -
              3198 _In_ size_t start = 0,
              -
              3199 _In_ size_t end = (size_t)-1,
              -
              3200 _In_ int flags = match_default)
              -
              3201 {
              -
              3202 _Assume_(text || start >= end);
              -
              3203 if (start < end && text[start]) {
              -
              3204 if (text[start] == '/' ||
              -
              3205 text[start] == '-' ||
              -
              3206 text[start] == '.' ||
              -
              3207 text[start] == '_' ||
              -
              3208 text[start] == '~' ||
              -
              3209 text[start] == '%' ||
              -
              3210 text[start] == '!' ||
              -
              3211 text[start] == '$' ||
              -
              3212 text[start] == '&' ||
              -
              3213 text[start] == '\'' ||
              -
              3214 text[start] == '(' ||
              -
              3215 text[start] == ')' ||
              -
              3216 text[start] == '*' ||
              -
              3217 text[start] == '+' ||
              -
              3218 text[start] == ',' ||
              -
              3219 text[start] == ';' ||
              -
              3220 text[start] == '=' ||
              -
              3221 text[start] == ':' ||
              -
              3222 text[start] == '@' ||
              -
              3223 text[start] == '?' ||
              -
              3224 text[start] == '#' ||
              -
              3225 std::use_facet<std::ctype<T>>(this->m_locale).is(std::ctype_base::alnum, text[start]))
              -
              3226 {
              -
              3227 this->interval.end = (this->interval.start = start) + 1;
              -
              3228 return true;
              -
              3229 }
              -
              3230 }
              -
              3231 this->interval.start = (this->interval.end = start) + 1;
              -
              3232 return false;
              -
              3233 }
              -
              3234 };
              +
              3185
              +
              3189 template <class T>
              +
              + +
              3191 {
              +
              3192 public:
              +
              3193 basic_url_path_char(_In_ const std::locale& locale = std::locale()) : basic_parser<T>(locale) {}
              +
              3194
              +
              3195 virtual bool match(
              +
              3196 _In_reads_or_z_(end) const T* text,
              +
              3197 _In_ size_t start = 0,
              +
              3198 _In_ size_t end = SIZE_MAX,
              +
              3199 _In_ int flags = match_default)
              +
              3200 {
              +
              3201 _Assume_(text || start >= end);
              +
              3202 if (start < end && text[start]) {
              +
              3203 if (text[start] == '/' ||
              +
              3204 text[start] == '-' ||
              +
              3205 text[start] == '.' ||
              +
              3206 text[start] == '_' ||
              +
              3207 text[start] == '~' ||
              +
              3208 text[start] == '%' ||
              +
              3209 text[start] == '!' ||
              +
              3210 text[start] == '$' ||
              +
              3211 text[start] == '&' ||
              +
              3212 text[start] == '\'' ||
              +
              3213 text[start] == '(' ||
              +
              3214 text[start] == ')' ||
              +
              3215 text[start] == '*' ||
              +
              3216 text[start] == '+' ||
              +
              3217 text[start] == ',' ||
              +
              3218 text[start] == ';' ||
              +
              3219 text[start] == '=' ||
              +
              3220 text[start] == ':' ||
              +
              3221 text[start] == '@' ||
              +
              3222 text[start] == '?' ||
              +
              3223 text[start] == '#' ||
              +
              3224 std::use_facet<std::ctype<T>>(this->m_locale).is(std::ctype_base::alnum, text[start]))
              +
              3225 {
              +
              3226 this->interval.end = (this->interval.start = start) + 1;
              +
              3227 return true;
              +
              3228 }
              +
              3229 }
              +
              3230 this->interval.invalidate();
              +
              3231 return false;
              +
              3232 }
              +
              3233 };
              -
              3235
              - - -
              3238#ifdef _UNICODE
              - -
              3240#else
              - -
              3242#endif
              -
              3243
              -
              - -
              3248 {
              -
              3249 public:
              -
              3250 sgml_url_path_char(_In_ const std::locale& locale = std::locale()) : basic_url_path_char<char>(locale) {}
              -
              3251
              -
              3252 virtual bool match(
              -
              3253 _In_reads_or_z_(end) const char* text,
              -
              3254 _In_ size_t start = 0,
              -
              3255 _In_ size_t end = (size_t)-1,
              -
              3256 _In_ int flags = match_default)
              -
              3257 {
              -
              3258 _Assume_(text || start >= end);
              -
              3259 if (start < end && text[start]) {
              -
              3260 wchar_t buf[3];
              -
              3261 const wchar_t* chr = next_sgml_cp(text, start, end, this->interval.end, buf);
              -
              3262 const wchar_t* chr_end = chr + stdex::strlen(chr);
              -
              3263 if (((chr[0] == L'/' ||
              -
              3264 chr[0] == L'-' ||
              -
              3265 chr[0] == L'.' ||
              -
              3266 chr[0] == L'_' ||
              -
              3267 chr[0] == L'~' ||
              -
              3268 chr[0] == L'%' ||
              -
              3269 chr[0] == L'!' ||
              -
              3270 chr[0] == L'$' ||
              -
              3271 chr[0] == L'&' ||
              -
              3272 chr[0] == L'\'' ||
              -
              3273 chr[0] == L'(' ||
              -
              3274 chr[0] == L')' ||
              -
              3275 chr[0] == L'*' ||
              -
              3276 chr[0] == L'+' ||
              -
              3277 chr[0] == L',' ||
              -
              3278 chr[0] == L';' ||
              -
              3279 chr[0] == L'=' ||
              -
              3280 chr[0] == L':' ||
              -
              3281 chr[0] == L'@' ||
              -
              3282 chr[0] == L'?' ||
              -
              3283 chr[0] == L'#') && chr[1] == 0) ||
              -
              3284 std::use_facet<std::ctype<wchar_t>>(m_locale).scan_not(std::ctype_base::alnum, chr, chr_end) == chr_end)
              -
              3285 {
              -
              3286 this->interval.start = start;
              -
              3287 return true;
              -
              3288 }
              -
              3289 }
              -
              3290 this->interval.start = (this->interval.end = start) + 1;
              -
              3291 return false;
              -
              3292 }
              -
              3293 };
              +
              3234
              + + +
              3237#ifdef _UNICODE
              + +
              3239#else
              + +
              3241#endif
              +
              3242
              +
              + +
              3247 {
              +
              3248 public:
              +
              3249 sgml_url_path_char(_In_ const std::locale& locale = std::locale()) : basic_url_path_char<char>(locale) {}
              +
              3250
              +
              3251 virtual bool match(
              +
              3252 _In_reads_or_z_(end) const char* text,
              +
              3253 _In_ size_t start = 0,
              +
              3254 _In_ size_t end = SIZE_MAX,
              +
              3255 _In_ int flags = match_default)
              +
              3256 {
              +
              3257 _Assume_(text || start >= end);
              +
              3258 if (start < end && text[start]) {
              +
              3259 wchar_t buf[3];
              +
              3260 const wchar_t* chr = next_sgml_cp(text, start, end, this->interval.end, buf);
              +
              3261 const wchar_t* chr_end = chr + stdex::strlen(chr);
              +
              3262 if (((chr[0] == L'/' ||
              +
              3263 chr[0] == L'-' ||
              +
              3264 chr[0] == L'.' ||
              +
              3265 chr[0] == L'_' ||
              +
              3266 chr[0] == L'~' ||
              +
              3267 chr[0] == L'%' ||
              +
              3268 chr[0] == L'!' ||
              +
              3269 chr[0] == L'$' ||
              +
              3270 chr[0] == L'&' ||
              +
              3271 chr[0] == L'\'' ||
              +
              3272 chr[0] == L'(' ||
              +
              3273 chr[0] == L')' ||
              +
              3274 chr[0] == L'*' ||
              +
              3275 chr[0] == L'+' ||
              +
              3276 chr[0] == L',' ||
              +
              3277 chr[0] == L';' ||
              +
              3278 chr[0] == L'=' ||
              +
              3279 chr[0] == L':' ||
              +
              3280 chr[0] == L'@' ||
              +
              3281 chr[0] == L'?' ||
              +
              3282 chr[0] == L'#') && chr[1] == 0) ||
              +
              3283 std::use_facet<std::ctype<wchar_t>>(m_locale).scan_not(std::ctype_base::alnum, chr, chr_end) == chr_end)
              +
              3284 {
              +
              3285 this->interval.start = start;
              +
              3286 return true;
              +
              3287 }
              +
              3288 }
              +
              3289 this->interval.invalidate();
              +
              3290 return false;
              +
              3291 }
              +
              3292 };
              -
              3294
              -
              3298 template <class T>
              -
              - -
              3300 {
              -
              3301 public:
              - -
              3303 _In_ const std::shared_ptr<basic_parser<T>>& path_char,
              -
              3304 _In_ const std::shared_ptr<basic_parser<T>>& query_start,
              -
              3305 _In_ const std::shared_ptr<basic_parser<T>>& bookmark_start,
              -
              3306 _In_ const std::locale& locale = std::locale()) :
              -
              3307 basic_parser<T>(locale),
              -
              3308 m_path_char(path_char),
              -
              3309 m_query_start(query_start),
              -
              3310 m_bookmark_start(bookmark_start)
              -
              3311 {}
              -
              3312
              -
              3313 virtual bool match(
              -
              3314 _In_reads_or_z_(end) const T* text,
              -
              3315 _In_ size_t start = 0,
              -
              3316 _In_ size_t end = (size_t)-1,
              -
              3317 _In_ int flags = match_default)
              -
              3318 {
              -
              3319 _Assume_(text || start >= end);
              -
              3320
              -
              3321 this->interval.end = start;
              -
              3322 path.start = start;
              -
              3323 query.start = 1;
              -
              3324 query.end = 0;
              -
              3325 bookmark.start = 1;
              -
              3326 bookmark.end = 0;
              -
              3327
              -
              3328 for (;;) {
              -
              3329 if (this->interval.end >= end || !text[this->interval.end])
              -
              3330 break;
              -
              3331 if (m_query_start->match(text, this->interval.end, end, flags)) {
              -
              3332 path.end = this->interval.end;
              -
              3333 query.start = this->interval.end = m_query_start->interval.end;
              -
              3334 for (;;) {
              -
              3335 if (this->interval.end >= end || !text[this->interval.end]) {
              -
              3336 query.end = this->interval.end;
              -
              3337 break;
              -
              3338 }
              -
              3339 if (m_bookmark_start->match(text, this->interval.end, end, flags)) {
              -
              3340 query.end = this->interval.end;
              -
              3341 bookmark.start = this->interval.end = m_bookmark_start->interval.end;
              -
              3342 for (;;) {
              -
              3343 if (this->interval.end >= end || !text[this->interval.end]) {
              -
              3344 bookmark.end = this->interval.end;
              -
              3345 break;
              -
              3346 }
              -
              3347 if (m_path_char->match(text, this->interval.end, end, flags))
              -
              3348 this->interval.end = m_path_char->interval.end;
              -
              3349 else {
              -
              3350 bookmark.end = this->interval.end;
              -
              3351 break;
              -
              3352 }
              -
              3353 }
              -
              3354 this->interval.start = start;
              -
              3355 return true;
              -
              3356 }
              -
              3357 if (m_path_char->match(text, this->interval.end, end, flags))
              -
              3358 this->interval.end = m_path_char->interval.end;
              -
              3359 else {
              -
              3360 query.end = this->interval.end;
              -
              3361 break;
              -
              3362 }
              -
              3363 }
              -
              3364 this->interval.start = start;
              -
              3365 return true;
              -
              3366 }
              -
              3367 if (m_bookmark_start->match(text, this->interval.end, end, flags)) {
              -
              3368 path.end = this->interval.end;
              -
              3369 bookmark.start = this->interval.end = m_bookmark_start->interval.end;
              -
              3370 for (;;) {
              -
              3371 if (this->interval.end >= end || !text[this->interval.end]) {
              -
              3372 bookmark.end = this->interval.end;
              -
              3373 break;
              -
              3374 }
              -
              3375 if (m_path_char->match(text, this->interval.end, end, flags))
              -
              3376 this->interval.end = m_path_char->interval.end;
              -
              3377 else {
              -
              3378 bookmark.end = this->interval.end;
              -
              3379 break;
              -
              3380 }
              -
              3381 }
              -
              3382 this->interval.start = start;
              -
              3383 return true;
              -
              3384 }
              -
              3385 if (m_path_char->match(text, this->interval.end, end, flags))
              -
              3386 this->interval.end = m_path_char->interval.end;
              -
              3387 else
              -
              3388 break;
              -
              3389 }
              -
              3390
              - -
              3392 path.end = this->interval.end;
              -
              3393 this->interval.start = start;
              -
              3394 return true;
              -
              3395 }
              -
              3396
              -
              3397 path.start = 1;
              -
              3398 path.end = 0;
              -
              3399 bookmark.start = 1;
              -
              3400 bookmark.end = 0;
              -
              3401 this->interval.start = (this->interval.end = start) + 1;
              -
              3402 return false;
              -
              3403 }
              -
              3404
              -
              3405 virtual void invalidate()
              -
              3406 {
              -
              3407 path.start = 1;
              -
              3408 path.end = 0;
              -
              3409 query.start = 1;
              -
              3410 query.end = 0;
              -
              3411 bookmark.start = 1;
              -
              3412 bookmark.end = 0;
              - -
              3414 }
              -
              3415
              -
              3416 public:
              - - -
              3419 stdex::interval<size_t> bookmark;
              -
              3420
              -
              3421 protected:
              -
              3422 std::shared_ptr<basic_parser<T>> m_path_char;
              -
              3423 std::shared_ptr<basic_parser<T>> m_query_start;
              -
              3424 std::shared_ptr<basic_parser<T>> m_bookmark_start;
              -
              3425 };
              +
              3293
              +
              3297 template <class T>
              +
              + +
              3299 {
              +
              3300 public:
              + +
              3302 _In_ const std::shared_ptr<basic_parser<T>>& path_char,
              +
              3303 _In_ const std::shared_ptr<basic_parser<T>>& query_start,
              +
              3304 _In_ const std::shared_ptr<basic_parser<T>>& bookmark_start,
              +
              3305 _In_ const std::locale& locale = std::locale()) :
              +
              3306 basic_parser<T>(locale),
              +
              3307 m_path_char(path_char),
              +
              3308 m_query_start(query_start),
              +
              3309 m_bookmark_start(bookmark_start)
              +
              3310 {}
              +
              3311
              +
              3312 virtual bool match(
              +
              3313 _In_reads_or_z_(end) const T* text,
              +
              3314 _In_ size_t start = 0,
              +
              3315 _In_ size_t end = SIZE_MAX,
              +
              3316 _In_ int flags = match_default)
              +
              3317 {
              +
              3318 _Assume_(text || start >= end);
              +
              3319
              +
              3320 this->interval.end = start;
              +
              3321 path.start = start;
              +
              3322 query.start = 1;
              +
              3323 query.end = 0;
              +
              3324 bookmark.start = 1;
              +
              3325 bookmark.end = 0;
              +
              3326
              +
              3327 for (;;) {
              +
              3328 if (this->interval.end >= end || !text[this->interval.end])
              +
              3329 break;
              +
              3330 if (m_query_start->match(text, this->interval.end, end, flags)) {
              +
              3331 path.end = this->interval.end;
              +
              3332 query.start = this->interval.end = m_query_start->interval.end;
              +
              3333 for (;;) {
              +
              3334 if (this->interval.end >= end || !text[this->interval.end]) {
              +
              3335 query.end = this->interval.end;
              +
              3336 break;
              +
              3337 }
              +
              3338 if (m_bookmark_start->match(text, this->interval.end, end, flags)) {
              +
              3339 query.end = this->interval.end;
              +
              3340 bookmark.start = this->interval.end = m_bookmark_start->interval.end;
              +
              3341 for (;;) {
              +
              3342 if (this->interval.end >= end || !text[this->interval.end]) {
              +
              3343 bookmark.end = this->interval.end;
              +
              3344 break;
              +
              3345 }
              +
              3346 if (m_path_char->match(text, this->interval.end, end, flags))
              +
              3347 this->interval.end = m_path_char->interval.end;
              +
              3348 else {
              +
              3349 bookmark.end = this->interval.end;
              +
              3350 break;
              +
              3351 }
              +
              3352 }
              +
              3353 this->interval.start = start;
              +
              3354 return true;
              +
              3355 }
              +
              3356 if (m_path_char->match(text, this->interval.end, end, flags))
              +
              3357 this->interval.end = m_path_char->interval.end;
              +
              3358 else {
              +
              3359 query.end = this->interval.end;
              +
              3360 break;
              +
              3361 }
              +
              3362 }
              +
              3363 this->interval.start = start;
              +
              3364 return true;
              +
              3365 }
              +
              3366 if (m_bookmark_start->match(text, this->interval.end, end, flags)) {
              +
              3367 path.end = this->interval.end;
              +
              3368 bookmark.start = this->interval.end = m_bookmark_start->interval.end;
              +
              3369 for (;;) {
              +
              3370 if (this->interval.end >= end || !text[this->interval.end]) {
              +
              3371 bookmark.end = this->interval.end;
              +
              3372 break;
              +
              3373 }
              +
              3374 if (m_path_char->match(text, this->interval.end, end, flags))
              +
              3375 this->interval.end = m_path_char->interval.end;
              +
              3376 else {
              +
              3377 bookmark.end = this->interval.end;
              +
              3378 break;
              +
              3379 }
              +
              3380 }
              +
              3381 this->interval.start = start;
              +
              3382 return true;
              +
              3383 }
              +
              3384 if (m_path_char->match(text, this->interval.end, end, flags))
              +
              3385 this->interval.end = m_path_char->interval.end;
              +
              3386 else
              +
              3387 break;
              +
              3388 }
              +
              3389
              + +
              3391 path.end = this->interval.end;
              +
              3392 this->interval.start = start;
              +
              3393 return true;
              +
              3394 }
              +
              3395
              +
              3396 path.start = 1;
              +
              3397 path.end = 0;
              +
              3398 bookmark.start = 1;
              +
              3399 bookmark.end = 0;
              +
              3400 this->interval.invalidate();
              +
              3401 return false;
              +
              3402 }
              +
              3403
              +
              3404 virtual void invalidate()
              +
              3405 {
              +
              3406 path.start = 1;
              +
              3407 path.end = 0;
              +
              3408 query.start = 1;
              +
              3409 query.end = 0;
              +
              3410 bookmark.start = 1;
              +
              3411 bookmark.end = 0;
              + +
              3413 }
              +
              3414
              +
              3415 public:
              + + +
              3418 stdex::interval<size_t> bookmark;
              +
              3419
              +
              3420 protected:
              +
              3421 std::shared_ptr<basic_parser<T>> m_path_char;
              +
              3422 std::shared_ptr<basic_parser<T>> m_query_start;
              +
              3423 std::shared_ptr<basic_parser<T>> m_bookmark_start;
              +
              3424 };
              -
              3426
              - - -
              3429#ifdef _UNICODE
              -
              3430 using turl_path = wurl_path;
              -
              3431#else
              -
              3432 using turl_path = url_path;
              -
              3433#endif
              - -
              3435
              -
              3439 template <class T>
              -
              -
              3440 class basic_url : public basic_parser<T>
              -
              3441 {
              -
              3442 public:
              -
              3443 basic_url(
              -
              3444 _In_ const std::shared_ptr<basic_parser<T>>& _http_scheme,
              -
              3445 _In_ const std::shared_ptr<basic_parser<T>>& _ftp_scheme,
              -
              3446 _In_ const std::shared_ptr<basic_parser<T>>& _mailto_scheme,
              -
              3447 _In_ const std::shared_ptr<basic_parser<T>>& _file_scheme,
              -
              3448 _In_ const std::shared_ptr<basic_parser<T>>& colon,
              -
              3449 _In_ const std::shared_ptr<basic_parser<T>>& slash,
              -
              3450 _In_ const std::shared_ptr<basic_parser<T>>& _username,
              -
              3451 _In_ const std::shared_ptr<basic_parser<T>>& _password,
              -
              3452 _In_ const std::shared_ptr<basic_parser<T>>& at,
              -
              3453 _In_ const std::shared_ptr<basic_parser<T>>& ip_lbracket,
              -
              3454 _In_ const std::shared_ptr<basic_parser<T>>& ip_rbracket,
              -
              3455 _In_ const std::shared_ptr<basic_parser<T>>& _ipv4_host,
              -
              3456 _In_ const std::shared_ptr<basic_parser<T>>& _ipv6_host,
              -
              3457 _In_ const std::shared_ptr<basic_parser<T>>& _dns_host,
              -
              3458 _In_ const std::shared_ptr<basic_parser<T>>& _port,
              -
              3459 _In_ const std::shared_ptr<basic_parser<T>>& _path,
              -
              3460 _In_ const std::locale& locale = std::locale()) :
              -
              3461 basic_parser<T>(locale),
              -
              3462 http_scheme(_http_scheme),
              -
              3463 ftp_scheme(_ftp_scheme),
              -
              3464 mailto_scheme(_mailto_scheme),
              -
              3465 file_scheme(_file_scheme),
              -
              3466 m_colon(colon),
              -
              3467 m_slash(slash),
              -
              3468 username(_username),
              -
              3469 password(_password),
              -
              3470 m_at(at),
              -
              3471 m_ip_lbracket(ip_lbracket),
              -
              3472 m_ip_rbracket(ip_rbracket),
              -
              3473 ipv4_host(_ipv4_host),
              -
              3474 ipv6_host(_ipv6_host),
              -
              3475 dns_host(_dns_host),
              -
              3476 port(_port),
              -
              3477 path(_path)
              -
              3478 {}
              -
              3479
              -
              3480 virtual bool match(
              -
              3481 _In_reads_or_z_(end) const T* text,
              -
              3482 _In_ size_t start = 0,
              -
              3483 _In_ size_t end = (size_t)-1,
              -
              3484 _In_ int flags = match_default)
              -
              3485 {
              -
              3486 _Assume_(text || start >= end);
              -
              3487
              -
              3488 this->interval.end = start;
              -
              3489
              -
              3490 if (http_scheme->match(text, this->interval.end, end, flags) &&
              -
              3491 m_colon->match(text, http_scheme->interval.end, end, flags) &&
              -
              3492 m_slash->match(text, m_colon->interval.end, end, flags) &&
              -
              3493 m_slash->match(text, m_slash->interval.end, end, flags))
              -
              3494 {
              -
              3495 // http://
              -
              3496 this->interval.end = m_slash->interval.end;
              -
              3497 ftp_scheme->invalidate();
              -
              3498 mailto_scheme->invalidate();
              -
              3499 file_scheme->invalidate();
              -
              3500 }
              -
              3501 else if (ftp_scheme->match(text, this->interval.end, end, flags) &&
              -
              3502 m_colon->match(text, ftp_scheme->interval.end, end, flags) &&
              -
              3503 m_slash->match(text, m_colon->interval.end, end, flags) &&
              -
              3504 m_slash->match(text, m_slash->interval.end, end, flags))
              -
              3505 {
              -
              3506 // ftp://
              -
              3507 this->interval.end = m_slash->interval.end;
              -
              3508 http_scheme->invalidate();
              -
              3509 mailto_scheme->invalidate();
              -
              3510 file_scheme->invalidate();
              -
              3511 }
              -
              3512 else if (mailto_scheme->match(text, this->interval.end, end, flags) &&
              -
              3513 m_colon->match(text, mailto_scheme->interval.end, end, flags))
              -
              3514 {
              -
              3515 // mailto:
              -
              3516 this->interval.end = m_colon->interval.end;
              -
              3517 http_scheme->invalidate();
              -
              3518 ftp_scheme->invalidate();
              -
              3519 file_scheme->invalidate();
              -
              3520 }
              -
              3521 else if (file_scheme->match(text, this->interval.end, end, flags) &&
              -
              3522 m_colon->match(text, file_scheme->interval.end, end, flags) &&
              -
              3523 m_slash->match(text, m_colon->interval.end, end, flags) &&
              -
              3524 m_slash->match(text, m_slash->interval.end, end, flags))
              -
              3525 {
              -
              3526 // file://
              -
              3527 this->interval.end = m_slash->interval.end;
              -
              3528 http_scheme->invalidate();
              -
              3529 ftp_scheme->invalidate();
              -
              3530 mailto_scheme->invalidate();
              -
              3531 }
              -
              3532 else {
              -
              3533 // Default to http:
              -
              3534 http_scheme->invalidate();
              -
              3535 ftp_scheme->invalidate();
              -
              3536 mailto_scheme->invalidate();
              -
              3537 file_scheme->invalidate();
              -
              3538 }
              -
              3539
              -
              3540 if (ftp_scheme->interval) {
              -
              3541 if (username->match(text, this->interval.end, end, flags)) {
              -
              3542 if (m_colon->match(text, username->interval.end, end, flags) &&
              -
              3543 password->match(text, m_colon->interval.end, end, flags) &&
              -
              3544 m_at->match(text, password->interval.end, end, flags))
              -
              3545 {
              -
              3546 // Username and password
              -
              3547 this->interval.end = m_at->interval.end;
              -
              3548 }
              -
              3549 else if (m_at->match(text, this->interval.end, end, flags)) {
              -
              3550 // Username only
              -
              3551 this->interval.end = m_at->interval.end;
              -
              3552 password->invalidate();
              -
              3553 }
              -
              3554 else {
              -
              3555 username->invalidate();
              -
              3556 password->invalidate();
              -
              3557 }
              -
              3558 }
              -
              3559 else {
              -
              3560 username->invalidate();
              -
              3561 password->invalidate();
              -
              3562 }
              -
              3563
              -
              3564 if (ipv4_host->match(text, this->interval.end, end, flags)) {
              -
              3565 // Host is IPv4
              -
              3566 this->interval.end = ipv4_host->interval.end;
              -
              3567 ipv6_host->invalidate();
              -
              3568 dns_host->invalidate();
              -
              3569 }
              -
              3570 else if (
              -
              3571 m_ip_lbracket->match(text, this->interval.end, end, flags) &&
              -
              3572 ipv6_host->match(text, m_ip_lbracket->interval.end, end, flags) &&
              -
              3573 m_ip_rbracket->match(text, ipv6_host->interval.end, end, flags))
              -
              3574 {
              -
              3575 // Host is IPv6
              -
              3576 this->interval.end = m_ip_rbracket->interval.end;
              -
              3577 ipv4_host->invalidate();
              -
              3578 dns_host->invalidate();
              -
              3579 }
              -
              3580 else if (dns_host->match(text, this->interval.end, end, flags)) {
              -
              3581 // Host is hostname
              -
              3582 this->interval.end = dns_host->interval.end;
              -
              3583 ipv4_host->invalidate();
              -
              3584 ipv6_host->invalidate();
              -
              3585 }
              -
              3586 else {
              -
              3587 invalidate();
              -
              3588 return false;
              -
              3589 }
              -
              3590
              -
              3591 if (m_colon->match(text, this->interval.end, end, flags) &&
              -
              3592 port->match(text, m_colon->interval.end, end, flags))
              -
              3593 {
              -
              3594 // Port
              -
              3595 this->interval.end = port->interval.end;
              -
              3596 }
              -
              3597 else
              -
              3598 port->invalidate();
              -
              3599
              -
              3600 if (path->match(text, this->interval.end, end, flags)) {
              -
              3601 // Path
              -
              3602 this->interval.end = path->interval.end;
              -
              3603 }
              -
              3604
              -
              3605 this->interval.start = start;
              -
              3606 return true;
              -
              3607 }
              -
              3608
              -
              3609 if (mailto_scheme->interval) {
              -
              3610 if (username->match(text, this->interval.end, end, flags) &&
              -
              3611 m_at->match(text, username->interval.end, end, flags))
              -
              3612 {
              -
              3613 // Username
              -
              3614 this->interval.end = m_at->interval.end;
              -
              3615 }
              -
              3616 else {
              -
              3617 invalidate();
              -
              3618 return false;
              -
              3619 }
              -
              3620
              -
              3621 if (m_ip_lbracket->match(text, this->interval.end, end, flags) &&
              -
              3622 ipv4_host->match(text, m_ip_lbracket->interval.end, end, flags) &&
              -
              3623 m_ip_rbracket->match(text, ipv4_host->interval.end, end, flags))
              -
              3624 {
              -
              3625 // Host is IPv4
              -
              3626 this->interval.end = m_ip_rbracket->interval.end;
              -
              3627 ipv6_host->invalidate();
              -
              3628 dns_host->invalidate();
              -
              3629 }
              -
              3630 else if (
              -
              3631 m_ip_lbracket->match(text, this->interval.end, end, flags) &&
              -
              3632 ipv6_host->match(text, m_ip_lbracket->interval.end, end, flags) &&
              -
              3633 m_ip_rbracket->match(text, ipv6_host->interval.end, end, flags))
              -
              3634 {
              -
              3635 // Host is IPv6
              -
              3636 this->interval.end = m_ip_rbracket->interval.end;
              -
              3637 ipv4_host->invalidate();
              -
              3638 dns_host->invalidate();
              -
              3639 }
              -
              3640 else if (dns_host->match(text, this->interval.end, end, flags)) {
              -
              3641 // Host is hostname
              -
              3642 this->interval.end = dns_host->interval.end;
              -
              3643 ipv4_host->invalidate();
              -
              3644 ipv6_host->invalidate();
              -
              3645 }
              -
              3646 else {
              -
              3647 invalidate();
              -
              3648 return false;
              -
              3649 }
              -
              3650
              -
              3651 password->invalidate();
              -
              3652 port->invalidate();
              -
              3653 path->invalidate();
              -
              3654 this->interval.start = start;
              -
              3655 return true;
              -
              3656 }
              -
              3657
              -
              3658 if (file_scheme->interval) {
              -
              3659 if (path->match(text, this->interval.end, end, flags)) {
              -
              3660 // Path
              -
              3661 this->interval.end = path->interval.end;
              -
              3662 }
              -
              3663
              -
              3664 username->invalidate();
              -
              3665 password->invalidate();
              -
              3666 ipv4_host->invalidate();
              -
              3667 ipv6_host->invalidate();
              -
              3668 dns_host->invalidate();
              -
              3669 port->invalidate();
              -
              3670 this->interval.start = start;
              -
              3671 return true;
              -
              3672 }
              -
              3673
              -
              3674 // "http://" found or defaulted to
              -
              3675
              -
              3676 // If "http://" explicit, test for username&password.
              -
              3677 if (http_scheme->interval &&
              -
              3678 username->match(text, this->interval.end, end, flags))
              -
              3679 {
              -
              3680 if (m_colon->match(text, username->interval.end, end, flags) &&
              -
              3681 password->match(text, m_colon->interval.end, end, flags) &&
              -
              3682 m_at->match(text, password->interval.end, end, flags))
              -
              3683 {
              -
              3684 // Username and password
              -
              3685 this->interval.end = m_at->interval.end;
              -
              3686 }
              -
              3687 else if (m_at->match(text, username->interval.end, end, flags)) {
              -
              3688 // Username only
              -
              3689 this->interval.end = m_at->interval.end;
              -
              3690 password->invalidate();
              -
              3691 }
              -
              3692 else {
              -
              3693 username->invalidate();
              -
              3694 password->invalidate();
              -
              3695 }
              -
              3696 }
              -
              3697 else {
              -
              3698 username->invalidate();
              -
              3699 password->invalidate();
              -
              3700 }
              -
              3701
              -
              3702 if (ipv4_host->match(text, this->interval.end, end, flags)) {
              -
              3703 // Host is IPv4
              -
              3704 this->interval.end = ipv4_host->interval.end;
              -
              3705 ipv6_host->invalidate();
              -
              3706 dns_host->invalidate();
              -
              3707 }
              -
              3708 else if (
              -
              3709 m_ip_lbracket->match(text, this->interval.end, end, flags) &&
              -
              3710 ipv6_host->match(text, m_ip_lbracket->interval.end, end, flags) &&
              -
              3711 m_ip_rbracket->match(text, ipv6_host->interval.end, end, flags))
              -
              3712 {
              -
              3713 // Host is IPv6
              -
              3714 this->interval.end = m_ip_rbracket->interval.end;
              -
              3715 ipv4_host->invalidate();
              -
              3716 dns_host->invalidate();
              -
              3717 }
              -
              3718 else if (dns_host->match(text, this->interval.end, end, flags)) {
              -
              3719 // Host is hostname
              -
              3720 this->interval.end = dns_host->interval.end;
              -
              3721 ipv4_host->invalidate();
              -
              3722 ipv6_host->invalidate();
              -
              3723 }
              -
              3724 else {
              -
              3725 invalidate();
              -
              3726 return false;
              -
              3727 }
              -
              3728
              -
              3729 if (m_colon->match(text, this->interval.end, end, flags) &&
              -
              3730 port->match(text, m_colon->interval.end, end, flags))
              -
              3731 {
              -
              3732 // Port
              -
              3733 this->interval.end = port->interval.end;
              -
              3734 }
              -
              3735 else
              -
              3736 port->invalidate();
              -
              3737
              -
              3738 if (path->match(text, this->interval.end, end, flags)) {
              -
              3739 // Path
              -
              3740 this->interval.end = path->interval.end;
              -
              3741 }
              -
              3742
              -
              3743 this->interval.start = start;
              -
              3744 return true;
              -
              3745 }
              -
              3746
              -
              3747 virtual void invalidate()
              -
              3748 {
              -
              3749 http_scheme->invalidate();
              -
              3750 ftp_scheme->invalidate();
              -
              3751 mailto_scheme->invalidate();
              -
              3752 file_scheme->invalidate();
              -
              3753 username->invalidate();
              -
              3754 password->invalidate();
              -
              3755 ipv4_host->invalidate();
              -
              3756 ipv6_host->invalidate();
              -
              3757 dns_host->invalidate();
              -
              3758 port->invalidate();
              -
              3759 path->invalidate();
              - -
              3761 }
              -
              3762
              -
              3763 public:
              -
              3764 std::shared_ptr<basic_parser<T>> http_scheme;
              -
              3765 std::shared_ptr<basic_parser<T>> ftp_scheme;
              -
              3766 std::shared_ptr<basic_parser<T>> mailto_scheme;
              -
              3767 std::shared_ptr<basic_parser<T>> file_scheme;
              -
              3768 std::shared_ptr<basic_parser<T>> username;
              -
              3769 std::shared_ptr<basic_parser<T>> password;
              -
              3770 std::shared_ptr<basic_parser<T>> ipv4_host;
              -
              3771 std::shared_ptr<basic_parser<T>> ipv6_host;
              -
              3772 std::shared_ptr<basic_parser<T>> dns_host;
              -
              3773 std::shared_ptr<basic_parser<T>> port;
              -
              3774 std::shared_ptr<basic_parser<T>> path;
              -
              3775
              -
              3776 protected:
              -
              3777 std::shared_ptr<basic_parser<T>> m_colon;
              -
              3778 std::shared_ptr<basic_parser<T>> m_slash;
              -
              3779 std::shared_ptr<basic_parser<T>> m_at;
              -
              3780 std::shared_ptr<basic_parser<T>> m_ip_lbracket;
              -
              3781 std::shared_ptr<basic_parser<T>> m_ip_rbracket;
              -
              3782 };
              +
              3425
              + + +
              3428#ifdef _UNICODE
              +
              3429 using turl_path = wurl_path;
              +
              3430#else
              +
              3431 using turl_path = url_path;
              +
              3432#endif
              + +
              3434
              +
              3438 template <class T>
              +
              +
              3439 class basic_url : public basic_parser<T>
              +
              3440 {
              +
              3441 public:
              +
              3442 basic_url(
              +
              3443 _In_ const std::shared_ptr<basic_parser<T>>& _http_scheme,
              +
              3444 _In_ const std::shared_ptr<basic_parser<T>>& _ftp_scheme,
              +
              3445 _In_ const std::shared_ptr<basic_parser<T>>& _mailto_scheme,
              +
              3446 _In_ const std::shared_ptr<basic_parser<T>>& _file_scheme,
              +
              3447 _In_ const std::shared_ptr<basic_parser<T>>& colon,
              +
              3448 _In_ const std::shared_ptr<basic_parser<T>>& slash,
              +
              3449 _In_ const std::shared_ptr<basic_parser<T>>& _username,
              +
              3450 _In_ const std::shared_ptr<basic_parser<T>>& _password,
              +
              3451 _In_ const std::shared_ptr<basic_parser<T>>& at,
              +
              3452 _In_ const std::shared_ptr<basic_parser<T>>& ip_lbracket,
              +
              3453 _In_ const std::shared_ptr<basic_parser<T>>& ip_rbracket,
              +
              3454 _In_ const std::shared_ptr<basic_parser<T>>& _ipv4_host,
              +
              3455 _In_ const std::shared_ptr<basic_parser<T>>& _ipv6_host,
              +
              3456 _In_ const std::shared_ptr<basic_parser<T>>& _dns_host,
              +
              3457 _In_ const std::shared_ptr<basic_parser<T>>& _port,
              +
              3458 _In_ const std::shared_ptr<basic_parser<T>>& _path,
              +
              3459 _In_ const std::locale& locale = std::locale()) :
              +
              3460 basic_parser<T>(locale),
              +
              3461 http_scheme(_http_scheme),
              +
              3462 ftp_scheme(_ftp_scheme),
              +
              3463 mailto_scheme(_mailto_scheme),
              +
              3464 file_scheme(_file_scheme),
              +
              3465 m_colon(colon),
              +
              3466 m_slash(slash),
              +
              3467 username(_username),
              +
              3468 password(_password),
              +
              3469 m_at(at),
              +
              3470 m_ip_lbracket(ip_lbracket),
              +
              3471 m_ip_rbracket(ip_rbracket),
              +
              3472 ipv4_host(_ipv4_host),
              +
              3473 ipv6_host(_ipv6_host),
              +
              3474 dns_host(_dns_host),
              +
              3475 port(_port),
              +
              3476 path(_path)
              +
              3477 {}
              +
              3478
              +
              3479 virtual bool match(
              +
              3480 _In_reads_or_z_(end) const T* text,
              +
              3481 _In_ size_t start = 0,
              +
              3482 _In_ size_t end = SIZE_MAX,
              +
              3483 _In_ int flags = match_default)
              +
              3484 {
              +
              3485 _Assume_(text || start >= end);
              +
              3486
              +
              3487 this->interval.end = start;
              +
              3488
              +
              3489 if (http_scheme->match(text, this->interval.end, end, flags) &&
              +
              3490 m_colon->match(text, http_scheme->interval.end, end, flags) &&
              +
              3491 m_slash->match(text, m_colon->interval.end, end, flags) &&
              +
              3492 m_slash->match(text, m_slash->interval.end, end, flags))
              +
              3493 {
              +
              3494 // http://
              +
              3495 this->interval.end = m_slash->interval.end;
              +
              3496 ftp_scheme->invalidate();
              +
              3497 mailto_scheme->invalidate();
              +
              3498 file_scheme->invalidate();
              +
              3499 }
              +
              3500 else if (ftp_scheme->match(text, this->interval.end, end, flags) &&
              +
              3501 m_colon->match(text, ftp_scheme->interval.end, end, flags) &&
              +
              3502 m_slash->match(text, m_colon->interval.end, end, flags) &&
              +
              3503 m_slash->match(text, m_slash->interval.end, end, flags))
              +
              3504 {
              +
              3505 // ftp://
              +
              3506 this->interval.end = m_slash->interval.end;
              +
              3507 http_scheme->invalidate();
              +
              3508 mailto_scheme->invalidate();
              +
              3509 file_scheme->invalidate();
              +
              3510 }
              +
              3511 else if (mailto_scheme->match(text, this->interval.end, end, flags) &&
              +
              3512 m_colon->match(text, mailto_scheme->interval.end, end, flags))
              +
              3513 {
              +
              3514 // mailto:
              +
              3515 this->interval.end = m_colon->interval.end;
              +
              3516 http_scheme->invalidate();
              +
              3517 ftp_scheme->invalidate();
              +
              3518 file_scheme->invalidate();
              +
              3519 }
              +
              3520 else if (file_scheme->match(text, this->interval.end, end, flags) &&
              +
              3521 m_colon->match(text, file_scheme->interval.end, end, flags) &&
              +
              3522 m_slash->match(text, m_colon->interval.end, end, flags) &&
              +
              3523 m_slash->match(text, m_slash->interval.end, end, flags))
              +
              3524 {
              +
              3525 // file://
              +
              3526 this->interval.end = m_slash->interval.end;
              +
              3527 http_scheme->invalidate();
              +
              3528 ftp_scheme->invalidate();
              +
              3529 mailto_scheme->invalidate();
              +
              3530 }
              +
              3531 else {
              +
              3532 // Default to http:
              +
              3533 http_scheme->invalidate();
              +
              3534 ftp_scheme->invalidate();
              +
              3535 mailto_scheme->invalidate();
              +
              3536 file_scheme->invalidate();
              +
              3537 }
              +
              3538
              +
              3539 if (ftp_scheme->interval) {
              +
              3540 if (username->match(text, this->interval.end, end, flags)) {
              +
              3541 if (m_colon->match(text, username->interval.end, end, flags) &&
              +
              3542 password->match(text, m_colon->interval.end, end, flags) &&
              +
              3543 m_at->match(text, password->interval.end, end, flags))
              +
              3544 {
              +
              3545 // Username and password
              +
              3546 this->interval.end = m_at->interval.end;
              +
              3547 }
              +
              3548 else if (m_at->match(text, this->interval.end, end, flags)) {
              +
              3549 // Username only
              +
              3550 this->interval.end = m_at->interval.end;
              +
              3551 password->invalidate();
              +
              3552 }
              +
              3553 else {
              +
              3554 username->invalidate();
              +
              3555 password->invalidate();
              +
              3556 }
              +
              3557 }
              +
              3558 else {
              +
              3559 username->invalidate();
              +
              3560 password->invalidate();
              +
              3561 }
              +
              3562
              +
              3563 if (ipv4_host->match(text, this->interval.end, end, flags)) {
              +
              3564 // Host is IPv4
              +
              3565 this->interval.end = ipv4_host->interval.end;
              +
              3566 ipv6_host->invalidate();
              +
              3567 dns_host->invalidate();
              +
              3568 }
              +
              3569 else if (
              +
              3570 m_ip_lbracket->match(text, this->interval.end, end, flags) &&
              +
              3571 ipv6_host->match(text, m_ip_lbracket->interval.end, end, flags) &&
              +
              3572 m_ip_rbracket->match(text, ipv6_host->interval.end, end, flags))
              +
              3573 {
              +
              3574 // Host is IPv6
              +
              3575 this->interval.end = m_ip_rbracket->interval.end;
              +
              3576 ipv4_host->invalidate();
              +
              3577 dns_host->invalidate();
              +
              3578 }
              +
              3579 else if (dns_host->match(text, this->interval.end, end, flags)) {
              +
              3580 // Host is hostname
              +
              3581 this->interval.end = dns_host->interval.end;
              +
              3582 ipv4_host->invalidate();
              +
              3583 ipv6_host->invalidate();
              +
              3584 }
              +
              3585 else {
              +
              3586 invalidate();
              +
              3587 return false;
              +
              3588 }
              +
              3589
              +
              3590 if (m_colon->match(text, this->interval.end, end, flags) &&
              +
              3591 port->match(text, m_colon->interval.end, end, flags))
              +
              3592 {
              +
              3593 // Port
              +
              3594 this->interval.end = port->interval.end;
              +
              3595 }
              +
              3596 else
              +
              3597 port->invalidate();
              +
              3598
              +
              3599 if (path->match(text, this->interval.end, end, flags)) {
              +
              3600 // Path
              +
              3601 this->interval.end = path->interval.end;
              +
              3602 }
              +
              3603
              +
              3604 this->interval.start = start;
              +
              3605 return true;
              +
              3606 }
              +
              3607
              +
              3608 if (mailto_scheme->interval) {
              +
              3609 if (username->match(text, this->interval.end, end, flags) &&
              +
              3610 m_at->match(text, username->interval.end, end, flags))
              +
              3611 {
              +
              3612 // Username
              +
              3613 this->interval.end = m_at->interval.end;
              +
              3614 }
              +
              3615 else {
              +
              3616 invalidate();
              +
              3617 return false;
              +
              3618 }
              +
              3619
              +
              3620 if (m_ip_lbracket->match(text, this->interval.end, end, flags) &&
              +
              3621 ipv4_host->match(text, m_ip_lbracket->interval.end, end, flags) &&
              +
              3622 m_ip_rbracket->match(text, ipv4_host->interval.end, end, flags))
              +
              3623 {
              +
              3624 // Host is IPv4
              +
              3625 this->interval.end = m_ip_rbracket->interval.end;
              +
              3626 ipv6_host->invalidate();
              +
              3627 dns_host->invalidate();
              +
              3628 }
              +
              3629 else if (
              +
              3630 m_ip_lbracket->match(text, this->interval.end, end, flags) &&
              +
              3631 ipv6_host->match(text, m_ip_lbracket->interval.end, end, flags) &&
              +
              3632 m_ip_rbracket->match(text, ipv6_host->interval.end, end, flags))
              +
              3633 {
              +
              3634 // Host is IPv6
              +
              3635 this->interval.end = m_ip_rbracket->interval.end;
              +
              3636 ipv4_host->invalidate();
              +
              3637 dns_host->invalidate();
              +
              3638 }
              +
              3639 else if (dns_host->match(text, this->interval.end, end, flags)) {
              +
              3640 // Host is hostname
              +
              3641 this->interval.end = dns_host->interval.end;
              +
              3642 ipv4_host->invalidate();
              +
              3643 ipv6_host->invalidate();
              +
              3644 }
              +
              3645 else {
              +
              3646 invalidate();
              +
              3647 return false;
              +
              3648 }
              +
              3649
              +
              3650 password->invalidate();
              +
              3651 port->invalidate();
              +
              3652 path->invalidate();
              +
              3653 this->interval.start = start;
              +
              3654 return true;
              +
              3655 }
              +
              3656
              +
              3657 if (file_scheme->interval) {
              +
              3658 if (path->match(text, this->interval.end, end, flags)) {
              +
              3659 // Path
              +
              3660 this->interval.end = path->interval.end;
              +
              3661 }
              +
              3662
              +
              3663 username->invalidate();
              +
              3664 password->invalidate();
              +
              3665 ipv4_host->invalidate();
              +
              3666 ipv6_host->invalidate();
              +
              3667 dns_host->invalidate();
              +
              3668 port->invalidate();
              +
              3669 this->interval.start = start;
              +
              3670 return true;
              +
              3671 }
              +
              3672
              +
              3673 // "http://" found or defaulted to
              +
              3674
              +
              3675 // If "http://" explicit, test for username&password.
              +
              3676 if (http_scheme->interval &&
              +
              3677 username->match(text, this->interval.end, end, flags))
              +
              3678 {
              +
              3679 if (m_colon->match(text, username->interval.end, end, flags) &&
              +
              3680 password->match(text, m_colon->interval.end, end, flags) &&
              +
              3681 m_at->match(text, password->interval.end, end, flags))
              +
              3682 {
              +
              3683 // Username and password
              +
              3684 this->interval.end = m_at->interval.end;
              +
              3685 }
              +
              3686 else if (m_at->match(text, username->interval.end, end, flags)) {
              +
              3687 // Username only
              +
              3688 this->interval.end = m_at->interval.end;
              +
              3689 password->invalidate();
              +
              3690 }
              +
              3691 else {
              +
              3692 username->invalidate();
              +
              3693 password->invalidate();
              +
              3694 }
              +
              3695 }
              +
              3696 else {
              +
              3697 username->invalidate();
              +
              3698 password->invalidate();
              +
              3699 }
              +
              3700
              +
              3701 if (ipv4_host->match(text, this->interval.end, end, flags)) {
              +
              3702 // Host is IPv4
              +
              3703 this->interval.end = ipv4_host->interval.end;
              +
              3704 ipv6_host->invalidate();
              +
              3705 dns_host->invalidate();
              +
              3706 }
              +
              3707 else if (
              +
              3708 m_ip_lbracket->match(text, this->interval.end, end, flags) &&
              +
              3709 ipv6_host->match(text, m_ip_lbracket->interval.end, end, flags) &&
              +
              3710 m_ip_rbracket->match(text, ipv6_host->interval.end, end, flags))
              +
              3711 {
              +
              3712 // Host is IPv6
              +
              3713 this->interval.end = m_ip_rbracket->interval.end;
              +
              3714 ipv4_host->invalidate();
              +
              3715 dns_host->invalidate();
              +
              3716 }
              +
              3717 else if (dns_host->match(text, this->interval.end, end, flags)) {
              +
              3718 // Host is hostname
              +
              3719 this->interval.end = dns_host->interval.end;
              +
              3720 ipv4_host->invalidate();
              +
              3721 ipv6_host->invalidate();
              +
              3722 }
              +
              3723 else {
              +
              3724 invalidate();
              +
              3725 return false;
              +
              3726 }
              +
              3727
              +
              3728 if (m_colon->match(text, this->interval.end, end, flags) &&
              +
              3729 port->match(text, m_colon->interval.end, end, flags))
              +
              3730 {
              +
              3731 // Port
              +
              3732 this->interval.end = port->interval.end;
              +
              3733 }
              +
              3734 else
              +
              3735 port->invalidate();
              +
              3736
              +
              3737 if (path->match(text, this->interval.end, end, flags)) {
              +
              3738 // Path
              +
              3739 this->interval.end = path->interval.end;
              +
              3740 }
              +
              3741
              +
              3742 this->interval.start = start;
              +
              3743 return true;
              +
              3744 }
              +
              3745
              +
              3746 virtual void invalidate()
              +
              3747 {
              +
              3748 http_scheme->invalidate();
              +
              3749 ftp_scheme->invalidate();
              +
              3750 mailto_scheme->invalidate();
              +
              3751 file_scheme->invalidate();
              +
              3752 username->invalidate();
              +
              3753 password->invalidate();
              +
              3754 ipv4_host->invalidate();
              +
              3755 ipv6_host->invalidate();
              +
              3756 dns_host->invalidate();
              +
              3757 port->invalidate();
              +
              3758 path->invalidate();
              + +
              3760 }
              +
              3761
              +
              3762 public:
              +
              3763 std::shared_ptr<basic_parser<T>> http_scheme;
              +
              3764 std::shared_ptr<basic_parser<T>> ftp_scheme;
              +
              3765 std::shared_ptr<basic_parser<T>> mailto_scheme;
              +
              3766 std::shared_ptr<basic_parser<T>> file_scheme;
              +
              3767 std::shared_ptr<basic_parser<T>> username;
              +
              3768 std::shared_ptr<basic_parser<T>> password;
              +
              3769 std::shared_ptr<basic_parser<T>> ipv4_host;
              +
              3770 std::shared_ptr<basic_parser<T>> ipv6_host;
              +
              3771 std::shared_ptr<basic_parser<T>> dns_host;
              +
              3772 std::shared_ptr<basic_parser<T>> port;
              +
              3773 std::shared_ptr<basic_parser<T>> path;
              +
              3774
              +
              3775 protected:
              +
              3776 std::shared_ptr<basic_parser<T>> m_colon;
              +
              3777 std::shared_ptr<basic_parser<T>> m_slash;
              +
              3778 std::shared_ptr<basic_parser<T>> m_at;
              +
              3779 std::shared_ptr<basic_parser<T>> m_ip_lbracket;
              +
              3780 std::shared_ptr<basic_parser<T>> m_ip_rbracket;
              +
              3781 };
              -
              3783
              -
              3784 using url = basic_url<char>;
              -
              3785 using wurl = basic_url<wchar_t>;
              -
              3786#ifdef _UNICODE
              -
              3787 using turl = wurl;
              -
              3788#else
              -
              3789 using turl = url;
              -
              3790#endif
              -
              3791 using sgml_url = basic_url<char>;
              -
              3792
              -
              3796 template <class T>
              -
              - -
              3798 {
              -
              3799 public:
              - -
              3801 _In_ const std::shared_ptr<basic_parser<T>>& _username,
              -
              3802 _In_ const std::shared_ptr<basic_parser<T>>& at,
              -
              3803 _In_ const std::shared_ptr<basic_parser<T>>& ip_lbracket,
              -
              3804 _In_ const std::shared_ptr<basic_parser<T>>& ip_rbracket,
              -
              3805 _In_ const std::shared_ptr<basic_parser<T>>& _ipv4_host,
              -
              3806 _In_ const std::shared_ptr<basic_parser<T>>& _ipv6_host,
              -
              3807 _In_ const std::shared_ptr<basic_parser<T>>& _dns_host,
              -
              3808 _In_ const std::locale& locale = std::locale()) :
              -
              3809 basic_parser<T>(locale),
              -
              3810 username(_username),
              -
              3811 m_at(at),
              -
              3812 m_ip_lbracket(ip_lbracket),
              -
              3813 m_ip_rbracket(ip_rbracket),
              -
              3814 ipv4_host(_ipv4_host),
              -
              3815 ipv6_host(_ipv6_host),
              -
              3816 dns_host(_dns_host)
              -
              3817 {}
              -
              3818
              -
              3819 virtual bool match(
              -
              3820 _In_reads_or_z_(end) const T* text,
              -
              3821 _In_ size_t start = 0,
              -
              3822 _In_ size_t end = (size_t)-1,
              -
              3823 _In_ int flags = match_default)
              -
              3824 {
              -
              3825 _Assume_(text || start >= end);
              -
              3826
              -
              3827 if (username->match(text, start, end, flags) &&
              -
              3828 m_at->match(text, username->interval.end, end, flags))
              -
              3829 {
              -
              3830 // Username@
              -
              3831 if (m_ip_lbracket->match(text, m_at->interval.end, end, flags) &&
              -
              3832 ipv4_host->match(text, m_ip_lbracket->interval.end, end, flags) &&
              -
              3833 m_ip_rbracket->match(text, ipv4_host->interval.end, end, flags))
              -
              3834 {
              -
              3835 // Host is IPv4
              -
              3836 this->interval.end = m_ip_rbracket->interval.end;
              -
              3837 ipv6_host->invalidate();
              -
              3838 dns_host->invalidate();
              -
              3839 }
              -
              3840 else if (
              -
              3841 m_ip_lbracket->match(text, m_at->interval.end, end, flags) &&
              -
              3842 ipv6_host->match(text, m_ip_lbracket->interval.end, end, flags) &&
              -
              3843 m_ip_rbracket->match(text, ipv6_host->interval.end, end, flags))
              -
              3844 {
              -
              3845 // Host is IPv6
              -
              3846 this->interval.end = m_ip_rbracket->interval.end;
              -
              3847 ipv4_host->invalidate();
              -
              3848 dns_host->invalidate();
              -
              3849 }
              -
              3850 else if (dns_host->match(text, m_at->interval.end, end, flags)) {
              -
              3851 // Host is hostname
              -
              3852 this->interval.end = dns_host->interval.end;
              -
              3853 ipv4_host->invalidate();
              -
              3854 ipv6_host->invalidate();
              -
              3855 }
              -
              3856 else
              -
              3857 goto error;
              -
              3858 this->interval.start = start;
              -
              3859 return true;
              -
              3860 }
              -
              3861
              -
              3862 error:
              -
              3863 username->invalidate();
              -
              3864 ipv4_host->invalidate();
              -
              3865 ipv6_host->invalidate();
              -
              3866 dns_host->invalidate();
              -
              3867 this->interval.start = (this->interval.end = start) + 1;
              -
              3868 return false;
              -
              3869 }
              -
              3870
              -
              3871 virtual void invalidate()
              -
              3872 {
              -
              3873 username->invalidate();
              -
              3874 ipv4_host->invalidate();
              -
              3875 ipv6_host->invalidate();
              -
              3876 dns_host->invalidate();
              - -
              3878 }
              -
              3879
              -
              3880 public:
              -
              3881 std::shared_ptr<basic_parser<T>> username;
              -
              3882 std::shared_ptr<basic_parser<T>> ipv4_host;
              -
              3883 std::shared_ptr<basic_parser<T>> ipv6_host;
              -
              3884 std::shared_ptr<basic_parser<T>> dns_host;
              -
              3885
              -
              3886 protected:
              -
              3887 std::shared_ptr<basic_parser<T>> m_at;
              -
              3888 std::shared_ptr<basic_parser<T>> m_ip_lbracket;
              -
              3889 std::shared_ptr<basic_parser<T>> m_ip_rbracket;
              -
              3890 };
              +
              3782
              +
              3783 using url = basic_url<char>;
              +
              3784 using wurl = basic_url<wchar_t>;
              +
              3785#ifdef _UNICODE
              +
              3786 using turl = wurl;
              +
              3787#else
              +
              3788 using turl = url;
              +
              3789#endif
              +
              3790 using sgml_url = basic_url<char>;
              +
              3791
              +
              3795 template <class T>
              +
              + +
              3797 {
              +
              3798 public:
              + +
              3800 _In_ const std::shared_ptr<basic_parser<T>>& _username,
              +
              3801 _In_ const std::shared_ptr<basic_parser<T>>& at,
              +
              3802 _In_ const std::shared_ptr<basic_parser<T>>& ip_lbracket,
              +
              3803 _In_ const std::shared_ptr<basic_parser<T>>& ip_rbracket,
              +
              3804 _In_ const std::shared_ptr<basic_parser<T>>& _ipv4_host,
              +
              3805 _In_ const std::shared_ptr<basic_parser<T>>& _ipv6_host,
              +
              3806 _In_ const std::shared_ptr<basic_parser<T>>& _dns_host,
              +
              3807 _In_ const std::locale& locale = std::locale()) :
              +
              3808 basic_parser<T>(locale),
              +
              3809 username(_username),
              +
              3810 m_at(at),
              +
              3811 m_ip_lbracket(ip_lbracket),
              +
              3812 m_ip_rbracket(ip_rbracket),
              +
              3813 ipv4_host(_ipv4_host),
              +
              3814 ipv6_host(_ipv6_host),
              +
              3815 dns_host(_dns_host)
              +
              3816 {}
              +
              3817
              +
              3818 virtual bool match(
              +
              3819 _In_reads_or_z_(end) const T* text,
              +
              3820 _In_ size_t start = 0,
              +
              3821 _In_ size_t end = SIZE_MAX,
              +
              3822 _In_ int flags = match_default)
              +
              3823 {
              +
              3824 _Assume_(text || start >= end);
              +
              3825
              +
              3826 if (username->match(text, start, end, flags) &&
              +
              3827 m_at->match(text, username->interval.end, end, flags))
              +
              3828 {
              +
              3829 // Username@
              +
              3830 if (m_ip_lbracket->match(text, m_at->interval.end, end, flags) &&
              +
              3831 ipv4_host->match(text, m_ip_lbracket->interval.end, end, flags) &&
              +
              3832 m_ip_rbracket->match(text, ipv4_host->interval.end, end, flags))
              +
              3833 {
              +
              3834 // Host is IPv4
              +
              3835 this->interval.end = m_ip_rbracket->interval.end;
              +
              3836 ipv6_host->invalidate();
              +
              3837 dns_host->invalidate();
              +
              3838 }
              +
              3839 else if (
              +
              3840 m_ip_lbracket->match(text, m_at->interval.end, end, flags) &&
              +
              3841 ipv6_host->match(text, m_ip_lbracket->interval.end, end, flags) &&
              +
              3842 m_ip_rbracket->match(text, ipv6_host->interval.end, end, flags))
              +
              3843 {
              +
              3844 // Host is IPv6
              +
              3845 this->interval.end = m_ip_rbracket->interval.end;
              +
              3846 ipv4_host->invalidate();
              +
              3847 dns_host->invalidate();
              +
              3848 }
              +
              3849 else if (dns_host->match(text, m_at->interval.end, end, flags)) {
              +
              3850 // Host is hostname
              +
              3851 this->interval.end = dns_host->interval.end;
              +
              3852 ipv4_host->invalidate();
              +
              3853 ipv6_host->invalidate();
              +
              3854 }
              +
              3855 else
              +
              3856 goto error;
              +
              3857 this->interval.start = start;
              +
              3858 return true;
              +
              3859 }
              +
              3860
              +
              3861 error:
              +
              3862 username->invalidate();
              +
              3863 ipv4_host->invalidate();
              +
              3864 ipv6_host->invalidate();
              +
              3865 dns_host->invalidate();
              +
              3866 this->interval.invalidate();
              +
              3867 return false;
              +
              3868 }
              +
              3869
              +
              3870 virtual void invalidate()
              +
              3871 {
              +
              3872 username->invalidate();
              +
              3873 ipv4_host->invalidate();
              +
              3874 ipv6_host->invalidate();
              +
              3875 dns_host->invalidate();
              + +
              3877 }
              +
              3878
              +
              3879 public:
              +
              3880 std::shared_ptr<basic_parser<T>> username;
              +
              3881 std::shared_ptr<basic_parser<T>> ipv4_host;
              +
              3882 std::shared_ptr<basic_parser<T>> ipv6_host;
              +
              3883 std::shared_ptr<basic_parser<T>> dns_host;
              +
              3884
              +
              3885 protected:
              +
              3886 std::shared_ptr<basic_parser<T>> m_at;
              +
              3887 std::shared_ptr<basic_parser<T>> m_ip_lbracket;
              +
              3888 std::shared_ptr<basic_parser<T>> m_ip_rbracket;
              +
              3889 };
              -
              3891
              - - -
              3894#ifdef _UNICODE
              - -
              3896#else
              - -
              3898#endif
              - -
              3900
              -
              3904 template <class T>
              -
              - -
              3906 {
              -
              3907 public:
              - -
              3909 _In_ const std::shared_ptr<basic_parser<T>>& _emoticon,
              -
              3910 _In_ const std::shared_ptr<basic_parser<T>>& _apex,
              -
              3911 _In_ const std::shared_ptr<basic_parser<T>>& _eyes,
              -
              3912 _In_ const std::shared_ptr<basic_parser<T>>& _nose,
              -
              3913 _In_ const std::shared_ptr<basic_set<T>>& _mouth,
              -
              3914 _In_ const std::locale& locale = std::locale()) :
              -
              3915 basic_parser<T>(locale),
              - -
              3917 apex(_apex),
              -
              3918 eyes(_eyes),
              -
              3919 nose(_nose),
              -
              3920 mouth(_mouth)
              -
              3921 {}
              -
              3922
              -
              3923 virtual bool match(
              -
              3924 _In_reads_or_z_(end) const T* text,
              -
              3925 _In_ size_t start = 0,
              -
              3926 _In_ size_t end = (size_t)-1,
              -
              3927 _In_ int flags = match_default)
              -
              3928 {
              -
              3929 _Assume_(text || start >= end);
              -
              3930
              -
              3931 if (emoticon && emoticon->match(text, start, end, flags)) {
              -
              3932 if (apex) apex->invalidate();
              -
              3933 eyes->invalidate();
              -
              3934 if (nose) nose->invalidate();
              -
              3935 mouth->invalidate();
              -
              3936 this->interval.start = start;
              -
              3937 this->interval.end = emoticon->interval.end;
              -
              3938 return true;
              -
              3939 }
              -
              3940
              -
              3941 this->interval.end = start;
              -
              3942
              -
              3943 if (apex && apex->match(text, this->interval.end, end, flags))
              -
              3944 this->interval.end = apex->interval.end;
              -
              3945
              -
              3946 if (eyes->match(text, this->interval.end, end, flags)) {
              -
              3947 if (nose && nose->match(text, eyes->interval.end, end, flags) &&
              -
              3948 mouth->match(text, nose->interval.end, end, flags))
              -
              3949 {
              -
              3950 size_t
              - -
              3952 hit_offset = mouth->hit_offset;
              -
              3953 // Mouth may repeat :-)))))))
              -
              3954 for (this->interval.end = mouth->interval.end; mouth->match(text, this->interval.end, end, flags) && mouth->hit_offset == hit_offset; this->interval.end = mouth->interval.end);
              -
              3955 mouth->interval.start = start_mouth;
              -
              3956 mouth->interval.end = this->interval.end;
              -
              3957 this->interval.start = start;
              -
              3958 return true;
              -
              3959 }
              -
              3960 if (mouth->match(text, eyes->interval.end, end, flags)) {
              -
              3961 size_t
              - -
              3963 hit_offset = mouth->hit_offset;
              -
              3964 // Mouth may repeat :-)))))))
              -
              3965 for (this->interval.end = mouth->interval.end; mouth->match(text, this->interval.end, end, flags) && mouth->hit_offset == hit_offset; this->interval.end = mouth->interval.end);
              -
              3966 if (nose) nose->invalidate();
              -
              3967 mouth->interval.start = start_mouth;
              -
              3968 mouth->interval.end = this->interval.end;
              -
              3969 this->interval.start = start;
              -
              3970 return true;
              -
              3971 }
              -
              3972 }
              -
              3973
              -
              3974 if (emoticon) emoticon->invalidate();
              -
              3975 if (apex) apex->invalidate();
              -
              3976 eyes->invalidate();
              -
              3977 if (nose) nose->invalidate();
              -
              3978 mouth->invalidate();
              -
              3979 this->interval.start = (this->interval.end = start) + 1;
              -
              3980 return false;
              -
              3981 }
              -
              3982
              -
              3983 virtual void invalidate()
              -
              3984 {
              -
              3985 if (emoticon) emoticon->invalidate();
              -
              3986 if (apex) apex->invalidate();
              -
              3987 eyes->invalidate();
              -
              3988 if (nose) nose->invalidate();
              -
              3989 mouth->invalidate();
              - -
              3991 }
              -
              3992
              -
              3993 public:
              -
              3994 std::shared_ptr<basic_parser<T>> emoticon;
              -
              3995 std::shared_ptr<basic_parser<T>> apex;
              -
              3996 std::shared_ptr<basic_parser<T>> eyes;
              -
              3997 std::shared_ptr<basic_parser<T>> nose;
              -
              3998 std::shared_ptr<basic_set<T>> mouth;
              -
              3999 };
              +
              3890
              + + +
              3893#ifdef _UNICODE
              + +
              3895#else
              + +
              3897#endif
              + +
              3899
              +
              3903 template <class T>
              +
              + +
              3905 {
              +
              3906 public:
              + +
              3908 _In_ const std::shared_ptr<basic_parser<T>>& _emoticon,
              +
              3909 _In_ const std::shared_ptr<basic_parser<T>>& _apex,
              +
              3910 _In_ const std::shared_ptr<basic_parser<T>>& _eyes,
              +
              3911 _In_ const std::shared_ptr<basic_parser<T>>& _nose,
              +
              3912 _In_ const std::shared_ptr<basic_set<T>>& _mouth,
              +
              3913 _In_ const std::locale& locale = std::locale()) :
              +
              3914 basic_parser<T>(locale),
              + +
              3916 apex(_apex),
              +
              3917 eyes(_eyes),
              +
              3918 nose(_nose),
              +
              3919 mouth(_mouth)
              +
              3920 {}
              +
              3921
              +
              3922 virtual bool match(
              +
              3923 _In_reads_or_z_(end) const T* text,
              +
              3924 _In_ size_t start = 0,
              +
              3925 _In_ size_t end = SIZE_MAX,
              +
              3926 _In_ int flags = match_default)
              +
              3927 {
              +
              3928 _Assume_(text || start >= end);
              +
              3929
              +
              3930 if (emoticon && emoticon->match(text, start, end, flags)) {
              +
              3931 if (apex) apex->invalidate();
              +
              3932 eyes->invalidate();
              +
              3933 if (nose) nose->invalidate();
              +
              3934 mouth->invalidate();
              +
              3935 this->interval.start = start;
              +
              3936 this->interval.end = emoticon->interval.end;
              +
              3937 return true;
              +
              3938 }
              +
              3939
              +
              3940 this->interval.end = start;
              +
              3941
              +
              3942 if (apex && apex->match(text, this->interval.end, end, flags))
              +
              3943 this->interval.end = apex->interval.end;
              +
              3944
              +
              3945 if (eyes->match(text, this->interval.end, end, flags)) {
              +
              3946 if (nose && nose->match(text, eyes->interval.end, end, flags) &&
              +
              3947 mouth->match(text, nose->interval.end, end, flags))
              +
              3948 {
              +
              3949 size_t
              + +
              3951 hit_offset = mouth->hit_offset;
              +
              3952 // Mouth may repeat :-)))))))
              +
              3953 for (this->interval.end = mouth->interval.end; mouth->match(text, this->interval.end, end, flags) && mouth->hit_offset == hit_offset; this->interval.end = mouth->interval.end);
              +
              3954 mouth->interval.start = start_mouth;
              +
              3955 mouth->interval.end = this->interval.end;
              +
              3956 this->interval.start = start;
              +
              3957 return true;
              +
              3958 }
              +
              3959 if (mouth->match(text, eyes->interval.end, end, flags)) {
              +
              3960 size_t
              + +
              3962 hit_offset = mouth->hit_offset;
              +
              3963 // Mouth may repeat :-)))))))
              +
              3964 for (this->interval.end = mouth->interval.end; mouth->match(text, this->interval.end, end, flags) && mouth->hit_offset == hit_offset; this->interval.end = mouth->interval.end);
              +
              3965 if (nose) nose->invalidate();
              +
              3966 mouth->interval.start = start_mouth;
              +
              3967 mouth->interval.end = this->interval.end;
              +
              3968 this->interval.start = start;
              +
              3969 return true;
              +
              3970 }
              +
              3971 }
              +
              3972
              +
              3973 if (emoticon) emoticon->invalidate();
              +
              3974 if (apex) apex->invalidate();
              +
              3975 eyes->invalidate();
              +
              3976 if (nose) nose->invalidate();
              +
              3977 mouth->invalidate();
              +
              3978 this->interval.invalidate();
              +
              3979 return false;
              +
              3980 }
              +
              3981
              +
              3982 virtual void invalidate()
              +
              3983 {
              +
              3984 if (emoticon) emoticon->invalidate();
              +
              3985 if (apex) apex->invalidate();
              +
              3986 eyes->invalidate();
              +
              3987 if (nose) nose->invalidate();
              +
              3988 mouth->invalidate();
              + +
              3990 }
              +
              3991
              +
              3992 public:
              +
              3993 std::shared_ptr<basic_parser<T>> emoticon;
              +
              3994 std::shared_ptr<basic_parser<T>> apex;
              +
              3995 std::shared_ptr<basic_parser<T>> eyes;
              +
              3996 std::shared_ptr<basic_parser<T>> nose;
              +
              3997 std::shared_ptr<basic_set<T>> mouth;
              +
              3998 };
              -
              4000
              - - -
              4003#ifdef _UNICODE
              -
              4004 using temoticon = wemoticon;
              -
              4005#else
              -
              4006 using temoticon = emoticon;
              -
              4007#endif
              - -
              4009
              -
              4013 enum date_format_t {
              -
              4014 date_format_none = 0,
              -
              4015 date_format_dmy = 0x1,
              -
              4016 date_format_mdy = 0x2,
              -
              4017 date_format_ymd = 0x4,
              -
              4018 date_format_ym = 0x8,
              -
              4019 date_format_my = 0x10,
              -
              4020 date_format_dm = 0x20,
              -
              4021 date_format_md = 0x40,
              -
              4022 };
              -
              4023
              -
              4027 template <class T>
              -
              -
              4028 class basic_date : public basic_parser<T>
              -
              4029 {
              -
              4030 public:
              -
              4031 basic_date(
              -
              4032 _In_ int format_mask,
              -
              4033 _In_ const std::shared_ptr<basic_integer<T>>& _day,
              -
              4034 _In_ const std::shared_ptr<basic_integer<T>>& _month,
              -
              4035 _In_ const std::shared_ptr<basic_integer<T>>& _year,
              -
              4036 _In_ const std::shared_ptr<basic_set<T>>& separator,
              -
              4037 _In_ const std::shared_ptr<basic_parser<T>>& space,
              -
              4038 _In_ const std::locale& locale = std::locale()) :
              -
              4039 basic_parser<T>(locale),
              -
              4040 format(date_format_none),
              -
              4041 m_format_mask(format_mask),
              -
              4042 day(_day),
              -
              4043 month(_month),
              -
              4044 year(_year),
              -
              4045 m_separator(separator),
              -
              4046 m_space(space)
              -
              4047 {}
              -
              4048
              -
              4049 virtual bool match(
              -
              4050 _In_reads_or_z_(end) const T* text,
              -
              4051 _In_ size_t start = 0,
              -
              4052 _In_ size_t end = (size_t)-1,
              -
              4053 _In_ int flags = match_default)
              -
              4054 {
              -
              4055 _Assume_(text || start >= end);
              -
              4056
              -
              4057 const int space_match_flags = flags & ~match_multiline; // Spaces in dates must never be broken in new line.
              -
              4058 if ((m_format_mask & date_format_dmy) == date_format_dmy) {
              -
              4059 if (day->match(text, start, end, flags)) {
              -
              4060 for (this->interval.end = day->interval.end; m_space->match(text, this->interval.end, end, space_match_flags); this->interval.end = m_space->interval.end);
              -
              4061 if (m_separator->match(text, this->interval.end, end, flags)) {
              -
              4062 size_t hit_offset = m_separator->hit_offset;
              -
              4063 for (this->interval.end = m_separator->interval.end; m_space->match(text, this->interval.end, end, space_match_flags); this->interval.end = m_space->interval.end);
              -
              4064 if (month->match(text, this->interval.end, end, flags)) {
              -
              4065 for (this->interval.end = month->interval.end; m_space->match(text, this->interval.end, end, space_match_flags); this->interval.end = m_space->interval.end);
              -
              4066 if (m_separator->match(text, this->interval.end, end, flags) &&
              -
              4067 m_separator->hit_offset == hit_offset) // Both separators must match.
              -
              4068 {
              -
              4069 for (this->interval.end = m_separator->interval.end; m_space->match(text, this->interval.end, end, space_match_flags); this->interval.end = m_space->interval.end);
              -
              4070 if (year->match(text, this->interval.end, end, flags) &&
              -
              4071 is_valid(day->value, month->value))
              -
              4072 {
              -
              4073 this->interval.start = start;
              -
              4074 this->interval.end = year->interval.end;
              -
              4075 format = date_format_dmy;
              -
              4076 return true;
              -
              4077 }
              -
              4078 }
              -
              4079 }
              -
              4080 }
              -
              4081 }
              -
              4082 }
              -
              4083
              -
              4084 if ((m_format_mask & date_format_mdy) == date_format_mdy) {
              -
              4085 if (month->match(text, start, end, flags)) {
              -
              4086 for (this->interval.end = month->interval.end; m_space->match(text, this->interval.end, end, space_match_flags); this->interval.end = m_space->interval.end);
              -
              4087 if (m_separator->match(text, this->interval.end, end, flags)) {
              -
              4088 size_t hit_offset = m_separator->hit_offset;
              -
              4089 for (this->interval.end = m_separator->interval.end; m_space->match(text, this->interval.end, end, space_match_flags); this->interval.end = m_space->interval.end);
              -
              4090 if (day->match(text, this->interval.end, end, flags)) {
              -
              4091 for (this->interval.end = day->interval.end; m_space->match(text, this->interval.end, end, space_match_flags); this->interval.end = m_space->interval.end);
              -
              4092 if (m_separator->match(text, this->interval.end, end, flags) &&
              -
              4093 m_separator->hit_offset == hit_offset) // Both separators must match.
              -
              4094 {
              -
              4095 for (this->interval.end = m_separator->interval.end; m_space->match(text, this->interval.end, end, space_match_flags); this->interval.end = m_space->interval.end);
              -
              4096 if (year->match(text, this->interval.end, end, flags) &&
              -
              4097 is_valid(day->value, month->value))
              -
              4098 {
              -
              4099 this->interval.start = start;
              -
              4100 this->interval.end = year->interval.end;
              -
              4101 format = date_format_mdy;
              -
              4102 return true;
              -
              4103 }
              -
              4104 }
              -
              4105 }
              -
              4106 }
              -
              4107 }
              -
              4108 }
              -
              4109
              -
              4110 if ((m_format_mask & date_format_ymd) == date_format_ymd) {
              -
              4111 if (year->match(text, start, end, flags)) {
              -
              4112 for (this->interval.end = year->interval.end; m_space->match(text, this->interval.end, end, space_match_flags); this->interval.end = m_space->interval.end);
              -
              4113 if (m_separator->match(text, this->interval.end, end, flags)) {
              -
              4114 size_t hit_offset = m_separator->hit_offset;
              -
              4115 for (this->interval.end = m_separator->interval.end; m_space->match(text, this->interval.end, end, space_match_flags); this->interval.end = m_space->interval.end);
              -
              4116 if (month->match(text, this->interval.end, end, flags)) {
              -
              4117 for (this->interval.end = month->interval.end; m_space->match(text, this->interval.end, end, space_match_flags); this->interval.end = m_space->interval.end);
              -
              4118 if (m_separator->match(text, this->interval.end, end, flags) &&
              -
              4119 m_separator->hit_offset == hit_offset) // Both separators must match.
              -
              4120 {
              -
              4121 for (this->interval.end = m_separator->interval.end; m_space->match(text, this->interval.end, end, space_match_flags); this->interval.end = m_space->interval.end);
              -
              4122 if (day->match(text, this->interval.end, end, flags) &&
              -
              4123 is_valid(day->value, month->value))
              -
              4124 {
              -
              4125 this->interval.start = start;
              -
              4126 this->interval.end = day->interval.end;
              -
              4127 format = date_format_ymd;
              -
              4128 return true;
              -
              4129 }
              -
              4130 }
              -
              4131 }
              -
              4132 }
              -
              4133 }
              -
              4134 }
              -
              4135
              -
              4136 if ((m_format_mask & date_format_ym) == date_format_ym) {
              -
              4137 if (year->match(text, start, end, flags)) {
              -
              4138 for (this->interval.end = year->interval.end; m_space->match(text, this->interval.end, end, space_match_flags); this->interval.end = m_space->interval.end);
              -
              4139 if (m_separator->match(text, this->interval.end, end, flags)) {
              -
              4140 for (this->interval.end = m_separator->interval.end; m_space->match(text, this->interval.end, end, space_match_flags); this->interval.end = m_space->interval.end);
              -
              4141 if (month->match(text, this->interval.end, end, flags) &&
              -
              4142 is_valid((size_t)-1, month->value))
              -
              4143 {
              -
              4144 if (day) day->invalidate();
              -
              4145 this->interval.start = start;
              -
              4146 this->interval.end = month->interval.end;
              -
              4147 format = date_format_ym;
              -
              4148 return true;
              -
              4149 }
              -
              4150 }
              -
              4151 }
              -
              4152 }
              -
              4153
              -
              4154 if ((m_format_mask & date_format_my) == date_format_my) {
              -
              4155 if (month->match(text, start, end, flags)) {
              -
              4156 for (this->interval.end = month->interval.end; m_space->match(text, this->interval.end, end, space_match_flags); this->interval.end = m_space->interval.end);
              -
              4157 if (m_separator->match(text, this->interval.end, end, flags)) {
              -
              4158 for (this->interval.end = m_separator->interval.end; m_space->match(text, this->interval.end, end, space_match_flags); this->interval.end = m_space->interval.end);
              -
              4159 if (year->match(text, this->interval.end, end, flags) &&
              -
              4160 is_valid((size_t)-1, month->value))
              -
              4161 {
              -
              4162 if (day) day->invalidate();
              -
              4163 this->interval.start = start;
              -
              4164 this->interval.end = year->interval.end;
              -
              4165 format = date_format_my;
              -
              4166 return true;
              -
              4167 }
              -
              4168 }
              -
              4169 }
              -
              4170 }
              -
              4171
              -
              4172 if ((m_format_mask & date_format_dm) == date_format_dm) {
              -
              4173 if (day->match(text, start, end, flags)) {
              -
              4174 for (this->interval.end = day->interval.end; m_space->match(text, this->interval.end, end, space_match_flags); this->interval.end = m_space->interval.end);
              -
              4175 if (m_separator->match(text, this->interval.end, end, flags)) {
              -
              4176 size_t hit_offset = m_separator->hit_offset;
              -
              4177 for (this->interval.end = m_separator->interval.end; m_space->match(text, this->interval.end, end, space_match_flags); this->interval.end = m_space->interval.end);
              -
              4178 if (month->match(text, this->interval.end, end, flags) &&
              -
              4179 is_valid(day->value, month->value))
              -
              4180 {
              -
              4181 if (year) year->invalidate();
              -
              4182 this->interval.start = start;
              -
              4183 for (this->interval.end = month->interval.end; m_space->match(text, this->interval.end, end, space_match_flags); this->interval.end = m_space->interval.end);
              -
              4184 if (m_separator->match(text, this->interval.end, end, flags) &&
              -
              4185 m_separator->hit_offset == hit_offset) // Both separators must match.
              -
              4186 this->interval.end = m_separator->interval.end;
              -
              4187 else
              -
              4188 this->interval.end = month->interval.end;
              -
              4189 format = date_format_dm;
              -
              4190 return true;
              -
              4191 }
              -
              4192 }
              -
              4193 }
              -
              4194 }
              -
              4195
              -
              4196 if ((m_format_mask & date_format_md) == date_format_md) {
              -
              4197 if (month->match(text, start, end, flags)) {
              -
              4198 for (this->interval.end = month->interval.end; m_space->match(text, this->interval.end, end, space_match_flags); this->interval.end = m_space->interval.end);
              -
              4199 if (m_separator->match(text, this->interval.end, end, flags)) {
              -
              4200 size_t hit_offset = m_separator->hit_offset;
              -
              4201 for (this->interval.end = m_separator->interval.end; m_space->match(text, this->interval.end, end, space_match_flags); this->interval.end = m_space->interval.end);
              -
              4202 if (day->match(text, this->interval.end, end, flags) &&
              -
              4203 is_valid(day->value, month->value))
              -
              4204 {
              -
              4205 if (year) year->invalidate();
              -
              4206 this->interval.start = start;
              -
              4207 for (this->interval.end = day->interval.end; m_space->match(text, this->interval.end, end, space_match_flags); this->interval.end = m_space->interval.end);
              -
              4208 if (m_separator->match(text, this->interval.end, end, flags) &&
              -
              4209 m_separator->hit_offset == hit_offset) // Both separators must match.
              -
              4210 this->interval.end = m_separator->interval.end;
              -
              4211 else
              -
              4212 this->interval.end = day->interval.end;
              -
              4213 format = date_format_md;
              -
              4214 return true;
              -
              4215 }
              -
              4216 }
              -
              4217 }
              -
              4218 }
              -
              4219
              -
              4220 if (day) day->invalidate();
              -
              4221 if (month) month->invalidate();
              -
              4222 if (year) year->invalidate();
              -
              4223 format = date_format_none;
              -
              4224 this->interval.start = (this->interval.end = start) + 1;
              -
              4225 return false;
              -
              4226 }
              -
              4227
              -
              4228 virtual void invalidate()
              -
              4229 {
              -
              4230 if (day) day->invalidate();
              -
              4231 if (month) month->invalidate();
              -
              4232 if (year) year->invalidate();
              -
              4233 format = date_format_none;
              - -
              4235 }
              -
              4236
              -
              4237 protected:
              -
              4238 static inline bool is_valid(size_t day, size_t month)
              -
              4239 {
              -
              4240 if (month == (size_t)-1) {
              -
              4241 // Default to January. This allows validating day only, as January has all 31 days.
              -
              4242 month = 1;
              -
              4243 }
              -
              4244 if (day == (size_t)-1) {
              -
              4245 // Default to 1st day in month. This allows validating month only, as each month has 1st day.
              -
              4246 day = 1;
              -
              4247 }
              -
              4248
              -
              4249 switch (month) {
              -
              4250 case 1:
              -
              4251 case 3:
              -
              4252 case 5:
              -
              4253 case 7:
              -
              4254 case 8:
              -
              4255 case 10:
              -
              4256 case 12:
              -
              4257 return 1 <= day && day <= 31;
              -
              4258 case 2:
              -
              4259 return 1 <= day && day <= 29;
              -
              4260 case 4:
              -
              4261 case 6:
              -
              4262 case 9:
              -
              4263 case 11:
              -
              4264 return 1 <= day && day <= 30;
              -
              4265 default:
              -
              4266 return false;
              -
              4267 }
              -
              4268 }
              -
              4269
              -
              4270 public:
              -
              4271 date_format_t format;
              -
              4272 std::shared_ptr<basic_integer<T>> day;
              -
              4273 std::shared_ptr<basic_integer<T>> month;
              -
              4274 std::shared_ptr<basic_integer<T>> year;
              -
              4275
              -
              4276 protected:
              -
              4277 int m_format_mask;
              -
              4278 std::shared_ptr<basic_set<T>> m_separator;
              -
              4279 std::shared_ptr<basic_parser<T>> m_space;
              -
              4280 };
              +
              3999
              + + +
              4002#ifdef _UNICODE
              +
              4003 using temoticon = wemoticon;
              +
              4004#else
              +
              4005 using temoticon = emoticon;
              +
              4006#endif
              + +
              4008
              +
              4012 enum date_format_t {
              +
              4013 date_format_none = 0,
              +
              4014 date_format_dmy = 0x1,
              +
              4015 date_format_mdy = 0x2,
              +
              4016 date_format_ymd = 0x4,
              +
              4017 date_format_ym = 0x8,
              +
              4018 date_format_my = 0x10,
              +
              4019 date_format_dm = 0x20,
              +
              4020 date_format_md = 0x40,
              +
              4021 };
              +
              4022
              +
              4026 template <class T>
              +
              +
              4027 class basic_date : public basic_parser<T>
              +
              4028 {
              +
              4029 public:
              +
              4030 basic_date(
              +
              4031 _In_ int format_mask,
              +
              4032 _In_ const std::shared_ptr<basic_integer<T>>& _day,
              +
              4033 _In_ const std::shared_ptr<basic_integer<T>>& _month,
              +
              4034 _In_ const std::shared_ptr<basic_integer<T>>& _year,
              +
              4035 _In_ const std::shared_ptr<basic_set<T>>& separator,
              +
              4036 _In_ const std::shared_ptr<basic_parser<T>>& space,
              +
              4037 _In_ const std::locale& locale = std::locale()) :
              +
              4038 basic_parser<T>(locale),
              +
              4039 format(date_format_none),
              +
              4040 m_format_mask(format_mask),
              +
              4041 day(_day),
              +
              4042 month(_month),
              +
              4043 year(_year),
              +
              4044 m_separator(separator),
              +
              4045 m_space(space)
              +
              4046 {}
              +
              4047
              +
              4048 virtual bool match(
              +
              4049 _In_reads_or_z_(end) const T* text,
              +
              4050 _In_ size_t start = 0,
              +
              4051 _In_ size_t end = SIZE_MAX,
              +
              4052 _In_ int flags = match_default)
              +
              4053 {
              +
              4054 _Assume_(text || start >= end);
              +
              4055
              +
              4056 const int space_match_flags = flags & ~match_multiline; // Spaces in dates must never be broken in new line.
              +
              4057 if ((m_format_mask & date_format_dmy) == date_format_dmy) {
              +
              4058 if (day->match(text, start, end, flags)) {
              +
              4059 for (this->interval.end = day->interval.end; m_space->match(text, this->interval.end, end, space_match_flags); this->interval.end = m_space->interval.end);
              +
              4060 if (m_separator->match(text, this->interval.end, end, flags)) {
              +
              4061 size_t hit_offset = m_separator->hit_offset;
              +
              4062 for (this->interval.end = m_separator->interval.end; m_space->match(text, this->interval.end, end, space_match_flags); this->interval.end = m_space->interval.end);
              +
              4063 if (month->match(text, this->interval.end, end, flags)) {
              +
              4064 for (this->interval.end = month->interval.end; m_space->match(text, this->interval.end, end, space_match_flags); this->interval.end = m_space->interval.end);
              +
              4065 if (m_separator->match(text, this->interval.end, end, flags) &&
              +
              4066 m_separator->hit_offset == hit_offset) // Both separators must match.
              +
              4067 {
              +
              4068 for (this->interval.end = m_separator->interval.end; m_space->match(text, this->interval.end, end, space_match_flags); this->interval.end = m_space->interval.end);
              +
              4069 if (year->match(text, this->interval.end, end, flags) &&
              +
              4070 is_valid(day->value, month->value))
              +
              4071 {
              +
              4072 this->interval.start = start;
              +
              4073 this->interval.end = year->interval.end;
              +
              4074 format = date_format_dmy;
              +
              4075 return true;
              +
              4076 }
              +
              4077 }
              +
              4078 }
              +
              4079 }
              +
              4080 }
              +
              4081 }
              +
              4082
              +
              4083 if ((m_format_mask & date_format_mdy) == date_format_mdy) {
              +
              4084 if (month->match(text, start, end, flags)) {
              +
              4085 for (this->interval.end = month->interval.end; m_space->match(text, this->interval.end, end, space_match_flags); this->interval.end = m_space->interval.end);
              +
              4086 if (m_separator->match(text, this->interval.end, end, flags)) {
              +
              4087 size_t hit_offset = m_separator->hit_offset;
              +
              4088 for (this->interval.end = m_separator->interval.end; m_space->match(text, this->interval.end, end, space_match_flags); this->interval.end = m_space->interval.end);
              +
              4089 if (day->match(text, this->interval.end, end, flags)) {
              +
              4090 for (this->interval.end = day->interval.end; m_space->match(text, this->interval.end, end, space_match_flags); this->interval.end = m_space->interval.end);
              +
              4091 if (m_separator->match(text, this->interval.end, end, flags) &&
              +
              4092 m_separator->hit_offset == hit_offset) // Both separators must match.
              +
              4093 {
              +
              4094 for (this->interval.end = m_separator->interval.end; m_space->match(text, this->interval.end, end, space_match_flags); this->interval.end = m_space->interval.end);
              +
              4095 if (year->match(text, this->interval.end, end, flags) &&
              +
              4096 is_valid(day->value, month->value))
              +
              4097 {
              +
              4098 this->interval.start = start;
              +
              4099 this->interval.end = year->interval.end;
              +
              4100 format = date_format_mdy;
              +
              4101 return true;
              +
              4102 }
              +
              4103 }
              +
              4104 }
              +
              4105 }
              +
              4106 }
              +
              4107 }
              +
              4108
              +
              4109 if ((m_format_mask & date_format_ymd) == date_format_ymd) {
              +
              4110 if (year->match(text, start, end, flags)) {
              +
              4111 for (this->interval.end = year->interval.end; m_space->match(text, this->interval.end, end, space_match_flags); this->interval.end = m_space->interval.end);
              +
              4112 if (m_separator->match(text, this->interval.end, end, flags)) {
              +
              4113 size_t hit_offset = m_separator->hit_offset;
              +
              4114 for (this->interval.end = m_separator->interval.end; m_space->match(text, this->interval.end, end, space_match_flags); this->interval.end = m_space->interval.end);
              +
              4115 if (month->match(text, this->interval.end, end, flags)) {
              +
              4116 for (this->interval.end = month->interval.end; m_space->match(text, this->interval.end, end, space_match_flags); this->interval.end = m_space->interval.end);
              +
              4117 if (m_separator->match(text, this->interval.end, end, flags) &&
              +
              4118 m_separator->hit_offset == hit_offset) // Both separators must match.
              +
              4119 {
              +
              4120 for (this->interval.end = m_separator->interval.end; m_space->match(text, this->interval.end, end, space_match_flags); this->interval.end = m_space->interval.end);
              +
              4121 if (day->match(text, this->interval.end, end, flags) &&
              +
              4122 is_valid(day->value, month->value))
              +
              4123 {
              +
              4124 this->interval.start = start;
              +
              4125 this->interval.end = day->interval.end;
              +
              4126 format = date_format_ymd;
              +
              4127 return true;
              +
              4128 }
              +
              4129 }
              +
              4130 }
              +
              4131 }
              +
              4132 }
              +
              4133 }
              +
              4134
              +
              4135 if ((m_format_mask & date_format_ym) == date_format_ym) {
              +
              4136 if (year->match(text, start, end, flags)) {
              +
              4137 for (this->interval.end = year->interval.end; m_space->match(text, this->interval.end, end, space_match_flags); this->interval.end = m_space->interval.end);
              +
              4138 if (m_separator->match(text, this->interval.end, end, flags)) {
              +
              4139 for (this->interval.end = m_separator->interval.end; m_space->match(text, this->interval.end, end, space_match_flags); this->interval.end = m_space->interval.end);
              +
              4140 if (month->match(text, this->interval.end, end, flags) &&
              +
              4141 is_valid(SIZE_MAX, month->value))
              +
              4142 {
              +
              4143 if (day) day->invalidate();
              +
              4144 this->interval.start = start;
              +
              4145 this->interval.end = month->interval.end;
              +
              4146 format = date_format_ym;
              +
              4147 return true;
              +
              4148 }
              +
              4149 }
              +
              4150 }
              +
              4151 }
              +
              4152
              +
              4153 if ((m_format_mask & date_format_my) == date_format_my) {
              +
              4154 if (month->match(text, start, end, flags)) {
              +
              4155 for (this->interval.end = month->interval.end; m_space->match(text, this->interval.end, end, space_match_flags); this->interval.end = m_space->interval.end);
              +
              4156 if (m_separator->match(text, this->interval.end, end, flags)) {
              +
              4157 for (this->interval.end = m_separator->interval.end; m_space->match(text, this->interval.end, end, space_match_flags); this->interval.end = m_space->interval.end);
              +
              4158 if (year->match(text, this->interval.end, end, flags) &&
              +
              4159 is_valid(SIZE_MAX, month->value))
              +
              4160 {
              +
              4161 if (day) day->invalidate();
              +
              4162 this->interval.start = start;
              +
              4163 this->interval.end = year->interval.end;
              +
              4164 format = date_format_my;
              +
              4165 return true;
              +
              4166 }
              +
              4167 }
              +
              4168 }
              +
              4169 }
              +
              4170
              +
              4171 if ((m_format_mask & date_format_dm) == date_format_dm) {
              +
              4172 if (day->match(text, start, end, flags)) {
              +
              4173 for (this->interval.end = day->interval.end; m_space->match(text, this->interval.end, end, space_match_flags); this->interval.end = m_space->interval.end);
              +
              4174 if (m_separator->match(text, this->interval.end, end, flags)) {
              +
              4175 size_t hit_offset = m_separator->hit_offset;
              +
              4176 for (this->interval.end = m_separator->interval.end; m_space->match(text, this->interval.end, end, space_match_flags); this->interval.end = m_space->interval.end);
              +
              4177 if (month->match(text, this->interval.end, end, flags) &&
              +
              4178 is_valid(day->value, month->value))
              +
              4179 {
              +
              4180 if (year) year->invalidate();
              +
              4181 this->interval.start = start;
              +
              4182 for (this->interval.end = month->interval.end; m_space->match(text, this->interval.end, end, space_match_flags); this->interval.end = m_space->interval.end);
              +
              4183 if (m_separator->match(text, this->interval.end, end, flags) &&
              +
              4184 m_separator->hit_offset == hit_offset) // Both separators must match.
              +
              4185 this->interval.end = m_separator->interval.end;
              +
              4186 else
              +
              4187 this->interval.end = month->interval.end;
              +
              4188 format = date_format_dm;
              +
              4189 return true;
              +
              4190 }
              +
              4191 }
              +
              4192 }
              +
              4193 }
              +
              4194
              +
              4195 if ((m_format_mask & date_format_md) == date_format_md) {
              +
              4196 if (month->match(text, start, end, flags)) {
              +
              4197 for (this->interval.end = month->interval.end; m_space->match(text, this->interval.end, end, space_match_flags); this->interval.end = m_space->interval.end);
              +
              4198 if (m_separator->match(text, this->interval.end, end, flags)) {
              +
              4199 size_t hit_offset = m_separator->hit_offset;
              +
              4200 for (this->interval.end = m_separator->interval.end; m_space->match(text, this->interval.end, end, space_match_flags); this->interval.end = m_space->interval.end);
              +
              4201 if (day->match(text, this->interval.end, end, flags) &&
              +
              4202 is_valid(day->value, month->value))
              +
              4203 {
              +
              4204 if (year) year->invalidate();
              +
              4205 this->interval.start = start;
              +
              4206 for (this->interval.end = day->interval.end; m_space->match(text, this->interval.end, end, space_match_flags); this->interval.end = m_space->interval.end);
              +
              4207 if (m_separator->match(text, this->interval.end, end, flags) &&
              +
              4208 m_separator->hit_offset == hit_offset) // Both separators must match.
              +
              4209 this->interval.end = m_separator->interval.end;
              +
              4210 else
              +
              4211 this->interval.end = day->interval.end;
              +
              4212 format = date_format_md;
              +
              4213 return true;
              +
              4214 }
              +
              4215 }
              +
              4216 }
              +
              4217 }
              +
              4218
              +
              4219 if (day) day->invalidate();
              +
              4220 if (month) month->invalidate();
              +
              4221 if (year) year->invalidate();
              +
              4222 format = date_format_none;
              +
              4223 this->interval.invalidate();
              +
              4224 return false;
              +
              4225 }
              +
              4226
              +
              4227 virtual void invalidate()
              +
              4228 {
              +
              4229 if (day) day->invalidate();
              +
              4230 if (month) month->invalidate();
              +
              4231 if (year) year->invalidate();
              +
              4232 format = date_format_none;
              + +
              4234 }
              +
              4235
              +
              4236 protected:
              +
              4237 static inline bool is_valid(size_t day, size_t month)
              +
              4238 {
              +
              4239 if (month == SIZE_MAX) {
              +
              4240 // Default to January. This allows validating day only, as January has all 31 days.
              +
              4241 month = 1;
              +
              4242 }
              +
              4243 if (day == SIZE_MAX) {
              +
              4244 // Default to 1st day in month. This allows validating month only, as each month has 1st day.
              +
              4245 day = 1;
              +
              4246 }
              +
              4247
              +
              4248 switch (month) {
              +
              4249 case 1:
              +
              4250 case 3:
              +
              4251 case 5:
              +
              4252 case 7:
              +
              4253 case 8:
              +
              4254 case 10:
              +
              4255 case 12:
              +
              4256 return 1 <= day && day <= 31;
              +
              4257 case 2:
              +
              4258 return 1 <= day && day <= 29;
              +
              4259 case 4:
              +
              4260 case 6:
              +
              4261 case 9:
              +
              4262 case 11:
              +
              4263 return 1 <= day && day <= 30;
              +
              4264 default:
              +
              4265 return false;
              +
              4266 }
              +
              4267 }
              +
              4268
              +
              4269 public:
              +
              4270 date_format_t format;
              +
              4271 std::shared_ptr<basic_integer<T>> day;
              +
              4272 std::shared_ptr<basic_integer<T>> month;
              +
              4273 std::shared_ptr<basic_integer<T>> year;
              +
              4274
              +
              4275 protected:
              +
              4276 int m_format_mask;
              +
              4277 std::shared_ptr<basic_set<T>> m_separator;
              +
              4278 std::shared_ptr<basic_parser<T>> m_space;
              +
              4279 };
              -
              4281
              -
              4282 using date = basic_date<char>;
              -
              4283 using wdate = basic_date<wchar_t>;
              -
              4284#ifdef _UNICODE
              -
              4285 using tdate = wdate;
              -
              4286#else
              -
              4287 using tdate = date;
              -
              4288#endif
              - -
              4290
              -
              4294 template <class T>
              -
              -
              4295 class basic_time : public basic_parser<T>
              -
              4296 {
              -
              4297 public:
              -
              4298 basic_time(
              -
              4299 _In_ const std::shared_ptr<basic_integer10<T>>& _hour,
              -
              4300 _In_ const std::shared_ptr<basic_integer10<T>>& _minute,
              -
              4301 _In_ const std::shared_ptr<basic_integer10<T>>& _second,
              -
              4302 _In_ const std::shared_ptr<basic_integer10<T>>& _millisecond,
              -
              4303 _In_ const std::shared_ptr<basic_set<T>>& separator,
              -
              4304 _In_ const std::shared_ptr<basic_parser<T>>& millisecond_separator,
              -
              4305 _In_ const std::locale& locale = std::locale()) :
              -
              4306 basic_parser<T>(locale),
              -
              4307 hour(_hour),
              -
              4308 minute(_minute),
              -
              4309 second(_second),
              -
              4310 millisecond(_millisecond),
              -
              4311 m_separator(separator),
              -
              4312 m_millisecond_separator(millisecond_separator)
              -
              4313 {}
              -
              4314
              -
              4315 virtual bool match(
              -
              4316 _In_reads_or_z_(end) const T* text,
              -
              4317 _In_ size_t start = 0,
              -
              4318 _In_ size_t end = (size_t)-1,
              -
              4319 _In_ int flags = match_default)
              -
              4320 {
              -
              4321 _Assume_(text || start >= end);
              -
              4322
              -
              4323 if (hour->match(text, start, end, flags) &&
              -
              4324 m_separator->match(text, hour->interval.end, end, flags) &&
              -
              4325 minute->match(text, m_separator->interval.end, end, flags) &&
              -
              4326 minute->value < 60)
              -
              4327 {
              -
              4328 // hh::mm
              -
              4329 size_t hit_offset = m_separator->hit_offset;
              -
              4330 if (m_separator->match(text, minute->interval.end, end, flags) &&
              -
              4331 m_separator->hit_offset == hit_offset && // Both separators must match.
              -
              4332 second && second->match(text, m_separator->interval.end, end, flags) &&
              -
              4333 second->value < 60)
              -
              4334 {
              -
              4335 // hh::mm:ss
              -
              4336 if (m_millisecond_separator && m_millisecond_separator->match(text, second->interval.end, end, flags) &&
              -
              4337 millisecond && millisecond->match(text, m_millisecond_separator->interval.end, end, flags) &&
              -
              4338 millisecond->value < 1000)
              -
              4339 {
              -
              4340 // hh::mm:ss.mmmm
              -
              4341 this->interval.end = millisecond->interval.end;
              -
              4342 }
              -
              4343 else {
              -
              4344 if (millisecond) millisecond->invalidate();
              -
              4345 this->interval.end = second->interval.end;
              -
              4346 }
              -
              4347 }
              -
              4348 else {
              -
              4349 if (second) second->invalidate();
              -
              4350 if (millisecond) millisecond->invalidate();
              -
              4351 this->interval.end = minute->interval.end;
              -
              4352 }
              -
              4353 this->interval.start = start;
              -
              4354 return true;
              -
              4355 }
              -
              4356
              -
              4357 hour->invalidate();
              -
              4358 minute->invalidate();
              -
              4359 if (second) second->invalidate();
              -
              4360 if (millisecond) millisecond->invalidate();
              -
              4361 this->interval.start = (this->interval.end = start) + 1;
              -
              4362 return false;
              -
              4363 }
              -
              4364
              -
              4365 virtual void invalidate()
              -
              4366 {
              -
              4367 hour->invalidate();
              -
              4368 minute->invalidate();
              -
              4369 if (second) second->invalidate();
              -
              4370 if (millisecond) millisecond->invalidate();
              - -
              4372 }
              -
              4373
              -
              4374 public:
              -
              4375 std::shared_ptr<basic_integer10<T>> hour;
              -
              4376 std::shared_ptr<basic_integer10<T>> minute;
              -
              4377 std::shared_ptr<basic_integer10<T>> second;
              -
              4378 std::shared_ptr<basic_integer10<T>> millisecond;
              -
              4379
              -
              4380 protected:
              -
              4381 std::shared_ptr<basic_set<T>> m_separator;
              -
              4382 std::shared_ptr<basic_parser<T>> m_millisecond_separator;
              -
              4383 };
              +
              4280
              +
              4281 using date = basic_date<char>;
              +
              4282 using wdate = basic_date<wchar_t>;
              +
              4283#ifdef _UNICODE
              +
              4284 using tdate = wdate;
              +
              4285#else
              +
              4286 using tdate = date;
              +
              4287#endif
              + +
              4289
              +
              4293 template <class T>
              +
              +
              4294 class basic_time : public basic_parser<T>
              +
              4295 {
              +
              4296 public:
              +
              4297 basic_time(
              +
              4298 _In_ const std::shared_ptr<basic_integer10<T>>& _hour,
              +
              4299 _In_ const std::shared_ptr<basic_integer10<T>>& _minute,
              +
              4300 _In_ const std::shared_ptr<basic_integer10<T>>& _second,
              +
              4301 _In_ const std::shared_ptr<basic_integer10<T>>& _millisecond,
              +
              4302 _In_ const std::shared_ptr<basic_set<T>>& separator,
              +
              4303 _In_ const std::shared_ptr<basic_parser<T>>& millisecond_separator,
              +
              4304 _In_ const std::locale& locale = std::locale()) :
              +
              4305 basic_parser<T>(locale),
              +
              4306 hour(_hour),
              +
              4307 minute(_minute),
              +
              4308 second(_second),
              +
              4309 millisecond(_millisecond),
              +
              4310 m_separator(separator),
              +
              4311 m_millisecond_separator(millisecond_separator)
              +
              4312 {}
              +
              4313
              +
              4314 virtual bool match(
              +
              4315 _In_reads_or_z_(end) const T* text,
              +
              4316 _In_ size_t start = 0,
              +
              4317 _In_ size_t end = SIZE_MAX,
              +
              4318 _In_ int flags = match_default)
              +
              4319 {
              +
              4320 _Assume_(text || start >= end);
              +
              4321
              +
              4322 if (hour->match(text, start, end, flags) &&
              +
              4323 m_separator->match(text, hour->interval.end, end, flags) &&
              +
              4324 minute->match(text, m_separator->interval.end, end, flags) &&
              +
              4325 minute->value < 60)
              +
              4326 {
              +
              4327 // hh::mm
              +
              4328 size_t hit_offset = m_separator->hit_offset;
              +
              4329 if (m_separator->match(text, minute->interval.end, end, flags) &&
              +
              4330 m_separator->hit_offset == hit_offset && // Both separators must match.
              +
              4331 second && second->match(text, m_separator->interval.end, end, flags) &&
              +
              4332 second->value < 60)
              +
              4333 {
              +
              4334 // hh::mm:ss
              +
              4335 if (m_millisecond_separator && m_millisecond_separator->match(text, second->interval.end, end, flags) &&
              +
              4336 millisecond && millisecond->match(text, m_millisecond_separator->interval.end, end, flags) &&
              +
              4337 millisecond->value < 1000)
              +
              4338 {
              +
              4339 // hh::mm:ss.mmmm
              +
              4340 this->interval.end = millisecond->interval.end;
              +
              4341 }
              +
              4342 else {
              +
              4343 if (millisecond) millisecond->invalidate();
              +
              4344 this->interval.end = second->interval.end;
              +
              4345 }
              +
              4346 }
              +
              4347 else {
              +
              4348 if (second) second->invalidate();
              +
              4349 if (millisecond) millisecond->invalidate();
              +
              4350 this->interval.end = minute->interval.end;
              +
              4351 }
              +
              4352 this->interval.start = start;
              +
              4353 return true;
              +
              4354 }
              +
              4355
              +
              4356 hour->invalidate();
              +
              4357 minute->invalidate();
              +
              4358 if (second) second->invalidate();
              +
              4359 if (millisecond) millisecond->invalidate();
              +
              4360 this->interval.invalidate();
              +
              4361 return false;
              +
              4362 }
              +
              4363
              +
              4364 virtual void invalidate()
              +
              4365 {
              +
              4366 hour->invalidate();
              +
              4367 minute->invalidate();
              +
              4368 if (second) second->invalidate();
              +
              4369 if (millisecond) millisecond->invalidate();
              + +
              4371 }
              +
              4372
              +
              4373 public:
              +
              4374 std::shared_ptr<basic_integer10<T>> hour;
              +
              4375 std::shared_ptr<basic_integer10<T>> minute;
              +
              4376 std::shared_ptr<basic_integer10<T>> second;
              +
              4377 std::shared_ptr<basic_integer10<T>> millisecond;
              +
              4378
              +
              4379 protected:
              +
              4380 std::shared_ptr<basic_set<T>> m_separator;
              +
              4381 std::shared_ptr<basic_parser<T>> m_millisecond_separator;
              +
              4382 };
              -
              4384
              -
              4385 using time = basic_time<char>;
              -
              4386 using wtime = basic_time<wchar_t>;
              -
              4387#ifdef _UNICODE
              -
              4388 using ttime = wtime;
              -
              4389#else
              -
              4390 using ttime = time;
              -
              4391#endif
              - -
              4393
              -
              4397 template <class T>
              -
              -
              4398 class basic_angle : public basic_parser<T>
              -
              4399 {
              -
              4400 public:
              - -
              4402 _In_ const std::shared_ptr<basic_integer10<T>>& _degree,
              -
              4403 _In_ const std::shared_ptr<basic_parser<T>>& _degree_separator,
              -
              4404 _In_ const std::shared_ptr<basic_integer10<T>>& _minute,
              -
              4405 _In_ const std::shared_ptr<basic_parser<T>>& _minute_separator,
              -
              4406 _In_ const std::shared_ptr<basic_integer10<T>>& _second,
              -
              4407 _In_ const std::shared_ptr<basic_parser<T>>& _second_separator,
              -
              4408 _In_ const std::shared_ptr<basic_parser<T>>& _decimal,
              -
              4409 _In_ const std::locale& locale = std::locale()) :
              -
              4410 basic_parser<T>(locale),
              -
              4411 degree(_degree),
              -
              4412 degree_separator(_degree_separator),
              -
              4413 minute(_minute),
              -
              4414 minute_separator(_minute_separator),
              -
              4415 second(_second),
              -
              4416 second_separator(_second_separator),
              -
              4417 decimal(_decimal)
              -
              4418 {}
              -
              4419
              -
              4420 virtual bool match(
              -
              4421 _In_reads_or_z_(end) const T* text,
              -
              4422 _In_ size_t start = 0,
              -
              4423 _In_ size_t end = (size_t)-1,
              -
              4424 _In_ int flags = match_default)
              -
              4425 {
              -
              4426 _Assume_(text || start >= end);
              -
              4427
              -
              4428 this->interval.end = start;
              -
              4429
              -
              4430 if (degree->match(text, this->interval.end, end, flags) &&
              -
              4431 degree_separator->match(text, degree->interval.end, end, flags))
              -
              4432 {
              -
              4433 // Degrees
              -
              4434 this->interval.end = degree_separator->interval.end;
              -
              4435 }
              -
              4436 else {
              -
              4437 degree->invalidate();
              -
              4438 degree_separator->invalidate();
              -
              4439 }
              -
              4440
              -
              4441 if (minute->match(text, this->interval.end, end, flags) &&
              -
              4442 minute->value < 60 &&
              -
              4443 minute_separator->match(text, minute->interval.end, end, flags))
              -
              4444 {
              -
              4445 // Minutes
              -
              4446 this->interval.end = minute_separator->interval.end;
              -
              4447 }
              -
              4448 else {
              -
              4449 minute->invalidate();
              -
              4450 minute_separator->invalidate();
              -
              4451 }
              -
              4452
              -
              4453 if (second && second->match(text, this->interval.end, end, flags) &&
              -
              4454 second->value < 60)
              -
              4455 {
              -
              4456 // Seconds
              -
              4457 this->interval.end = second->interval.end;
              -
              4458 if (second_separator && second_separator->match(text, this->interval.end, end, flags))
              -
              4459 this->interval.end = second_separator->interval.end;
              -
              4460 else
              -
              4461 if (second_separator) second_separator->invalidate();
              -
              4462 }
              -
              4463 else {
              -
              4464 if (second) second->invalidate();
              -
              4465 if (second_separator) second_separator->invalidate();
              -
              4466 }
              -
              4467
              -
              4468 if (degree->interval.start < degree->interval.end ||
              -
              4469 minute->interval.start < minute->interval.end ||
              -
              4470 (second && second->interval.start < second->interval.end))
              -
              4471 {
              -
              4472 if (decimal && decimal->match(text, this->interval.end, end, flags)) {
              -
              4473 // Decimals
              -
              4474 this->interval.end = decimal->interval.end;
              -
              4475 }
              -
              4476 else if (decimal)
              -
              4477 decimal->invalidate();
              -
              4478 this->interval.start = start;
              -
              4479 return true;
              -
              4480 }
              -
              4481 if (decimal) decimal->invalidate();
              -
              4482 this->interval.start = (this->interval.end = start) + 1;
              -
              4483 return false;
              -
              4484 }
              -
              4485
              -
              4486 virtual void invalidate()
              -
              4487 {
              -
              4488 degree->invalidate();
              -
              4489 degree_separator->invalidate();
              -
              4490 minute->invalidate();
              -
              4491 minute_separator->invalidate();
              -
              4492 if (second) second->invalidate();
              -
              4493 if (second_separator) second_separator->invalidate();
              -
              4494 if (decimal) decimal->invalidate();
              - -
              4496 }
              -
              4497
              -
              4498 public:
              -
              4499 std::shared_ptr<basic_integer10<T>> degree;
              -
              4500 std::shared_ptr<basic_parser<T>> degree_separator;
              -
              4501 std::shared_ptr<basic_integer10<T>> minute;
              -
              4502 std::shared_ptr<basic_parser<T>> minute_separator;
              -
              4503 std::shared_ptr<basic_integer10<T>> second;
              -
              4504 std::shared_ptr<basic_parser<T>> second_separator;
              -
              4505 std::shared_ptr<basic_parser<T>> decimal;
              -
              4506 };
              +
              4383
              +
              4384 using time = basic_time<char>;
              +
              4385 using wtime = basic_time<wchar_t>;
              +
              4386#ifdef _UNICODE
              +
              4387 using ttime = wtime;
              +
              4388#else
              +
              4389 using ttime = time;
              +
              4390#endif
              + +
              4392
              +
              4396 template <class T>
              +
              +
              4397 class basic_angle : public basic_parser<T>
              +
              4398 {
              +
              4399 public:
              + +
              4401 _In_ const std::shared_ptr<basic_integer10<T>>& _degree,
              +
              4402 _In_ const std::shared_ptr<basic_parser<T>>& _degree_separator,
              +
              4403 _In_ const std::shared_ptr<basic_integer10<T>>& _minute,
              +
              4404 _In_ const std::shared_ptr<basic_parser<T>>& _minute_separator,
              +
              4405 _In_ const std::shared_ptr<basic_integer10<T>>& _second,
              +
              4406 _In_ const std::shared_ptr<basic_parser<T>>& _second_separator,
              +
              4407 _In_ const std::shared_ptr<basic_parser<T>>& _decimal,
              +
              4408 _In_ const std::locale& locale = std::locale()) :
              +
              4409 basic_parser<T>(locale),
              +
              4410 degree(_degree),
              +
              4411 degree_separator(_degree_separator),
              +
              4412 minute(_minute),
              +
              4413 minute_separator(_minute_separator),
              +
              4414 second(_second),
              +
              4415 second_separator(_second_separator),
              +
              4416 decimal(_decimal)
              +
              4417 {}
              +
              4418
              +
              4419 virtual bool match(
              +
              4420 _In_reads_or_z_(end) const T* text,
              +
              4421 _In_ size_t start = 0,
              +
              4422 _In_ size_t end = SIZE_MAX,
              +
              4423 _In_ int flags = match_default)
              +
              4424 {
              +
              4425 _Assume_(text || start >= end);
              +
              4426
              +
              4427 this->interval.end = start;
              +
              4428
              +
              4429 if (degree->match(text, this->interval.end, end, flags) &&
              +
              4430 degree_separator->match(text, degree->interval.end, end, flags))
              +
              4431 {
              +
              4432 // Degrees
              +
              4433 this->interval.end = degree_separator->interval.end;
              +
              4434 }
              +
              4435 else {
              +
              4436 degree->invalidate();
              +
              4437 degree_separator->invalidate();
              +
              4438 }
              +
              4439
              +
              4440 if (minute->match(text, this->interval.end, end, flags) &&
              +
              4441 minute->value < 60 &&
              +
              4442 minute_separator->match(text, minute->interval.end, end, flags))
              +
              4443 {
              +
              4444 // Minutes
              +
              4445 this->interval.end = minute_separator->interval.end;
              +
              4446 }
              +
              4447 else {
              +
              4448 minute->invalidate();
              +
              4449 minute_separator->invalidate();
              +
              4450 }
              +
              4451
              +
              4452 if (second && second->match(text, this->interval.end, end, flags) &&
              +
              4453 second->value < 60)
              +
              4454 {
              +
              4455 // Seconds
              +
              4456 this->interval.end = second->interval.end;
              +
              4457 if (second_separator && second_separator->match(text, this->interval.end, end, flags))
              +
              4458 this->interval.end = second_separator->interval.end;
              +
              4459 else
              +
              4460 if (second_separator) second_separator->invalidate();
              +
              4461 }
              +
              4462 else {
              +
              4463 if (second) second->invalidate();
              +
              4464 if (second_separator) second_separator->invalidate();
              +
              4465 }
              +
              4466
              +
              4467 if (degree->interval.start < degree->interval.end ||
              +
              4468 minute->interval.start < minute->interval.end ||
              +
              4469 (second && second->interval.start < second->interval.end))
              +
              4470 {
              +
              4471 if (decimal && decimal->match(text, this->interval.end, end, flags)) {
              +
              4472 // Decimals
              +
              4473 this->interval.end = decimal->interval.end;
              +
              4474 }
              +
              4475 else if (decimal)
              +
              4476 decimal->invalidate();
              +
              4477 this->interval.start = start;
              +
              4478 return true;
              +
              4479 }
              +
              4480 if (decimal) decimal->invalidate();
              +
              4481 this->interval.invalidate();
              +
              4482 return false;
              +
              4483 }
              +
              4484
              +
              4485 virtual void invalidate()
              +
              4486 {
              +
              4487 degree->invalidate();
              +
              4488 degree_separator->invalidate();
              +
              4489 minute->invalidate();
              +
              4490 minute_separator->invalidate();
              +
              4491 if (second) second->invalidate();
              +
              4492 if (second_separator) second_separator->invalidate();
              +
              4493 if (decimal) decimal->invalidate();
              + +
              4495 }
              +
              4496
              +
              4497 public:
              +
              4498 std::shared_ptr<basic_integer10<T>> degree;
              +
              4499 std::shared_ptr<basic_parser<T>> degree_separator;
              +
              4500 std::shared_ptr<basic_integer10<T>> minute;
              +
              4501 std::shared_ptr<basic_parser<T>> minute_separator;
              +
              4502 std::shared_ptr<basic_integer10<T>> second;
              +
              4503 std::shared_ptr<basic_parser<T>> second_separator;
              +
              4504 std::shared_ptr<basic_parser<T>> decimal;
              +
              4505 };
              -
              4507
              -
              4508 using angle = basic_angle<char>;
              - -
              4510#ifdef _UNICODE
              -
              4511 using RRegElKot = wangle;
              -
              4512#else
              -
              4513 using RRegElKot = angle;
              -
              4514#endif
              - -
              4516
              -
              4520 template <class T>
              -
              - -
              4522 {
              -
              4523 public:
              - -
              4525 _In_ const std::shared_ptr<basic_parser<T>>& digit,
              -
              4526 _In_ const std::shared_ptr<basic_parser<T>>& plus_sign,
              -
              4527 _In_ const std::shared_ptr<basic_set<T>>& lparenthesis,
              -
              4528 _In_ const std::shared_ptr<basic_set<T>>& rparenthesis,
              -
              4529 _In_ const std::shared_ptr<basic_parser<T>>& separator,
              -
              4530 _In_ const std::shared_ptr<basic_parser<T>>& space,
              -
              4531 _In_ const std::locale& locale = std::locale()) :
              -
              4532 basic_parser<T>(locale),
              -
              4533 m_digit(digit),
              -
              4534 m_plus_sign(plus_sign),
              -
              4535 m_lparenthesis(lparenthesis),
              -
              4536 m_rparenthesis(rparenthesis),
              -
              4537 m_separator(separator),
              -
              4538 m_space(space)
              -
              4539 {}
              -
              4540
              -
              4541 virtual bool match(
              -
              4542 _In_reads_or_z_(end) const T* text,
              -
              4543 _In_ size_t start = 0,
              -
              4544 _In_ size_t end = (size_t)-1,
              -
              4545 _In_ int flags = match_default)
              -
              4546 {
              -
              4547 _Assume_(text || start >= end);
              -
              4548
              -
              4549 size_t safe_digit_end = start, safe_value_size = 0;
              -
              4550 bool has_digits = false, after_digit = false, in_parentheses = false, after_parentheses = false;
              -
              4551 const int space_match_flags = flags & ~match_multiline; // Spaces in phone numbers must never be broken in new line.
              -
              4552
              -
              4553 this->interval.end = start;
              -
              4554 value.clear();
              -
              4555 m_lparenthesis->invalidate();
              -
              4556 m_rparenthesis->invalidate();
              -
              4557
              -
              4558 if (m_plus_sign && m_plus_sign->match(text, this->interval.end, end, flags)) {
              -
              4559 value.append(text + m_plus_sign->interval.start, text + m_plus_sign->interval.end);
              -
              4560 safe_value_size = value.size();
              -
              4561 this->interval.end = m_plus_sign->interval.end;
              -
              4562 }
              -
              4563
              -
              4564 for (;;) {
              -
              4565 _Assume_(text || this->interval.end >= end);
              -
              4566 if (this->interval.end >= end || !text[this->interval.end])
              -
              4567 break;
              -
              4568 if (m_digit->match(text, this->interval.end, end, flags)) {
              -
              4569 // Digit
              -
              4570 value.append(text + m_digit->interval.start, text + m_digit->interval.end);
              -
              4571 this->interval.end = m_digit->interval.end;
              -
              4572 if (!in_parentheses) {
              -
              4573 safe_digit_end = this->interval.end;
              -
              4574 safe_value_size = value.size();
              -
              4575 has_digits = true;
              -
              4576 }
              -
              4577 after_digit = true;
              -
              4578 after_parentheses = false;
              -
              4579 }
              -
              4580 else if (
              -
              4581 m_lparenthesis && !m_lparenthesis->interval && // No left parenthesis yet
              -
              4582 m_rparenthesis && !m_rparenthesis->interval && // Right parenthesis after left
              -
              4583 m_lparenthesis->match(text, this->interval.end, end, flags))
              -
              4584 {
              -
              4585 // Left parenthesis
              -
              4586 value.append(text + m_lparenthesis->interval.start, m_lparenthesis->interval.size());
              -
              4587 this->interval.end = m_lparenthesis->interval.end;
              -
              4588 in_parentheses = true;
              -
              4589 after_digit = false;
              -
              4590 after_parentheses = false;
              -
              4591 }
              -
              4592 else if (
              -
              4593 in_parentheses && // After left parenthesis
              -
              4594 m_rparenthesis && !m_rparenthesis->interval && // No right parenthesis yet
              -
              4595 m_rparenthesis->match(text, this->interval.end, end, flags) &&
              -
              4596 m_lparenthesis->hit_offset == m_rparenthesis->hit_offset) // Left and right parentheses must match
              -
              4597 {
              -
              4598 // Right parenthesis
              -
              4599 value.append(text + m_rparenthesis->interval.start, text + m_rparenthesis->interval.end);
              -
              4600 this->interval.end = m_rparenthesis->interval.end;
              -
              4601 safe_digit_end = this->interval.end;
              -
              4602 safe_value_size = value.size();
              -
              4603 in_parentheses = false;
              -
              4604 after_digit = false;
              -
              4605 after_parentheses = true;
              -
              4606 }
              -
              4607 else if (
              -
              4608 after_digit &&
              -
              4609 !in_parentheses && // No separators inside parentheses
              -
              4610 !after_parentheses && // No separators following right parenthesis
              -
              4611 m_separator && m_separator->match(text, this->interval.end, end, flags))
              -
              4612 {
              -
              4613 // Separator
              -
              4614 this->interval.end = m_separator->interval.end;
              -
              4615 after_digit = false;
              -
              4616 after_parentheses = false;
              -
              4617 }
              -
              4618 else if (
              - -
              4620 m_space && m_space->match(text, this->interval.end, end, space_match_flags))
              -
              4621 {
              -
              4622 // Space
              -
              4623 this->interval.end = m_space->interval.end;
              -
              4624 after_digit = false;
              -
              4625 after_parentheses = false;
              -
              4626 }
              -
              4627 else
              -
              4628 break;
              -
              4629 }
              -
              4630 if (has_digits) {
              -
              4631 value.erase(safe_value_size);
              -
              4632 this->interval.start = start;
              -
              4633 this->interval.end = safe_digit_end;
              -
              4634 return true;
              -
              4635 }
              -
              4636 value.clear();
              -
              4637 this->interval.start = (this->interval.end = start) + 1;
              -
              4638 return false;
              -
              4639 }
              -
              4640
              -
              4641 virtual void invalidate()
              -
              4642 {
              -
              4643 value.clear();
              - -
              4645 }
              -
              4646
              -
              4647 public:
              -
              4648 std::basic_string<T> value;
              -
              4649
              -
              4650 protected:
              -
              4651 std::shared_ptr<basic_parser<T>> m_digit;
              -
              4652 std::shared_ptr<basic_parser<T>> m_plus_sign;
              -
              4653 std::shared_ptr<basic_set<T>> m_lparenthesis;
              -
              4654 std::shared_ptr<basic_set<T>> m_rparenthesis;
              -
              4655 std::shared_ptr<basic_parser<T>> m_separator;
              -
              4656 std::shared_ptr<basic_parser<T>> m_space;
              -
              4657 };
              +
              4506
              +
              4507 using angle = basic_angle<char>;
              + +
              4509#ifdef _UNICODE
              +
              4510 using RRegElKot = wangle;
              +
              4511#else
              +
              4512 using RRegElKot = angle;
              +
              4513#endif
              + +
              4515
              +
              4519 template <class T>
              +
              + +
              4521 {
              +
              4522 public:
              + +
              4524 _In_ const std::shared_ptr<basic_parser<T>>& digit,
              +
              4525 _In_ const std::shared_ptr<basic_parser<T>>& plus_sign,
              +
              4526 _In_ const std::shared_ptr<basic_set<T>>& lparenthesis,
              +
              4527 _In_ const std::shared_ptr<basic_set<T>>& rparenthesis,
              +
              4528 _In_ const std::shared_ptr<basic_parser<T>>& separator,
              +
              4529 _In_ const std::shared_ptr<basic_parser<T>>& space,
              +
              4530 _In_ const std::locale& locale = std::locale()) :
              +
              4531 basic_parser<T>(locale),
              +
              4532 m_digit(digit),
              +
              4533 m_plus_sign(plus_sign),
              +
              4534 m_lparenthesis(lparenthesis),
              +
              4535 m_rparenthesis(rparenthesis),
              +
              4536 m_separator(separator),
              +
              4537 m_space(space)
              +
              4538 {}
              +
              4539
              +
              4540 virtual bool match(
              +
              4541 _In_reads_or_z_(end) const T* text,
              +
              4542 _In_ size_t start = 0,
              +
              4543 _In_ size_t end = SIZE_MAX,
              +
              4544 _In_ int flags = match_default)
              +
              4545 {
              +
              4546 _Assume_(text || start >= end);
              +
              4547
              +
              4548 size_t safe_digit_end = start, safe_value_size = 0;
              +
              4549 bool has_digits = false, after_digit = false, in_parentheses = false, after_parentheses = false;
              +
              4550 const int space_match_flags = flags & ~match_multiline; // Spaces in phone numbers must never be broken in new line.
              +
              4551
              +
              4552 this->interval.end = start;
              +
              4553 value.clear();
              +
              4554 m_lparenthesis->invalidate();
              +
              4555 m_rparenthesis->invalidate();
              +
              4556
              +
              4557 if (m_plus_sign && m_plus_sign->match(text, this->interval.end, end, flags)) {
              +
              4558 value.append(text + m_plus_sign->interval.start, text + m_plus_sign->interval.end);
              +
              4559 safe_value_size = value.size();
              +
              4560 this->interval.end = m_plus_sign->interval.end;
              +
              4561 }
              +
              4562
              +
              4563 for (;;) {
              +
              4564 _Assume_(text || this->interval.end >= end);
              +
              4565 if (this->interval.end >= end || !text[this->interval.end])
              +
              4566 break;
              +
              4567 if (m_digit->match(text, this->interval.end, end, flags)) {
              +
              4568 // Digit
              +
              4569 value.append(text + m_digit->interval.start, text + m_digit->interval.end);
              +
              4570 this->interval.end = m_digit->interval.end;
              +
              4571 if (!in_parentheses) {
              +
              4572 safe_digit_end = this->interval.end;
              +
              4573 safe_value_size = value.size();
              +
              4574 has_digits = true;
              +
              4575 }
              +
              4576 after_digit = true;
              +
              4577 after_parentheses = false;
              +
              4578 }
              +
              4579 else if (
              +
              4580 m_lparenthesis && !m_lparenthesis->interval && // No left parenthesis yet
              +
              4581 m_rparenthesis && !m_rparenthesis->interval && // Right parenthesis after left
              +
              4582 m_lparenthesis->match(text, this->interval.end, end, flags))
              +
              4583 {
              +
              4584 // Left parenthesis
              +
              4585 value.append(text + m_lparenthesis->interval.start, m_lparenthesis->interval.size());
              +
              4586 this->interval.end = m_lparenthesis->interval.end;
              +
              4587 in_parentheses = true;
              +
              4588 after_digit = false;
              +
              4589 after_parentheses = false;
              +
              4590 }
              +
              4591 else if (
              +
              4592 in_parentheses && // After left parenthesis
              +
              4593 m_rparenthesis && !m_rparenthesis->interval && // No right parenthesis yet
              +
              4594 m_rparenthesis->match(text, this->interval.end, end, flags) &&
              +
              4595 m_lparenthesis->hit_offset == m_rparenthesis->hit_offset) // Left and right parentheses must match
              +
              4596 {
              +
              4597 // Right parenthesis
              +
              4598 value.append(text + m_rparenthesis->interval.start, text + m_rparenthesis->interval.end);
              +
              4599 this->interval.end = m_rparenthesis->interval.end;
              +
              4600 safe_digit_end = this->interval.end;
              +
              4601 safe_value_size = value.size();
              +
              4602 in_parentheses = false;
              +
              4603 after_digit = false;
              +
              4604 after_parentheses = true;
              +
              4605 }
              +
              4606 else if (
              +
              4607 after_digit &&
              +
              4608 !in_parentheses && // No separators inside parentheses
              +
              4609 !after_parentheses && // No separators following right parenthesis
              +
              4610 m_separator && m_separator->match(text, this->interval.end, end, flags))
              +
              4611 {
              +
              4612 // Separator
              +
              4613 this->interval.end = m_separator->interval.end;
              +
              4614 after_digit = false;
              +
              4615 after_parentheses = false;
              +
              4616 }
              +
              4617 else if (
              + +
              4619 m_space && m_space->match(text, this->interval.end, end, space_match_flags))
              +
              4620 {
              +
              4621 // Space
              +
              4622 this->interval.end = m_space->interval.end;
              +
              4623 after_digit = false;
              +
              4624 after_parentheses = false;
              +
              4625 }
              +
              4626 else
              +
              4627 break;
              +
              4628 }
              +
              4629 if (has_digits) {
              +
              4630 value.erase(safe_value_size);
              +
              4631 this->interval.start = start;
              +
              4632 this->interval.end = safe_digit_end;
              +
              4633 return true;
              +
              4634 }
              +
              4635 value.clear();
              +
              4636 this->interval.invalidate();
              +
              4637 return false;
              +
              4638 }
              +
              4639
              +
              4640 virtual void invalidate()
              +
              4641 {
              +
              4642 value.clear();
              + +
              4644 }
              +
              4645
              +
              4646 public:
              +
              4647 std::basic_string<T> value;
              +
              4648
              +
              4649 protected:
              +
              4650 std::shared_ptr<basic_parser<T>> m_digit;
              +
              4651 std::shared_ptr<basic_parser<T>> m_plus_sign;
              +
              4652 std::shared_ptr<basic_set<T>> m_lparenthesis;
              +
              4653 std::shared_ptr<basic_set<T>> m_rparenthesis;
              +
              4654 std::shared_ptr<basic_parser<T>> m_separator;
              +
              4655 std::shared_ptr<basic_parser<T>> m_space;
              +
              4656 };
              -
              4658
              - - -
              4661#ifdef _UNICODE
              - -
              4663#else
              - -
              4665#endif
              - -
              4667
              -
              4673 template <class T>
              -
              -
              4674 class basic_iban : public basic_parser<T>
              -
              4675 {
              -
              4676 public:
              -
              4677 basic_iban(
              -
              4678 _In_ const std::shared_ptr<basic_parser<T>>& space,
              -
              4679 _In_ const std::locale& locale = std::locale()) :
              -
              4680 basic_parser<T>(locale),
              -
              4681 m_space(space)
              -
              4682 {
              -
              4683 this->country[0] = 0;
              -
              4684 this->check_digits[0] = 0;
              -
              4685 this->bban[0] = 0;
              -
              4686 this->is_valid = false;
              -
              4687 }
              -
              4688
              -
              4689 virtual bool match(
              -
              4690 _In_reads_or_z_(end) const T* text,
              -
              4691 _In_ size_t start = 0,
              -
              4692 _In_ size_t end = (size_t)-1,
              -
              4693 _In_ int flags = match_default)
              -
              4694 {
              -
              4695 _Assume_(text || start >= end);
              -
              4696 const auto& ctype = std::use_facet<std::ctype<T>>(this->m_locale);
              -
              4697 const bool case_insensitive = flags & match_case_insensitive ? true : false;
              -
              4698 struct country_t {
              -
              4699 T country[2];
              -
              4700 T check_digits[2];
              -
              4701 size_t length;
              -
              4702 };
              -
              4703 static const country_t s_countries[] = {
              -
              4704 { { 'A', 'D' }, {}, 24 }, // Andorra
              -
              4705 { { 'A', 'E' }, {}, 23 }, // United Arab Emirates
              -
              4706 { { 'A', 'L' }, {}, 28 }, // Albania
              -
              4707 { { 'A', 'O' }, {}, 25 }, // Angola
              -
              4708 { { 'A', 'T' }, {}, 20 }, // Austria
              -
              4709 { { 'A', 'Z' }, {}, 28 }, // Azerbaijan
              -
              4710 { { 'B', 'A' }, { '3', '9' }, 20}, // Bosnia and Herzegovina
              -
              4711 { { 'B', 'E' }, {}, 16 }, // Belgium
              -
              4712 { { 'B', 'F' }, {}, 28 }, // Burkina Faso
              -
              4713 { { 'B', 'G' }, {}, 22 }, // Bulgaria
              -
              4714 { { 'B', 'H' }, {}, 22 }, // Bahrain
              -
              4715 { { 'B', 'I' }, {}, 27 }, // Burundi
              -
              4716 { { 'B', 'J' }, {}, 28 }, // Benin
              -
              4717 { { 'B', 'R' }, {}, 29 }, // Brazil
              -
              4718 { { 'B', 'Y' }, {}, 28 }, // Belarus
              -
              4719 { { 'C', 'F' }, {}, 27 }, // Central African Republic
              -
              4720 { { 'C', 'G' }, {}, 27 }, // Congo, Republic of the
              -
              4721 { { 'C', 'H' }, {}, 21 }, // Switzerland
              -
              4722 { { 'C', 'I' }, {}, 28 }, // Côte d'Ivoire
              -
              4723 { { 'C', 'M' }, {}, 27 }, // Cameroon
              -
              4724 { { 'C', 'R' }, {}, 22 }, // Costa Rica
              -
              4725 { { 'C', 'V' }, {}, 25 }, // Cabo Verde
              -
              4726 { { 'C', 'Y' }, {}, 28 }, // Cyprus
              -
              4727 { { 'C', 'Z' }, {}, 24 }, // Czech Republic
              -
              4728 { { 'D', 'E' }, {}, 22 }, // Germany
              -
              4729 { { 'D', 'J' }, {}, 27 }, // Djibouti
              -
              4730 { { 'D', 'K' }, {}, 18 }, // Denmark
              -
              4731 { { 'D', 'O' }, {}, 28 }, // Dominican Republic
              -
              4732 { { 'D', 'Z' }, {}, 26 }, // Algeria
              -
              4733 { { 'E', 'E' }, {}, 20 }, // Estonia
              -
              4734 { { 'E', 'G' }, {}, 29 }, // Egypt
              -
              4735 { { 'E', 'S' }, {}, 24 }, // Spain
              -
              4736 { { 'F', 'I' }, {}, 18 }, // Finland
              -
              4737 { { 'F', 'O' }, {}, 18 }, // Faroe Islands
              -
              4738 { { 'F', 'R' }, {}, 27 }, // France
              -
              4739 { { 'G', 'A' }, {}, 27 }, // Gabon
              -
              4740 { { 'G', 'B' }, {}, 22 }, // United Kingdom
              -
              4741 { { 'G', 'E' }, {}, 22 }, // Georgia
              -
              4742 { { 'G', 'I' }, {}, 23 }, // Gibraltar
              -
              4743 { { 'G', 'L' }, {}, 18 }, // Greenland
              -
              4744 { { 'G', 'Q' }, {}, 27 }, // Equatorial Guinea
              -
              4745 { { 'G', 'R' }, {}, 27 }, // Greece
              -
              4746 { { 'G', 'T' }, {}, 28 }, // Guatemala
              -
              4747 { { 'G', 'W' }, {}, 25 }, // Guinea-Bissau
              -
              4748 { { 'H', 'N' }, {}, 28 }, // Honduras
              -
              4749 { { 'H', 'R' }, {}, 21 }, // Croatia
              -
              4750 { { 'H', 'U' }, {}, 28 }, // Hungary
              -
              4751 { { 'I', 'E' }, {}, 22 }, // Ireland
              -
              4752 { { 'I', 'L' }, {}, 23 }, // Israel
              -
              4753 { { 'I', 'Q' }, {}, 23 }, // Iraq
              -
              4754 { { 'I', 'R' }, {}, 26 }, // Iran
              -
              4755 { { 'I', 'S' }, {}, 26 }, // Iceland
              -
              4756 { { 'I', 'T' }, {}, 27 }, // Italy
              -
              4757 { { 'J', 'O' }, {}, 30 }, // Jordan
              -
              4758 { { 'K', 'M' }, {}, 27 }, // Comoros
              -
              4759 { { 'K', 'W' }, {}, 30 }, // Kuwait
              -
              4760 { { 'K', 'Z' }, {}, 20 }, // Kazakhstan
              -
              4761 { { 'L', 'B' }, {}, 28 }, // Lebanon
              -
              4762 { { 'L', 'C' }, {}, 32 }, // Saint Lucia
              -
              4763 { { 'L', 'I' }, {}, 21 }, // Liechtenstein
              -
              4764 { { 'L', 'T' }, {}, 20 }, // Lithuania
              -
              4765 { { 'L', 'U' }, {}, 20 }, // Luxembourg
              -
              4766 { { 'L', 'V' }, {}, 21 }, // Latvia
              -
              4767 { { 'L', 'Y' }, {}, 25 }, // Libya
              -
              4768 { { 'M', 'A' }, {}, 28 }, // Morocco
              -
              4769 { { 'M', 'C' }, {}, 27 }, // Monaco
              -
              4770 { { 'M', 'D' }, {}, 24 }, // Moldova
              -
              4771 { { 'M', 'E' }, { '2', '5' }, 22 }, // Montenegro
              -
              4772 { { 'M', 'G' }, {}, 27 }, // Madagascar
              -
              4773 { { 'M', 'K' }, { '0', '7' }, 19 }, // North Macedonia
              -
              4774 { { 'M', 'L' }, {}, 28 }, // Mali
              -
              4775 { { 'M', 'R' }, { '1', '3' }, 27}, // Mauritania
              -
              4776 { { 'M', 'T' }, {}, 31 }, // Malta
              -
              4777 { { 'M', 'U' }, {}, 30 }, // Mauritius
              -
              4778 { { 'M', 'Z' }, {}, 25 }, // Mozambique
              -
              4779 { { 'N', 'E' }, {}, 28 }, // Niger
              -
              4780 { { 'N', 'I' }, {}, 32 }, // Nicaragua
              -
              4781 { { 'N', 'L' }, {}, 18 }, // Netherlands
              -
              4782 { { 'N', 'O' }, {}, 15 }, // Norway
              -
              4783 { { 'P', 'K' }, {}, 24 }, // Pakistan
              -
              4784 { { 'P', 'L' }, {}, 28 }, // Poland
              -
              4785 { { 'P', 'S' }, {}, 29 }, // Palestinian territories
              -
              4786 { { 'P', 'T' }, { '5', '0' }, 25 }, // Portugal
              -
              4787 { { 'Q', 'A' }, {}, 29 }, // Qatar
              -
              4788 { { 'R', 'O' }, {}, 24 }, // Romania
              -
              4789 { { 'R', 'S' }, { '3', '5' }, 22 }, // Serbia
              -
              4790 { { 'R', 'U' }, {}, 33 }, // Russia
              -
              4791 { { 'S', 'A' }, {}, 24 }, // Saudi Arabia
              -
              4792 { { 'S', 'C' }, {}, 31 }, // Seychelles
              -
              4793 { { 'S', 'D' }, {}, 18 }, // Sudan
              -
              4794 { { 'S', 'E' }, {}, 24 }, // Sweden
              -
              4795 { { 'S', 'I' }, { '5', '6' }, 19 }, // Slovenia
              -
              4796 { { 'S', 'K' }, {}, 24 }, // Slovakia
              -
              4797 { { 'S', 'M' }, {}, 27 }, // San Marino
              -
              4798 { { 'S', 'N' }, {}, 28 }, // Senegal
              -
              4799 { { 'S', 'T' }, {}, 25 }, // São Tomé and Príncipe
              -
              4800 { { 'S', 'V' }, {}, 28 }, // El Salvador
              -
              4801 { { 'T', 'D' }, {}, 27 }, // Chad
              -
              4802 { { 'T', 'G' }, {}, 28 }, // Togo
              -
              4803 { { 'T', 'L' }, { '3', '8' }, 23}, // East Timor
              -
              4804 { { 'T', 'N' }, { '5', '9' }, 24 }, // Tunisia
              -
              4805 { { 'T', 'R' }, {}, 26 }, // Turkey
              -
              4806 { { 'U', 'A' }, {}, 29 }, // Ukraine
              -
              4807 { { 'V', 'A' }, {}, 22 }, // Vatican City
              -
              4808 { { 'V', 'G' }, {}, 24 }, // Virgin Islands, British
              -
              4809 { { 'X', 'K' }, {}, 20 }, // Kosovo
              -
              4810 };
              -
              4811 const country_t* country_desc = nullptr;
              -
              4812 size_t n, available, next, bban_length;
              - -
              4814
              -
              4815 this->interval.end = start;
              -
              4816 for (size_t i = 0; i < 2; ++i, ++this->interval.end) {
              -
              4817 if (this->interval.end >= end || !text[this->interval.end])
              -
              4818 goto error; // incomplete country code
              -
              4819 T chr = case_insensitive ? ctype.toupper(text[this->interval.end]) : text[this->interval.end];
              -
              4820 if (chr < 'A' || 'Z' < chr)
              -
              4821 goto error; // invalid country code
              -
              4822 this->country[i] = chr;
              -
              4823 }
              -
              4824 for (size_t l = 0, r = _countof(s_countries);;) {
              -
              4825 if (l >= r)
              -
              4826 goto error; // unknown country
              -
              4827 size_t m = (l + r) / 2;
              -
              4828 const country_t& c = s_countries[m];
              -
              4829 if (c.country[0] < this->country[0] || (c.country[0] == this->country[0] && c.country[1] < this->country[1]))
              -
              4830 l = m + 1;
              -
              4831 else if (this->country[0] < c.country[0] || (this->country[0] == c.country[0] && this->country[1] < c.country[1]))
              -
              4832 r = m;
              -
              4833 else {
              -
              4834 country_desc = &c;
              -
              4835 break;
              -
              4836 }
              -
              4837 }
              -
              4838 this->country[2] = 0;
              -
              4839
              -
              4840 for (size_t i = 0; i < 2; ++i, ++this->interval.end) {
              -
              4841 if (this->interval.end >= end || text[this->interval.end] < '0' || '9' < text[this->interval.end])
              -
              4842 goto error; // incomplete or invalid check digits
              -
              4843 this->check_digits[i] = text[this->interval.end];
              -
              4844 }
              -
              4845 this->check_digits[2] = 0;
              -
              4846
              -
              4847 if ((country_desc->check_digits[0] && this->check_digits[0] != country_desc->check_digits[0]) ||
              -
              4848 (country_desc->check_digits[1] && this->check_digits[1] != country_desc->check_digits[1]))
              -
              4849 goto error; // unexpected check digits
              -
              4850
              -
              4851 bban_length = country_desc->length - 4;
              -
              4852 for (n = 0; n < bban_length;) {
              -
              4853 if (this->interval.end >= end || !text[this->interval.end])
              -
              4854 goto error; // bban too short
              -
              4855 if (m_space && m_space->match(text, this->interval.end, end, flags)) {
              -
              4856 this->interval.end = m_space->interval.end;
              -
              4857 continue;
              -
              4858 }
              -
              4859 T chr = case_insensitive ? ctype.toupper(text[this->interval.end]) : text[this->interval.end];
              -
              4860 if (('0' <= chr && chr <= '9') || ('A' <= chr && chr <= 'Z')) {
              -
              4861 this->bban[n++] = chr;
              -
              4862 this->interval.end++;
              -
              4863 }
              -
              4864 else
              -
              4865 goto error; // invalid bban
              -
              4866 }
              -
              4867 this->bban[n] = 0;
              -
              4868
              -
              4869 // Normalize IBAN.
              -
              4870 T normalized[69];
              -
              4871 available = 0;
              -
              4872 for (size_t i = 0; ; ++i) {
              -
              4873 if (!this->bban[i]) {
              -
              4874 for (i = 0; i < 2; ++i) {
              -
              4875 if ('A' <= this->country[i] && this->country[i] <= 'J') {
              -
              4876 normalized[available++] = '1';
              -
              4877 normalized[available++] = '0' + this->country[i] - 'A';
              -
              4878 }
              -
              4879 else if ('K' <= this->country[i] && this->country[i] <= 'T') {
              -
              4880 normalized[available++] = '2';
              -
              4881 normalized[available++] = '0' + this->country[i] - 'K';
              -
              4882 }
              -
              4883 else if ('U' <= this->country[i] && this->country[i] <= 'Z') {
              -
              4884 normalized[available++] = '3';
              -
              4885 normalized[available++] = '0' + this->country[i] - 'U';
              -
              4886 }
              -
              4887 }
              -
              4888 normalized[available++] = this->check_digits[0];
              -
              4889 normalized[available++] = this->check_digits[1];
              -
              4890 normalized[available] = 0;
              -
              4891 break;
              -
              4892 }
              -
              4893 if ('0' <= this->bban[i] && this->bban[i] <= '9')
              -
              4894 normalized[available++] = this->bban[i];
              -
              4895 else if ('A' <= this->bban[i] && this->bban[i] <= 'J') {
              -
              4896 normalized[available++] = '1';
              -
              4897 normalized[available++] = '0' + this->bban[i] - 'A';
              -
              4898 }
              -
              4899 else if ('K' <= this->bban[i] && this->bban[i] <= 'T') {
              -
              4900 normalized[available++] = '2';
              -
              4901 normalized[available++] = '0' + this->bban[i] - 'K';
              -
              4902 }
              -
              4903 else if ('U' <= this->bban[i] && this->bban[i] <= 'Z') {
              -
              4904 normalized[available++] = '3';
              -
              4905 normalized[available++] = '0' + this->bban[i] - 'U';
              -
              4906 }
              -
              4907 }
              -
              4908
              -
              4909 // Calculate modulo 97.
              -
              4910 nominator = stdex::strtou32(normalized, 9, &next, 10);
              -
              4911 for (;;) {
              -
              4912 nominator %= 97;
              -
              4913 if (!normalized[next]) {
              -
              4914 this->is_valid = nominator == 1;
              -
              4915 break;
              -
              4916 }
              -
              4917 size_t digit_count = nominator == 0 ? 0 : nominator < 10 ? 1 : 2;
              -
              4918 for (; digit_count < 9 && normalized[next]; ++next, ++digit_count)
              -
              4919 nominator = nominator * 10 + (normalized[next] - '0');
              -
              4920 }
              -
              4921
              -
              4922 this->interval.start = start;
              -
              4923 return true;
              -
              4924
              -
              4925 error:
              -
              4926 this->country[0] = 0;
              -
              4927 this->check_digits[0] = 0;
              -
              4928 this->bban[0] = 0;
              -
              4929 this->is_valid = false;
              -
              4930 this->interval.start = (this->interval.end = start) + 1;
              -
              4931 return false;
              -
              4932 }
              -
              4933
              -
              4934 virtual void invalidate()
              -
              4935 {
              -
              4936 this->country[0] = 0;
              -
              4937 this->check_digits[0] = 0;
              -
              4938 this->bban[0] = 0;
              -
              4939 this->is_valid = false;
              - -
              4941 }
              -
              4942
              -
              4943 public:
              -
              4944 T country[3];
              - -
              4946 T bban[31];
              - -
              4948
              -
              4949 protected:
              -
              4950 std::shared_ptr<basic_parser<T>> m_space;
              -
              4951 };
              +
              4657
              + + +
              4660#ifdef _UNICODE
              + +
              4662#else
              + +
              4664#endif
              + +
              4666
              +
              4672 template <class T>
              +
              +
              4673 class basic_iban : public basic_parser<T>
              +
              4674 {
              +
              4675 public:
              +
              4676 basic_iban(
              +
              4677 _In_ const std::shared_ptr<basic_parser<T>>& space,
              +
              4678 _In_ const std::locale& locale = std::locale()) :
              +
              4679 basic_parser<T>(locale),
              +
              4680 m_space(space)
              +
              4681 {
              +
              4682 this->country[0] = 0;
              +
              4683 this->check_digits[0] = 0;
              +
              4684 this->bban[0] = 0;
              +
              4685 this->is_valid = false;
              +
              4686 }
              +
              4687
              +
              4688 virtual bool match(
              +
              4689 _In_reads_or_z_(end) const T* text,
              +
              4690 _In_ size_t start = 0,
              +
              4691 _In_ size_t end = SIZE_MAX,
              +
              4692 _In_ int flags = match_default)
              +
              4693 {
              +
              4694 _Assume_(text || start >= end);
              +
              4695 const auto& ctype = std::use_facet<std::ctype<T>>(this->m_locale);
              +
              4696 const bool case_insensitive = flags & match_case_insensitive ? true : false;
              +
              4697 struct country_t {
              +
              4698 T country[2];
              +
              4699 T check_digits[2];
              +
              4700 size_t length;
              +
              4701 };
              +
              4702 static const country_t s_countries[] = {
              +
              4703 { { 'A', 'D' }, {}, 24 }, // Andorra
              +
              4704 { { 'A', 'E' }, {}, 23 }, // United Arab Emirates
              +
              4705 { { 'A', 'L' }, {}, 28 }, // Albania
              +
              4706 { { 'A', 'O' }, {}, 25 }, // Angola
              +
              4707 { { 'A', 'T' }, {}, 20 }, // Austria
              +
              4708 { { 'A', 'Z' }, {}, 28 }, // Azerbaijan
              +
              4709 { { 'B', 'A' }, { '3', '9' }, 20}, // Bosnia and Herzegovina
              +
              4710 { { 'B', 'E' }, {}, 16 }, // Belgium
              +
              4711 { { 'B', 'F' }, {}, 28 }, // Burkina Faso
              +
              4712 { { 'B', 'G' }, {}, 22 }, // Bulgaria
              +
              4713 { { 'B', 'H' }, {}, 22 }, // Bahrain
              +
              4714 { { 'B', 'I' }, {}, 27 }, // Burundi
              +
              4715 { { 'B', 'J' }, {}, 28 }, // Benin
              +
              4716 { { 'B', 'R' }, {}, 29 }, // Brazil
              +
              4717 { { 'B', 'Y' }, {}, 28 }, // Belarus
              +
              4718 { { 'C', 'F' }, {}, 27 }, // Central African Republic
              +
              4719 { { 'C', 'G' }, {}, 27 }, // Congo, Republic of the
              +
              4720 { { 'C', 'H' }, {}, 21 }, // Switzerland
              +
              4721 { { 'C', 'I' }, {}, 28 }, // Côte d'Ivoire
              +
              4722 { { 'C', 'M' }, {}, 27 }, // Cameroon
              +
              4723 { { 'C', 'R' }, {}, 22 }, // Costa Rica
              +
              4724 { { 'C', 'V' }, {}, 25 }, // Cabo Verde
              +
              4725 { { 'C', 'Y' }, {}, 28 }, // Cyprus
              +
              4726 { { 'C', 'Z' }, {}, 24 }, // Czech Republic
              +
              4727 { { 'D', 'E' }, {}, 22 }, // Germany
              +
              4728 { { 'D', 'J' }, {}, 27 }, // Djibouti
              +
              4729 { { 'D', 'K' }, {}, 18 }, // Denmark
              +
              4730 { { 'D', 'O' }, {}, 28 }, // Dominican Republic
              +
              4731 { { 'D', 'Z' }, {}, 26 }, // Algeria
              +
              4732 { { 'E', 'E' }, {}, 20 }, // Estonia
              +
              4733 { { 'E', 'G' }, {}, 29 }, // Egypt
              +
              4734 { { 'E', 'S' }, {}, 24 }, // Spain
              +
              4735 { { 'F', 'I' }, {}, 18 }, // Finland
              +
              4736 { { 'F', 'O' }, {}, 18 }, // Faroe Islands
              +
              4737 { { 'F', 'R' }, {}, 27 }, // France
              +
              4738 { { 'G', 'A' }, {}, 27 }, // Gabon
              +
              4739 { { 'G', 'B' }, {}, 22 }, // United Kingdom
              +
              4740 { { 'G', 'E' }, {}, 22 }, // Georgia
              +
              4741 { { 'G', 'I' }, {}, 23 }, // Gibraltar
              +
              4742 { { 'G', 'L' }, {}, 18 }, // Greenland
              +
              4743 { { 'G', 'Q' }, {}, 27 }, // Equatorial Guinea
              +
              4744 { { 'G', 'R' }, {}, 27 }, // Greece
              +
              4745 { { 'G', 'T' }, {}, 28 }, // Guatemala
              +
              4746 { { 'G', 'W' }, {}, 25 }, // Guinea-Bissau
              +
              4747 { { 'H', 'N' }, {}, 28 }, // Honduras
              +
              4748 { { 'H', 'R' }, {}, 21 }, // Croatia
              +
              4749 { { 'H', 'U' }, {}, 28 }, // Hungary
              +
              4750 { { 'I', 'E' }, {}, 22 }, // Ireland
              +
              4751 { { 'I', 'L' }, {}, 23 }, // Israel
              +
              4752 { { 'I', 'Q' }, {}, 23 }, // Iraq
              +
              4753 { { 'I', 'R' }, {}, 26 }, // Iran
              +
              4754 { { 'I', 'S' }, {}, 26 }, // Iceland
              +
              4755 { { 'I', 'T' }, {}, 27 }, // Italy
              +
              4756 { { 'J', 'O' }, {}, 30 }, // Jordan
              +
              4757 { { 'K', 'M' }, {}, 27 }, // Comoros
              +
              4758 { { 'K', 'W' }, {}, 30 }, // Kuwait
              +
              4759 { { 'K', 'Z' }, {}, 20 }, // Kazakhstan
              +
              4760 { { 'L', 'B' }, {}, 28 }, // Lebanon
              +
              4761 { { 'L', 'C' }, {}, 32 }, // Saint Lucia
              +
              4762 { { 'L', 'I' }, {}, 21 }, // Liechtenstein
              +
              4763 { { 'L', 'T' }, {}, 20 }, // Lithuania
              +
              4764 { { 'L', 'U' }, {}, 20 }, // Luxembourg
              +
              4765 { { 'L', 'V' }, {}, 21 }, // Latvia
              +
              4766 { { 'L', 'Y' }, {}, 25 }, // Libya
              +
              4767 { { 'M', 'A' }, {}, 28 }, // Morocco
              +
              4768 { { 'M', 'C' }, {}, 27 }, // Monaco
              +
              4769 { { 'M', 'D' }, {}, 24 }, // Moldova
              +
              4770 { { 'M', 'E' }, { '2', '5' }, 22 }, // Montenegro
              +
              4771 { { 'M', 'G' }, {}, 27 }, // Madagascar
              +
              4772 { { 'M', 'K' }, { '0', '7' }, 19 }, // North Macedonia
              +
              4773 { { 'M', 'L' }, {}, 28 }, // Mali
              +
              4774 { { 'M', 'R' }, { '1', '3' }, 27}, // Mauritania
              +
              4775 { { 'M', 'T' }, {}, 31 }, // Malta
              +
              4776 { { 'M', 'U' }, {}, 30 }, // Mauritius
              +
              4777 { { 'M', 'Z' }, {}, 25 }, // Mozambique
              +
              4778 { { 'N', 'E' }, {}, 28 }, // Niger
              +
              4779 { { 'N', 'I' }, {}, 32 }, // Nicaragua
              +
              4780 { { 'N', 'L' }, {}, 18 }, // Netherlands
              +
              4781 { { 'N', 'O' }, {}, 15 }, // Norway
              +
              4782 { { 'P', 'K' }, {}, 24 }, // Pakistan
              +
              4783 { { 'P', 'L' }, {}, 28 }, // Poland
              +
              4784 { { 'P', 'S' }, {}, 29 }, // Palestinian territories
              +
              4785 { { 'P', 'T' }, { '5', '0' }, 25 }, // Portugal
              +
              4786 { { 'Q', 'A' }, {}, 29 }, // Qatar
              +
              4787 { { 'R', 'O' }, {}, 24 }, // Romania
              +
              4788 { { 'R', 'S' }, { '3', '5' }, 22 }, // Serbia
              +
              4789 { { 'R', 'U' }, {}, 33 }, // Russia
              +
              4790 { { 'S', 'A' }, {}, 24 }, // Saudi Arabia
              +
              4791 { { 'S', 'C' }, {}, 31 }, // Seychelles
              +
              4792 { { 'S', 'D' }, {}, 18 }, // Sudan
              +
              4793 { { 'S', 'E' }, {}, 24 }, // Sweden
              +
              4794 { { 'S', 'I' }, { '5', '6' }, 19 }, // Slovenia
              +
              4795 { { 'S', 'K' }, {}, 24 }, // Slovakia
              +
              4796 { { 'S', 'M' }, {}, 27 }, // San Marino
              +
              4797 { { 'S', 'N' }, {}, 28 }, // Senegal
              +
              4798 { { 'S', 'T' }, {}, 25 }, // São Tomé and Príncipe
              +
              4799 { { 'S', 'V' }, {}, 28 }, // El Salvador
              +
              4800 { { 'T', 'D' }, {}, 27 }, // Chad
              +
              4801 { { 'T', 'G' }, {}, 28 }, // Togo
              +
              4802 { { 'T', 'L' }, { '3', '8' }, 23}, // East Timor
              +
              4803 { { 'T', 'N' }, { '5', '9' }, 24 }, // Tunisia
              +
              4804 { { 'T', 'R' }, {}, 26 }, // Turkey
              +
              4805 { { 'U', 'A' }, {}, 29 }, // Ukraine
              +
              4806 { { 'V', 'A' }, {}, 22 }, // Vatican City
              +
              4807 { { 'V', 'G' }, {}, 24 }, // Virgin Islands, British
              +
              4808 { { 'X', 'K' }, {}, 20 }, // Kosovo
              +
              4809 };
              +
              4810 const country_t* country_desc = nullptr;
              +
              4811 size_t n, available, next, bban_length;
              + +
              4813
              +
              4814 this->interval.end = start;
              +
              4815 for (size_t i = 0; i < 2; ++i, ++this->interval.end) {
              +
              4816 if (this->interval.end >= end || !text[this->interval.end])
              +
              4817 goto error; // incomplete country code
              +
              4818 T chr = case_insensitive ? ctype.toupper(text[this->interval.end]) : text[this->interval.end];
              +
              4819 if (chr < 'A' || 'Z' < chr)
              +
              4820 goto error; // invalid country code
              +
              4821 this->country[i] = chr;
              +
              4822 }
              +
              4823 for (size_t l = 0, r = _countof(s_countries);;) {
              +
              4824 if (l >= r)
              +
              4825 goto error; // unknown country
              +
              4826 size_t m = (l + r) / 2;
              +
              4827 const country_t& c = s_countries[m];
              +
              4828 if (c.country[0] < this->country[0] || (c.country[0] == this->country[0] && c.country[1] < this->country[1]))
              +
              4829 l = m + 1;
              +
              4830 else if (this->country[0] < c.country[0] || (this->country[0] == c.country[0] && this->country[1] < c.country[1]))
              +
              4831 r = m;
              +
              4832 else {
              +
              4833 country_desc = &c;
              +
              4834 break;
              +
              4835 }
              +
              4836 }
              +
              4837 this->country[2] = 0;
              +
              4838
              +
              4839 for (size_t i = 0; i < 2; ++i, ++this->interval.end) {
              +
              4840 if (this->interval.end >= end || text[this->interval.end] < '0' || '9' < text[this->interval.end])
              +
              4841 goto error; // incomplete or invalid check digits
              +
              4842 this->check_digits[i] = text[this->interval.end];
              +
              4843 }
              +
              4844 this->check_digits[2] = 0;
              +
              4845
              +
              4846 if ((country_desc->check_digits[0] && this->check_digits[0] != country_desc->check_digits[0]) ||
              +
              4847 (country_desc->check_digits[1] && this->check_digits[1] != country_desc->check_digits[1]))
              +
              4848 goto error; // unexpected check digits
              +
              4849
              +
              4850 bban_length = country_desc->length - 4;
              +
              4851 for (n = 0; n < bban_length;) {
              +
              4852 if (this->interval.end >= end || !text[this->interval.end])
              +
              4853 goto error; // bban too short
              +
              4854 if (m_space && m_space->match(text, this->interval.end, end, flags)) {
              +
              4855 this->interval.end = m_space->interval.end;
              +
              4856 continue;
              +
              4857 }
              +
              4858 T chr = case_insensitive ? ctype.toupper(text[this->interval.end]) : text[this->interval.end];
              +
              4859 if (('0' <= chr && chr <= '9') || ('A' <= chr && chr <= 'Z')) {
              +
              4860 this->bban[n++] = chr;
              +
              4861 this->interval.end++;
              +
              4862 }
              +
              4863 else
              +
              4864 goto error; // invalid bban
              +
              4865 }
              +
              4866 this->bban[n] = 0;
              +
              4867
              +
              4868 // Normalize IBAN.
              +
              4869 T normalized[69];
              +
              4870 available = 0;
              +
              4871 for (size_t i = 0; ; ++i) {
              +
              4872 if (!this->bban[i]) {
              +
              4873 for (i = 0; i < 2; ++i) {
              +
              4874 if ('A' <= this->country[i] && this->country[i] <= 'J') {
              +
              4875 normalized[available++] = '1';
              +
              4876 normalized[available++] = '0' + this->country[i] - 'A';
              +
              4877 }
              +
              4878 else if ('K' <= this->country[i] && this->country[i] <= 'T') {
              +
              4879 normalized[available++] = '2';
              +
              4880 normalized[available++] = '0' + this->country[i] - 'K';
              +
              4881 }
              +
              4882 else if ('U' <= this->country[i] && this->country[i] <= 'Z') {
              +
              4883 normalized[available++] = '3';
              +
              4884 normalized[available++] = '0' + this->country[i] - 'U';
              +
              4885 }
              +
              4886 }
              +
              4887 normalized[available++] = this->check_digits[0];
              +
              4888 normalized[available++] = this->check_digits[1];
              +
              4889 normalized[available] = 0;
              +
              4890 break;
              +
              4891 }
              +
              4892 if ('0' <= this->bban[i] && this->bban[i] <= '9')
              +
              4893 normalized[available++] = this->bban[i];
              +
              4894 else if ('A' <= this->bban[i] && this->bban[i] <= 'J') {
              +
              4895 normalized[available++] = '1';
              +
              4896 normalized[available++] = '0' + this->bban[i] - 'A';
              +
              4897 }
              +
              4898 else if ('K' <= this->bban[i] && this->bban[i] <= 'T') {
              +
              4899 normalized[available++] = '2';
              +
              4900 normalized[available++] = '0' + this->bban[i] - 'K';
              +
              4901 }
              +
              4902 else if ('U' <= this->bban[i] && this->bban[i] <= 'Z') {
              +
              4903 normalized[available++] = '3';
              +
              4904 normalized[available++] = '0' + this->bban[i] - 'U';
              +
              4905 }
              +
              4906 }
              +
              4907
              +
              4908 // Calculate modulo 97.
              +
              4909 nominator = stdex::strtou32(normalized, 9, &next, 10);
              +
              4910 for (;;) {
              +
              4911 nominator %= 97;
              +
              4912 if (!normalized[next]) {
              +
              4913 this->is_valid = nominator == 1;
              +
              4914 break;
              +
              4915 }
              +
              4916 size_t digit_count = nominator == 0 ? 0 : nominator < 10 ? 1 : 2;
              +
              4917 for (; digit_count < 9 && normalized[next]; ++next, ++digit_count)
              +
              4918 nominator = nominator * 10 + (normalized[next] - '0');
              +
              4919 }
              +
              4920
              +
              4921 this->interval.start = start;
              +
              4922 return true;
              +
              4923
              +
              4924 error:
              +
              4925 this->country[0] = 0;
              +
              4926 this->check_digits[0] = 0;
              +
              4927 this->bban[0] = 0;
              +
              4928 this->is_valid = false;
              +
              4929 this->interval.invalidate();
              +
              4930 return false;
              +
              4931 }
              +
              4932
              +
              4933 virtual void invalidate()
              +
              4934 {
              +
              4935 this->country[0] = 0;
              +
              4936 this->check_digits[0] = 0;
              +
              4937 this->bban[0] = 0;
              +
              4938 this->is_valid = false;
              + +
              4940 }
              +
              4941
              +
              4942 public:
              +
              4943 T country[3];
              + +
              4945 T bban[31];
              + +
              4947
              +
              4948 protected:
              +
              4949 std::shared_ptr<basic_parser<T>> m_space;
              +
              4950 };
              -
              4952
              -
              4953 using iban = basic_iban<char>;
              -
              4954 using wiban = basic_iban<wchar_t>;
              -
              4955#ifdef _UNICODE
              -
              4956 using tiban = wiban;
              -
              4957#else
              -
              4958 using tiban = iban;
              -
              4959#endif
              - -
              4961
              -
              4967 template <class T>
              -
              - -
              4969 {
              -
              4970 public:
              - -
              4972 _In_ const std::shared_ptr<basic_parser<T>>& space,
              -
              4973 _In_ const std::locale& locale = std::locale()) :
              -
              4974 basic_parser<T>(locale),
              -
              4975 m_space(space)
              -
              4976 {
              -
              4977 this->check_digits[0] = 0;
              -
              4978 this->reference[0] = 0;
              -
              4979 this->is_valid = false;
              -
              4980 }
              -
              4981
              -
              4982 virtual bool match(
              -
              4983 _In_reads_or_z_(end) const T* text,
              -
              4984 _In_ size_t start = 0,
              -
              4985 _In_ size_t end = (size_t)-1,
              -
              4986 _In_ int flags = match_default)
              -
              4987 {
              -
              4988 _Assume_(text || start >= end);
              -
              4989 const auto& ctype = std::use_facet<std::ctype<T>>(this->m_locale);
              -
              4990 const bool case_insensitive = flags & match_case_insensitive ? true : false;
              -
              4991 size_t n, available, next;
              - -
              4993
              -
              4994 this->interval.end = start;
              -
              4995 if (this->interval.end + 1 >= end ||
              -
              4996 (case_insensitive ? ctype.toupper(text[this->interval.end]) : text[this->interval.end]) != 'R' ||
              -
              4997 (case_insensitive ? ctype.toupper(text[this->interval.end + 1]) : text[this->interval.end + 1]) != 'F')
              -
              4998 goto error; // incomplete or wrong reference ID
              -
              4999 this->interval.end += 2;
              -
              5000
              -
              5001 for (size_t i = 0; i < 2; ++i, ++this->interval.end) {
              -
              5002 if (this->interval.end >= end || text[this->interval.end] < '0' || '9' < text[this->interval.end])
              -
              5003 goto error; // incomplete or invalid check digits
              -
              5004 this->check_digits[i] = text[this->interval.end];
              -
              5005 }
              -
              5006 this->check_digits[2] = 0;
              -
              5007
              -
              5008 for (n = 0;;) {
              -
              5009 if (m_space && m_space->match(text, this->interval.end, end, flags))
              -
              5010 this->interval.end = m_space->interval.end;
              -
              5011 for (size_t j = 0; j < 4; ++j) {
              -
              5012 if (this->interval.end >= end || !text[this->interval.end])
              -
              5013 goto out;
              -
              5014 T chr = case_insensitive ? ctype.toupper(text[this->interval.end]) : text[this->interval.end];
              -
              5015 if (('0' <= chr && chr <= '9') || ('A' <= chr && chr <= 'Z')) {
              -
              5016 if (n >= _countof(reference) - 1)
              -
              5017 goto error; // reference overflow
              -
              5018 this->reference[n++] = chr;
              -
              5019 this->interval.end++;
              -
              5020 }
              -
              5021 else
              -
              5022 goto out;
              -
              5023 }
              -
              5024 }
              -
              5025 out:
              -
              5026 if (!n)
              -
              5027 goto error; // reference too short
              -
              5028 this->reference[_countof(this->reference) - 1] = 0;
              -
              5029 for (size_t i = n, j = _countof(this->reference) - 1; i;)
              -
              5030 this->reference[--j] = this->reference[--i];
              -
              5031 for (size_t j = _countof(this->reference) - 1 - n; j;)
              -
              5032 this->reference[--j] = '0';
              -
              5033
              -
              5034 // Normalize creditor reference.
              -
              5035 T normalized[47];
              -
              5036 available = 0;
              -
              5037 for (size_t i = 0; ; ++i) {
              -
              5038 if (!this->reference[i]) {
              -
              5039 normalized[available++] = '2'; // R
              -
              5040 normalized[available++] = '7';
              -
              5041 normalized[available++] = '1'; // F
              -
              5042 normalized[available++] = '5';
              -
              5043 normalized[available++] = this->check_digits[0];
              -
              5044 normalized[available++] = this->check_digits[1];
              -
              5045 normalized[available] = 0;
              -
              5046 break;
              -
              5047 }
              -
              5048 if ('0' <= this->reference[i] && this->reference[i] <= '9')
              -
              5049 normalized[available++] = this->reference[i];
              -
              5050 else if ('A' <= this->reference[i] && this->reference[i] <= 'J') {
              -
              5051 normalized[available++] = '1';
              -
              5052 normalized[available++] = '0' + this->reference[i] - 'A';
              -
              5053 }
              -
              5054 else if ('K' <= this->reference[i] && this->reference[i] <= 'T') {
              -
              5055 normalized[available++] = '2';
              -
              5056 normalized[available++] = '0' + this->reference[i] - 'K';
              -
              5057 }
              -
              5058 else if ('U' <= this->reference[i] && this->reference[i] <= 'Z') {
              -
              5059 normalized[available++] = '3';
              -
              5060 normalized[available++] = '0' + this->reference[i] - 'U';
              -
              5061 }
              -
              5062 }
              -
              5063
              -
              5064 // Calculate modulo 97.
              -
              5065 nominator = stdex::strtou32(normalized, 9, &next, 10);
              -
              5066 for (;;) {
              -
              5067 nominator %= 97;
              -
              5068 if (!normalized[next]) {
              -
              5069 this->is_valid = nominator == 1;
              -
              5070 break;
              -
              5071 }
              -
              5072 size_t digit_count = nominator == 0 ? 0 : nominator < 10 ? 1 : 2;
              -
              5073 for (; digit_count < 9 && normalized[next]; ++next, ++digit_count)
              -
              5074 nominator = nominator * 10 + (normalized[next] - '0');
              -
              5075 }
              -
              5076
              -
              5077 this->interval.start = start;
              -
              5078 return true;
              -
              5079
              -
              5080 error:
              -
              5081 this->check_digits[0] = 0;
              -
              5082 this->reference[0] = 0;
              -
              5083 this->is_valid = false;
              -
              5084 this->interval.start = (this->interval.end = start) + 1;
              -
              5085 return false;
              -
              5086 }
              -
              5087
              -
              5088 virtual void invalidate()
              -
              5089 {
              -
              5090 this->check_digits[0] = 0;
              -
              5091 this->reference[0] = 0;
              -
              5092 this->is_valid = false;
              - -
              5094 }
              -
              5095
              -
              5096 public:
              - - - -
              5100
              -
              5101 protected:
              -
              5102 std::shared_ptr<basic_parser<T>> m_space;
              -
              5103 };
              +
              4951
              +
              4952 using iban = basic_iban<char>;
              +
              4953 using wiban = basic_iban<wchar_t>;
              +
              4954#ifdef _UNICODE
              +
              4955 using tiban = wiban;
              +
              4956#else
              +
              4957 using tiban = iban;
              +
              4958#endif
              + +
              4960
              +
              4966 template <class T>
              +
              + +
              4968 {
              +
              4969 public:
              + +
              4971 _In_ const std::shared_ptr<basic_parser<T>>& space,
              +
              4972 _In_ const std::locale& locale = std::locale()) :
              +
              4973 basic_parser<T>(locale),
              +
              4974 m_space(space)
              +
              4975 {
              +
              4976 this->check_digits[0] = 0;
              +
              4977 this->reference[0] = 0;
              +
              4978 this->is_valid = false;
              +
              4979 }
              +
              4980
              +
              4981 virtual bool match(
              +
              4982 _In_reads_or_z_(end) const T* text,
              +
              4983 _In_ size_t start = 0,
              +
              4984 _In_ size_t end = SIZE_MAX,
              +
              4985 _In_ int flags = match_default)
              +
              4986 {
              +
              4987 _Assume_(text || start >= end);
              +
              4988 const auto& ctype = std::use_facet<std::ctype<T>>(this->m_locale);
              +
              4989 const bool case_insensitive = flags & match_case_insensitive ? true : false;
              +
              4990 size_t n, available, next;
              + +
              4992
              +
              4993 this->interval.end = start;
              +
              4994 if (this->interval.end + 1 >= end ||
              +
              4995 (case_insensitive ? ctype.toupper(text[this->interval.end]) : text[this->interval.end]) != 'R' ||
              +
              4996 (case_insensitive ? ctype.toupper(text[this->interval.end + 1]) : text[this->interval.end + 1]) != 'F')
              +
              4997 goto error; // incomplete or wrong reference ID
              +
              4998 this->interval.end += 2;
              +
              4999
              +
              5000 for (size_t i = 0; i < 2; ++i, ++this->interval.end) {
              +
              5001 if (this->interval.end >= end || text[this->interval.end] < '0' || '9' < text[this->interval.end])
              +
              5002 goto error; // incomplete or invalid check digits
              +
              5003 this->check_digits[i] = text[this->interval.end];
              +
              5004 }
              +
              5005 this->check_digits[2] = 0;
              +
              5006
              +
              5007 for (n = 0;;) {
              +
              5008 if (m_space && m_space->match(text, this->interval.end, end, flags))
              +
              5009 this->interval.end = m_space->interval.end;
              +
              5010 for (size_t j = 0; j < 4; ++j) {
              +
              5011 if (this->interval.end >= end || !text[this->interval.end])
              +
              5012 goto out;
              +
              5013 T chr = case_insensitive ? ctype.toupper(text[this->interval.end]) : text[this->interval.end];
              +
              5014 if (('0' <= chr && chr <= '9') || ('A' <= chr && chr <= 'Z')) {
              +
              5015 if (n >= _countof(reference) - 1)
              +
              5016 goto error; // reference overflow
              +
              5017 this->reference[n++] = chr;
              +
              5018 this->interval.end++;
              +
              5019 }
              +
              5020 else
              +
              5021 goto out;
              +
              5022 }
              +
              5023 }
              +
              5024 out:
              +
              5025 if (!n)
              +
              5026 goto error; // reference too short
              +
              5027 this->reference[_countof(this->reference) - 1] = 0;
              +
              5028 for (size_t i = n, j = _countof(this->reference) - 1; i;)
              +
              5029 this->reference[--j] = this->reference[--i];
              +
              5030 for (size_t j = _countof(this->reference) - 1 - n; j;)
              +
              5031 this->reference[--j] = '0';
              +
              5032
              +
              5033 // Normalize creditor reference.
              +
              5034 T normalized[47];
              +
              5035 available = 0;
              +
              5036 for (size_t i = 0; ; ++i) {
              +
              5037 if (!this->reference[i]) {
              +
              5038 normalized[available++] = '2'; // R
              +
              5039 normalized[available++] = '7';
              +
              5040 normalized[available++] = '1'; // F
              +
              5041 normalized[available++] = '5';
              +
              5042 normalized[available++] = this->check_digits[0];
              +
              5043 normalized[available++] = this->check_digits[1];
              +
              5044 normalized[available] = 0;
              +
              5045 break;
              +
              5046 }
              +
              5047 if ('0' <= this->reference[i] && this->reference[i] <= '9')
              +
              5048 normalized[available++] = this->reference[i];
              +
              5049 else if ('A' <= this->reference[i] && this->reference[i] <= 'J') {
              +
              5050 normalized[available++] = '1';
              +
              5051 normalized[available++] = '0' + this->reference[i] - 'A';
              +
              5052 }
              +
              5053 else if ('K' <= this->reference[i] && this->reference[i] <= 'T') {
              +
              5054 normalized[available++] = '2';
              +
              5055 normalized[available++] = '0' + this->reference[i] - 'K';
              +
              5056 }
              +
              5057 else if ('U' <= this->reference[i] && this->reference[i] <= 'Z') {
              +
              5058 normalized[available++] = '3';
              +
              5059 normalized[available++] = '0' + this->reference[i] - 'U';
              +
              5060 }
              +
              5061 }
              +
              5062
              +
              5063 // Calculate modulo 97.
              +
              5064 nominator = stdex::strtou32(normalized, 9, &next, 10);
              +
              5065 for (;;) {
              +
              5066 nominator %= 97;
              +
              5067 if (!normalized[next]) {
              +
              5068 this->is_valid = nominator == 1;
              +
              5069 break;
              +
              5070 }
              +
              5071 size_t digit_count = nominator == 0 ? 0 : nominator < 10 ? 1 : 2;
              +
              5072 for (; digit_count < 9 && normalized[next]; ++next, ++digit_count)
              +
              5073 nominator = nominator * 10 + (normalized[next] - '0');
              +
              5074 }
              +
              5075
              +
              5076 this->interval.start = start;
              +
              5077 return true;
              +
              5078
              +
              5079 error:
              +
              5080 this->check_digits[0] = 0;
              +
              5081 this->reference[0] = 0;
              +
              5082 this->is_valid = false;
              +
              5083 this->interval.invalidate();
              +
              5084 return false;
              +
              5085 }
              +
              5086
              +
              5087 virtual void invalidate()
              +
              5088 {
              +
              5089 this->check_digits[0] = 0;
              +
              5090 this->reference[0] = 0;
              +
              5091 this->is_valid = false;
              + +
              5093 }
              +
              5094
              +
              5095 public:
              + + + +
              5099
              +
              5100 protected:
              +
              5101 std::shared_ptr<basic_parser<T>> m_space;
              +
              5102 };
              -
              5104
              - - -
              5107#ifdef _UNICODE
              - -
              5109#else
              - -
              5111#endif
              - -
              5113
              -
              5119 template <class T>
              -
              - -
              5121 {
              -
              5122 public:
              -
              5123 basic_si_reference_part(_In_ const std::locale& locale = std::locale()) : basic_parser<T>(locale) {}
              -
              5124
              -
              5125 virtual bool match(
              -
              5126 _In_reads_or_z_(end) const T* text,
              -
              5127 _In_ size_t start = 0,
              -
              5128 _In_ size_t end = (size_t)-1,
              -
              5129 _In_ int flags = match_default)
              -
              5130 {
              -
              5131 _Assume_(text || start >= end);
              -
              5132 this->interval.end = start;
              -
              5133 for (;;) {
              -
              5134 if (this->interval.end >= end || !text[this->interval.end])
              -
              5135 break;
              -
              5136 if ('0' <= text[this->interval.end] && text[this->interval.end] <= '9')
              -
              5137 this->interval.end++;
              -
              5138 else
              -
              5139 break;
              -
              5140 }
              - -
              5142 this->interval.start = start;
              -
              5143 return true;
              -
              5144 }
              -
              5145 this->interval.start = (this->interval.end = start) + 1;
              -
              5146 return false;
              -
              5147 }
              -
              5148 };
              +
              5103
              + + +
              5106#ifdef _UNICODE
              + +
              5108#else
              + +
              5110#endif
              + +
              5112
              +
              5118 template <class T>
              +
              + +
              5120 {
              +
              5121 public:
              +
              5122 basic_si_reference_part(_In_ const std::locale& locale = std::locale()) : basic_parser<T>(locale) {}
              +
              5123
              +
              5124 virtual bool match(
              +
              5125 _In_reads_or_z_(end) const T* text,
              +
              5126 _In_ size_t start = 0,
              +
              5127 _In_ size_t end = SIZE_MAX,
              +
              5128 _In_ int flags = match_default)
              +
              5129 {
              +
              5130 _Assume_(text || start >= end);
              +
              5131 this->interval.end = start;
              +
              5132 for (;;) {
              +
              5133 if (this->interval.end >= end || !text[this->interval.end])
              +
              5134 break;
              +
              5135 if ('0' <= text[this->interval.end] && text[this->interval.end] <= '9')
              +
              5136 this->interval.end++;
              +
              5137 else
              +
              5138 break;
              +
              5139 }
              + +
              5141 this->interval.start = start;
              +
              5142 return true;
              +
              5143 }
              +
              5144 this->interval.invalidate();
              +
              5145 return false;
              +
              5146 }
              +
              5147 };
              -
              5149
              - - -
              5152#ifdef _UNICODE
              - -
              5154#else
              - -
              5156#endif
              - -
              5158
              -
              5164 template <class T>
              -
              - -
              5166 {
              -
              5167 public:
              -
              5168 basic_si_reference_delimiter(_In_ const std::locale& locale = std::locale()) : basic_parser<T>(locale) {}
              -
              5169
              -
              5170 virtual bool match(
              -
              5171 _In_reads_or_z_(end) const T* text,
              -
              5172 _In_ size_t start = 0,
              -
              5173 _In_ size_t end = (size_t)-1,
              -
              5174 _In_ int flags = match_default)
              -
              5175 {
              -
              5176 _Assume_(text || start >= end);
              -
              5177 if (start < end && text[start] == '-') {
              -
              5178 this->interval.end = (this->interval.start = start) + 1;
              -
              5179 return true;
              -
              5180 }
              -
              5181 this->interval.start = (this->interval.end = start) + 1;
              -
              5182 return false;
              -
              5183 }
              -
              5184 };
              +
              5148
              + + +
              5151#ifdef _UNICODE
              + +
              5153#else
              + +
              5155#endif
              + +
              5157
              +
              5163 template <class T>
              +
              + +
              5165 {
              +
              5166 public:
              +
              5167 basic_si_reference_delimiter(_In_ const std::locale& locale = std::locale()) : basic_parser<T>(locale) {}
              +
              5168
              +
              5169 virtual bool match(
              +
              5170 _In_reads_or_z_(end) const T* text,
              +
              5171 _In_ size_t start = 0,
              +
              5172 _In_ size_t end = SIZE_MAX,
              +
              5173 _In_ int flags = match_default)
              +
              5174 {
              +
              5175 _Assume_(text || start >= end);
              +
              5176 if (start < end && text[start] == '-') {
              +
              5177 this->interval.end = (this->interval.start = start) + 1;
              +
              5178 return true;
              +
              5179 }
              +
              5180 this->interval.invalidate();
              +
              5181 return false;
              +
              5182 }
              +
              5183 };
              -
              5185
              - - -
              5188#ifdef _UNICODE
              - -
              5190#else
              - -
              5192#endif
              - -
              5194
              -
              5202 template <class T>
              -
              - -
              5204 {
              -
              5205 public:
              - -
              5207 _In_ const std::shared_ptr<basic_parser<T>>& space,
              -
              5208 _In_ const std::locale& locale = std::locale()) :
              -
              5209 basic_parser<T>(locale),
              -
              5210 part1(locale),
              -
              5211 part2(locale),
              -
              5212 part3(locale),
              -
              5213 is_valid(false),
              -
              5214 m_space(space),
              -
              5215 m_delimiter(locale)
              -
              5216 {
              -
              5217 this->model[0] = 0;
              -
              5218 }
              -
              5219
              -
              5220 virtual bool match(
              -
              5221 _In_reads_or_z_(end) const T* text,
              -
              5222 _In_ size_t start = 0,
              -
              5223 _In_ size_t end = (size_t)-1,
              -
              5224 _In_ int flags = match_default)
              -
              5225 {
              -
              5226 _Assume_(text || start >= end);
              -
              5227 const auto& ctype = std::use_facet<std::ctype<T>>(this->m_locale);
              -
              5228 const bool case_insensitive = flags & match_case_insensitive ? true : false;
              -
              5229
              -
              5230 this->interval.end = start;
              -
              5231 if (this->interval.end + 1 >= end ||
              -
              5232 (case_insensitive ? ctype.toupper(text[this->interval.end]) : text[this->interval.end]) != 'S' ||
              -
              5233 (case_insensitive ? ctype.toupper(text[this->interval.end + 1]) : text[this->interval.end + 1]) != 'I')
              -
              5234 goto error; // incomplete or wrong reference ID
              -
              5235 this->interval.end += 2;
              -
              5236
              -
              5237 for (size_t i = 0; i < 2; ++i, ++this->interval.end) {
              -
              5238 if (this->interval.end >= end || text[this->interval.end] < '0' || '9' < text[this->interval.end])
              -
              5239 goto error; // incomplete or invalid model
              -
              5240 this->model[i] = text[this->interval.end];
              -
              5241 }
              -
              5242 this->model[2] = 0;
              -
              5243
              -
              5244 this->part1.invalidate();
              -
              5245 this->part2.invalidate();
              -
              5246 this->part3.invalidate();
              -
              5247 if (this->model[0] == '9' && this->model[1] == '9') {
              -
              5248 is_valid = true;
              -
              5249 this->interval.start = start;
              -
              5250 return true;
              -
              5251 }
              -
              5252
              -
              5253 if (m_space && m_space->match(text, this->interval.end, end, flags))
              -
              5254 this->interval.end = m_space->interval.end;
              -
              5255
              -
              5256 this->part1.match(text, this->interval.end, end, flags) &&
              -
              5257 this->m_delimiter.match(text, this->part1.interval.end, end, flags) &&
              -
              5258 this->part2.match(text, this->m_delimiter.interval.end, end, flags) &&
              -
              5259 this->m_delimiter.match(text, this->part2.interval.end, end, flags) &&
              -
              5260 this->part3.match(text, this->m_delimiter.interval.end, end, flags);
              -
              5261
              -
              5262 this->interval.start = start;
              -
              5263 if (this->part3.interval)
              -
              5264 this->interval.end = this->part3.interval.end;
              -
              5265 else if (this->part2.interval)
              -
              5266 this->interval.end = this->part2.interval.end;
              -
              5267 else if (this->part1.interval)
              -
              5268 this->interval.end = this->part1.interval.end;
              -
              5269 else
              -
              5270 this->interval.end = start + 4;
              -
              5271
              -
              5272 if (this->model[0] == '0' && this->model[1] == '0')
              -
              5273 is_valid =
              -
              5274 this->part3.interval ?
              -
              5275 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 && this->part3.interval.size() <= 12 &&
              -
              5276 this->part1.interval.size() + this->part2.interval.size() + this->part3.interval.size() <= 20 :
              -
              5277 this->part2.interval ?
              -
              5278 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 &&
              -
              5279 this->part1.interval.size() + this->part2.interval.size() <= 20 :
              -
              5280 this->part1.interval ?
              -
              5281 this->part1.interval.size() <= 12 :
              -
              5282 false;
              -
              5283 else if (this->model[0] == '0' && this->model[1] == '1')
              -
              5284 is_valid =
              -
              5285 this->part3.interval ?
              -
              5286 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 && this->part3.interval.size() <= 12 &&
              -
              5287 this->part1.interval.size() + this->part2.interval.size() + this->part3.interval.size() <= 20 &&
              -
              5288 check11(
              -
              5289 text + this->part1.interval.start, this->part1.interval.size(),
              -
              5290 text + this->part2.interval.start, this->part2.interval.size(),
              -
              5291 text + this->part3.interval.start, this->part3.interval.size()) :
              -
              5292 this->part2.interval ?
              -
              5293 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 &&
              -
              5294 this->part1.interval.size() + this->part2.interval.size() <= 20 &&
              -
              5295 check11(
              -
              5296 text + this->part1.interval.start, this->part1.interval.size(),
              -
              5297 text + this->part2.interval.start, this->part2.interval.size()) :
              -
              5298 this->part1.interval ?
              -
              5299 this->part1.interval.size() <= 12 &&
              -
              5300 check11(text + this->part1.interval.start, this->part1.interval.size()) :
              -
              5301 false;
              -
              5302 else if (this->model[0] == '0' && this->model[1] == '2')
              -
              5303 is_valid =
              -
              5304 this->part3.interval ?
              -
              5305 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 && this->part3.interval.size() <= 12 &&
              -
              5306 this->part1.interval.size() + this->part2.interval.size() + this->part3.interval.size() <= 20 &&
              -
              5307 check11(text + this->part2.interval.start, this->part2.interval.size()) &&
              -
              5308 check11(text + this->part3.interval.start, this->part3.interval.size()) :
              -
              5309 false;
              -
              5310 else if (this->model[0] == '0' && this->model[1] == '3')
              -
              5311 is_valid =
              -
              5312 this->part3.interval ?
              -
              5313 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 && this->part3.interval.size() <= 12 &&
              -
              5314 this->part1.interval.size() + this->part2.interval.size() + this->part3.interval.size() <= 20 &&
              -
              5315 check11(text + this->part1.interval.start, this->part1.interval.size()) &&
              -
              5316 check11(text + this->part2.interval.start, this->part2.interval.size()) &&
              -
              5317 check11(text + this->part3.interval.start, this->part3.interval.size()) :
              -
              5318 false;
              -
              5319 else if (this->model[0] == '0' && this->model[1] == '4')
              -
              5320 is_valid =
              -
              5321 this->part3.interval ?
              -
              5322 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 && this->part3.interval.size() <= 12 &&
              -
              5323 this->part1.interval.size() + this->part2.interval.size() + this->part3.interval.size() <= 20 &&
              -
              5324 check11(text + this->part1.interval.start, this->part1.interval.size()) &&
              -
              5325 check11(text + this->part3.interval.start, this->part3.interval.size()) :
              -
              5326 false;
              -
              5327 else if ((this->model[0] == '0' || this->model[0] == '5') && this->model[1] == '5')
              -
              5328 is_valid =
              -
              5329 this->part3.interval ?
              -
              5330 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 && this->part3.interval.size() <= 12 &&
              -
              5331 this->part1.interval.size() + this->part2.interval.size() + this->part3.interval.size() <= 20 &&
              -
              5332 check11(text + this->part1.interval.start, this->part1.interval.size()) :
              -
              5333 this->part2.interval ?
              -
              5334 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 &&
              -
              5335 this->part1.interval.size() + this->part2.interval.size() <= 20 &&
              -
              5336 check11(text + this->part1.interval.start, this->part1.interval.size()) :
              -
              5337 this->part1.interval ?
              -
              5338 this->part1.interval.size() <= 12 &&
              -
              5339 check11(text + this->part1.interval.start, this->part1.interval.size()) :
              -
              5340 false;
              -
              5341 else if (this->model[0] == '0' && this->model[1] == '6')
              -
              5342 is_valid =
              -
              5343 this->part3.interval ?
              -
              5344 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 && this->part3.interval.size() <= 12 &&
              -
              5345 this->part1.interval.size() + this->part2.interval.size() + this->part3.interval.size() <= 20 &&
              -
              5346 check11(
              -
              5347 text + this->part2.interval.start, this->part2.interval.size(),
              -
              5348 text + this->part3.interval.start, this->part3.interval.size()) :
              -
              5349 this->part2.interval ?
              -
              5350 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 &&
              -
              5351 this->part1.interval.size() + this->part2.interval.size() <= 20 &&
              -
              5352 check11(text + this->part2.interval.start, this->part2.interval.size()) :
              -
              5353 false;
              -
              5354 else if (this->model[0] == '0' && this->model[1] == '7')
              -
              5355 is_valid =
              -
              5356 this->part3.interval ?
              -
              5357 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 && this->part3.interval.size() <= 12 &&
              -
              5358 this->part1.interval.size() + this->part2.interval.size() + this->part3.interval.size() <= 20 &&
              -
              5359 check11(text + this->part2.interval.start, this->part2.interval.size()) :
              -
              5360 this->part2.interval ?
              -
              5361 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 &&
              -
              5362 this->part1.interval.size() + this->part2.interval.size() <= 20 &&
              -
              5363 check11(text + this->part2.interval.start, this->part2.interval.size()) :
              -
              5364 false;
              -
              5365 else if (this->model[0] == '0' && this->model[1] == '8')
              -
              5366 is_valid =
              -
              5367 this->part3.interval ?
              -
              5368 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 && this->part3.interval.size() <= 12 &&
              -
              5369 this->part1.interval.size() + this->part2.interval.size() + this->part3.interval.size() <= 20 &&
              -
              5370 check11(
              -
              5371 text + this->part1.interval.start, this->part1.interval.size(),
              -
              5372 text + this->part2.interval.start, this->part2.interval.size()) &&
              -
              5373 check11(text + this->part3.interval.start, this->part3.interval.size()) :
              -
              5374 false;
              -
              5375 else if (this->model[0] == '0' && this->model[1] == '9')
              -
              5376 is_valid =
              -
              5377 this->part3.interval ?
              -
              5378 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 && this->part3.interval.size() <= 12 &&
              -
              5379 this->part1.interval.size() + this->part2.interval.size() + this->part3.interval.size() <= 20 &&
              -
              5380 check11(
              -
              5381 text + this->part1.interval.start, this->part1.interval.size(),
              -
              5382 text + this->part2.interval.start, this->part2.interval.size()) :
              -
              5383 this->part2.interval ?
              -
              5384 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 &&
              -
              5385 this->part1.interval.size() + this->part2.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->part1.interval ?
              -
              5390 this->part1.interval.size() <= 12 &&
              -
              5391 check11(text + this->part1.interval.start, this->part1.interval.size()) :
              -
              5392 false;
              -
              5393 else if (this->model[0] == '1' && this->model[1] == '0')
              -
              5394 is_valid =
              -
              5395 this->part3.interval ?
              -
              5396 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 && this->part3.interval.size() <= 12 &&
              -
              5397 this->part1.interval.size() + this->part2.interval.size() + this->part3.interval.size() <= 20 &&
              -
              5398 check11(text + this->part1.interval.start, this->part1.interval.size()) &&
              -
              5399 check11(
              -
              5400 text + this->part2.interval.start, this->part2.interval.size(),
              -
              5401 text + this->part3.interval.start, this->part3.interval.size()) :
              -
              5402 this->part2.interval ?
              -
              5403 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 &&
              -
              5404 this->part1.interval.size() + this->part2.interval.size() <= 20 &&
              -
              5405 check11(text + this->part1.interval.start, this->part1.interval.size()) &&
              -
              5406 check11(text + this->part2.interval.start, this->part2.interval.size()) :
              -
              5407 false;
              -
              5408 else if (
              -
              5409 (this->model[0] == '1' && (this->model[1] == '1' || this->model[1] == '8' || this->model[1] == '9')) ||
              -
              5410 ((this->model[0] == '2' || this->model[0] == '3') && this->model[1] == '8') ||
              -
              5411 (this->model[0] == '4' && (this->model[1] == '0' || this->model[1] == '1' || this->model[1] == '8' || this->model[1] == '9')) ||
              -
              5412 (this->model[0] == '5' && (this->model[1] == '1' || this->model[1] == '8')))
              -
              5413 is_valid =
              -
              5414 this->part3.interval ?
              -
              5415 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 && this->part3.interval.size() <= 12 &&
              -
              5416 this->part1.interval.size() + this->part2.interval.size() + this->part3.interval.size() <= 20 &&
              -
              5417 check11(text + this->part1.interval.start, this->part1.interval.size()) &&
              -
              5418 check11(text + this->part2.interval.start, this->part2.interval.size()) :
              -
              5419 this->part2.interval ?
              -
              5420 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 &&
              -
              5421 this->part1.interval.size() + this->part2.interval.size() <= 20 &&
              -
              5422 check11(text + this->part1.interval.start, this->part1.interval.size()) &&
              -
              5423 check11(text + this->part2.interval.start, this->part2.interval.size()) :
              -
              5424 false;
              -
              5425 else if (this->model[0] == '1' && this->model[1] == '2')
              -
              5426 is_valid =
              -
              5427 this->part3.interval ? false :
              -
              5428 this->part2.interval ? false :
              -
              5429 this->part1.interval ?
              -
              5430 this->part1.interval.size() <= 13 &&
              -
              5431 check11(text + this->part1.interval.start, this->part1.interval.size()) :
              -
              5432 false;
              -
              5433 else if ((this->model[0] == '2' || this->model[0] == '3') && this->model[1] == '1')
              -
              5434 is_valid =
              -
              5435 this->part3.interval ? false :
              -
              5436 this->part2.interval ?
              -
              5437 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 &&
              -
              5438 this->part1.interval.size() + this->part2.interval.size() <= 20 &&
              -
              5439 check11(text + this->part1.interval.start, this->part1.interval.size()) :
              -
              5440 false;
              -
              5441 else
              -
              5442 is_valid = true; // Assume models we don't handle as valid
              -
              5443 return true;
              -
              5444
              -
              5445 error:
              -
              5446 this->model[0] = 0;
              -
              5447 this->part1.interval.start = (this->part1.interval.end = start) + 1;
              -
              5448 this->part2.interval.start = (this->part2.interval.end = start) + 1;
              -
              5449 this->part3.interval.start = (this->part3.interval.end = start) + 1;
              -
              5450 this->is_valid = false;
              -
              5451 this->interval.start = (this->interval.end = start) + 1;
              -
              5452 return false;
              -
              5453 }
              -
              5454
              -
              5455 virtual void invalidate()
              -
              5456 {
              -
              5457 this->model[0] = 0;
              -
              5458 this->part1.invalidate();
              -
              5459 this->part2.invalidate();
              -
              5460 this->part3.invalidate();
              -
              5461 this->is_valid = false;
              - -
              5463 }
              -
              5464
              -
              5465 protected:
              -
              5466 static bool check11(
              -
              5467 _In_count_(num_part1) const T* part1, _In_ size_t num_part1)
              -
              5468 {
              -
              5469 _Assume_(part1 && num_part1 >= 1);
              -
              5470 uint32_t nominator = 0, ponder = 2;
              -
              5471 for (size_t i = num_part1 - 1; i--; ++ponder)
              -
              5472 nominator += (part1[i] - '0') * ponder;
              -
              5473 uint8_t control = 11 - static_cast<uint8_t>(nominator % 11);
              -
              5474 if (control >= 10)
              -
              5475 control = 0;
              -
              5476 return control == part1[num_part1 - 1] - '0';
              -
              5477 }
              -
              5478
              -
              5479 static bool check11(
              -
              5480 _In_count_(num_part1) const T* part1, _In_ size_t num_part1,
              -
              5481 _In_count_(num_part2) const T* part2, _In_ size_t num_part2)
              -
              5482 {
              -
              5483 _Assume_(part1 || !num_part1);
              -
              5484 _Assume_(part2 && num_part2 >= 1);
              -
              5485 uint32_t nominator = 0, ponder = 2;
              -
              5486 for (size_t i = num_part2 - 1; i--; ++ponder)
              -
              5487 nominator += (part2[i] - '0') * ponder;
              -
              5488 for (size_t i = num_part1; i--; ++ponder)
              -
              5489 nominator += (part1[i] - '0') * ponder;
              -
              5490 uint8_t control = 11 - static_cast<uint8_t>(nominator % 11);
              -
              5491 if (control == 10)
              -
              5492 control = 0;
              -
              5493 return control == part2[num_part2 - 1] - '0';
              -
              5494 }
              -
              5495
              -
              5496 static bool check11(
              -
              5497 _In_count_(num_part1) const T* part1, _In_ size_t num_part1,
              -
              5498 _In_count_(num_part2) const T* part2, _In_ size_t num_part2,
              -
              5499 _In_count_(num_part3) const T* part3, _In_ size_t num_part3)
              -
              5500 {
              -
              5501 _Assume_(part1 || !num_part1);
              -
              5502 _Assume_(part2 || !num_part2);
              -
              5503 _Assume_(part3 && num_part3 >= 1);
              -
              5504 uint32_t nominator = 0, ponder = 2;
              -
              5505 for (size_t i = num_part3 - 1; i--; ++ponder)
              -
              5506 nominator += (part3[i] - '0') * ponder;
              -
              5507 for (size_t i = num_part2; i--; ++ponder)
              -
              5508 nominator += (part2[i] - '0') * ponder;
              -
              5509 for (size_t i = num_part1; i--; ++ponder)
              -
              5510 nominator += (part1[i] - '0') * ponder;
              -
              5511 uint8_t control = 11 - static_cast<uint8_t>(nominator % 11);
              -
              5512 if (control == 10)
              -
              5513 control = 0;
              -
              5514 return control == part2[num_part3 - 1] - '0';
              -
              5515 }
              -
              5516
              -
              5517 public:
              -
              5518 T model[3];
              - - - - -
              5523
              -
              5524 protected:
              -
              5525 std::shared_ptr<basic_parser<T>> m_space;
              - -
              5527 };
              +
              5184
              + + +
              5187#ifdef _UNICODE
              + +
              5189#else
              + +
              5191#endif
              + +
              5193
              +
              5201 template <class T>
              +
              + +
              5203 {
              +
              5204 public:
              + +
              5206 _In_ const std::shared_ptr<basic_parser<T>>& space,
              +
              5207 _In_ const std::locale& locale = std::locale()) :
              +
              5208 basic_parser<T>(locale),
              +
              5209 part1(locale),
              +
              5210 part2(locale),
              +
              5211 part3(locale),
              +
              5212 is_valid(false),
              +
              5213 m_space(space),
              +
              5214 m_delimiter(locale)
              +
              5215 {
              +
              5216 this->model[0] = 0;
              +
              5217 }
              +
              5218
              +
              5219 virtual bool match(
              +
              5220 _In_reads_or_z_(end) const T* text,
              +
              5221 _In_ size_t start = 0,
              +
              5222 _In_ size_t end = SIZE_MAX,
              +
              5223 _In_ int flags = match_default)
              +
              5224 {
              +
              5225 _Assume_(text || start >= end);
              +
              5226 const auto& ctype = std::use_facet<std::ctype<T>>(this->m_locale);
              +
              5227 const bool case_insensitive = flags & match_case_insensitive ? true : false;
              +
              5228
              +
              5229 this->interval.end = start;
              +
              5230 if (this->interval.end + 1 >= end ||
              +
              5231 (case_insensitive ? ctype.toupper(text[this->interval.end]) : text[this->interval.end]) != 'S' ||
              +
              5232 (case_insensitive ? ctype.toupper(text[this->interval.end + 1]) : text[this->interval.end + 1]) != 'I')
              +
              5233 goto error; // incomplete or wrong reference ID
              +
              5234 this->interval.end += 2;
              +
              5235
              +
              5236 for (size_t i = 0; i < 2; ++i, ++this->interval.end) {
              +
              5237 if (this->interval.end >= end || text[this->interval.end] < '0' || '9' < text[this->interval.end])
              +
              5238 goto error; // incomplete or invalid model
              +
              5239 this->model[i] = text[this->interval.end];
              +
              5240 }
              +
              5241 this->model[2] = 0;
              +
              5242
              +
              5243 this->part1.invalidate();
              +
              5244 this->part2.invalidate();
              +
              5245 this->part3.invalidate();
              +
              5246 if (this->model[0] == '9' && this->model[1] == '9') {
              +
              5247 is_valid = true;
              +
              5248 this->interval.start = start;
              +
              5249 return true;
              +
              5250 }
              +
              5251
              +
              5252 if (m_space && m_space->match(text, this->interval.end, end, flags))
              +
              5253 this->interval.end = m_space->interval.end;
              +
              5254
              +
              5255 this->part1.match(text, this->interval.end, end, flags) &&
              +
              5256 this->m_delimiter.match(text, this->part1.interval.end, end, flags) &&
              +
              5257 this->part2.match(text, this->m_delimiter.interval.end, end, flags) &&
              +
              5258 this->m_delimiter.match(text, this->part2.interval.end, end, flags) &&
              +
              5259 this->part3.match(text, this->m_delimiter.interval.end, end, flags);
              +
              5260
              +
              5261 this->interval.start = start;
              +
              5262 if (this->part3.interval)
              +
              5263 this->interval.end = this->part3.interval.end;
              +
              5264 else if (this->part2.interval)
              +
              5265 this->interval.end = this->part2.interval.end;
              +
              5266 else if (this->part1.interval)
              +
              5267 this->interval.end = this->part1.interval.end;
              +
              5268 else
              +
              5269 this->interval.end = start + 4;
              +
              5270
              +
              5271 if (this->model[0] == '0' && this->model[1] == '0')
              +
              5272 is_valid =
              +
              5273 this->part3.interval ?
              +
              5274 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 && this->part3.interval.size() <= 12 &&
              +
              5275 this->part1.interval.size() + this->part2.interval.size() + this->part3.interval.size() <= 20 :
              +
              5276 this->part2.interval ?
              +
              5277 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 &&
              +
              5278 this->part1.interval.size() + this->part2.interval.size() <= 20 :
              +
              5279 this->part1.interval ?
              +
              5280 this->part1.interval.size() <= 12 :
              +
              5281 false;
              +
              5282 else if (this->model[0] == '0' && this->model[1] == '1')
              +
              5283 is_valid =
              +
              5284 this->part3.interval ?
              +
              5285 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 && this->part3.interval.size() <= 12 &&
              +
              5286 this->part1.interval.size() + this->part2.interval.size() + this->part3.interval.size() <= 20 &&
              +
              5287 check11(
              +
              5288 text + this->part1.interval.start, this->part1.interval.size(),
              +
              5289 text + this->part2.interval.start, this->part2.interval.size(),
              +
              5290 text + this->part3.interval.start, this->part3.interval.size()) :
              +
              5291 this->part2.interval ?
              +
              5292 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 &&
              +
              5293 this->part1.interval.size() + this->part2.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 this->part1.interval ?
              +
              5298 this->part1.interval.size() <= 12 &&
              +
              5299 check11(text + this->part1.interval.start, this->part1.interval.size()) :
              +
              5300 false;
              +
              5301 else if (this->model[0] == '0' && this->model[1] == '2')
              +
              5302 is_valid =
              +
              5303 this->part3.interval ?
              +
              5304 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 && this->part3.interval.size() <= 12 &&
              +
              5305 this->part1.interval.size() + this->part2.interval.size() + this->part3.interval.size() <= 20 &&
              +
              5306 check11(text + this->part2.interval.start, this->part2.interval.size()) &&
              +
              5307 check11(text + this->part3.interval.start, this->part3.interval.size()) :
              +
              5308 false;
              +
              5309 else if (this->model[0] == '0' && this->model[1] == '3')
              +
              5310 is_valid =
              +
              5311 this->part3.interval ?
              +
              5312 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 && this->part3.interval.size() <= 12 &&
              +
              5313 this->part1.interval.size() + this->part2.interval.size() + this->part3.interval.size() <= 20 &&
              +
              5314 check11(text + this->part1.interval.start, this->part1.interval.size()) &&
              +
              5315 check11(text + this->part2.interval.start, this->part2.interval.size()) &&
              +
              5316 check11(text + this->part3.interval.start, this->part3.interval.size()) :
              +
              5317 false;
              +
              5318 else if (this->model[0] == '0' && this->model[1] == '4')
              +
              5319 is_valid =
              +
              5320 this->part3.interval ?
              +
              5321 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 && this->part3.interval.size() <= 12 &&
              +
              5322 this->part1.interval.size() + this->part2.interval.size() + this->part3.interval.size() <= 20 &&
              +
              5323 check11(text + this->part1.interval.start, this->part1.interval.size()) &&
              +
              5324 check11(text + this->part3.interval.start, this->part3.interval.size()) :
              +
              5325 false;
              +
              5326 else if ((this->model[0] == '0' || this->model[0] == '5') && this->model[1] == '5')
              +
              5327 is_valid =
              +
              5328 this->part3.interval ?
              +
              5329 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 && this->part3.interval.size() <= 12 &&
              +
              5330 this->part1.interval.size() + this->part2.interval.size() + this->part3.interval.size() <= 20 &&
              +
              5331 check11(text + this->part1.interval.start, this->part1.interval.size()) :
              +
              5332 this->part2.interval ?
              +
              5333 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 &&
              +
              5334 this->part1.interval.size() + this->part2.interval.size() <= 20 &&
              +
              5335 check11(text + this->part1.interval.start, this->part1.interval.size()) :
              +
              5336 this->part1.interval ?
              +
              5337 this->part1.interval.size() <= 12 &&
              +
              5338 check11(text + this->part1.interval.start, this->part1.interval.size()) :
              +
              5339 false;
              +
              5340 else if (this->model[0] == '0' && this->model[1] == '6')
              +
              5341 is_valid =
              +
              5342 this->part3.interval ?
              +
              5343 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 && this->part3.interval.size() <= 12 &&
              +
              5344 this->part1.interval.size() + this->part2.interval.size() + this->part3.interval.size() <= 20 &&
              +
              5345 check11(
              +
              5346 text + this->part2.interval.start, this->part2.interval.size(),
              +
              5347 text + this->part3.interval.start, this->part3.interval.size()) :
              +
              5348 this->part2.interval ?
              +
              5349 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 &&
              +
              5350 this->part1.interval.size() + this->part2.interval.size() <= 20 &&
              +
              5351 check11(text + this->part2.interval.start, this->part2.interval.size()) :
              +
              5352 false;
              +
              5353 else if (this->model[0] == '0' && this->model[1] == '7')
              +
              5354 is_valid =
              +
              5355 this->part3.interval ?
              +
              5356 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 && this->part3.interval.size() <= 12 &&
              +
              5357 this->part1.interval.size() + this->part2.interval.size() + this->part3.interval.size() <= 20 &&
              +
              5358 check11(text + this->part2.interval.start, this->part2.interval.size()) :
              +
              5359 this->part2.interval ?
              +
              5360 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 &&
              +
              5361 this->part1.interval.size() + this->part2.interval.size() <= 20 &&
              +
              5362 check11(text + this->part2.interval.start, this->part2.interval.size()) :
              +
              5363 false;
              +
              5364 else if (this->model[0] == '0' && this->model[1] == '8')
              +
              5365 is_valid =
              +
              5366 this->part3.interval ?
              +
              5367 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 && this->part3.interval.size() <= 12 &&
              +
              5368 this->part1.interval.size() + this->part2.interval.size() + this->part3.interval.size() <= 20 &&
              +
              5369 check11(
              +
              5370 text + this->part1.interval.start, this->part1.interval.size(),
              +
              5371 text + this->part2.interval.start, this->part2.interval.size()) &&
              +
              5372 check11(text + this->part3.interval.start, this->part3.interval.size()) :
              +
              5373 false;
              +
              5374 else if (this->model[0] == '0' && this->model[1] == '9')
              +
              5375 is_valid =
              +
              5376 this->part3.interval ?
              +
              5377 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 && this->part3.interval.size() <= 12 &&
              +
              5378 this->part1.interval.size() + this->part2.interval.size() + this->part3.interval.size() <= 20 &&
              +
              5379 check11(
              +
              5380 text + this->part1.interval.start, this->part1.interval.size(),
              +
              5381 text + this->part2.interval.start, this->part2.interval.size()) :
              +
              5382 this->part2.interval ?
              +
              5383 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 &&
              +
              5384 this->part1.interval.size() + this->part2.interval.size() <= 20 &&
              +
              5385 check11(
              +
              5386 text + this->part1.interval.start, this->part1.interval.size(),
              +
              5387 text + this->part2.interval.start, this->part2.interval.size()) :
              +
              5388 this->part1.interval ?
              +
              5389 this->part1.interval.size() <= 12 &&
              +
              5390 check11(text + this->part1.interval.start, this->part1.interval.size()) :
              +
              5391 false;
              +
              5392 else if (this->model[0] == '1' && this->model[1] == '0')
              +
              5393 is_valid =
              +
              5394 this->part3.interval ?
              +
              5395 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 && this->part3.interval.size() <= 12 &&
              +
              5396 this->part1.interval.size() + this->part2.interval.size() + this->part3.interval.size() <= 20 &&
              +
              5397 check11(text + this->part1.interval.start, this->part1.interval.size()) &&
              +
              5398 check11(
              +
              5399 text + this->part2.interval.start, this->part2.interval.size(),
              +
              5400 text + this->part3.interval.start, this->part3.interval.size()) :
              +
              5401 this->part2.interval ?
              +
              5402 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 &&
              +
              5403 this->part1.interval.size() + this->part2.interval.size() <= 20 &&
              +
              5404 check11(text + this->part1.interval.start, this->part1.interval.size()) &&
              +
              5405 check11(text + this->part2.interval.start, this->part2.interval.size()) :
              +
              5406 false;
              +
              5407 else if (
              +
              5408 (this->model[0] == '1' && (this->model[1] == '1' || this->model[1] == '8' || this->model[1] == '9')) ||
              +
              5409 ((this->model[0] == '2' || this->model[0] == '3') && this->model[1] == '8') ||
              +
              5410 (this->model[0] == '4' && (this->model[1] == '0' || this->model[1] == '1' || this->model[1] == '8' || this->model[1] == '9')) ||
              +
              5411 (this->model[0] == '5' && (this->model[1] == '1' || this->model[1] == '8')))
              +
              5412 is_valid =
              +
              5413 this->part3.interval ?
              +
              5414 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 && this->part3.interval.size() <= 12 &&
              +
              5415 this->part1.interval.size() + this->part2.interval.size() + this->part3.interval.size() <= 20 &&
              +
              5416 check11(text + this->part1.interval.start, this->part1.interval.size()) &&
              +
              5417 check11(text + this->part2.interval.start, this->part2.interval.size()) :
              +
              5418 this->part2.interval ?
              +
              5419 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 &&
              +
              5420 this->part1.interval.size() + this->part2.interval.size() <= 20 &&
              +
              5421 check11(text + this->part1.interval.start, this->part1.interval.size()) &&
              +
              5422 check11(text + this->part2.interval.start, this->part2.interval.size()) :
              +
              5423 false;
              +
              5424 else if (this->model[0] == '1' && this->model[1] == '2')
              +
              5425 is_valid =
              +
              5426 this->part3.interval ? false :
              +
              5427 this->part2.interval ? false :
              +
              5428 this->part1.interval ?
              +
              5429 this->part1.interval.size() <= 13 &&
              +
              5430 check11(text + this->part1.interval.start, this->part1.interval.size()) :
              +
              5431 false;
              +
              5432 else if ((this->model[0] == '2' || this->model[0] == '3') && this->model[1] == '1')
              +
              5433 is_valid =
              +
              5434 this->part3.interval ? false :
              +
              5435 this->part2.interval ?
              +
              5436 this->part1.interval.size() <= 12 && this->part2.interval.size() <= 12 &&
              +
              5437 this->part1.interval.size() + this->part2.interval.size() <= 20 &&
              +
              5438 check11(text + this->part1.interval.start, this->part1.interval.size()) :
              +
              5439 false;
              +
              5440 else
              +
              5441 is_valid = true; // Assume models we don't handle as valid
              +
              5442 return true;
              +
              5443
              +
              5444 error:
              +
              5445 this->model[0] = 0;
              +
              5446 this->part1.interval.start = (this->part1.interval.end = start) + 1;
              +
              5447 this->part2.interval.start = (this->part2.interval.end = start) + 1;
              +
              5448 this->part3.interval.start = (this->part3.interval.end = start) + 1;
              +
              5449 this->is_valid = false;
              +
              5450 this->interval.invalidate();
              +
              5451 return false;
              +
              5452 }
              +
              5453
              +
              5454 virtual void invalidate()
              +
              5455 {
              +
              5456 this->model[0] = 0;
              +
              5457 this->part1.invalidate();
              +
              5458 this->part2.invalidate();
              +
              5459 this->part3.invalidate();
              +
              5460 this->is_valid = false;
              + +
              5462 }
              +
              5463
              +
              5464 protected:
              +
              5465 static bool check11(
              +
              5466 _In_count_(num_part1) const T* part1, _In_ size_t num_part1)
              +
              5467 {
              +
              5468 _Assume_(part1 && num_part1 >= 1);
              +
              5469 uint32_t nominator = 0, ponder = 2;
              +
              5470 for (size_t i = num_part1 - 1; i--; ++ponder)
              +
              5471 nominator += (part1[i] - '0') * ponder;
              +
              5472 uint8_t control = 11 - static_cast<uint8_t>(nominator % 11);
              +
              5473 if (control >= 10)
              +
              5474 control = 0;
              +
              5475 return control == part1[num_part1 - 1] - '0';
              +
              5476 }
              +
              5477
              +
              5478 static bool check11(
              +
              5479 _In_count_(num_part1) const T* part1, _In_ size_t num_part1,
              +
              5480 _In_count_(num_part2) const T* part2, _In_ size_t num_part2)
              +
              5481 {
              +
              5482 _Assume_(part1 || !num_part1);
              +
              5483 _Assume_(part2 && num_part2 >= 1);
              +
              5484 uint32_t nominator = 0, ponder = 2;
              +
              5485 for (size_t i = num_part2 - 1; i--; ++ponder)
              +
              5486 nominator += (part2[i] - '0') * ponder;
              +
              5487 for (size_t i = num_part1; i--; ++ponder)
              +
              5488 nominator += (part1[i] - '0') * ponder;
              +
              5489 uint8_t control = 11 - static_cast<uint8_t>(nominator % 11);
              +
              5490 if (control == 10)
              +
              5491 control = 0;
              +
              5492 return control == part2[num_part2 - 1] - '0';
              +
              5493 }
              +
              5494
              +
              5495 static bool check11(
              +
              5496 _In_count_(num_part1) const T* part1, _In_ size_t num_part1,
              +
              5497 _In_count_(num_part2) const T* part2, _In_ size_t num_part2,
              +
              5498 _In_count_(num_part3) const T* part3, _In_ size_t num_part3)
              +
              5499 {
              +
              5500 _Assume_(part1 || !num_part1);
              +
              5501 _Assume_(part2 || !num_part2);
              +
              5502 _Assume_(part3 && num_part3 >= 1);
              +
              5503 uint32_t nominator = 0, ponder = 2;
              +
              5504 for (size_t i = num_part3 - 1; i--; ++ponder)
              +
              5505 nominator += (part3[i] - '0') * ponder;
              +
              5506 for (size_t i = num_part2; i--; ++ponder)
              +
              5507 nominator += (part2[i] - '0') * ponder;
              +
              5508 for (size_t i = num_part1; i--; ++ponder)
              +
              5509 nominator += (part1[i] - '0') * ponder;
              +
              5510 uint8_t control = 11 - static_cast<uint8_t>(nominator % 11);
              +
              5511 if (control == 10)
              +
              5512 control = 0;
              +
              5513 return control == part2[num_part3 - 1] - '0';
              +
              5514 }
              +
              5515
              +
              5516 public:
              +
              5517 T model[3];
              + + + + +
              5522
              +
              5523 protected:
              +
              5524 std::shared_ptr<basic_parser<T>> m_space;
              + +
              5526 };
              -
              5528
              - - -
              5531#ifdef _UNICODE
              - -
              5533#else
              - -
              5535#endif
              - -
              5537
              -
              5541 template <class T>
              -
              - -
              5543 {
              -
              5544 public:
              - -
              5546 _In_ const std::shared_ptr<basic_parser<T>>& element,
              -
              5547 _In_ const std::shared_ptr<basic_parser<T>>& digit,
              -
              5548 _In_ const std::shared_ptr<basic_parser<T>>& sign,
              -
              5549 _In_ const std::locale& locale = std::locale()) :
              -
              5550 basic_parser<T>(locale),
              -
              5551 m_element(element),
              -
              5552 m_digit(digit),
              -
              5553 m_sign(sign),
              -
              5554 has_digits(false),
              -
              5555 has_charge(false)
              -
              5556 {}
              -
              5557
              -
              5558 virtual bool match(
              -
              5559 _In_reads_or_z_(end) const T* text,
              -
              5560 _In_ size_t start = 0,
              -
              5561 _In_ size_t end = (size_t)-1,
              -
              5562 _In_ int flags = match_default)
              -
              5563 {
              -
              5564 _Assume_(text || start >= end);
              -
              5565
              -
              5566 has_digits = false;
              -
              5567 has_charge = false;
              -
              5568 this->interval.end = start;
              -
              5569
              -
              5570 const int element_match_flags = flags & ~match_case_insensitive; // Chemical elements are always case-sensitive.
              -
              5571 for (;;) {
              -
              5572 if (m_element->match(text, this->interval.end, end, element_match_flags)) {
              -
              5573 this->interval.end = m_element->interval.end;
              -
              5574 while (m_digit->match(text, this->interval.end, end, flags)) {
              -
              5575 this->interval.end = m_digit->interval.end;
              -
              5576 has_digits = true;
              -
              5577 }
              -
              5578 }
              -
              5579 else if (start < this->interval.end) {
              -
              5580 if (m_sign->match(text, this->interval.end, end, flags)) {
              -
              5581 this->interval.end = m_sign->interval.end;
              -
              5582 has_charge = true;
              -
              5583 }
              -
              5584 this->interval.start = start;
              -
              5585 return true;
              -
              5586 }
              -
              5587 else {
              -
              5588 this->interval.start = (this->interval.end = start) + 1;
              -
              5589 return false;
              -
              5590 }
              -
              5591 }
              -
              5592 }
              -
              5593
              -
              5594 virtual void invalidate()
              -
              5595 {
              -
              5596 has_digits = false;
              -
              5597 has_charge = false;
              - -
              5599 }
              -
              5600
              -
              5601 public:
              -
              5602 bool has_digits;
              -
              5603 bool has_charge;
              -
              5604
              -
              5605 protected:
              -
              5606 std::shared_ptr<basic_parser<T>> m_element;
              -
              5607 std::shared_ptr<basic_parser<T>> m_digit;
              -
              5608 std::shared_ptr<basic_parser<T>> m_sign;
              -
              5609 };
              +
              5527
              + + +
              5530#ifdef _UNICODE
              + +
              5532#else
              + +
              5534#endif
              + +
              5536
              +
              5540 template <class T>
              +
              + +
              5542 {
              +
              5543 public:
              + +
              5545 _In_ const std::shared_ptr<basic_parser<T>>& element,
              +
              5546 _In_ const std::shared_ptr<basic_parser<T>>& digit,
              +
              5547 _In_ const std::shared_ptr<basic_parser<T>>& sign,
              +
              5548 _In_ const std::locale& locale = std::locale()) :
              +
              5549 basic_parser<T>(locale),
              +
              5550 m_element(element),
              +
              5551 m_digit(digit),
              +
              5552 m_sign(sign),
              +
              5553 has_digits(false),
              +
              5554 has_charge(false)
              +
              5555 {}
              +
              5556
              +
              5557 virtual bool match(
              +
              5558 _In_reads_or_z_(end) const T* text,
              +
              5559 _In_ size_t start = 0,
              +
              5560 _In_ size_t end = SIZE_MAX,
              +
              5561 _In_ int flags = match_default)
              +
              5562 {
              +
              5563 _Assume_(text || start >= end);
              +
              5564
              +
              5565 has_digits = false;
              +
              5566 has_charge = false;
              +
              5567 this->interval.end = start;
              +
              5568
              +
              5569 const int element_match_flags = flags & ~match_case_insensitive; // Chemical elements are always case-sensitive.
              +
              5570 for (;;) {
              +
              5571 if (m_element->match(text, this->interval.end, end, element_match_flags)) {
              +
              5572 this->interval.end = m_element->interval.end;
              +
              5573 while (m_digit->match(text, this->interval.end, end, flags)) {
              +
              5574 this->interval.end = m_digit->interval.end;
              +
              5575 has_digits = true;
              +
              5576 }
              +
              5577 }
              +
              5578 else if (start < this->interval.end) {
              +
              5579 if (m_sign->match(text, this->interval.end, end, flags)) {
              +
              5580 this->interval.end = m_sign->interval.end;
              +
              5581 has_charge = true;
              +
              5582 }
              +
              5583 this->interval.start = start;
              +
              5584 return true;
              +
              5585 }
              +
              5586 else {
              +
              5587 this->interval.invalidate();
              +
              5588 return false;
              +
              5589 }
              +
              5590 }
              +
              5591 }
              +
              5592
              +
              5593 virtual void invalidate()
              +
              5594 {
              +
              5595 has_digits = false;
              +
              5596 has_charge = false;
              + +
              5598 }
              +
              5599
              +
              5600 public:
              +
              5601 bool has_digits;
              +
              5602 bool has_charge;
              +
              5603
              +
              5604 protected:
              +
              5605 std::shared_ptr<basic_parser<T>> m_element;
              +
              5606 std::shared_ptr<basic_parser<T>> m_digit;
              +
              5607 std::shared_ptr<basic_parser<T>> m_sign;
              +
              5608 };
              -
              5610
              - - -
              5613#ifdef _UNICODE
              - -
              5615#else
              - -
              5617#endif
              - -
              5619
              -
              - -
              5624 {
              -
              5625 public:
              -
              5626 virtual bool match(
              -
              5627 _In_reads_or_z_(end) const char* text,
              -
              5628 _In_ size_t start = 0,
              -
              5629 _In_ size_t end = (size_t)-1,
              -
              5630 _In_ int flags = match_default)
              -
              5631 {
              -
              5632 _Assume_(text || start >= end);
              -
              5633 this->interval.end = start;
              -
              5634
              -
              5635 _Assume_(text || this->interval.end >= end);
              -
              5636 if (this->interval.end < end && text[this->interval.end]) {
              -
              5637 if (text[this->interval.end] == '\r') {
              -
              5638 this->interval.end++;
              -
              5639 if (this->interval.end < end && text[this->interval.end] == '\n') {
              -
              5640 this->interval.start = start;
              -
              5641 this->interval.end++;
              -
              5642 return true;
              -
              5643 }
              -
              5644 }
              -
              5645 else if (text[this->interval.end] == '\n') {
              -
              5646 this->interval.start = start;
              -
              5647 this->interval.end++;
              -
              5648 return true;
              -
              5649 }
              -
              5650 }
              -
              5651 this->interval.start = (this->interval.end = start) + 1;
              -
              5652 return false;
              -
              5653 }
              -
              5654 };
              +
              5609
              + + +
              5612#ifdef _UNICODE
              + +
              5614#else
              + +
              5616#endif
              + +
              5618
              +
              + +
              5623 {
              +
              5624 public:
              +
              5625 virtual bool match(
              +
              5626 _In_reads_or_z_(end) const char* text,
              +
              5627 _In_ size_t start = 0,
              +
              5628 _In_ size_t end = SIZE_MAX,
              +
              5629 _In_ int flags = match_default)
              +
              5630 {
              +
              5631 _Assume_(text || start >= end);
              +
              5632 this->interval.end = start;
              +
              5633
              +
              5634 _Assume_(text || this->interval.end >= end);
              +
              5635 if (this->interval.end < end && text[this->interval.end]) {
              +
              5636 if (text[this->interval.end] == '\r') {
              +
              5637 this->interval.end++;
              +
              5638 if (this->interval.end < end && text[this->interval.end] == '\n') {
              +
              5639 this->interval.start = start;
              +
              5640 this->interval.end++;
              +
              5641 return true;
              +
              5642 }
              +
              5643 }
              +
              5644 else if (text[this->interval.end] == '\n') {
              +
              5645 this->interval.start = start;
              +
              5646 this->interval.end++;
              +
              5647 return true;
              +
              5648 }
              +
              5649 }
              +
              5650 this->interval.invalidate();
              +
              5651 return false;
              +
              5652 }
              +
              5653 };
              -
              5655
              -
              -
              5659 class http_space : public parser
              -
              5660 {
              -
              5661 public:
              -
              5662 virtual bool match(
              -
              5663 _In_reads_or_z_(end) const char* text,
              -
              5664 _In_ size_t start = 0,
              -
              5665 _In_ size_t end = (size_t)-1,
              -
              5666 _In_ int flags = match_default)
              -
              5667 {
              -
              5668 _Assume_(text || start >= end);
              -
              5669 this->interval.end = start;
              -
              5670 if (m_line_break.match(text, this->interval.end, end, flags)) {
              -
              5671 this->interval.end = m_line_break.interval.end;
              -
              5672 if (this->interval.end < end && text[this->interval.end] && isspace(text[this->interval.end])) {
              -
              5673 this->interval.start = start;
              -
              5674 this->interval.end++;
              -
              5675 while (this->interval.end < end && text[this->interval.end] && isspace(text[this->interval.end])) this->interval.end++;
              -
              5676 return true;
              -
              5677 }
              -
              5678 }
              -
              5679 else if (this->interval.end < end && text[this->interval.end] && isspace(text[this->interval.end])) {
              -
              5680 this->interval.start = start;
              -
              5681 this->interval.end++;
              -
              5682 while (this->interval.end < end && text[this->interval.end] && isspace(text[this->interval.end])) this->interval.end++;
              -
              5683 return true;
              -
              5684 }
              -
              5685 this->interval.start = (this->interval.end = start) + 1;
              -
              5686 return false;
              -
              5687 }
              -
              5688
              -
              5689 protected:
              -
              5690 http_line_break m_line_break;
              -
              5691 };
              +
              5654
              +
              +
              5658 class http_space : public parser
              +
              5659 {
              +
              5660 public:
              +
              5661 virtual bool match(
              +
              5662 _In_reads_or_z_(end) const char* text,
              +
              5663 _In_ size_t start = 0,
              +
              5664 _In_ size_t end = SIZE_MAX,
              +
              5665 _In_ int flags = match_default)
              +
              5666 {
              +
              5667 _Assume_(text || start >= end);
              +
              5668 this->interval.end = start;
              +
              5669 if (m_line_break.match(text, this->interval.end, end, flags)) {
              +
              5670 this->interval.end = m_line_break.interval.end;
              +
              5671 if (this->interval.end < end && text[this->interval.end] && isspace(text[this->interval.end])) {
              +
              5672 this->interval.start = start;
              +
              5673 this->interval.end++;
              +
              5674 while (this->interval.end < end && text[this->interval.end] && isspace(text[this->interval.end])) this->interval.end++;
              +
              5675 return true;
              +
              5676 }
              +
              5677 }
              +
              5678 else if (this->interval.end < end && text[this->interval.end] && isspace(text[this->interval.end])) {
              +
              5679 this->interval.start = start;
              +
              5680 this->interval.end++;
              +
              5681 while (this->interval.end < end && text[this->interval.end] && isspace(text[this->interval.end])) this->interval.end++;
              +
              5682 return true;
              +
              5683 }
              +
              5684 this->interval.invalidate();
              +
              5685 return false;
              +
              5686 }
              +
              5687
              +
              5688 protected:
              +
              5689 http_line_break m_line_break;
              +
              5690 };
              -
              5692
              -
              -
              5696 class http_text_char : public parser
              -
              5697 {
              -
              5698 public:
              -
              5699 virtual bool match(
              -
              5700 _In_reads_or_z_(end) const char* text,
              -
              5701 _In_ size_t start = 0,
              -
              5702 _In_ size_t end = (size_t)-1,
              -
              5703 _In_ int flags = match_default)
              -
              5704 {
              -
              5705 _Assume_(text || start >= end);
              -
              5706 this->interval.end = start;
              -
              5707
              -
              5708 _Assume_(text || this->interval.end >= end);
              -
              5709 if (m_space.match(text, this->interval.end, end, flags)) {
              -
              5710 this->interval.start = start;
              -
              5711 this->interval.end = m_space.interval.end;
              -
              5712 return true;
              -
              5713 }
              -
              5714 else if (this->interval.end < end && text[this->interval.end] && text[this->interval.end] >= 0x20) {
              -
              5715 this->interval.start = start;
              -
              5716 this->interval.end++;
              -
              5717 return true;
              -
              5718 }
              -
              5719 this->interval.start = (this->interval.end = start) + 1;
              -
              5720 return false;
              -
              5721 }
              -
              5722
              -
              5723 protected:
              -
              5724 http_space m_space;
              -
              5725 };
              +
              5691
              +
              +
              5695 class http_text_char : public parser
              +
              5696 {
              +
              5697 public:
              +
              5698 virtual bool match(
              +
              5699 _In_reads_or_z_(end) const char* text,
              +
              5700 _In_ size_t start = 0,
              +
              5701 _In_ size_t end = SIZE_MAX,
              +
              5702 _In_ int flags = match_default)
              +
              5703 {
              +
              5704 _Assume_(text || start >= end);
              +
              5705 this->interval.end = start;
              +
              5706
              +
              5707 _Assume_(text || this->interval.end >= end);
              +
              5708 if (m_space.match(text, this->interval.end, end, flags)) {
              +
              5709 this->interval.start = start;
              +
              5710 this->interval.end = m_space.interval.end;
              +
              5711 return true;
              +
              5712 }
              +
              5713 else if (this->interval.end < end && text[this->interval.end] && text[this->interval.end] >= 0x20) {
              +
              5714 this->interval.start = start;
              +
              5715 this->interval.end++;
              +
              5716 return true;
              +
              5717 }
              +
              5718 this->interval.invalidate();
              +
              5719 return false;
              +
              5720 }
              +
              5721
              +
              5722 protected:
              +
              5723 http_space m_space;
              +
              5724 };
              -
              5726
              -
              -
              5730 class http_token : public parser
              -
              5731 {
              -
              5732 public:
              -
              5733 virtual bool match(
              -
              5734 _In_reads_or_z_(end) const char* text,
              -
              5735 _In_ size_t start = 0,
              -
              5736 _In_ size_t end = (size_t)-1,
              -
              5737 _In_ int flags = match_default)
              -
              5738 {
              -
              5739 _Assume_(text || start >= end);
              -
              5740 this->interval.end = start;
              -
              5741 for (;;) {
              -
              5742 if (this->interval.end < end && text[this->interval.end]) {
              -
              5743 if ((unsigned int)text[this->interval.end] < 0x20 ||
              -
              5744 (unsigned int)text[this->interval.end] == 0x7f ||
              -
              5745 text[this->interval.end] == '(' ||
              -
              5746 text[this->interval.end] == ')' ||
              -
              5747 text[this->interval.end] == '<' ||
              -
              5748 text[this->interval.end] == '>' ||
              -
              5749 text[this->interval.end] == '@' ||
              -
              5750 text[this->interval.end] == ',' ||
              -
              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 isspace(text[this->interval.end]))
              -
              5763 break;
              -
              5764 else
              -
              5765 this->interval.end++;
              -
              5766 }
              -
              5767 else
              -
              5768 break;
              -
              5769 }
              - -
              5771 this->interval.start = start;
              -
              5772 return true;
              -
              5773 }
              -
              5774 else {
              -
              5775 this->interval.start = (this->interval.end = start) + 1;
              -
              5776 return false;
              -
              5777 }
              -
              5778 }
              -
              5779 };
              +
              5725
              +
              +
              5729 class http_token : public parser
              +
              5730 {
              +
              5731 public:
              +
              5732 virtual bool match(
              +
              5733 _In_reads_or_z_(end) const char* text,
              +
              5734 _In_ size_t start = 0,
              +
              5735 _In_ size_t end = SIZE_MAX,
              +
              5736 _In_ int flags = match_default)
              +
              5737 {
              +
              5738 _Assume_(text || start >= end);
              +
              5739 this->interval.end = start;
              +
              5740 for (;;) {
              +
              5741 if (this->interval.end < end && text[this->interval.end]) {
              +
              5742 if ((unsigned int)text[this->interval.end] < 0x20 ||
              +
              5743 (unsigned int)text[this->interval.end] == 0x7f ||
              +
              5744 text[this->interval.end] == '(' ||
              +
              5745 text[this->interval.end] == ')' ||
              +
              5746 text[this->interval.end] == '<' ||
              +
              5747 text[this->interval.end] == '>' ||
              +
              5748 text[this->interval.end] == '@' ||
              +
              5749 text[this->interval.end] == ',' ||
              +
              5750 text[this->interval.end] == ';' ||
              +
              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 isspace(text[this->interval.end]))
              +
              5762 break;
              +
              5763 else
              +
              5764 this->interval.end++;
              +
              5765 }
              +
              5766 else
              +
              5767 break;
              +
              5768 }
              + +
              5770 this->interval.start = start;
              +
              5771 return true;
              +
              5772 }
              +
              5773 else {
              +
              5774 this->interval.invalidate();
              +
              5775 return false;
              +
              5776 }
              +
              5777 }
              +
              5778 };
              -
              5780
              -
              - -
              5785 {
              -
              5786 public:
              -
              5787 virtual bool match(
              -
              5788 _In_reads_or_z_(end) const char* text,
              -
              5789 _In_ size_t start = 0,
              -
              5790 _In_ size_t end = (size_t)-1,
              -
              5791 _In_ int flags = match_default)
              -
              5792 {
              -
              5793 _Assume_(text || start >= end);
              -
              5794 this->interval.end = start;
              -
              5795 if (this->interval.end < end && text[this->interval.end] != '"')
              -
              5796 goto error;
              -
              5797 this->interval.end++;
              -
              5798 content.start = this->interval.end;
              -
              5799 for (;;) {
              -
              5800 _Assume_(text || this->interval.end >= end);
              -
              5801 if (this->interval.end < end && text[this->interval.end]) {
              -
              5802 if (text[this->interval.end] == '"') {
              -
              5803 content.end = this->interval.end;
              -
              5804 this->interval.end++;
              -
              5805 break;
              -
              5806 }
              -
              5807 else if (text[this->interval.end] == '\\') {
              -
              5808 this->interval.end++;
              -
              5809 if (this->interval.end < end && text[this->interval.end]) {
              -
              5810 this->interval.end++;
              -
              5811 }
              -
              5812 else
              -
              5813 goto error;
              -
              5814 }
              -
              5815 else if (m_chr.match(text, this->interval.end, end, flags))
              -
              5816 this->interval.end++;
              -
              5817 else
              -
              5818 goto error;
              -
              5819 }
              -
              5820 else
              -
              5821 goto error;
              -
              5822 }
              -
              5823 this->interval.start = start;
              -
              5824 return true;
              -
              5825
              -
              5826 error:
              -
              5827 content.start = 1;
              -
              5828 content.end = 0;
              -
              5829 this->interval.start = (this->interval.end = start) + 1;
              -
              5830 return false;
              -
              5831 }
              -
              5832
              -
              5833 virtual void invalidate()
              -
              5834 {
              -
              5835 content.start = 1;
              -
              5836 content.end = 0;
              -
              5837 parser::invalidate();
              -
              5838 }
              -
              5839
              -
              5840 public:
              - -
              5842
              -
              5843 protected:
              -
              5844 http_text_char m_chr;
              -
              5845 };
              +
              5779
              +
              + +
              5784 {
              +
              5785 public:
              +
              5786 virtual bool match(
              +
              5787 _In_reads_or_z_(end) const char* text,
              +
              5788 _In_ size_t start = 0,
              +
              5789 _In_ size_t end = SIZE_MAX,
              +
              5790 _In_ int flags = match_default)
              +
              5791 {
              +
              5792 _Assume_(text || start >= end);
              +
              5793 this->interval.end = start;
              +
              5794 if (this->interval.end < end && text[this->interval.end] != '"')
              +
              5795 goto error;
              +
              5796 this->interval.end++;
              +
              5797 content.start = this->interval.end;
              +
              5798 for (;;) {
              +
              5799 _Assume_(text || this->interval.end >= end);
              +
              5800 if (this->interval.end < end && text[this->interval.end]) {
              +
              5801 if (text[this->interval.end] == '"') {
              +
              5802 content.end = this->interval.end;
              +
              5803 this->interval.end++;
              +
              5804 break;
              +
              5805 }
              +
              5806 else if (text[this->interval.end] == '\\') {
              +
              5807 this->interval.end++;
              +
              5808 if (this->interval.end < end && text[this->interval.end]) {
              +
              5809 this->interval.end++;
              +
              5810 }
              +
              5811 else
              +
              5812 goto error;
              +
              5813 }
              +
              5814 else if (m_chr.match(text, this->interval.end, end, flags))
              +
              5815 this->interval.end++;
              +
              5816 else
              +
              5817 goto error;
              +
              5818 }
              +
              5819 else
              +
              5820 goto error;
              +
              5821 }
              +
              5822 this->interval.start = start;
              +
              5823 return true;
              +
              5824
              +
              5825 error:
              +
              5826 content.start = 1;
              +
              5827 content.end = 0;
              +
              5828 this->interval.invalidate();
              +
              5829 return false;
              +
              5830 }
              +
              5831
              +
              5832 virtual void invalidate()
              +
              5833 {
              +
              5834 content.start = 1;
              +
              5835 content.end = 0;
              +
              5836 parser::invalidate();
              +
              5837 }
              +
              5838
              +
              5839 public:
              + +
              5841
              +
              5842 protected:
              +
              5843 http_text_char m_chr;
              +
              5844 };
              -
              5846
              -
              -
              5850 class http_value : public parser
              -
              5851 {
              -
              5852 public:
              -
              5853 virtual bool match(
              -
              5854 _In_reads_or_z_(end) const char* text,
              -
              5855 _In_ size_t start = 0,
              -
              5856 _In_ size_t end = (size_t)-1,
              -
              5857 _In_ int flags = match_default)
              -
              5858 {
              -
              5859 _Assume_(text || start >= end);
              -
              5860 this->interval.end = start;
              -
              5861 if (string.match(text, this->interval.end, end, flags)) {
              -
              5862 token.invalidate();
              -
              5863 this->interval.end = string.interval.end;
              -
              5864 this->interval.start = start;
              -
              5865 return true;
              -
              5866 }
              -
              5867 else if (token.match(text, this->interval.end, end, flags)) {
              -
              5868 string.invalidate();
              -
              5869 this->interval.end = token.interval.end;
              -
              5870 this->interval.start = start;
              -
              5871 return true;
              -
              5872 }
              -
              5873 else {
              -
              5874 this->interval.start = (this->interval.end = start) + 1;
              -
              5875 return false;
              -
              5876 }
              -
              5877 }
              -
              5878
              -
              5879 virtual void invalidate()
              -
              5880 {
              -
              5881 string.invalidate();
              -
              5882 token.invalidate();
              -
              5883 parser::invalidate();
              -
              5884 }
              -
              5885
              -
              5886 public:
              - - -
              5889 };
              +
              5845
              +
              +
              5849 class http_value : public parser
              +
              5850 {
              +
              5851 public:
              +
              5852 virtual bool match(
              +
              5853 _In_reads_or_z_(end) const char* text,
              +
              5854 _In_ size_t start = 0,
              +
              5855 _In_ size_t end = SIZE_MAX,
              +
              5856 _In_ int flags = match_default)
              +
              5857 {
              +
              5858 _Assume_(text || start >= end);
              +
              5859 this->interval.end = start;
              +
              5860 if (string.match(text, this->interval.end, end, flags)) {
              +
              5861 token.invalidate();
              +
              5862 this->interval.end = string.interval.end;
              +
              5863 this->interval.start = start;
              +
              5864 return true;
              +
              5865 }
              +
              5866 else if (token.match(text, this->interval.end, end, flags)) {
              +
              5867 string.invalidate();
              +
              5868 this->interval.end = token.interval.end;
              +
              5869 this->interval.start = start;
              +
              5870 return true;
              +
              5871 }
              +
              5872 else {
              +
              5873 this->interval.invalidate();
              +
              5874 return false;
              +
              5875 }
              +
              5876 }
              +
              5877
              +
              5878 virtual void invalidate()
              +
              5879 {
              +
              5880 string.invalidate();
              +
              5881 token.invalidate();
              +
              5882 parser::invalidate();
              +
              5883 }
              +
              5884
              +
              5885 public:
              + + +
              5888 };
              -
              5890
              -
              -
              5894 class http_parameter : public parser
              -
              5895 {
              -
              5896 public:
              -
              5897 virtual bool match(
              -
              5898 _In_reads_or_z_(end) const char* text,
              -
              5899 _In_ size_t start = 0,
              -
              5900 _In_ size_t end = (size_t)-1,
              -
              5901 _In_ int flags = match_default)
              -
              5902 {
              -
              5903 _Assume_(text || start >= end);
              -
              5904 this->interval.end = start;
              -
              5905 if (name.match(text, this->interval.end, end, flags))
              -
              5906 this->interval.end = name.interval.end;
              -
              5907 else
              -
              5908 goto error;
              -
              5909 while (m_space.match(text, this->interval.end, end, flags))
              -
              5910 this->interval.end = m_space.interval.end;
              -
              5911 _Assume_(text || this->interval.end >= end);
              -
              5912 if (this->interval.end < end && text[this->interval.end] == '=')
              -
              5913 this->interval.end++;
              -
              5914 else
              -
              5915 while (m_space.match(text, this->interval.end, end, flags))
              -
              5916 this->interval.end = m_space.interval.end;
              -
              5917 if (value.match(text, this->interval.end, end, flags))
              -
              5918 this->interval.end = value.interval.end;
              -
              5919 else
              -
              5920 goto error;
              -
              5921 this->interval.start = start;
              -
              5922 return true;
              -
              5923
              -
              5924 error:
              -
              5925 name.invalidate();
              -
              5926 value.invalidate();
              -
              5927 this->interval.start = (this->interval.end = start) + 1;
              -
              5928 return false;
              -
              5929 }
              -
              5930
              -
              5931 virtual void invalidate()
              -
              5932 {
              -
              5933 name.invalidate();
              -
              5934 value.invalidate();
              -
              5935 parser::invalidate();
              -
              5936 }
              -
              5937
              -
              5938 public:
              - - -
              5941
              -
              5942 protected:
              -
              5943 http_space m_space;
              -
              5944 };
              +
              5889
              +
              +
              5893 class http_parameter : public parser
              +
              5894 {
              +
              5895 public:
              +
              5896 virtual bool match(
              +
              5897 _In_reads_or_z_(end) const char* text,
              +
              5898 _In_ size_t start = 0,
              +
              5899 _In_ size_t end = SIZE_MAX,
              +
              5900 _In_ int flags = match_default)
              +
              5901 {
              +
              5902 _Assume_(text || start >= end);
              +
              5903 this->interval.end = start;
              +
              5904 if (name.match(text, this->interval.end, end, flags))
              +
              5905 this->interval.end = name.interval.end;
              +
              5906 else
              +
              5907 goto error;
              +
              5908 while (m_space.match(text, this->interval.end, end, flags))
              +
              5909 this->interval.end = m_space.interval.end;
              +
              5910 _Assume_(text || this->interval.end >= end);
              +
              5911 if (this->interval.end < end && text[this->interval.end] == '=')
              +
              5912 this->interval.end++;
              +
              5913 else
              +
              5914 while (m_space.match(text, this->interval.end, end, flags))
              +
              5915 this->interval.end = m_space.interval.end;
              +
              5916 if (value.match(text, this->interval.end, end, flags))
              +
              5917 this->interval.end = value.interval.end;
              +
              5918 else
              +
              5919 goto error;
              +
              5920 this->interval.start = start;
              +
              5921 return true;
              +
              5922
              +
              5923 error:
              +
              5924 name.invalidate();
              +
              5925 value.invalidate();
              +
              5926 this->interval.invalidate();
              +
              5927 return false;
              +
              5928 }
              +
              5929
              +
              5930 virtual void invalidate()
              +
              5931 {
              +
              5932 name.invalidate();
              +
              5933 value.invalidate();
              +
              5934 parser::invalidate();
              +
              5935 }
              +
              5936
              +
              5937 public:
              + + +
              5940
              +
              5941 protected:
              +
              5942 http_space m_space;
              +
              5943 };
              -
              5945
              -
              -
              5949 class http_any_type : public parser
              -
              5950 {
              -
              5951 public:
              -
              5952 virtual bool match(
              -
              5953 _In_reads_or_z_(end) const char* text,
              -
              5954 _In_ size_t start = 0,
              -
              5955 _In_ size_t end = (size_t)-1,
              -
              5956 _In_ int flags = match_default)
              -
              5957 {
              -
              5958 _Assume_(text || start >= end);
              -
              5959 if (start + 2 < end &&
              -
              5960 text[start] == '*' &&
              -
              5961 text[start + 1] == '/' &&
              -
              5962 text[start + 2] == '*')
              -
              5963 {
              -
              5964 this->interval.end = (this->interval.start = start) + 3;
              -
              5965 return true;
              -
              5966 }
              -
              5967 else if (start < end && text[start] == '*') {
              -
              5968 this->interval.end = (this->interval.start = start) + 1;
              -
              5969 return true;
              -
              5970 }
              -
              5971 else {
              -
              5972 this->interval.start = (this->interval.end = start) + 1;
              -
              5973 return false;
              -
              5974 }
              -
              5975 }
              -
              5976 };
              +
              5944
              +
              +
              5948 class http_any_type : public parser
              +
              5949 {
              +
              5950 public:
              +
              5951 virtual bool match(
              +
              5952 _In_reads_or_z_(end) const char* text,
              +
              5953 _In_ size_t start = 0,
              +
              5954 _In_ size_t end = SIZE_MAX,
              +
              5955 _In_ int flags = match_default)
              +
              5956 {
              +
              5957 _Assume_(text || start >= end);
              +
              5958 if (start + 2 < end &&
              +
              5959 text[start] == '*' &&
              +
              5960 text[start + 1] == '/' &&
              +
              5961 text[start + 2] == '*')
              +
              5962 {
              +
              5963 this->interval.end = (this->interval.start = start) + 3;
              +
              5964 return true;
              +
              5965 }
              +
              5966 else if (start < end && text[start] == '*') {
              +
              5967 this->interval.end = (this->interval.start = start) + 1;
              +
              5968 return true;
              +
              5969 }
              +
              5970 else {
              +
              5971 this->interval.invalidate();
              +
              5972 return false;
              +
              5973 }
              +
              5974 }
              +
              5975 };
              -
              5977
              -
              - -
              5982 {
              -
              5983 public:
              -
              5984 virtual bool match(
              -
              5985 _In_reads_or_z_(end) const char* text,
              -
              5986 _In_ size_t start = 0,
              -
              5987 _In_ size_t end = (size_t)-1,
              -
              5988 _In_ int flags = match_default)
              -
              5989 {
              -
              5990 _Assume_(text || start >= end);
              -
              5991 this->interval.end = start;
              -
              5992 if (type.match(text, this->interval.end, end, flags))
              -
              5993 this->interval.end = type.interval.end;
              -
              5994 else
              -
              5995 goto error;
              -
              5996 while (m_space.match(text, this->interval.end, end, flags))
              -
              5997 this->interval.end = m_space.interval.end;
              -
              5998 if (this->interval.end < end && text[this->interval.end] == '/')
              -
              5999 this->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 (subtype.match(text, this->interval.end, end, flags))
              -
              6005 this->interval.end = subtype.interval.end;
              -
              6006 else
              -
              6007 goto error;
              -
              6008 this->interval.start = start;
              -
              6009 return true;
              -
              6010
              -
              6011 error:
              -
              6012 type.invalidate();
              -
              6013 subtype.invalidate();
              -
              6014 this->interval.start = (this->interval.end = start) + 1;
              -
              6015 return false;
              -
              6016 }
              -
              6017
              -
              6018 virtual void invalidate()
              -
              6019 {
              -
              6020 type.invalidate();
              -
              6021 subtype.invalidate();
              -
              6022 parser::invalidate();
              -
              6023 }
              -
              6024
              -
              6025 public:
              -
              6026 http_token type;
              -
              6027 http_token subtype;
              -
              6028
              -
              6029 protected:
              -
              6030 http_space m_space;
              -
              6031 };
              +
              5976
              +
              + +
              5981 {
              +
              5982 public:
              +
              5983 virtual bool match(
              +
              5984 _In_reads_or_z_(end) const char* text,
              +
              5985 _In_ size_t start = 0,
              +
              5986 _In_ size_t end = SIZE_MAX,
              +
              5987 _In_ int flags = match_default)
              +
              5988 {
              +
              5989 _Assume_(text || start >= end);
              +
              5990 this->interval.end = start;
              +
              5991 if (type.match(text, this->interval.end, end, flags))
              +
              5992 this->interval.end = type.interval.end;
              +
              5993 else
              +
              5994 goto error;
              +
              5995 while (m_space.match(text, this->interval.end, end, flags))
              +
              5996 this->interval.end = m_space.interval.end;
              +
              5997 if (this->interval.end < end && text[this->interval.end] == '/')
              +
              5998 this->interval.end++;
              +
              5999 else
              +
              6000 goto error;
              +
              6001 while (m_space.match(text, this->interval.end, end, flags))
              +
              6002 this->interval.end = m_space.interval.end;
              +
              6003 if (subtype.match(text, this->interval.end, end, flags))
              +
              6004 this->interval.end = subtype.interval.end;
              +
              6005 else
              +
              6006 goto error;
              +
              6007 this->interval.start = start;
              +
              6008 return true;
              +
              6009
              +
              6010 error:
              +
              6011 type.invalidate();
              +
              6012 subtype.invalidate();
              +
              6013 this->interval.invalidate();
              +
              6014 return false;
              +
              6015 }
              +
              6016
              +
              6017 virtual void invalidate()
              +
              6018 {
              +
              6019 type.invalidate();
              +
              6020 subtype.invalidate();
              +
              6021 parser::invalidate();
              +
              6022 }
              +
              6023
              +
              6024 public:
              +
              6025 http_token type;
              +
              6026 http_token subtype;
              +
              6027
              +
              6028 protected:
              +
              6029 http_space m_space;
              +
              6030 };
              -
              6032
              -
              - -
              6037 {
              -
              6038 public:
              -
              6039 virtual bool match(
              -
              6040 _In_reads_or_z_(end) const char* text,
              -
              6041 _In_ size_t start = 0,
              -
              6042 _In_ size_t end = (size_t)-1,
              -
              6043 _In_ int flags = match_default)
              -
              6044 {
              -
              6045 _Assume_(text || start >= end);
              -
              6046 if (!http_media_range::match(text, start, end, flags))
              -
              6047 goto error;
              -
              6048 params.clear();
              -
              6049 for (;;) {
              -
              6050 if (this->interval.end < end && text[this->interval.end]) {
              -
              6051 if (m_space.match(text, this->interval.end, end, flags))
              -
              6052 this->interval.end = m_space.interval.end;
              -
              6053 else if (text[this->interval.end] == ';') {
              -
              6054 this->interval.end++;
              -
              6055 while (m_space.match(text, this->interval.end, end, flags))
              -
              6056 this->interval.end = m_space.interval.end;
              - -
              6058 if (param.match(text, this->interval.end, end, flags)) {
              -
              6059 this->interval.end = param.interval.end;
              -
              6060 params.push_back(std::move(param));
              -
              6061 }
              -
              6062 else
              -
              6063 break;
              -
              6064 }
              -
              6065 else
              -
              6066 break;
              -
              6067 }
              -
              6068 else
              -
              6069 break;
              -
              6070 }
              -
              6071 this->interval.end = params.empty() ? subtype.interval.end : params.back().interval.end;
              -
              6072 return true;
              -
              6073
              -
              6074 error:
              -
              6075 http_media_range::invalidate();
              -
              6076 params.clear();
              -
              6077 this->interval.start = (this->interval.end = start) + 1;
              -
              6078 return false;
              -
              6079 }
              -
              6080
              -
              6081 virtual void invalidate()
              -
              6082 {
              -
              6083 params.clear();
              -
              6084 http_media_range::invalidate();
              -
              6085 }
              -
              6086
              -
              6087 public:
              -
              6088 std::list<http_parameter> params;
              -
              6089 };
              +
              6031
              +
              + +
              6036 {
              +
              6037 public:
              +
              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_MAX,
              +
              6042 _In_ int flags = match_default)
              +
              6043 {
              +
              6044 _Assume_(text || start >= end);
              +
              6045 if (!http_media_range::match(text, start, end, flags))
              +
              6046 goto error;
              +
              6047 params.clear();
              +
              6048 for (;;) {
              +
              6049 if (this->interval.end < end && text[this->interval.end]) {
              +
              6050 if (m_space.match(text, this->interval.end, end, flags))
              +
              6051 this->interval.end = m_space.interval.end;
              +
              6052 else if (text[this->interval.end] == ';') {
              +
              6053 this->interval.end++;
              +
              6054 while (m_space.match(text, this->interval.end, end, flags))
              +
              6055 this->interval.end = m_space.interval.end;
              +
              6056 http_parameter param;
              +
              6057 if (param.match(text, this->interval.end, end, flags)) {
              +
              6058 this->interval.end = param.interval.end;
              +
              6059 params.push_back(std::move(param));
              +
              6060 }
              +
              6061 else
              +
              6062 break;
              +
              6063 }
              +
              6064 else
              +
              6065 break;
              +
              6066 }
              +
              6067 else
              +
              6068 break;
              +
              6069 }
              +
              6070 this->interval.end = params.empty() ? subtype.interval.end : params.back().interval.end;
              +
              6071 return true;
              +
              6072
              +
              6073 error:
              +
              6074 http_media_range::invalidate();
              +
              6075 params.clear();
              +
              6076 this->interval.invalidate();
              +
              6077 return false;
              +
              6078 }
              +
              6079
              +
              6080 virtual void invalidate()
              +
              6081 {
              +
              6082 params.clear();
              +
              6083 http_media_range::invalidate();
              +
              6084 }
              +
              6085
              +
              6086 public:
              +
              6087 std::list<http_parameter> params;
              +
              6088 };
              -
              6090
              -
              - -
              6095 {
              -
              6096 public:
              -
              6097 virtual bool match(
              -
              6098 _In_reads_or_z_(end) const char* text,
              -
              6099 _In_ size_t start = 0,
              -
              6100 _In_ size_t end = (size_t)-1,
              -
              6101 _In_ int flags = match_default)
              -
              6102 {
              -
              6103 _Assume_(text || start >= end);
              -
              6104 this->interval.end = start;
              -
              6105 for (;;) {
              -
              6106 if (this->interval.end < end && text[this->interval.end]) {
              -
              6107 if ((unsigned int)text[this->interval.end] < 0x20 ||
              -
              6108 (unsigned int)text[this->interval.end] == 0x7f ||
              -
              6109 text[this->interval.end] == ':' ||
              -
              6110 text[this->interval.end] == '/' ||
              -
              6111 isspace(text[this->interval.end]))
              -
              6112 break;
              -
              6113 else
              -
              6114 this->interval.end++;
              -
              6115 }
              -
              6116 else
              -
              6117 break;
              -
              6118 }
              - -
              6120 this->interval.start = start;
              -
              6121 return true;
              -
              6122 }
              -
              6123 this->interval.start = (this->interval.end = start) + 1;
              -
              6124 return false;
              -
              6125 }
              -
              6126 };
              +
              6089
              +
              + +
              6094 {
              +
              6095 public:
              +
              6096 virtual bool match(
              +
              6097 _In_reads_or_z_(end) const char* text,
              +
              6098 _In_ size_t start = 0,
              +
              6099 _In_ size_t end = SIZE_MAX,
              +
              6100 _In_ int flags = match_default)
              +
              6101 {
              +
              6102 _Assume_(text || start >= end);
              +
              6103 this->interval.end = start;
              +
              6104 for (;;) {
              +
              6105 if (this->interval.end < end && text[this->interval.end]) {
              +
              6106 if ((unsigned int)text[this->interval.end] < 0x20 ||
              +
              6107 (unsigned int)text[this->interval.end] == 0x7f ||
              +
              6108 text[this->interval.end] == ':' ||
              +
              6109 text[this->interval.end] == '/' ||
              +
              6110 isspace(text[this->interval.end]))
              +
              6111 break;
              +
              6112 else
              +
              6113 this->interval.end++;
              +
              6114 }
              +
              6115 else
              +
              6116 break;
              +
              6117 }
              + +
              6119 this->interval.start = start;
              +
              6120 return true;
              +
              6121 }
              +
              6122 this->interval.invalidate();
              +
              6123 return false;
              +
              6124 }
              +
              6125 };
              -
              6127
              -
              -
              6131 class http_url_port : public parser
              -
              6132 {
              -
              6133 public:
              -
              6134 http_url_port(_In_ const std::locale& locale = std::locale()) :
              -
              6135 parser(locale),
              -
              6136 value(0)
              -
              6137 {}
              -
              6138
              -
              6139 virtual bool match(
              -
              6140 _In_reads_or_z_(end) const char* text,
              -
              6141 _In_ size_t start = 0,
              -
              6142 _In_ size_t end = (size_t)-1,
              -
              6143 _In_ int flags = match_default)
              -
              6144 {
              -
              6145 _Assume_(text || start >= end);
              -
              6146 value = 0;
              -
              6147 this->interval.end = start;
              -
              6148 for (;;) {
              -
              6149 if (this->interval.end < end && text[this->interval.end]) {
              -
              6150 if ('0' <= text[this->interval.end] && text[this->interval.end] <= '9') {
              -
              6151 size_t _value = (size_t)value * 10 + text[this->interval.end] - '0';
              -
              6152 if (_value > (uint16_t)-1) {
              -
              6153 value = 0;
              -
              6154 this->interval.start = (this->interval.end = start) + 1;
              -
              6155 return false;
              -
              6156 }
              -
              6157 value = (uint16_t)_value;
              -
              6158 this->interval.end++;
              -
              6159 }
              -
              6160 else
              -
              6161 break;
              -
              6162 }
              -
              6163 else
              -
              6164 break;
              -
              6165 }
              - -
              6167 this->interval.start = start;
              -
              6168 return true;
              -
              6169 }
              -
              6170 this->interval.start = (this->interval.end = start) + 1;
              -
              6171 return false;
              -
              6172 }
              -
              6173
              -
              6174 virtual void invalidate()
              -
              6175 {
              -
              6176 value = 0;
              -
              6177 parser::invalidate();
              -
              6178 }
              -
              6179
              -
              6180 public:
              -
              6181 uint16_t value;
              -
              6182 };
              +
              6126
              +
              +
              6130 class http_url_port : public parser
              +
              6131 {
              +
              6132 public:
              +
              6133 http_url_port(_In_ const std::locale& locale = std::locale()) :
              +
              6134 parser(locale),
              +
              6135 value(0)
              +
              6136 {}
              +
              6137
              +
              6138 virtual bool match(
              +
              6139 _In_reads_or_z_(end) const char* text,
              +
              6140 _In_ size_t start = 0,
              +
              6141 _In_ size_t end = SIZE_MAX,
              +
              6142 _In_ int flags = match_default)
              +
              6143 {
              +
              6144 _Assume_(text || start >= end);
              +
              6145 value = 0;
              +
              6146 this->interval.end = start;
              +
              6147 for (;;) {
              +
              6148 if (this->interval.end < end && text[this->interval.end]) {
              +
              6149 if ('0' <= text[this->interval.end] && text[this->interval.end] <= '9') {
              +
              6150 size_t _value = (size_t)value * 10 + text[this->interval.end] - '0';
              +
              6151 if (_value > (uint16_t)-1) {
              +
              6152 value = 0;
              +
              6153 this->interval.invalidate();
              +
              6154 return false;
              +
              6155 }
              +
              6156 value = (uint16_t)_value;
              +
              6157 this->interval.end++;
              +
              6158 }
              +
              6159 else
              +
              6160 break;
              +
              6161 }
              +
              6162 else
              +
              6163 break;
              +
              6164 }
              + +
              6166 this->interval.start = start;
              +
              6167 return true;
              +
              6168 }
              +
              6169 this->interval.invalidate();
              +
              6170 return false;
              +
              6171 }
              +
              6172
              +
              6173 virtual void invalidate()
              +
              6174 {
              +
              6175 value = 0;
              +
              6176 parser::invalidate();
              +
              6177 }
              +
              6178
              +
              6179 public:
              +
              6180 uint16_t value;
              +
              6181 };
              -
              6183
              -
              - -
              6188 {
              -
              6189 public:
              -
              6190 virtual bool match(
              -
              6191 _In_reads_or_z_(end) const char* text,
              -
              6192 _In_ size_t start = 0,
              -
              6193 _In_ size_t end = (size_t)-1,
              -
              6194 _In_ int flags = match_default)
              -
              6195 {
              -
              6196 _Assume_(text || start >= end);
              -
              6197 this->interval.end = start;
              -
              6198 for (;;) {
              -
              6199 if (this->interval.end < end && text[this->interval.end]) {
              -
              6200 if ((unsigned int)text[this->interval.end] < 0x20 ||
              -
              6201 (unsigned int)text[this->interval.end] == 0x7f ||
              -
              6202 text[this->interval.end] == '?' ||
              -
              6203 text[this->interval.end] == '/' ||
              -
              6204 isspace(text[this->interval.end]))
              -
              6205 break;
              -
              6206 else
              -
              6207 this->interval.end++;
              -
              6208 }
              -
              6209 else
              -
              6210 break;
              -
              6211 }
              -
              6212 this->interval.start = start;
              -
              6213 return true;
              -
              6214 }
              -
              6215 };
              +
              6182
              +
              + +
              6187 {
              +
              6188 public:
              +
              6189 virtual bool match(
              +
              6190 _In_reads_or_z_(end) const char* text,
              +
              6191 _In_ size_t start = 0,
              +
              6192 _In_ size_t end = SIZE_MAX,
              +
              6193 _In_ int flags = match_default)
              +
              6194 {
              +
              6195 _Assume_(text || start >= end);
              +
              6196 this->interval.end = start;
              +
              6197 for (;;) {
              +
              6198 if (this->interval.end < end && text[this->interval.end]) {
              +
              6199 if ((unsigned int)text[this->interval.end] < 0x20 ||
              +
              6200 (unsigned int)text[this->interval.end] == 0x7f ||
              +
              6201 text[this->interval.end] == '?' ||
              +
              6202 text[this->interval.end] == '/' ||
              +
              6203 isspace(text[this->interval.end]))
              +
              6204 break;
              +
              6205 else
              +
              6206 this->interval.end++;
              +
              6207 }
              +
              6208 else
              +
              6209 break;
              +
              6210 }
              +
              6211 this->interval.start = start;
              +
              6212 return true;
              +
              6213 }
              +
              6214 };
              -
              6216
              -
              -
              6220 class http_url_path : public parser
              -
              6221 {
              -
              6222 public:
              -
              6223 virtual bool match(
              -
              6224 _In_reads_or_z_(end) const char* text,
              -
              6225 _In_ size_t start = 0,
              -
              6226 _In_ size_t end = (size_t)-1,
              -
              6227 _In_ int flags = match_default)
              -
              6228 {
              -
              6229 _Assume_(text || start >= end);
              - -
              6231 this->interval.end = start;
              -
              6232 segments.clear();
              -
              6233 _Assume_(text || this->interval.end >= end);
              -
              6234 if (this->interval.end < end && text[this->interval.end] != '/')
              -
              6235 goto error;
              -
              6236 this->interval.end++;
              -
              6237 s.match(text, this->interval.end, end, flags);
              -
              6238 segments.push_back(s);
              -
              6239 this->interval.end = s.interval.end;
              -
              6240 for (;;) {
              -
              6241 if (this->interval.end < end && text[this->interval.end]) {
              -
              6242 if (text[this->interval.end] == '/') {
              -
              6243 this->interval.end++;
              -
              6244 s.match(text, this->interval.end, end, flags);
              -
              6245 segments.push_back(s);
              -
              6246 this->interval.end = s.interval.end;
              -
              6247 }
              -
              6248 else
              -
              6249 break;
              -
              6250 }
              -
              6251 else
              -
              6252 break;
              -
              6253 }
              -
              6254 this->interval.start = start;
              -
              6255 return true;
              -
              6256
              -
              6257 error:
              -
              6258 segments.clear();
              -
              6259 this->interval.start = (this->interval.end = start) + 1;
              -
              6260 return false;
              -
              6261 }
              -
              6262
              -
              6263 virtual void invalidate()
              -
              6264 {
              -
              6265 segments.clear();
              -
              6266 parser::invalidate();
              -
              6267 }
              -
              6268
              -
              6269 public:
              -
              6270 std::vector<http_url_path_segment> segments;
              -
              6271 };
              +
              6215
              +
              +
              6219 class http_url_path : public parser
              +
              6220 {
              +
              6221 public:
              +
              6222 virtual bool match(
              +
              6223 _In_reads_or_z_(end) const char* text,
              +
              6224 _In_ size_t start = 0,
              +
              6225 _In_ size_t end = SIZE_MAX,
              +
              6226 _In_ int flags = match_default)
              +
              6227 {
              +
              6228 _Assume_(text || start >= end);
              + +
              6230 this->interval.end = start;
              +
              6231 segments.clear();
              +
              6232 _Assume_(text || this->interval.end >= end);
              +
              6233 if (this->interval.end < end && text[this->interval.end] != '/')
              +
              6234 goto error;
              +
              6235 this->interval.end++;
              +
              6236 s.match(text, this->interval.end, end, flags);
              +
              6237 segments.push_back(s);
              +
              6238 this->interval.end = s.interval.end;
              +
              6239 for (;;) {
              +
              6240 if (this->interval.end < end && text[this->interval.end]) {
              +
              6241 if (text[this->interval.end] == '/') {
              +
              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 }
              +
              6247 else
              +
              6248 break;
              +
              6249 }
              +
              6250 else
              +
              6251 break;
              +
              6252 }
              +
              6253 this->interval.start = start;
              +
              6254 return true;
              +
              6255
              +
              6256 error:
              +
              6257 segments.clear();
              +
              6258 this->interval.invalidate();
              +
              6259 return false;
              +
              6260 }
              +
              6261
              +
              6262 virtual void invalidate()
              +
              6263 {
              +
              6264 segments.clear();
              +
              6265 parser::invalidate();
              +
              6266 }
              +
              6267
              +
              6268 public:
              +
              6269 std::vector<http_url_path_segment> segments;
              +
              6270 };
              -
              6272
              -
              - -
              6277 {
              -
              6278 public:
              -
              6279 virtual bool match(
              -
              6280 _In_reads_or_z_(end) const char* text,
              -
              6281 _In_ size_t start = 0,
              -
              6282 _In_ size_t end = (size_t)-1,
              -
              6283 _In_ int flags = match_default)
              -
              6284 {
              -
              6285 _Assume_(text || start >= end);
              -
              6286 this->interval.end = start;
              -
              6287 name.start = this->interval.end;
              -
              6288 for (;;) {
              -
              6289 if (this->interval.end < end && text[this->interval.end]) {
              -
              6290 if ((unsigned int)text[this->interval.end] < 0x20 ||
              -
              6291 (unsigned int)text[this->interval.end] == 0x7f ||
              -
              6292 text[this->interval.end] == '&' ||
              -
              6293 text[this->interval.end] == '=' ||
              -
              6294 isspace(text[this->interval.end]))
              -
              6295 break;
              -
              6296 else
              -
              6297 this->interval.end++;
              -
              6298 }
              -
              6299 else
              -
              6300 break;
              -
              6301 }
              - -
              6303 name.end = this->interval.end;
              -
              6304 else
              -
              6305 goto error;
              -
              6306 if (text[this->interval.end] == '=') {
              -
              6307 this->interval.end++;
              -
              6308 value.start = this->interval.end;
              -
              6309 for (;;) {
              -
              6310 if (this->interval.end < end && text[this->interval.end]) {
              -
              6311 if ((unsigned int)text[this->interval.end] < 0x20 ||
              -
              6312 (unsigned int)text[this->interval.end] == 0x7f ||
              -
              6313 text[this->interval.end] == '&' ||
              -
              6314 isspace(text[this->interval.end]))
              -
              6315 break;
              -
              6316 else
              -
              6317 this->interval.end++;
              -
              6318 }
              -
              6319 else
              -
              6320 break;
              -
              6321 }
              -
              6322 value.end = this->interval.end;
              -
              6323 }
              -
              6324 else {
              -
              6325 value.start = 1;
              -
              6326 value.end = 0;
              -
              6327 }
              -
              6328 this->interval.start = start;
              -
              6329 return true;
              -
              6330
              -
              6331 error:
              -
              6332 name.start = 1;
              -
              6333 name.end = 0;
              -
              6334 value.start = 1;
              -
              6335 value.end = 0;
              -
              6336 this->interval.start = (this->interval.end = start) + 1;
              -
              6337 return false;
              -
              6338 }
              -
              6339
              -
              6340 virtual void invalidate()
              -
              6341 {
              -
              6342 name.start = 1;
              -
              6343 name.end = 0;
              -
              6344 value.start = 1;
              -
              6345 value.end = 0;
              -
              6346 parser::invalidate();
              -
              6347 }
              -
              6348
              -
              6349 public:
              - - -
              6352 };
              +
              6271
              +
              + +
              6276 {
              +
              6277 public:
              +
              6278 virtual bool match(
              +
              6279 _In_reads_or_z_(end) const char* text,
              +
              6280 _In_ size_t start = 0,
              +
              6281 _In_ size_t end = SIZE_MAX,
              +
              6282 _In_ int flags = match_default)
              +
              6283 {
              +
              6284 _Assume_(text || start >= end);
              +
              6285 this->interval.end = start;
              +
              6286 name.start = this->interval.end;
              +
              6287 for (;;) {
              +
              6288 if (this->interval.end < end && text[this->interval.end]) {
              +
              6289 if ((unsigned int)text[this->interval.end] < 0x20 ||
              +
              6290 (unsigned int)text[this->interval.end] == 0x7f ||
              +
              6291 text[this->interval.end] == '&' ||
              +
              6292 text[this->interval.end] == '=' ||
              +
              6293 isspace(text[this->interval.end]))
              +
              6294 break;
              +
              6295 else
              +
              6296 this->interval.end++;
              +
              6297 }
              +
              6298 else
              +
              6299 break;
              +
              6300 }
              + +
              6302 name.end = this->interval.end;
              +
              6303 else
              +
              6304 goto error;
              +
              6305 if (text[this->interval.end] == '=') {
              +
              6306 this->interval.end++;
              +
              6307 value.start = this->interval.end;
              +
              6308 for (;;) {
              +
              6309 if (this->interval.end < end && text[this->interval.end]) {
              +
              6310 if ((unsigned int)text[this->interval.end] < 0x20 ||
              +
              6311 (unsigned int)text[this->interval.end] == 0x7f ||
              +
              6312 text[this->interval.end] == '&' ||
              +
              6313 isspace(text[this->interval.end]))
              +
              6314 break;
              +
              6315 else
              +
              6316 this->interval.end++;
              +
              6317 }
              +
              6318 else
              +
              6319 break;
              +
              6320 }
              +
              6321 value.end = this->interval.end;
              +
              6322 }
              +
              6323 else {
              +
              6324 value.start = 1;
              +
              6325 value.end = 0;
              +
              6326 }
              +
              6327 this->interval.start = start;
              +
              6328 return true;
              +
              6329
              +
              6330 error:
              +
              6331 name.start = 1;
              +
              6332 name.end = 0;
              +
              6333 value.start = 1;
              +
              6334 value.end = 0;
              +
              6335 this->interval.invalidate();
              +
              6336 return false;
              +
              6337 }
              +
              6338
              +
              6339 virtual void invalidate()
              +
              6340 {
              +
              6341 name.start = 1;
              +
              6342 name.end = 0;
              +
              6343 value.start = 1;
              +
              6344 value.end = 0;
              +
              6345 parser::invalidate();
              +
              6346 }
              +
              6347
              +
              6348 public:
              + + +
              6351 };
              -
              6353
              -
              -
              6357 class http_url : public parser
              -
              6358 {
              -
              6359 public:
              -
              6360 http_url(_In_ const std::locale& locale = std::locale()) :
              -
              6361 parser(locale),
              -
              6362 port(locale)
              -
              6363 {}
              -
              6364
              -
              6365 virtual bool match(
              -
              6366 _In_reads_or_z_(end) const char* text,
              -
              6367 _In_ size_t start = 0,
              -
              6368 _In_ size_t end = (size_t)-1,
              -
              6369 _In_ int flags = match_default)
              -
              6370 {
              -
              6371 _Assume_(text || start >= end);
              -
              6372 this->interval.end = start;
              -
              6373
              -
              6374 if (this->interval.end + 7 <= end && stdex::strnicmp(text + this->interval.end, 7, "http://", (size_t)-1, m_locale) == 0) {
              -
              6375 this->interval.end += 7;
              -
              6376 if (server.match(text, this->interval.end, end, flags))
              -
              6377 this->interval.end = server.interval.end;
              -
              6378 else
              -
              6379 goto error;
              -
              6380 if (this->interval.end < end && text[this->interval.end] == ':') {
              -
              6381 this->interval.end++;
              -
              6382 if (port.match(text, this->interval.end, end, flags))
              -
              6383 this->interval.end = port.interval.end;
              -
              6384 }
              -
              6385 else {
              -
              6386 port.invalidate();
              -
              6387 port.value = 80;
              -
              6388 }
              -
              6389 }
              -
              6390 else {
              -
              6391 server.invalidate();
              -
              6392 port.invalidate();
              -
              6393 port.value = 80;
              -
              6394 }
              -
              6395
              -
              6396 if (path.match(text, this->interval.end, end, flags))
              -
              6397 this->interval.end = path.interval.end;
              -
              6398 else
              -
              6399 goto error;
              -
              6400
              -
              6401 params.clear();
              -
              6402
              -
              6403 if (this->interval.end < end && text[this->interval.end] == '?') {
              -
              6404 this->interval.end++;
              -
              6405 for (;;) {
              -
              6406 if (this->interval.end < end && text[this->interval.end]) {
              -
              6407 if ((unsigned int)text[this->interval.end] < 0x20 ||
              -
              6408 (unsigned int)text[this->interval.end] == 0x7f ||
              -
              6409 isspace(text[this->interval.end]))
              -
              6410 break;
              -
              6411 else if (text[this->interval.end] == '&')
              -
              6412 this->interval.end++;
              -
              6413 else {
              - -
              6415 if (param.match(text, this->interval.end, end, flags)) {
              -
              6416 this->interval.end = param.interval.end;
              -
              6417 params.push_back(std::move(param));
              -
              6418 }
              -
              6419 else
              -
              6420 break;
              -
              6421 }
              -
              6422 }
              -
              6423 else
              -
              6424 break;
              -
              6425 }
              -
              6426 }
              -
              6427
              -
              6428 this->interval.start = start;
              -
              6429 return true;
              -
              6430
              -
              6431 error:
              -
              6432 server.invalidate();
              -
              6433 port.invalidate();
              -
              6434 path.invalidate();
              -
              6435 params.clear();
              -
              6436 this->interval.start = (this->interval.end = start) + 1;
              -
              6437 return false;
              -
              6438 }
              -
              6439
              -
              6440 virtual void invalidate()
              -
              6441 {
              -
              6442 server.invalidate();
              -
              6443 port.invalidate();
              -
              6444 path.invalidate();
              -
              6445 params.clear();
              -
              6446 parser::invalidate();
              -
              6447 }
              -
              6448
              -
              6449 public:
              -
              6450 http_url_server server;
              -
              6451 http_url_port port;
              -
              6452 http_url_path path;
              -
              6453 std::list<http_url_parameter> params;
              -
              6454 };
              +
              6352
              +
              +
              6356 class http_url : public parser
              +
              6357 {
              +
              6358 public:
              +
              6359 http_url(_In_ const std::locale& locale = std::locale()) :
              +
              6360 parser(locale),
              +
              6361 port(locale)
              +
              6362 {}
              +
              6363
              +
              6364 virtual bool match(
              +
              6365 _In_reads_or_z_(end) const char* text,
              +
              6366 _In_ size_t start = 0,
              +
              6367 _In_ size_t end = SIZE_MAX,
              +
              6368 _In_ int flags = match_default)
              +
              6369 {
              +
              6370 _Assume_(text || start >= end);
              +
              6371 this->interval.end = start;
              +
              6372
              +
              6373 if (this->interval.end + 7 <= end && stdex::strnicmp(text + this->interval.end, 7, "http://", SIZE_MAX, m_locale) == 0) {
              +
              6374 this->interval.end += 7;
              +
              6375 if (server.match(text, this->interval.end, end, flags))
              +
              6376 this->interval.end = server.interval.end;
              +
              6377 else
              +
              6378 goto error;
              +
              6379 if (this->interval.end < end && text[this->interval.end] == ':') {
              +
              6380 this->interval.end++;
              +
              6381 if (port.match(text, this->interval.end, end, flags))
              +
              6382 this->interval.end = port.interval.end;
              +
              6383 }
              +
              6384 else {
              +
              6385 port.invalidate();
              +
              6386 port.value = 80;
              +
              6387 }
              +
              6388 }
              +
              6389 else {
              +
              6390 server.invalidate();
              +
              6391 port.invalidate();
              +
              6392 port.value = 80;
              +
              6393 }
              +
              6394
              +
              6395 if (path.match(text, this->interval.end, end, flags))
              +
              6396 this->interval.end = path.interval.end;
              +
              6397 else
              +
              6398 goto error;
              +
              6399
              +
              6400 params.clear();
              +
              6401
              +
              6402 if (this->interval.end < end && text[this->interval.end] == '?') {
              +
              6403 this->interval.end++;
              +
              6404 for (;;) {
              +
              6405 if (this->interval.end < end && text[this->interval.end]) {
              +
              6406 if ((unsigned int)text[this->interval.end] < 0x20 ||
              +
              6407 (unsigned int)text[this->interval.end] == 0x7f ||
              +
              6408 isspace(text[this->interval.end]))
              +
              6409 break;
              +
              6410 else if (text[this->interval.end] == '&')
              +
              6411 this->interval.end++;
              +
              6412 else {
              +
              6413 http_url_parameter param;
              +
              6414 if (param.match(text, this->interval.end, end, flags)) {
              +
              6415 this->interval.end = param.interval.end;
              +
              6416 params.push_back(std::move(param));
              +
              6417 }
              +
              6418 else
              +
              6419 break;
              +
              6420 }
              +
              6421 }
              +
              6422 else
              +
              6423 break;
              +
              6424 }
              +
              6425 }
              +
              6426
              +
              6427 this->interval.start = start;
              +
              6428 return true;
              +
              6429
              +
              6430 error:
              +
              6431 server.invalidate();
              +
              6432 port.invalidate();
              +
              6433 path.invalidate();
              +
              6434 params.clear();
              +
              6435 this->interval.invalidate();
              +
              6436 return false;
              +
              6437 }
              +
              6438
              +
              6439 virtual void invalidate()
              +
              6440 {
              +
              6441 server.invalidate();
              +
              6442 port.invalidate();
              +
              6443 path.invalidate();
              +
              6444 params.clear();
              +
              6445 parser::invalidate();
              +
              6446 }
              +
              6447
              +
              6448 public:
              +
              6449 http_url_server server;
              +
              6450 http_url_port port;
              +
              6451 http_url_path path;
              +
              6452 std::list<http_url_parameter> params;
              +
              6453 };
              -
              6455
              -
              -
              6459 class http_language : public parser
              -
              6460 {
              -
              6461 public:
              -
              6462 virtual bool match(
              -
              6463 _In_reads_or_z_(end) const char* text,
              -
              6464 _In_ size_t start = 0,
              -
              6465 _In_ size_t end = (size_t)-1,
              -
              6466 _In_ int flags = match_default)
              -
              6467 {
              -
              6468 _Assume_(text || start >= end);
              -
              6469 this->interval.end = start;
              -
              6470 components.clear();
              -
              6471 for (;;) {
              -
              6472 if (this->interval.end < end && text[this->interval.end]) {
              - -
              6474 k.end = this->interval.end;
              -
              6475 for (;;) {
              -
              6476 if (k.end < end && text[k.end]) {
              -
              6477 if (isalpha(text[k.end]))
              -
              6478 k.end++;
              -
              6479 else
              -
              6480 break;
              -
              6481 }
              -
              6482 else
              -
              6483 break;
              -
              6484 }
              -
              6485 if (this->interval.end < k.end) {
              -
              6486 k.start = this->interval.end;
              -
              6487 this->interval.end = k.end;
              -
              6488 components.push_back(k);
              -
              6489 }
              -
              6490 else
              -
              6491 break;
              -
              6492 if (this->interval.end < end && text[this->interval.end] == '-')
              -
              6493 this->interval.end++;
              -
              6494 else
              -
              6495 break;
              -
              6496 }
              -
              6497 else
              -
              6498 break;
              -
              6499 }
              -
              6500 if (!components.empty()) {
              -
              6501 this->interval.start = start;
              -
              6502 this->interval.end = components.back().end;
              -
              6503 return true;
              -
              6504 }
              -
              6505 this->interval.start = (this->interval.end = start) + 1;
              -
              6506 return false;
              -
              6507 }
              -
              6508
              -
              6509 virtual void invalidate()
              -
              6510 {
              -
              6511 components.clear();
              -
              6512 parser::invalidate();
              -
              6513 }
              -
              6514
              -
              6515 public:
              -
              6516 std::vector<stdex::interval<size_t>> components;
              -
              6517 };
              +
              6454
              +
              +
              6458 class http_language : public parser
              +
              6459 {
              +
              6460 public:
              +
              6461 virtual bool match(
              +
              6462 _In_reads_or_z_(end) const char* text,
              +
              6463 _In_ size_t start = 0,
              +
              6464 _In_ size_t end = SIZE_MAX,
              +
              6465 _In_ int flags = match_default)
              +
              6466 {
              +
              6467 _Assume_(text || start >= end);
              +
              6468 this->interval.end = start;
              +
              6469 components.clear();
              +
              6470 for (;;) {
              +
              6471 if (this->interval.end < end && text[this->interval.end]) {
              + +
              6473 k.end = this->interval.end;
              +
              6474 for (;;) {
              +
              6475 if (k.end < end && text[k.end]) {
              +
              6476 if (isalpha(text[k.end]))
              +
              6477 k.end++;
              +
              6478 else
              +
              6479 break;
              +
              6480 }
              +
              6481 else
              +
              6482 break;
              +
              6483 }
              +
              6484 if (this->interval.end < k.end) {
              +
              6485 k.start = this->interval.end;
              +
              6486 this->interval.end = k.end;
              +
              6487 components.push_back(k);
              +
              6488 }
              +
              6489 else
              +
              6490 break;
              +
              6491 if (this->interval.end < end && text[this->interval.end] == '-')
              +
              6492 this->interval.end++;
              +
              6493 else
              +
              6494 break;
              +
              6495 }
              +
              6496 else
              +
              6497 break;
              +
              6498 }
              +
              6499 if (!components.empty()) {
              +
              6500 this->interval.start = start;
              +
              6501 this->interval.end = components.back().end;
              +
              6502 return true;
              +
              6503 }
              +
              6504 this->interval.invalidate();
              +
              6505 return false;
              +
              6506 }
              +
              6507
              +
              6508 virtual void invalidate()
              +
              6509 {
              +
              6510 components.clear();
              +
              6511 parser::invalidate();
              +
              6512 }
              +
              6513
              +
              6514 public:
              +
              6515 std::vector<stdex::interval<size_t>> components;
              +
              6516 };
              -
              6518
              -
              -
              6522 class http_weight : public parser
              -
              6523 {
              -
              6524 public:
              -
              6525 http_weight(_In_ const std::locale& locale = std::locale()) :
              -
              6526 parser(locale),
              -
              6527 value(1.0f)
              -
              6528 {}
              -
              6529
              -
              6530 virtual bool match(
              -
              6531 _In_reads_or_z_(end) const char* text,
              -
              6532 _In_ size_t start = 0,
              -
              6533 _In_ size_t end = (size_t)-1,
              -
              6534 _In_ int flags = match_default)
              -
              6535 {
              -
              6536 _Assume_(text || start >= end);
              -
              6537 size_t celi_del = 0, decimalni_del = 0, decimalni_del_n = 1;
              -
              6538 this->interval.end = start;
              -
              6539 for (;;) {
              -
              6540 if (this->interval.end < end && text[this->interval.end]) {
              -
              6541 if ('0' <= text[this->interval.end] && text[this->interval.end] <= '9') {
              -
              6542 celi_del = celi_del * 10 + text[this->interval.end] - '0';
              -
              6543 this->interval.end++;
              -
              6544 }
              -
              6545 else if (text[this->interval.end] == '.') {
              -
              6546 this->interval.end++;
              -
              6547 for (;;) {
              -
              6548 if (this->interval.end < end && text[this->interval.end]) {
              -
              6549 if ('0' <= text[this->interval.end] && text[this->interval.end] <= '9') {
              -
              6550 decimalni_del = decimalni_del * 10 + text[this->interval.end] - '0';
              -
              6551 decimalni_del_n *= 10;
              -
              6552 this->interval.end++;
              -
              6553 }
              -
              6554 else
              -
              6555 break;
              -
              6556 }
              -
              6557 else
              -
              6558 break;
              -
              6559 }
              -
              6560 break;
              -
              6561 }
              -
              6562 else
              -
              6563 break;
              -
              6564 }
              -
              6565 else
              -
              6566 break;
              -
              6567 }
              - - -
              6570 this->interval.start = start;
              -
              6571 return true;
              -
              6572 }
              -
              6573 value = 1.0f;
              -
              6574 this->interval.start = (this->interval.end = start) + 1;
              -
              6575 return false;
              -
              6576 }
              -
              6577
              -
              6578 virtual void invalidate()
              -
              6579 {
              -
              6580 value = 1.0f;
              -
              6581 parser::invalidate();
              -
              6582 }
              -
              6583
              -
              6584 public:
              -
              6585 float value;
              -
              6586 };
              +
              6517
              +
              +
              6521 class http_weight : public parser
              +
              6522 {
              +
              6523 public:
              +
              6524 http_weight(_In_ const std::locale& locale = std::locale()) :
              +
              6525 parser(locale),
              +
              6526 value(1.0f)
              +
              6527 {}
              +
              6528
              +
              6529 virtual bool match(
              +
              6530 _In_reads_or_z_(end) const char* text,
              +
              6531 _In_ size_t start = 0,
              +
              6532 _In_ size_t end = SIZE_MAX,
              +
              6533 _In_ int flags = match_default)
              +
              6534 {
              +
              6535 _Assume_(text || start >= end);
              +
              6536 size_t celi_del = 0, decimalni_del = 0, decimalni_del_n = 1;
              +
              6537 this->interval.end = start;
              +
              6538 for (;;) {
              +
              6539 if (this->interval.end < end && text[this->interval.end]) {
              +
              6540 if ('0' <= text[this->interval.end] && text[this->interval.end] <= '9') {
              +
              6541 celi_del = celi_del * 10 + text[this->interval.end] - '0';
              +
              6542 this->interval.end++;
              +
              6543 }
              +
              6544 else if (text[this->interval.end] == '.') {
              +
              6545 this->interval.end++;
              +
              6546 for (;;) {
              +
              6547 if (this->interval.end < end && text[this->interval.end]) {
              +
              6548 if ('0' <= text[this->interval.end] && text[this->interval.end] <= '9') {
              +
              6549 decimalni_del = decimalni_del * 10 + text[this->interval.end] - '0';
              +
              6550 decimalni_del_n *= 10;
              +
              6551 this->interval.end++;
              +
              6552 }
              +
              6553 else
              +
              6554 break;
              +
              6555 }
              +
              6556 else
              +
              6557 break;
              +
              6558 }
              +
              6559 break;
              +
              6560 }
              +
              6561 else
              +
              6562 break;
              +
              6563 }
              +
              6564 else
              +
              6565 break;
              +
              6566 }
              + + +
              6569 this->interval.start = start;
              +
              6570 return true;
              +
              6571 }
              +
              6572 value = 1.0f;
              +
              6573 this->interval.invalidate();
              +
              6574 return false;
              +
              6575 }
              +
              6576
              +
              6577 virtual void invalidate()
              +
              6578 {
              +
              6579 value = 1.0f;
              +
              6580 parser::invalidate();
              +
              6581 }
              +
              6582
              +
              6583 public:
              +
              6584 float value;
              +
              6585 };
              -
              6587
              -
              -
              6591 class http_asterisk : public parser
              -
              6592 {
              -
              6593 public:
              -
              6594 virtual bool match(
              -
              6595 _In_reads_or_z_(end) const char* text,
              -
              6596 _In_ size_t start = 0,
              -
              6597 _In_ size_t end = (size_t)-1,
              -
              6598 _In_ int flags = match_default)
              -
              6599 {
              -
              6600 _Assume_(text || end <= start);
              -
              6601 if (start < end && text[start] == '*') {
              -
              6602 this->interval.end = (this->interval.start = start) + 1;
              -
              6603 return true;
              -
              6604 }
              -
              6605 this->interval.start = (this->interval.end = start) + 1;
              -
              6606 return false;
              -
              6607 }
              -
              6608 };
              +
              6586
              +
              +
              6590 class http_asterisk : public parser
              +
              6591 {
              +
              6592 public:
              +
              6593 virtual bool match(
              +
              6594 _In_reads_or_z_(end) const char* text,
              +
              6595 _In_ size_t start = 0,
              +
              6596 _In_ size_t end = SIZE_MAX,
              +
              6597 _In_ int flags = match_default)
              +
              6598 {
              +
              6599 _Assume_(text || end <= start);
              +
              6600 if (start < end && text[start] == '*') {
              +
              6601 this->interval.end = (this->interval.start = start) + 1;
              +
              6602 return true;
              +
              6603 }
              +
              6604 this->interval.invalidate();
              +
              6605 return false;
              +
              6606 }
              +
              6607 };
              -
              6609
              -
              6613 template <class T, class T_asterisk = http_asterisk>
              -
              - -
              6615 {
              -
              6616 public:
              -
              6617 http_weighted_value(_In_ const std::locale& locale = std::locale()) :
              -
              6618 parser(locale),
              -
              6619 factor(locale)
              -
              6620 {}
              -
              6621
              -
              6622 virtual bool match(
              -
              6623 _In_reads_or_z_(end) const char* text,
              -
              6624 _In_ size_t start = 0,
              -
              6625 _In_ size_t end = (size_t)-1,
              -
              6626 _In_ int flags = match_default)
              -
              6627 {
              -
              6628 _Assume_(text || start >= end);
              -
              6629 size_t konec_vrednosti;
              -
              6630 this->interval.end = start;
              -
              6631 if (asterisk.match(text, this->interval.end, end, flags)) {
              -
              6632 this->interval.end = konec_vrednosti = asterisk.interval.end;
              -
              6633 value.invalidate();
              -
              6634 }
              -
              6635 else if (value.match(text, this->interval.end, end, flags)) {
              -
              6636 this->interval.end = konec_vrednosti = value.interval.end;
              -
              6637 asterisk.invalidate();
              -
              6638 }
              -
              6639 else {
              -
              6640 asterisk.invalidate();
              -
              6641 value.invalidate();
              -
              6642 this->interval.start = (this->interval.end = start) + 1;
              -
              6643 return false;
              -
              6644 }
              -
              6645
              -
              6646 while (this->interval.end < end && text[this->interval.end] && isspace(text[this->interval.end])) this->interval.end++;
              -
              6647 if (this->interval.end < end && text[this->interval.end] == ';') {
              -
              6648 this->interval.end++;
              -
              6649 while (this->interval.end < end && text[this->interval.end] && isspace(text[this->interval.end])) this->interval.end++;
              -
              6650 if (this->interval.end < end && (text[this->interval.end] == 'q' || text[this->interval.end] == 'Q')) {
              -
              6651 this->interval.end++;
              -
              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 (factor.match(text, this->interval.end, end, flags))
              -
              6657 this->interval.end = factor.interval.end;
              -
              6658 }
              -
              6659 }
              -
              6660 }
              -
              6661 if (!factor.interval) {
              -
              6662 factor.invalidate();
              - -
              6664 }
              -
              6665 this->interval.start = start;
              -
              6666 return true;
              -
              6667 }
              -
              6668
              -
              6669 virtual void invalidate()
              -
              6670 {
              -
              6671 asterisk.invalidate();
              -
              6672 value.invalidate();
              -
              6673 factor.invalidate();
              -
              6674 parser::invalidate();
              -
              6675 }
              -
              6676
              -
              6677 public:
              -
              6678 T_asterisk asterisk;
              -
              6679 T value;
              -
              6680 http_weight factor;
              -
              6681 };
              +
              6608
              +
              6612 template <class T, class T_asterisk = http_asterisk>
              +
              + +
              6614 {
              +
              6615 public:
              +
              6616 http_weighted_value(_In_ const std::locale& locale = std::locale()) :
              +
              6617 parser(locale),
              +
              6618 factor(locale)
              +
              6619 {}
              +
              6620
              +
              6621 virtual bool match(
              +
              6622 _In_reads_or_z_(end) const char* text,
              +
              6623 _In_ size_t start = 0,
              +
              6624 _In_ size_t end = SIZE_MAX,
              +
              6625 _In_ int flags = match_default)
              +
              6626 {
              +
              6627 _Assume_(text || start >= end);
              +
              6628 size_t konec_vrednosti;
              +
              6629 this->interval.end = start;
              +
              6630 if (asterisk.match(text, this->interval.end, end, flags)) {
              +
              6631 this->interval.end = konec_vrednosti = asterisk.interval.end;
              +
              6632 value.invalidate();
              +
              6633 }
              +
              6634 else if (value.match(text, this->interval.end, end, flags)) {
              +
              6635 this->interval.end = konec_vrednosti = value.interval.end;
              +
              6636 asterisk.invalidate();
              +
              6637 }
              +
              6638 else {
              +
              6639 asterisk.invalidate();
              +
              6640 value.invalidate();
              +
              6641 this->interval.invalidate();
              +
              6642 return false;
              +
              6643 }
              +
              6644
              +
              6645 while (this->interval.end < end && text[this->interval.end] && isspace(text[this->interval.end])) this->interval.end++;
              +
              6646 if (this->interval.end < end && text[this->interval.end] == ';') {
              +
              6647 this->interval.end++;
              +
              6648 while (this->interval.end < end && text[this->interval.end] && isspace(text[this->interval.end])) this->interval.end++;
              +
              6649 if (this->interval.end < end && (text[this->interval.end] == 'q' || text[this->interval.end] == 'Q')) {
              +
              6650 this->interval.end++;
              +
              6651 while (this->interval.end < end && text[this->interval.end] && isspace(text[this->interval.end])) this->interval.end++;
              +
              6652 if (this->interval.end < end && text[this->interval.end] == '=') {
              +
              6653 this->interval.end++;
              +
              6654 while (this->interval.end < end && text[this->interval.end] && isspace(text[this->interval.end])) this->interval.end++;
              +
              6655 if (factor.match(text, this->interval.end, end, flags))
              +
              6656 this->interval.end = factor.interval.end;
              +
              6657 }
              +
              6658 }
              +
              6659 }
              +
              6660 if (!factor.interval) {
              +
              6661 factor.invalidate();
              + +
              6663 }
              +
              6664 this->interval.start = start;
              +
              6665 return true;
              +
              6666 }
              +
              6667
              +
              6668 virtual void invalidate()
              +
              6669 {
              +
              6670 asterisk.invalidate();
              +
              6671 value.invalidate();
              +
              6672 factor.invalidate();
              +
              6673 parser::invalidate();
              +
              6674 }
              +
              6675
              +
              6676 public:
              +
              6677 T_asterisk asterisk;
              +
              6678 T value;
              +
              6679 http_weight factor;
              +
              6680 };
              -
              6682
              -
              - -
              6687 {
              -
              6688 public:
              -
              6689 virtual bool match(
              -
              6690 _In_reads_or_z_(end) const char* text,
              -
              6691 _In_ size_t start = 0,
              -
              6692 _In_ size_t end = (size_t)-1,
              -
              6693 _In_ int flags = match_default)
              -
              6694 {
              -
              6695 _Assume_(text || start >= end);
              -
              6696 this->interval.end = start;
              -
              6697 if (this->interval.end < end && text[this->interval.end] == '$')
              -
              6698 this->interval.end++;
              -
              6699 else
              -
              6700 goto error;
              -
              6701 if (name.match(text, this->interval.end, end, flags))
              -
              6702 this->interval.end = name.interval.end;
              -
              6703 else
              -
              6704 goto error;
              -
              6705 while (m_space.match(text, this->interval.end, end, flags))
              -
              6706 this->interval.end = m_space.interval.end;
              -
              6707 if (this->interval.end < end && text[this->interval.end] == '=')
              -
              6708 this->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 (value.match(text, this->interval.end, end, flags))
              -
              6714 this->interval.end = value.interval.end;
              -
              6715 else
              -
              6716 goto error;
              -
              6717 this->interval.start = start;
              -
              6718 return true;
              -
              6719
              -
              6720 error:
              -
              6721 name.invalidate();
              -
              6722 value.invalidate();
              -
              6723 this->interval.start = (this->interval.end = start) + 1;
              -
              6724 return false;
              -
              6725 }
              -
              6726
              -
              6727 virtual void invalidate()
              -
              6728 {
              -
              6729 name.invalidate();
              -
              6730 value.invalidate();
              -
              6731 parser::invalidate();
              -
              6732 }
              -
              6733
              -
              6734 public:
              -
              6735 http_token name;
              -
              6736 http_value value;
              -
              6737
              -
              6738 protected:
              -
              6739 http_space m_space;
              -
              6740 };
              +
              6681
              +
              + +
              6686 {
              +
              6687 public:
              +
              6688 virtual bool match(
              +
              6689 _In_reads_or_z_(end) const char* text,
              +
              6690 _In_ size_t start = 0,
              +
              6691 _In_ size_t end = SIZE_MAX,
              +
              6692 _In_ int flags = match_default)
              +
              6693 {
              +
              6694 _Assume_(text || start >= end);
              +
              6695 this->interval.end = start;
              +
              6696 if (this->interval.end < end && text[this->interval.end] == '$')
              +
              6697 this->interval.end++;
              +
              6698 else
              +
              6699 goto error;
              +
              6700 if (name.match(text, this->interval.end, end, flags))
              +
              6701 this->interval.end = name.interval.end;
              +
              6702 else
              +
              6703 goto error;
              +
              6704 while (m_space.match(text, this->interval.end, end, flags))
              +
              6705 this->interval.end = m_space.interval.end;
              +
              6706 if (this->interval.end < end && text[this->interval.end] == '=')
              +
              6707 this->interval.end++;
              +
              6708 else
              +
              6709 goto error;
              +
              6710 while (m_space.match(text, this->interval.end, end, flags))
              +
              6711 this->interval.end = m_space.interval.end;
              +
              6712 if (value.match(text, this->interval.end, end, flags))
              +
              6713 this->interval.end = value.interval.end;
              +
              6714 else
              +
              6715 goto error;
              +
              6716 this->interval.start = start;
              +
              6717 return true;
              +
              6718
              +
              6719 error:
              +
              6720 name.invalidate();
              +
              6721 value.invalidate();
              +
              6722 this->interval.invalidate();
              +
              6723 return false;
              +
              6724 }
              +
              6725
              +
              6726 virtual void invalidate()
              +
              6727 {
              +
              6728 name.invalidate();
              +
              6729 value.invalidate();
              +
              6730 parser::invalidate();
              +
              6731 }
              +
              6732
              +
              6733 public:
              +
              6734 http_token name;
              +
              6735 http_value value;
              +
              6736
              +
              6737 protected:
              +
              6738 http_space m_space;
              +
              6739 };
              -
              6741
              -
              -
              6745 class http_cookie : public parser
              -
              6746 {
              -
              6747 public:
              -
              6748 virtual bool match(
              -
              6749 _In_reads_or_z_(end) const char* text,
              -
              6750 _In_ size_t start = 0,
              -
              6751 _In_ size_t end = (size_t)-1,
              -
              6752 _In_ int flags = match_default)
              -
              6753 {
              -
              6754 _Assume_(text || start >= end);
              -
              6755 this->interval.end = start;
              -
              6756 if (name.match(text, this->interval.end, end, flags))
              -
              6757 this->interval.end = name.interval.end;
              -
              6758 else
              -
              6759 goto error;
              -
              6760 while (m_space.match(text, this->interval.end, end, flags))
              -
              6761 this->interval.end = m_space.interval.end;
              -
              6762 if (this->interval.end < end && text[this->interval.end] == '=')
              -
              6763 this->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 (value.match(text, this->interval.end, end, flags))
              -
              6769 this->interval.end = value.interval.end;
              -
              6770 else
              -
              6771 goto error;
              -
              6772 params.clear();
              -
              6773 for (;;) {
              -
              6774 if (this->interval.end < end && text[this->interval.end]) {
              -
              6775 if (m_space.match(text, this->interval.end, end, flags))
              -
              6776 this->interval.end = m_space.interval.end;
              -
              6777 else if (text[this->interval.end] == ';') {
              -
              6778 this->interval.end++;
              -
              6779 while (m_space.match(text, this->interval.end, end, flags))
              -
              6780 this->interval.end = m_space.interval.end;
              - -
              6782 if (param.match(text, this->interval.end, end, flags)) {
              -
              6783 this->interval.end = param.interval.end;
              -
              6784 params.push_back(std::move(param));
              -
              6785 }
              -
              6786 else
              -
              6787 break;
              -
              6788 }
              -
              6789 else
              -
              6790 break;
              -
              6791 }
              -
              6792 else
              -
              6793 break;
              -
              6794 }
              -
              6795 this->interval.start = start;
              -
              6796 this->interval.end = params.empty() ? value.interval.end : params.back().interval.end;
              -
              6797 return true;
              -
              6798
              -
              6799 error:
              -
              6800 name.invalidate();
              -
              6801 value.invalidate();
              -
              6802 params.clear();
              -
              6803 this->interval.start = (this->interval.end = start) + 1;
              -
              6804 return false;
              -
              6805 }
              -
              6806
              -
              6807 virtual void invalidate()
              -
              6808 {
              -
              6809 name.invalidate();
              -
              6810 value.invalidate();
              -
              6811 params.clear();
              -
              6812 parser::invalidate();
              -
              6813 }
              -
              6814
              -
              6815 public:
              - - -
              6818 std::list<http_cookie_parameter> params;
              -
              6819
              -
              6820 protected:
              -
              6821 http_space m_space;
              -
              6822 };
              +
              6740
              +
              +
              6744 class http_cookie : public parser
              +
              6745 {
              +
              6746 public:
              +
              6747 virtual bool match(
              +
              6748 _In_reads_or_z_(end) const char* text,
              +
              6749 _In_ size_t start = 0,
              +
              6750 _In_ size_t end = SIZE_MAX,
              +
              6751 _In_ int flags = match_default)
              +
              6752 {
              +
              6753 _Assume_(text || start >= end);
              +
              6754 this->interval.end = start;
              +
              6755 if (name.match(text, this->interval.end, end, flags))
              +
              6756 this->interval.end = name.interval.end;
              +
              6757 else
              +
              6758 goto error;
              +
              6759 while (m_space.match(text, this->interval.end, end, flags))
              +
              6760 this->interval.end = m_space.interval.end;
              +
              6761 if (this->interval.end < end && text[this->interval.end] == '=')
              +
              6762 this->interval.end++;
              +
              6763 else
              +
              6764 goto error;
              +
              6765 while (m_space.match(text, this->interval.end, end, flags))
              +
              6766 this->interval.end = m_space.interval.end;
              +
              6767 if (value.match(text, this->interval.end, end, flags))
              +
              6768 this->interval.end = value.interval.end;
              +
              6769 else
              +
              6770 goto error;
              +
              6771 params.clear();
              +
              6772 for (;;) {
              +
              6773 if (this->interval.end < end && text[this->interval.end]) {
              +
              6774 if (m_space.match(text, this->interval.end, end, flags))
              +
              6775 this->interval.end = m_space.interval.end;
              +
              6776 else if (text[this->interval.end] == ';') {
              +
              6777 this->interval.end++;
              +
              6778 while (m_space.match(text, this->interval.end, end, flags))
              +
              6779 this->interval.end = m_space.interval.end;
              + +
              6781 if (param.match(text, this->interval.end, end, flags)) {
              +
              6782 this->interval.end = param.interval.end;
              +
              6783 params.push_back(std::move(param));
              +
              6784 }
              +
              6785 else
              +
              6786 break;
              +
              6787 }
              +
              6788 else
              +
              6789 break;
              +
              6790 }
              +
              6791 else
              +
              6792 break;
              +
              6793 }
              +
              6794 this->interval.start = start;
              +
              6795 this->interval.end = params.empty() ? value.interval.end : params.back().interval.end;
              +
              6796 return true;
              +
              6797
              +
              6798 error:
              +
              6799 name.invalidate();
              +
              6800 value.invalidate();
              +
              6801 params.clear();
              +
              6802 this->interval.invalidate();
              +
              6803 return false;
              +
              6804 }
              +
              6805
              +
              6806 virtual void invalidate()
              +
              6807 {
              +
              6808 name.invalidate();
              +
              6809 value.invalidate();
              +
              6810 params.clear();
              +
              6811 parser::invalidate();
              +
              6812 }
              +
              6813
              +
              6814 public:
              + + +
              6817 std::list<http_cookie_parameter> params;
              +
              6818
              +
              6819 protected:
              +
              6820 http_space m_space;
              +
              6821 };
              -
              6823
              -
              -
              6827 class http_agent : public parser
              -
              6828 {
              -
              6829 public:
              -
              6830 virtual bool match(
              -
              6831 _In_reads_or_z_(end) const char* text,
              -
              6832 _In_ size_t start = 0,
              -
              6833 _In_ size_t end = (size_t)-1,
              -
              6834 _In_ int flags = match_default)
              -
              6835 {
              -
              6836 _Assume_(text || start >= end);
              -
              6837 this->interval.end = start;
              -
              6838 type.start = this->interval.end;
              -
              6839 for (;;) {
              -
              6840 if (this->interval.end < end && text[this->interval.end]) {
              -
              6841 if (text[this->interval.end] == '/') {
              -
              6842 type.end = this->interval.end;
              -
              6843 this->interval.end++;
              -
              6844 version.start = this->interval.end;
              -
              6845 for (;;) {
              -
              6846 if (this->interval.end < end && text[this->interval.end]) {
              -
              6847 if (isspace(text[this->interval.end])) {
              -
              6848 version.end = this->interval.end;
              -
              6849 break;
              -
              6850 }
              -
              6851 else
              -
              6852 this->interval.end++;
              -
              6853 }
              -
              6854 else {
              -
              6855 version.end = this->interval.end;
              -
              6856 break;
              -
              6857 }
              -
              6858 }
              -
              6859 break;
              -
              6860 }
              -
              6861 else if (isspace(text[this->interval.end])) {
              -
              6862 type.end = this->interval.end;
              -
              6863 break;
              -
              6864 }
              -
              6865 else
              -
              6866 this->interval.end++;
              -
              6867 }
              -
              6868 else {
              -
              6869 type.end = this->interval.end;
              -
              6870 break;
              -
              6871 }
              -
              6872 }
              - -
              6874 this->interval.start = start;
              -
              6875 return true;
              -
              6876 }
              -
              6877 type.start = 1;
              -
              6878 type.end = 0;
              -
              6879 version.start = 1;
              -
              6880 version.end = 0;
              -
              6881 this->interval.start = 1;
              -
              6882 this->interval.end = 0;
              -
              6883 return false;
              -
              6884 }
              -
              6885
              -
              6886 virtual void invalidate()
              -
              6887 {
              -
              6888 type.start = 1;
              -
              6889 type.end = 0;
              -
              6890 version.start = 1;
              -
              6891 version.end = 0;
              -
              6892 parser::invalidate();
              -
              6893 }
              -
              6894
              -
              6895 public:
              - - -
              6898 };
              +
              6822
              +
              +
              6826 class http_agent : public parser
              +
              6827 {
              +
              6828 public:
              +
              6829 virtual bool match(
              +
              6830 _In_reads_or_z_(end) const char* text,
              +
              6831 _In_ size_t start = 0,
              +
              6832 _In_ size_t end = SIZE_MAX,
              +
              6833 _In_ int flags = match_default)
              +
              6834 {
              +
              6835 _Assume_(text || start >= end);
              +
              6836 this->interval.end = start;
              +
              6837 type.start = this->interval.end;
              +
              6838 for (;;) {
              +
              6839 if (this->interval.end < end && text[this->interval.end]) {
              +
              6840 if (text[this->interval.end] == '/') {
              +
              6841 type.end = this->interval.end;
              +
              6842 this->interval.end++;
              +
              6843 version.start = this->interval.end;
              +
              6844 for (;;) {
              +
              6845 if (this->interval.end < end && text[this->interval.end]) {
              +
              6846 if (isspace(text[this->interval.end])) {
              +
              6847 version.end = this->interval.end;
              +
              6848 break;
              +
              6849 }
              +
              6850 else
              +
              6851 this->interval.end++;
              +
              6852 }
              +
              6853 else {
              +
              6854 version.end = this->interval.end;
              +
              6855 break;
              +
              6856 }
              +
              6857 }
              +
              6858 break;
              +
              6859 }
              +
              6860 else if (isspace(text[this->interval.end])) {
              +
              6861 type.end = this->interval.end;
              +
              6862 break;
              +
              6863 }
              +
              6864 else
              +
              6865 this->interval.end++;
              +
              6866 }
              +
              6867 else {
              +
              6868 type.end = this->interval.end;
              +
              6869 break;
              +
              6870 }
              +
              6871 }
              + +
              6873 this->interval.start = start;
              +
              6874 return true;
              +
              6875 }
              +
              6876 type.start = 1;
              +
              6877 type.end = 0;
              +
              6878 version.start = 1;
              +
              6879 version.end = 0;
              +
              6880 this->interval.invalidate();
              +
              6881 return false;
              +
              6882 }
              +
              6883
              +
              6884 virtual void invalidate()
              +
              6885 {
              +
              6886 type.start = 1;
              +
              6887 type.end = 0;
              +
              6888 version.start = 1;
              +
              6889 version.end = 0;
              +
              6890 parser::invalidate();
              +
              6891 }
              +
              6892
              +
              6893 public:
              + + +
              6896 };
              -
              6899
              -
              -
              6903 class http_protocol : public parser
              -
              6904 {
              -
              6905 public:
              -
              6906 http_protocol(_In_ const std::locale& locale = std::locale()) :
              -
              6907 parser(locale),
              -
              6908 version(0x009)
              -
              6909 {}
              -
              6910
              -
              6911 virtual bool match(
              -
              6912 _In_reads_or_z_(end) const char* text,
              -
              6913 _In_ size_t start = 0,
              -
              6914 _In_ size_t end = (size_t)-1,
              -
              6915 _In_ int flags = match_default)
              -
              6916 {
              -
              6917 _Assume_(text || start >= end);
              -
              6918 this->interval.end = start;
              -
              6919 type.start = this->interval.end;
              -
              6920 for (;;) {
              -
              6921 if (this->interval.end < end && text[this->interval.end]) {
              -
              6922 if (text[this->interval.end] == '/') {
              -
              6923 type.end = this->interval.end;
              -
              6924 this->interval.end++;
              -
              6925 break;
              -
              6926 }
              -
              6927 else if (isspace(text[this->interval.end]))
              -
              6928 goto error;
              -
              6929 else
              -
              6930 this->interval.end++;
              -
              6931 }
              -
              6932 else {
              -
              6933 type.end = this->interval.end;
              -
              6934 goto error;
              -
              6935 }
              -
              6936 }
              -
              6937 version_maj.start = this->interval.end;
              -
              6938 for (;;) {
              -
              6939 if (this->interval.end < end && text[this->interval.end]) {
              -
              6940 if (text[this->interval.end] == '.') {
              -
              6941 version_maj.end = this->interval.end;
              -
              6942 this->interval.end++;
              -
              6943 version_min.start = this->interval.end;
              -
              6944 for (;;) {
              -
              6945 if (this->interval.end < end && text[this->interval.end]) {
              -
              6946 if (isspace(text[this->interval.end])) {
              -
              6947 version_min.end = this->interval.end;
              -
              6948 version =
              -
              6949 (uint16_t)strtoui(text + version_maj.start, version_maj.size(), nullptr, 10) * 0x100 +
              -
              6950 (uint16_t)strtoui(text + version_min.start, version_min.size(), nullptr, 10);
              -
              6951 break;
              -
              6952 }
              -
              6953 else
              -
              6954 this->interval.end++;
              -
              6955 }
              -
              6956 else
              -
              6957 goto error;
              -
              6958 }
              -
              6959 break;
              -
              6960 }
              -
              6961 else if (isspace(text[this->interval.end])) {
              -
              6962 version_maj.end = this->interval.end;
              -
              6963 version_min.start = 1;
              -
              6964 version_min.end = 0;
              -
              6965 version = (uint16_t)strtoui(text + version_maj.start, version_maj.size(), nullptr, 10) * 0x100;
              -
              6966 break;
              -
              6967 }
              -
              6968 else
              -
              6969 this->interval.end++;
              -
              6970 }
              -
              6971 else
              -
              6972 goto error;
              -
              6973 }
              -
              6974 this->interval.start = start;
              -
              6975 return true;
              -
              6976
              -
              6977 error:
              -
              6978 type.start = 1;
              -
              6979 type.end = 0;
              -
              6980 version_maj.start = 1;
              -
              6981 version_maj.end = 0;
              -
              6982 version_min.start = 1;
              -
              6983 version_min.end = 0;
              -
              6984 version = 0x009;
              -
              6985 this->interval.start = 1;
              -
              6986 this->interval.end = 0;
              -
              6987 return false;
              -
              6988 }
              -
              6989
              -
              6990 virtual void invalidate()
              -
              6991 {
              -
              6992 type.start = 1;
              -
              6993 type.end = 0;
              -
              6994 version_maj.start = 1;
              -
              6995 version_maj.end = 0;
              -
              6996 version_min.start = 1;
              -
              6997 version_min.end = 0;
              -
              6998 version = 0x009;
              -
              6999 parser::invalidate();
              -
              7000 }
              -
              7001
              -
              7002 public:
              - -
              7004 stdex::interval<size_t> version_maj;
              -
              7005 stdex::interval<size_t> version_min;
              - -
              7007 };
              +
              6897
              +
              +
              6901 class http_protocol : public parser
              +
              6902 {
              +
              6903 public:
              +
              6904 http_protocol(_In_ const std::locale& locale = std::locale()) :
              +
              6905 parser(locale),
              +
              6906 version(0x009)
              +
              6907 {}
              +
              6908
              +
              6909 virtual bool match(
              +
              6910 _In_reads_or_z_(end) const char* text,
              +
              6911 _In_ size_t start = 0,
              +
              6912 _In_ size_t end = SIZE_MAX,
              +
              6913 _In_ int flags = match_default)
              +
              6914 {
              +
              6915 _Assume_(text || start >= end);
              +
              6916 this->interval.end = start;
              +
              6917 type.start = this->interval.end;
              +
              6918 for (;;) {
              +
              6919 if (this->interval.end < end && text[this->interval.end]) {
              +
              6920 if (text[this->interval.end] == '/') {
              +
              6921 type.end = this->interval.end;
              +
              6922 this->interval.end++;
              +
              6923 break;
              +
              6924 }
              +
              6925 else if (isspace(text[this->interval.end]))
              +
              6926 goto error;
              +
              6927 else
              +
              6928 this->interval.end++;
              +
              6929 }
              +
              6930 else {
              +
              6931 type.end = this->interval.end;
              +
              6932 goto error;
              +
              6933 }
              +
              6934 }
              +
              6935 version_maj.start = this->interval.end;
              +
              6936 for (;;) {
              +
              6937 if (this->interval.end < end && text[this->interval.end]) {
              +
              6938 if (text[this->interval.end] == '.') {
              +
              6939 version_maj.end = this->interval.end;
              +
              6940 this->interval.end++;
              +
              6941 version_min.start = this->interval.end;
              +
              6942 for (;;) {
              +
              6943 if (this->interval.end < end && text[this->interval.end]) {
              +
              6944 if (isspace(text[this->interval.end])) {
              +
              6945 version_min.end = this->interval.end;
              +
              6946 version =
              +
              6947 (uint16_t)strtoui(text + version_maj.start, version_maj.size(), nullptr, 10) * 0x100 +
              +
              6948 (uint16_t)strtoui(text + version_min.start, version_min.size(), nullptr, 10);
              +
              6949 break;
              +
              6950 }
              +
              6951 else
              +
              6952 this->interval.end++;
              +
              6953 }
              +
              6954 else
              +
              6955 goto error;
              +
              6956 }
              +
              6957 break;
              +
              6958 }
              +
              6959 else if (isspace(text[this->interval.end])) {
              +
              6960 version_maj.end = this->interval.end;
              +
              6961 version_min.start = 1;
              +
              6962 version_min.end = 0;
              +
              6963 version = (uint16_t)strtoui(text + version_maj.start, version_maj.size(), nullptr, 10) * 0x100;
              +
              6964 break;
              +
              6965 }
              +
              6966 else
              +
              6967 this->interval.end++;
              +
              6968 }
              +
              6969 else
              +
              6970 goto error;
              +
              6971 }
              +
              6972 this->interval.start = start;
              +
              6973 return true;
              +
              6974
              +
              6975 error:
              +
              6976 type.start = 1;
              +
              6977 type.end = 0;
              +
              6978 version_maj.start = 1;
              +
              6979 version_maj.end = 0;
              +
              6980 version_min.start = 1;
              +
              6981 version_min.end = 0;
              +
              6982 version = 0x009;
              +
              6983 this->interval.invalidate();
              +
              6984 return false;
              +
              6985 }
              +
              6986
              +
              6987 virtual void invalidate()
              +
              6988 {
              +
              6989 type.start = 1;
              +
              6990 type.end = 0;
              +
              6991 version_maj.start = 1;
              +
              6992 version_maj.end = 0;
              +
              6993 version_min.start = 1;
              +
              6994 version_min.end = 0;
              +
              6995 version = 0x009;
              +
              6996 parser::invalidate();
              +
              6997 }
              +
              6998
              +
              6999 public:
              + +
              7001 stdex::interval<size_t> version_maj;
              +
              7002 stdex::interval<size_t> version_min;
              + +
              7004 };
              +
              +
              7005
              +
              +
              7009 class http_request : public parser
              +
              7010 {
              +
              7011 public:
              +
              7012 http_request(_In_ const std::locale& locale = std::locale()) :
              +
              7013 parser(locale),
              +
              7014 url(locale),
              +
              7015 protocol(locale)
              +
              7016 {}
              +
              7017
              +
              7018 virtual bool match(
              +
              7019 _In_reads_or_z_(end) const char* text,
              +
              7020 _In_ size_t start = 0,
              +
              7021 _In_ size_t end = SIZE_MAX,
              +
              7022 _In_ int flags = match_default)
              +
              7023 {
              +
              7024 _Assume_(text || start >= end);
              +
              7025 this->interval.end = start;
              +
              7026
              +
              7027 for (;;) {
              +
              7028 if (m_line_break.match(text, this->interval.end, end, flags))
              +
              7029 goto error;
              +
              7030 else if (this->interval.end < end && text[this->interval.end]) {
              +
              7031 if (isspace(text[this->interval.end]))
              +
              7032 this->interval.end++;
              +
              7033 else
              +
              7034 break;
              +
              7035 }
              +
              7036 else
              +
              7037 goto error;
              +
              7038 }
              +
              7039 verb.start = this->interval.end;
              +
              7040 for (;;) {
              +
              7041 if (m_line_break.match(text, this->interval.end, end, flags))
              +
              7042 goto error;
              +
              7043 else if (this->interval.end < end && text[this->interval.end]) {
              +
              7044 if (isspace(text[this->interval.end])) {
              +
              7045 verb.end = this->interval.end;
              +
              7046 this->interval.end++;
              +
              7047 break;
              +
              7048 }
              +
              7049 else
              +
              7050 this->interval.end++;
              +
              7051 }
              +
              7052 else
              +
              7053 goto error;
              +
              7054 }
              +
              7055
              +
              7056 for (;;) {
              +
              7057 if (m_line_break.match(text, this->interval.end, end, flags))
              +
              7058 goto error;
              +
              7059 else if (this->interval.end < end && text[this->interval.end]) {
              +
              7060 if (isspace(text[this->interval.end]))
              +
              7061 this->interval.end++;
              +
              7062 else
              +
              7063 break;
              +
              7064 }
              +
              7065 else
              +
              7066 goto error;
              +
              7067 }
              +
              7068 if (url.match(text, this->interval.end, end, flags))
              +
              7069 this->interval.end = url.interval.end;
              +
              7070 else
              +
              7071 goto error;
              +
              7072
              +
              7073 protocol.invalidate();
              +
              7074 for (;;) {
              +
              7075 if (m_line_break.match(text, this->interval.end, end, flags)) {
              +
              7076 this->interval.end = m_line_break.interval.end;
              +
              7077 goto end;
              +
              7078 }
              +
              7079 else if (this->interval.end < end && text[this->interval.end]) {
              +
              7080 if (isspace(text[this->interval.end]))
              +
              7081 this->interval.end++;
              +
              7082 else
              +
              7083 break;
              +
              7084 }
              +
              7085 else
              +
              7086 goto end;
              +
              7087 }
              +
              7088 for (;;) {
              +
              7089 if (m_line_break.match(text, this->interval.end, end, flags)) {
              +
              7090 this->interval.end = m_line_break.interval.end;
              +
              7091 goto end;
              +
              7092 }
              +
              7093 else if (protocol.match(text, this->interval.end, end, flags)) {
              +
              7094 this->interval.end = protocol.interval.end;
              +
              7095 break;
              +
              7096 }
              +
              7097 else
              +
              7098 goto end;
              +
              7099 }
              +
              7100
              +
              7101 for (;;) {
              +
              7102 if (m_line_break.match(text, this->interval.end, end, flags)) {
              +
              7103 this->interval.end = m_line_break.interval.end;
              +
              7104 break;
              +
              7105 }
              +
              7106 else if (this->interval.end < end && text[this->interval.end])
              +
              7107 this->interval.end++;
              +
              7108 else
              +
              7109 goto end;
              +
              7110 }
              +
              7111
              +
              7112 end:
              +
              7113 this->interval.start = start;
              +
              7114 return true;
              +
              7115
              +
              7116 error:
              +
              7117 verb.start = 1;
              +
              7118 verb.end = 0;
              +
              7119 url.invalidate();
              +
              7120 protocol.invalidate();
              +
              7121 this->interval.invalidate();
              +
              7122 return false;
              +
              7123 }
              +
              7124
              +
              7125 virtual void invalidate()
              +
              7126 {
              +
              7127 verb.start = 1;
              +
              7128 verb.end = 0;
              +
              7129 url.invalidate();
              +
              7130 protocol.invalidate();
              +
              7131 parser::invalidate();
              +
              7132 }
              +
              7133
              +
              7134 public:
              + +
              7136 http_url url;
              +
              7137 http_protocol protocol;
              +
              7138
              +
              7139 protected:
              +
              7140 http_line_break m_line_break;
              +
              7141 };
              -
              7008
              -
              -
              7012 class http_request : public parser
              -
              7013 {
              -
              7014 public:
              -
              7015 http_request(_In_ const std::locale& locale = std::locale()) :
              -
              7016 parser(locale),
              -
              7017 url(locale),
              -
              7018 protocol(locale)
              -
              7019 {}
              -
              7020
              -
              7021 virtual bool match(
              -
              7022 _In_reads_or_z_(end) const char* text,
              -
              7023 _In_ size_t start = 0,
              -
              7024 _In_ size_t end = (size_t)-1,
              -
              7025 _In_ int flags = match_default)
              -
              7026 {
              -
              7027 _Assume_(text || start >= end);
              -
              7028 this->interval.end = start;
              -
              7029
              -
              7030 for (;;) {
              -
              7031 if (m_line_break.match(text, this->interval.end, end, flags))
              -
              7032 goto error;
              -
              7033 else if (this->interval.end < end && text[this->interval.end]) {
              -
              7034 if (isspace(text[this->interval.end]))
              -
              7035 this->interval.end++;
              -
              7036 else
              -
              7037 break;
              -
              7038 }
              -
              7039 else
              -
              7040 goto error;
              -
              7041 }
              -
              7042 verb.start = this->interval.end;
              -
              7043 for (;;) {
              -
              7044 if (m_line_break.match(text, this->interval.end, end, flags))
              -
              7045 goto error;
              -
              7046 else if (this->interval.end < end && text[this->interval.end]) {
              -
              7047 if (isspace(text[this->interval.end])) {
              -
              7048 verb.end = this->interval.end;
              -
              7049 this->interval.end++;
              -
              7050 break;
              -
              7051 }
              -
              7052 else
              -
              7053 this->interval.end++;
              -
              7054 }
              -
              7055 else
              -
              7056 goto error;
              -
              7057 }
              -
              7058
              -
              7059 for (;;) {
              -
              7060 if (m_line_break.match(text, this->interval.end, end, flags))
              -
              7061 goto error;
              -
              7062 else if (this->interval.end < end && text[this->interval.end]) {
              -
              7063 if (isspace(text[this->interval.end]))
              -
              7064 this->interval.end++;
              -
              7065 else
              -
              7066 break;
              -
              7067 }
              -
              7068 else
              -
              7069 goto error;
              -
              7070 }
              -
              7071 if (url.match(text, this->interval.end, end, flags))
              -
              7072 this->interval.end = url.interval.end;
              -
              7073 else
              -
              7074 goto error;
              -
              7075
              -
              7076 protocol.invalidate();
              -
              7077 for (;;) {
              -
              7078 if (m_line_break.match(text, this->interval.end, end, flags)) {
              -
              7079 this->interval.end = m_line_break.interval.end;
              -
              7080 goto end;
              -
              7081 }
              -
              7082 else if (this->interval.end < end && text[this->interval.end]) {
              -
              7083 if (isspace(text[this->interval.end]))
              -
              7084 this->interval.end++;
              -
              7085 else
              -
              7086 break;
              -
              7087 }
              -
              7088 else
              -
              7089 goto end;
              -
              7090 }
              -
              7091 for (;;) {
              -
              7092 if (m_line_break.match(text, this->interval.end, end, flags)) {
              -
              7093 this->interval.end = m_line_break.interval.end;
              -
              7094 goto end;
              -
              7095 }
              -
              7096 else if (protocol.match(text, this->interval.end, end, flags)) {
              -
              7097 this->interval.end = protocol.interval.end;
              -
              7098 break;
              -
              7099 }
              -
              7100 else
              -
              7101 goto end;
              -
              7102 }
              -
              7103
              -
              7104 for (;;) {
              -
              7105 if (m_line_break.match(text, this->interval.end, end, flags)) {
              -
              7106 this->interval.end = m_line_break.interval.end;
              -
              7107 break;
              -
              7108 }
              -
              7109 else if (this->interval.end < end && text[this->interval.end])
              -
              7110 this->interval.end++;
              -
              7111 else
              -
              7112 goto end;
              -
              7113 }
              -
              7114
              -
              7115 end:
              -
              7116 this->interval.start = start;
              -
              7117 return true;
              -
              7118
              -
              7119 error:
              -
              7120 verb.start = 1;
              -
              7121 verb.end = 0;
              -
              7122 url.invalidate();
              -
              7123 protocol.invalidate();
              -
              7124 this->interval.start = 1;
              -
              7125 this->interval.end = 0;
              -
              7126 return false;
              -
              7127 }
              -
              7128
              -
              7129 virtual void invalidate()
              -
              7130 {
              -
              7131 verb.start = 1;
              -
              7132 verb.end = 0;
              -
              7133 url.invalidate();
              -
              7134 protocol.invalidate();
              -
              7135 parser::invalidate();
              -
              7136 }
              -
              7137
              -
              7138 public:
              - -
              7140 http_url url;
              -
              7141 http_protocol protocol;
              7142
              -
              7143 protected:
              -
              7144 http_line_break m_line_break;
              -
              7145 };
              -
              -
              7146
              -
              -
              7150 class http_header : public parser
              -
              7151 {
              -
              7152 public:
              -
              7153 virtual bool match(
              -
              7154 _In_reads_or_z_(end) const char* text,
              -
              7155 _In_ size_t start = 0,
              -
              7156 _In_ size_t end = (size_t)-1,
              -
              7157 _In_ int flags = match_default)
              -
              7158 {
              -
              7159 _Assume_(text || start >= end);
              -
              7160 this->interval.end = start;
              -
              7161
              -
              7162 if (m_line_break.match(text, this->interval.end, end, flags) ||
              -
              7163 (this->interval.end < end && text[this->interval.end] && isspace(text[this->interval.end])))
              -
              7164 goto error;
              -
              7165 name.start = this->interval.end;
              -
              7166 for (;;) {
              -
              7167 if (m_line_break.match(text, this->interval.end, end, flags))
              -
              7168 goto error;
              -
              7169 else if (this->interval.end < end && text[this->interval.end]) {
              -
              7170 if (isspace(text[this->interval.end])) {
              -
              7171 name.end = this->interval.end;
              -
              7172 this->interval.end++;
              -
              7173 for (;;) {
              -
              7174 if (m_line_break.match(text, this->interval.end, end, flags))
              -
              7175 goto error;
              -
              7176 else if (this->interval.end < end && text[this->interval.end]) {
              -
              7177 if (isspace(text[this->interval.end]))
              -
              7178 this->interval.end++;
              -
              7179 else
              -
              7180 break;
              -
              7181 }
              -
              7182 else
              -
              7183 goto error;
              +
              +
              7146 class http_header : public parser
              +
              7147 {
              +
              7148 public:
              +
              7149 virtual bool match(
              +
              7150 _In_reads_or_z_(end) const char* text,
              +
              7151 _In_ size_t start = 0,
              +
              7152 _In_ size_t end = SIZE_MAX,
              +
              7153 _In_ int flags = match_default)
              +
              7154 {
              +
              7155 _Assume_(text || start >= end);
              +
              7156 this->interval.end = start;
              +
              7157
              +
              7158 if (m_line_break.match(text, this->interval.end, end, flags) ||
              +
              7159 (this->interval.end < end && text[this->interval.end] && isspace(text[this->interval.end])))
              +
              7160 goto error;
              +
              7161 name.start = this->interval.end;
              +
              7162 for (;;) {
              +
              7163 if (m_line_break.match(text, this->interval.end, end, flags))
              +
              7164 goto error;
              +
              7165 else if (this->interval.end < end && text[this->interval.end]) {
              +
              7166 if (isspace(text[this->interval.end])) {
              +
              7167 name.end = this->interval.end;
              +
              7168 this->interval.end++;
              +
              7169 for (;;) {
              +
              7170 if (m_line_break.match(text, this->interval.end, end, flags))
              +
              7171 goto error;
              +
              7172 else if (this->interval.end < end && text[this->interval.end]) {
              +
              7173 if (isspace(text[this->interval.end]))
              +
              7174 this->interval.end++;
              +
              7175 else
              +
              7176 break;
              +
              7177 }
              +
              7178 else
              +
              7179 goto error;
              +
              7180 }
              +
              7181 if (this->interval.end < end && text[this->interval.end] == ':') {
              +
              7182 this->interval.end++;
              +
              7183 break;
              7184 }
              -
              7185 if (this->interval.end < end && text[this->interval.end] == ':') {
              -
              7186 this->interval.end++;
              -
              7187 break;
              -
              7188 }
              -
              7189 else
              -
              7190 goto error;
              -
              7191 break;
              -
              7192 }
              -
              7193 else if (text[this->interval.end] == ':') {
              -
              7194 name.end = this->interval.end;
              +
              7185 else
              +
              7186 goto error;
              +
              7187 break;
              +
              7188 }
              +
              7189 else if (text[this->interval.end] == ':') {
              +
              7190 name.end = this->interval.end;
              +
              7191 this->interval.end++;
              +
              7192 break;
              +
              7193 }
              +
              7194 else
              7195 this->interval.end++;
              -
              7196 break;
              -
              7197 }
              -
              7198 else
              -
              7199 this->interval.end++;
              -
              7200 }
              -
              7201 else
              -
              7202 goto error;
              -
              7203 }
              -
              7204 value.start = (size_t)-1;
              -
              7205 value.end = 0;
              -
              7206 for (;;) {
              -
              7207 if (m_line_break.match(text, this->interval.end, end, flags)) {
              -
              7208 this->interval.end = m_line_break.interval.end;
              -
              7209 if (!m_line_break.match(text, this->interval.end, end, flags) &&
              -
              7210 this->interval.end < end && text[this->interval.end] && isspace(text[this->interval.end]))
              -
              7211 this->interval.end++;
              -
              7212 else
              -
              7213 break;
              -
              7214 }
              -
              7215 else if (this->interval.end < end && text[this->interval.end]) {
              -
              7216 if (isspace(text[this->interval.end]))
              -
              7217 this->interval.end++;
              -
              7218 else {
              -
              7219 if (value.start == (size_t)-1) value.start = this->interval.end;
              -
              7220 value.end = ++this->interval.end;
              -
              7221 }
              -
              7222 }
              -
              7223 else
              -
              7224 break;
              -
              7225 }
              -
              7226 this->interval.start = start;
              -
              7227 return true;
              -
              7228
              -
              7229 error:
              -
              7230 name.start = 1;
              -
              7231 name.end = 0;
              -
              7232 value.start = 1;
              -
              7233 value.end = 0;
              -
              7234 this->interval.start = 1;
              -
              7235 this->interval.end = 0;
              -
              7236 return false;
              -
              7237 }
              -
              7238
              -
              7239 virtual void invalidate()
              -
              7240 {
              -
              7241 name.start = 1;
              -
              7242 name.end = 0;
              -
              7243 value.start = 1;
              -
              7244 value.end = 0;
              -
              7245 parser::invalidate();
              -
              7246 }
              -
              7247
              -
              7248 public:
              - - -
              7251
              -
              7252 protected:
              -
              7253 http_line_break m_line_break;
              -
              7254 };
              +
              7196 }
              +
              7197 else
              +
              7198 goto error;
              +
              7199 }
              +
              7200 value.start = SIZE_MAX;
              +
              7201 value.end = 0;
              +
              7202 for (;;) {
              +
              7203 if (m_line_break.match(text, this->interval.end, end, flags)) {
              +
              7204 this->interval.end = m_line_break.interval.end;
              +
              7205 if (!m_line_break.match(text, this->interval.end, end, flags) &&
              +
              7206 this->interval.end < end && text[this->interval.end] && isspace(text[this->interval.end]))
              +
              7207 this->interval.end++;
              +
              7208 else
              +
              7209 break;
              +
              7210 }
              +
              7211 else if (this->interval.end < end && text[this->interval.end]) {
              +
              7212 if (isspace(text[this->interval.end]))
              +
              7213 this->interval.end++;
              +
              7214 else {
              +
              7215 if (value.start == SIZE_MAX) value.start = this->interval.end;
              +
              7216 value.end = ++this->interval.end;
              +
              7217 }
              +
              7218 }
              +
              7219 else
              +
              7220 break;
              +
              7221 }
              +
              7222 this->interval.start = start;
              +
              7223 return true;
              +
              7224
              +
              7225 error:
              +
              7226 name.start = 1;
              +
              7227 name.end = 0;
              +
              7228 value.start = 1;
              +
              7229 value.end = 0;
              +
              7230 this->interval.invalidate();
              +
              7231 return false;
              +
              7232 }
              +
              7233
              +
              7234 virtual void invalidate()
              +
              7235 {
              +
              7236 name.start = 1;
              +
              7237 name.end = 0;
              +
              7238 value.start = 1;
              +
              7239 value.end = 0;
              +
              7240 parser::invalidate();
              +
              7241 }
              +
              7242
              +
              7243 public:
              + + +
              7246
              +
              7247 protected:
              +
              7248 http_line_break m_line_break;
              +
              7249 };
              -
              7255
              -
              7259 template <class _Key, class T>
              -
              -
              7260 class http_value_collection : public T
              -
              7261 {
              -
              7262 public:
              -
              7263 void insert(
              -
              7264 _In_reads_or_z_(end) const char* text,
              -
              7265 _In_ size_t start = 0,
              -
              7266 _In_ size_t end = (size_t)-1,
              -
              7267 _In_ int flags = match_default)
              -
              7268 {
              -
              7269 while (start < end) {
              -
              7270 while (start < end && text[start] && isspace(text[start])) start++;
              -
              7271 if (start < end && text[start] == ',') {
              -
              7272 start++;
              -
              7273 while (start < end&& text[start] && isspace(text[start])) start++;
              +
              7250
              +
              7254 template <class _Key, class T>
              +
              +
              7255 class http_value_collection : public T
              +
              7256 {
              +
              7257 public:
              +
              7258 void insert(
              +
              7259 _In_reads_or_z_(end) const char* text,
              +
              7260 _In_ size_t start = 0,
              +
              7261 _In_ size_t end = SIZE_MAX,
              +
              7262 _In_ int flags = match_default)
              +
              7263 {
              +
              7264 while (start < end) {
              +
              7265 while (start < end && text[start] && isspace(text[start])) start++;
              +
              7266 if (start < end && text[start] == ',') {
              +
              7267 start++;
              +
              7268 while (start < end&& text[start] && isspace(text[start])) start++;
              +
              7269 }
              +
              7270 _Key el;
              +
              7271 if (el.match(text, start, end, flags)) {
              +
              7272 start = el.interval.end;
              +
              7273 T::insert(std::move(el));
              7274 }
              -
              7275 _Key el;
              -
              7276 if (el.match(text, start, end, flags)) {
              -
              7277 start = el.interval.end;
              -
              7278 T::insert(std::move(el));
              -
              7279 }
              -
              7280 else
              -
              7281 break;
              -
              7282 }
              -
              7283 }
              -
              7284 };
              +
              7275 else
              +
              7276 break;
              +
              7277 }
              +
              7278 }
              +
              7279 };
              -
              7285
              -
              7286 template <class T>
              -
              - -
              7288 constexpr bool operator()(const T& a, const T& b) const noexcept
              -
              7289 {
              -
              7290 return a.factor.value > b.factor.value;
              -
              7291 }
              -
              7292 };
              +
              7280
              +
              7281 template <class T>
              +
              + +
              7283 constexpr bool operator()(const T& a, const T& b) const noexcept
              +
              7284 {
              +
              7285 return a.factor.value > b.factor.value;
              +
              7286 }
              +
              7287 };
              -
              7293
              -
              7297 template <class T, class _Alloc = std::allocator<T>>
              - -
              7299
              -
              7303 template <class T>
              -
              - -
              7305 {
              -
              7306 public:
              - -
              7308 _In_ const std::shared_ptr<basic_parser<T>>& quote,
              -
              7309 _In_ const std::shared_ptr<basic_parser<T>>& chr,
              -
              7310 _In_ const std::shared_ptr<basic_parser<T>>& escape,
              -
              7311 _In_ const std::shared_ptr<basic_parser<T>>& sol,
              -
              7312 _In_ const std::shared_ptr<basic_parser<T>>& bs,
              -
              7313 _In_ const std::shared_ptr<basic_parser<T>>& ff,
              -
              7314 _In_ const std::shared_ptr<basic_parser<T>>& lf,
              -
              7315 _In_ const std::shared_ptr<basic_parser<T>>& cr,
              -
              7316 _In_ const std::shared_ptr<basic_parser<T>>& htab,
              -
              7317 _In_ const std::shared_ptr<basic_parser<T>>& uni,
              -
              7318 _In_ const std::shared_ptr<basic_integer16<T>>& hex,
              -
              7319 _In_ const std::locale& locale = std::locale()) :
              -
              7320 basic_parser<T>(locale),
              -
              7321 m_quote(quote),
              -
              7322 m_chr(chr),
              -
              7323 m_escape(escape),
              -
              7324 m_sol(sol),
              -
              7325 m_bs(bs),
              -
              7326 m_ff(ff),
              -
              7327 m_lf(lf),
              -
              7328 m_cr(cr),
              -
              7329 m_htab(htab),
              -
              7330 m_uni(uni),
              -
              7331 m_hex(hex)
              -
              7332 {}
              -
              7333
              -
              7334 virtual bool match(
              -
              7335 _In_reads_or_z_(end) const T* text,
              -
              7336 _In_ size_t start = 0,
              -
              7337 _In_ size_t end = (size_t)-1,
              -
              7338 _In_ int flags = match_default)
              -
              7339 {
              -
              7340 _Assume_(text || start >= end);
              -
              7341 this->interval.end = start;
              -
              7342 if (m_quote->match(text, this->interval.end, end, flags)) {
              -
              7343 this->interval.end = m_quote->interval.end;
              -
              7344 value.clear();
              -
              7345 for (;;) {
              -
              7346 if (m_quote->match(text, this->interval.end, end, flags)) {
              -
              7347 this->interval.start = start;
              -
              7348 this->interval.end = m_quote->interval.end;
              -
              7349 return true;
              -
              7350 }
              -
              7351 if (m_escape->match(text, this->interval.end, end, flags)) {
              -
              7352 if (m_quote->match(text, m_escape->interval.end, end, flags)) {
              -
              7353 value += '"'; this->interval.end = m_quote->interval.end;
              -
              7354 continue;
              -
              7355 }
              -
              7356 if (m_sol->match(text, m_escape->interval.end, end, flags)) {
              -
              7357 value += '/'; this->interval.end = m_sol->interval.end;
              -
              7358 continue;
              -
              7359 }
              -
              7360 if (m_bs->match(text, m_escape->interval.end, end, flags)) {
              -
              7361 value += '\b'; this->interval.end = m_bs->interval.end;
              -
              7362 continue;
              -
              7363 }
              -
              7364 if (m_ff->match(text, m_escape->interval.end, end, flags)) {
              -
              7365 value += '\f'; this->interval.end = m_ff->interval.end;
              -
              7366 continue;
              -
              7367 }
              -
              7368 if (m_lf->match(text, m_escape->interval.end, end, flags)) {
              -
              7369 value += '\n'; this->interval.end = m_lf->interval.end;
              -
              7370 continue;
              -
              7371 }
              -
              7372 if (m_cr->match(text, m_escape->interval.end, end, flags)) {
              -
              7373 value += '\r'; this->interval.end = m_cr->interval.end;
              -
              7374 continue;
              -
              7375 }
              -
              7376 if (m_htab->match(text, m_escape->interval.end, end, flags)) {
              -
              7377 value += '\t'; this->interval.end = m_htab->interval.end;
              -
              7378 continue;
              -
              7379 }
              -
              7380 if (
              -
              7381 m_uni->match(text, m_escape->interval.end, end, flags) &&
              -
              7382 m_hex->match(text, m_uni->interval.end, std::min(m_uni->interval.end + 4, end), flags | match_case_insensitive) &&
              -
              7383 m_hex->interval.size() == 4 /* JSON requests 4-digit Unicode sequneces: \u.... */)
              -
              7384 {
              -
              7385 _Assume_(m_hex->value <= 0xffff);
              -
              7386 if (sizeof(T) == 1) {
              -
              7387 if (m_hex->value > 0x7ff) {
              -
              7388 value += (T)(0xe0 | ((m_hex->value >> 12) & 0x0f));
              -
              7389 value += (T)(0x80 | ((m_hex->value >> 6) & 0x3f));
              -
              7390 value += (T)(0x80 | (m_hex->value & 0x3f));
              -
              7391 }
              -
              7392 else if (m_hex->value > 0x7f) {
              -
              7393 value += (T)(0xc0 | ((m_hex->value >> 6) & 0x1f));
              -
              7394 value += (T)(0x80 | (m_hex->value & 0x3f));
              -
              7395 }
              -
              7396 else
              -
              7397 value += (T)(m_hex->value & 0x7f);
              -
              7398 }
              -
              7399 else
              -
              7400 value += (T)m_hex->value;
              -
              7401 this->interval.end = m_hex->interval.end;
              -
              7402 continue;
              -
              7403 }
              -
              7404 if (m_escape->match(text, m_escape->interval.end, end, flags)) {
              -
              7405 value += '\\'; this->interval.end = m_escape->interval.end;
              -
              7406 continue;
              -
              7407 }
              +
              7288
              +
              7292 template <class T, class _Alloc = std::allocator<T>>
              + +
              7294
              +
              7298 template <class T>
              +
              + +
              7300 {
              +
              7301 public:
              + +
              7303 _In_ const std::shared_ptr<basic_parser<T>>& quote,
              +
              7304 _In_ const std::shared_ptr<basic_parser<T>>& chr,
              +
              7305 _In_ const std::shared_ptr<basic_parser<T>>& escape,
              +
              7306 _In_ const std::shared_ptr<basic_parser<T>>& sol,
              +
              7307 _In_ const std::shared_ptr<basic_parser<T>>& bs,
              +
              7308 _In_ const std::shared_ptr<basic_parser<T>>& ff,
              +
              7309 _In_ const std::shared_ptr<basic_parser<T>>& lf,
              +
              7310 _In_ const std::shared_ptr<basic_parser<T>>& cr,
              +
              7311 _In_ const std::shared_ptr<basic_parser<T>>& htab,
              +
              7312 _In_ const std::shared_ptr<basic_parser<T>>& uni,
              +
              7313 _In_ const std::shared_ptr<basic_integer16<T>>& hex,
              +
              7314 _In_ const std::locale& locale = std::locale()) :
              +
              7315 basic_parser<T>(locale),
              +
              7316 m_quote(quote),
              +
              7317 m_chr(chr),
              +
              7318 m_escape(escape),
              +
              7319 m_sol(sol),
              +
              7320 m_bs(bs),
              +
              7321 m_ff(ff),
              +
              7322 m_lf(lf),
              +
              7323 m_cr(cr),
              +
              7324 m_htab(htab),
              +
              7325 m_uni(uni),
              +
              7326 m_hex(hex)
              +
              7327 {}
              +
              7328
              +
              7329 virtual bool match(
              +
              7330 _In_reads_or_z_(end) const T* text,
              +
              7331 _In_ size_t start = 0,
              +
              7332 _In_ size_t end = SIZE_MAX,
              +
              7333 _In_ int flags = match_default)
              +
              7334 {
              +
              7335 _Assume_(text || start >= end);
              +
              7336 this->interval.end = start;
              +
              7337 if (m_quote->match(text, this->interval.end, end, flags)) {
              +
              7338 this->interval.end = m_quote->interval.end;
              +
              7339 value.clear();
              +
              7340 for (;;) {
              +
              7341 if (m_quote->match(text, this->interval.end, end, flags)) {
              +
              7342 this->interval.start = start;
              +
              7343 this->interval.end = m_quote->interval.end;
              +
              7344 return true;
              +
              7345 }
              +
              7346 if (m_escape->match(text, this->interval.end, end, flags)) {
              +
              7347 if (m_quote->match(text, m_escape->interval.end, end, flags)) {
              +
              7348 value += '"'; this->interval.end = m_quote->interval.end;
              +
              7349 continue;
              +
              7350 }
              +
              7351 if (m_sol->match(text, m_escape->interval.end, end, flags)) {
              +
              7352 value += '/'; this->interval.end = m_sol->interval.end;
              +
              7353 continue;
              +
              7354 }
              +
              7355 if (m_bs->match(text, m_escape->interval.end, end, flags)) {
              +
              7356 value += '\b'; this->interval.end = m_bs->interval.end;
              +
              7357 continue;
              +
              7358 }
              +
              7359 if (m_ff->match(text, m_escape->interval.end, end, flags)) {
              +
              7360 value += '\f'; this->interval.end = m_ff->interval.end;
              +
              7361 continue;
              +
              7362 }
              +
              7363 if (m_lf->match(text, m_escape->interval.end, end, flags)) {
              +
              7364 value += '\n'; this->interval.end = m_lf->interval.end;
              +
              7365 continue;
              +
              7366 }
              +
              7367 if (m_cr->match(text, m_escape->interval.end, end, flags)) {
              +
              7368 value += '\r'; this->interval.end = m_cr->interval.end;
              +
              7369 continue;
              +
              7370 }
              +
              7371 if (m_htab->match(text, m_escape->interval.end, end, flags)) {
              +
              7372 value += '\t'; this->interval.end = m_htab->interval.end;
              +
              7373 continue;
              +
              7374 }
              +
              7375 if (
              +
              7376 m_uni->match(text, m_escape->interval.end, end, flags) &&
              +
              7377 m_hex->match(text, m_uni->interval.end, std::min(m_uni->interval.end + 4, end), flags | match_case_insensitive) &&
              +
              7378 m_hex->interval.size() == 4 /* JSON requests 4-digit Unicode sequneces: \u.... */)
              +
              7379 {
              +
              7380 _Assume_(m_hex->value <= 0xffff);
              +
              7381 if (sizeof(T) == 1) {
              +
              7382 if (m_hex->value > 0x7ff) {
              +
              7383 value += (T)(0xe0 | ((m_hex->value >> 12) & 0x0f));
              +
              7384 value += (T)(0x80 | ((m_hex->value >> 6) & 0x3f));
              +
              7385 value += (T)(0x80 | (m_hex->value & 0x3f));
              +
              7386 }
              +
              7387 else if (m_hex->value > 0x7f) {
              +
              7388 value += (T)(0xc0 | ((m_hex->value >> 6) & 0x1f));
              +
              7389 value += (T)(0x80 | (m_hex->value & 0x3f));
              +
              7390 }
              +
              7391 else
              +
              7392 value += (T)(m_hex->value & 0x7f);
              +
              7393 }
              +
              7394 else
              +
              7395 value += (T)m_hex->value;
              +
              7396 this->interval.end = m_hex->interval.end;
              +
              7397 continue;
              +
              7398 }
              +
              7399 if (m_escape->match(text, m_escape->interval.end, end, flags)) {
              +
              7400 value += '\\'; this->interval.end = m_escape->interval.end;
              +
              7401 continue;
              +
              7402 }
              +
              7403 }
              +
              7404 if (m_chr->match(text, this->interval.end, end, flags)) {
              +
              7405 value.append(text + m_chr->interval.start, m_chr->interval.size());
              +
              7406 this->interval.end = m_chr->interval.end;
              +
              7407 continue;
              7408 }
              -
              7409 if (m_chr->match(text, this->interval.end, end, flags)) {
              -
              7410 value.Prilepi(text + m_chr->interval.start, m_chr->interval.size());
              -
              7411 this->interval.end = m_chr->interval.end;
              -
              7412 continue;
              -
              7413 }
              -
              7414 break;
              -
              7415 }
              -
              7416 }
              -
              7417 value.clear();
              -
              7418 this->interval.start = (this->interval.end = start) + 1;
              -
              7419 return false;
              -
              7420 }
              -
              7421
              -
              7422 virtual void invalidate()
              -
              7423 {
              -
              7424 value.clear();
              - -
              7426 }
              -
              7427
              -
              7428 public:
              -
              7429 std::basic_string<T> value;
              -
              7430
              -
              7431 protected:
              -
              7432 std::shared_ptr<basic_parser<T>> m_quote;
              -
              7433 std::shared_ptr<basic_parser<T>> m_chr;
              -
              7434 std::shared_ptr<basic_parser<T>> m_escape;
              -
              7435 std::shared_ptr<basic_parser<T>> m_sol;
              -
              7436 std::shared_ptr<basic_parser<T>> m_bs;
              -
              7437 std::shared_ptr<basic_parser<T>> m_ff;
              -
              7438 std::shared_ptr<basic_parser<T>> m_lf;
              -
              7439 std::shared_ptr<basic_parser<T>> m_cr;
              -
              7440 std::shared_ptr<basic_parser<T>> m_htab;
              -
              7441 std::shared_ptr<basic_parser<T>> m_uni;
              -
              7442 std::shared_ptr<basic_integer16<T>> m_hex;
              -
              7443 };
              +
              7409 break;
              +
              7410 }
              +
              7411 }
              +
              7412 value.clear();
              +
              7413 this->interval.invalidate();
              +
              7414 return false;
              +
              7415 }
              +
              7416
              +
              7417 virtual void invalidate()
              +
              7418 {
              +
              7419 value.clear();
              + +
              7421 }
              +
              7422
              +
              7423 public:
              +
              7424 std::basic_string<T> value;
              +
              7425
              +
              7426 protected:
              +
              7427 std::shared_ptr<basic_parser<T>> m_quote;
              +
              7428 std::shared_ptr<basic_parser<T>> m_chr;
              +
              7429 std::shared_ptr<basic_parser<T>> m_escape;
              +
              7430 std::shared_ptr<basic_parser<T>> m_sol;
              +
              7431 std::shared_ptr<basic_parser<T>> m_bs;
              +
              7432 std::shared_ptr<basic_parser<T>> m_ff;
              +
              7433 std::shared_ptr<basic_parser<T>> m_lf;
              +
              7434 std::shared_ptr<basic_parser<T>> m_cr;
              +
              7435 std::shared_ptr<basic_parser<T>> m_htab;
              +
              7436 std::shared_ptr<basic_parser<T>> m_uni;
              +
              7437 std::shared_ptr<basic_integer16<T>> m_hex;
              +
              7438 };
              -
              7444
              - - -
              7447#ifdef _UNICODE
              -
              7448 using tjson_string = wjson_string;
              -
              7449#else
              -
              7450 using tjson_string = json_string;
              -
              7451#endif
              -
              7452 }
              -
              7453}
              -
              7454
              -
              7455#undef ENUM_FLAG_OPERATOR
              -
              7456#undef ENUM_FLAGS
              -
              7457
              -
              7458#ifdef _MSC_VER
              -
              7459#pragma warning(pop)
              -
              7460#endif
              -
              Test for angle in d°mm'ss.dddd form.
              Definition parser.hpp:4399
              -
              Test for any code unit.
              Definition parser.hpp:225
              -
              Test for beginning of line.
              Definition parser.hpp:619
              -
              Test for any.
              Definition parser.hpp:1061
              -
              Test for chemical formula.
              Definition parser.hpp:5543
              -
              Test for Creditor Reference.
              Definition parser.hpp:4969
              -
              T reference[22]
              Normalized national reference number.
              Definition parser.hpp:5098
              -
              T check_digits[3]
              Two check digits.
              Definition parser.hpp:5097
              -
              bool is_valid
              Is reference valid per ISO 7064.
              Definition parser.hpp:5099
              -
              Test for any code unit from a given string of code units.
              Definition parser.hpp:724
              -
              Test for specific code unit.
              Definition parser.hpp:295
              -
              Test for date.
              Definition parser.hpp:4029
              -
              Test for valid DNS domain character.
              Definition parser.hpp:2810
              -
              bool allow_on_edge
              Is character allowed at the beginning or an end of a DNS domain?
              Definition parser.hpp:2848
              -
              Test for DNS domain/hostname.
              Definition parser.hpp:2910
              -
              bool m_allow_absolute
              May DNS names end with a dot (absolute name)?
              Definition parser.hpp:2974
              -
              Test for e-mail address.
              Definition parser.hpp:3798
              -
              Test for emoticon.
              Definition parser.hpp:3906
              -
              std::shared_ptr< basic_parser< T > > apex
              apex/eyebrows/halo (e.g. O, 0)
              Definition parser.hpp:3995
              -
              std::shared_ptr< basic_parser< T > > eyes
              eyes (e.g. :, ;, >, |, B)
              Definition parser.hpp:3996
              -
              std::shared_ptr< basic_set< T > > mouth
              mouth (e.g. ), ), (, (, |, P, D, p, d)
              Definition parser.hpp:3998
              -
              std::shared_ptr< basic_parser< T > > nose
              nose (e.g. -, o)
              Definition parser.hpp:3997
              -
              std::shared_ptr< basic_parser< T > > emoticon
              emoticon as a whole (e.g. 😀, 🤔, 😶)
              Definition parser.hpp:3994
              -
              Test for end of line.
              Definition parser.hpp:657
              -
              Test for fraction.
              Definition parser.hpp:1690
              -
              Test for International Bank Account Number.
              Definition parser.hpp:4675
              -
              T bban[31]
              Normalized Basic Bank Account Number.
              Definition parser.hpp:4946
              -
              T country[3]
              ISO 3166-1 alpha-2 country code.
              Definition parser.hpp:4944
              -
              T check_digits[3]
              Two check digits.
              Definition parser.hpp:4945
              -
              bool is_valid
              Is IBAN valid per ISO 7064.
              Definition parser.hpp:4947
              -
              Test for decimal integer.
              Definition parser.hpp:1299
              -
              Test for decimal integer possibly containing thousand separators.
              Definition parser.hpp:1384
              -
              bool has_separators
              Did integer have any separators?
              Definition parser.hpp:1444
              -
              size_t digit_count
              Total number of digits in integer.
              Definition parser.hpp:1443
              -
              Test for hexadecimal integer.
              Definition parser.hpp:1465
              -
              Base class for integer testing.
              Definition parser.hpp:1277
              -
              size_t value
              Calculated value of the numeral.
              Definition parser.hpp:1291
              -
              Test for IPv4 address.
              Definition parser.hpp:2350
              -
              stdex::interval< size_t > components[4]
              Individual component intervals.
              Definition parser.hpp:2465
              -
              struct in_addr value
              IPv4 address value.
              Definition parser.hpp:2466
              -
              Test for IPv6 address.
              Definition parser.hpp:2569
              -
              std::shared_ptr< basic_parser< T > > scope_id
              Scope ID (e.g. NIC index with link-local addresses)
              Definition parser.hpp:2773
              -
              stdex::interval< size_t > components[8]
              Individual component intervals.
              Definition parser.hpp:2771
              -
              struct in6_addr value
              IPv6 address value.
              Definition parser.hpp:2772
              -
              Test for valid IPv6 address scope ID character.
              Definition parser.hpp:2497
              -
              Test for repeating.
              Definition parser.hpp:914
              -
              bool m_greedy
              try to match as long sequence as possible
              Definition parser.hpp:953
              -
              std::shared_ptr< basic_parser< T > > m_el
              repeating element
              Definition parser.hpp:950
              -
              size_t m_min_iterations
              minimum number of iterations
              Definition parser.hpp:951
              -
              size_t m_max_iterations
              maximum number of iterations
              Definition parser.hpp:952
              -
              Test for JSON string.
              Definition parser.hpp:7305
              -
              Test for mixed numeral.
              Definition parser.hpp:1926
              -
              std::shared_ptr< basic_parser< T > > fraction
              fraction
              Definition parser.hpp:2032
              -
              std::shared_ptr< basic_parser< T > > special_sign
              Special sign (e.g. plus-minus '±')
              Definition parser.hpp:2030
              -
              std::shared_ptr< basic_parser< T > > negative_sign
              Negative sign.
              Definition parser.hpp:2029
              -
              std::shared_ptr< basic_parser< T > > positive_sign
              Positive sign.
              Definition parser.hpp:2028
              -
              std::shared_ptr< basic_parser< T > > integer
              Integer part.
              Definition parser.hpp:2031
              -
              Test for monetary numeral.
              Definition parser.hpp:2221
              -
              std::shared_ptr< basic_parser< T > > positive_sign
              Positive sign.
              Definition parser.hpp:2327
              -
              std::shared_ptr< basic_parser< T > > decimal_separator
              Decimal separator.
              Definition parser.hpp:2332
              -
              std::shared_ptr< basic_parser< T > > currency
              Currency part.
              Definition parser.hpp:2330
              -
              std::shared_ptr< basic_parser< T > > decimal
              Decimal part.
              Definition parser.hpp:2333
              -
              std::shared_ptr< basic_parser< T > > integer
              Integer part.
              Definition parser.hpp:2331
              -
              std::shared_ptr< basic_parser< T > > negative_sign
              Negative sign.
              Definition parser.hpp:2328
              -
              std::shared_ptr< basic_parser< T > > special_sign
              Special sign (e.g. plus-minus '±')
              Definition parser.hpp:2329
              -
              "No-op" match
              Definition parser.hpp:193
              +
              7439
              + + +
              7442#ifdef _UNICODE
              +
              7443 using tjson_string = wjson_string;
              +
              7444#else
              +
              7445 using tjson_string = json_string;
              +
              7446#endif
              +
              7447
              +
              7451 template <class T>
              +
              + +
              7453 {
              +
              7454 public:
              +
              7455 virtual bool match(
              +
              7456 _In_reads_or_z_opt_(end) const T* text,
              +
              7457 _In_ size_t start = 0,
              +
              7458 _In_ size_t end = SIZE_MAX,
              +
              7459 _In_ int flags = match_multiline)
              +
              7460 {
              +
              7461 _Unreferenced_(flags);
              +
              7462 _Assume_(text || start + 1 >= end);
              +
              7463 if (start + 1 < end &&
              +
              7464 text[start] == '/' &&
              +
              7465 text[start + 1] == '*')
              +
              7466 {
              +
              7467 // /*
              +
              7468 this->content.start = this->interval.end = start + 2;
              +
              7469 for (;;) {
              +
              7470 if (this->interval.end >= end || !text[this->interval.end])
              +
              7471 break;
              +
              7472 if (this->interval.end + 1 < end &&
              +
              7473 text[this->interval.end] == '*' &&
              +
              7474 text[this->interval.end + 1] == '/')
              +
              7475 {
              +
              7476 // /*...*/
              +
              7477 this->content.end = this->interval.end;
              +
              7478 this->interval.start = start;
              +
              7479 this->interval.end = this->interval.end + 2;
              +
              7480 return true;
              +
              7481 }
              +
              7482 this->interval.end++;
              +
              7483 }
              +
              7484 }
              +
              7485 this->content.invalidate();
              +
              7486 this->interval.invalidate();
              +
              7487 return false;
              +
              7488 }
              +
              7489
              +
              7490 virtual void invalidate()
              +
              7491 {
              +
              7492 this->content.invalidate();
              +
              7493 basic_parser::invalidate();
              +
              7494 }
              +
              7495
              +
              7496 public:
              + +
              7498 };
              +
              +
              7499
              + + +
              7502#ifdef _UNICODE
              +
              7503 using tcss_comment = wcss_comment;
              +
              7504#else
              +
              7505 using tcss_comment = css_comment;
              +
              7506#endif
              +
              7507
              +
              7511 template <class T>
              +
              +
              7512 class basic_css_cdo : public basic_parser<T>
              +
              7513 {
              +
              7514 public:
              +
              7515 virtual bool match(
              +
              7516 _In_reads_or_z_opt_(end) const T* text,
              +
              7517 _In_ size_t start = 0,
              +
              7518 _In_ size_t end = SIZE_MAX,
              +
              7519 _In_ int flags = match_multiline)
              +
              7520 {
              +
              7521 _Unreferenced_(flags);
              +
              7522 _Assume_(text || start + 3 >= end);
              +
              7523 if (start + 3 < end &&
              +
              7524 text[start] == '<' &&
              +
              7525 text[start + 1] == '!' &&
              +
              7526 text[start + 2] == '-' &&
              +
              7527 text[start + 3] == '-')
              +
              7528 {
              +
              7529 this->interval.start = start;
              +
              7530 this->interval.end = start + 4;
              +
              7531 return true;
              +
              7532 }
              +
              7533 this->interval.invalidate();
              +
              7534 return false;
              +
              7535 }
              +
              7536 };
              +
              +
              7537
              + + +
              7540#ifdef _UNICODE
              +
              7541 using tcss_cdo = wcss_cdo;
              +
              7542#else
              +
              7543 using tcss_cdo = css_cdo;
              +
              7544#endif
              +
              7545
              +
              7549 template <class T>
              +
              +
              7550 class basic_css_cdc : public basic_parser<T>
              +
              7551 {
              +
              7552 public:
              +
              7553 virtual bool match(
              +
              7554 _In_reads_or_z_opt_(end) const T* text,
              +
              7555 _In_ size_t start = 0,
              +
              7556 _In_ size_t end = SIZE_MAX,
              +
              7557 _In_ int flags = match_multiline)
              +
              7558 {
              +
              7559 _Unreferenced_(flags);
              +
              7560 _Assume_(text || start + 2 >= end);
              +
              7561 if (start + 2 < end &&
              +
              7562 text[start] == '-' &&
              +
              7563 text[start + 1] == '-' &&
              +
              7564 text[start + 2] == '>')
              +
              7565 {
              +
              7566 this->interval.start = start;
              +
              7567 this->interval.end = start + 3;
              +
              7568 return true;
              +
              7569 }
              +
              7570 this->interval.invalidate();
              +
              7571 return false;
              +
              7572 }
              +
              7573 };
              +
              +
              7574
              + + +
              7577#ifdef _UNICODE
              +
              7578 using tcss_cdc = wcss_cdc;
              +
              7579#else
              +
              7580 using tcss_cdc = css_cdc;
              +
              7581#endif
              +
              7582
              +
              7586 template <class T>
              +
              + +
              7588 {
              +
              7589 public:
              +
              7590 virtual bool match(
              +
              7591 _In_reads_or_z_opt_(end) const T* text,
              +
              7592 _In_ size_t start = 0,
              +
              7593 _In_ size_t end = SIZE_MAX,
              +
              7594 _In_ int flags = match_multiline)
              +
              7595 {
              +
              7596 _Unreferenced_(flags);
              +
              7597 this->interval.end = start;
              +
              7598 _Assume_(text || this->interval.end >= end);
              +
              7599 if (this->interval.end < end &&
              +
              7600 (text[this->interval.end] == '\"' || text[this->interval.end] == '\''))
              +
              7601 {
              +
              7602 // "Quoted...
              +
              7603 T quote = text[this->interval.end];
              +
              7604 this->content.start = ++this->interval.end;
              +
              7605 for (;;) {
              +
              7606 if (this->interval.end >= end || !text[this->interval.end])
              +
              7607 break;
              +
              7608 if (text[this->interval.end] == quote) {
              +
              7609 // End quote"
              +
              7610 this->content.end = this->interval.end;
              +
              7611 this->interval.start = start;
              +
              7612 this->interval.end++;
              +
              7613 return true;
              +
              7614 }
              +
              7615 if (this->interval.end + 1 < end &&
              +
              7616 text[this->interval.end] == '\\' &&
              +
              7617 (text[this->interval.end + 1] == '\"' || text[this->interval.end + 1] == '\''))
              +
              7618 {
              +
              7619 // Escaped quote
              +
              7620 this->interval.end = this->interval.end + 2;
              +
              7621 }
              +
              7622 else
              +
              7623 this->interval.end++;
              +
              7624 }
              +
              7625 }
              +
              7626
              +
              7627 this->content.invalidate();
              +
              7628 this->interval.invalidate();
              +
              7629 return false;
              +
              7630 }
              +
              7631
              +
              7632 virtual void invalidate()
              +
              7633 {
              +
              7634 this->content.invalidate();
              +
              7635 basic_parser::invalidate();
              +
              7636 }
              +
              7637
              +
              7638 public:
              + +
              7640 };
              +
              +
              7641
              + + +
              7644#ifdef _UNICODE
              +
              7645 using tcss_string = wcss_string;
              +
              7646#else
              +
              7647 using tcss_string = css_string;
              +
              7648#endif
              +
              7649
              +
              7653 template <class T>
              +
              +
              7654 class basic_css_uri : public basic_parser<T>
              +
              7655 {
              +
              7656 public:
              +
              7657 virtual bool match(
              +
              7658 _In_reads_or_z_opt_(end) const T* text,
              +
              7659 _In_ size_t start = 0,
              +
              7660 _In_ size_t end = SIZE_MAX,
              +
              7661 _In_ int flags = match_multiline)
              +
              7662 {
              +
              7663 _Unreferenced_(flags);
              +
              7664 this->interval.end = start;
              +
              7665 _Assume_(text || this->interval.end + 3 >= end);
              +
              7666 if (this->interval.end + 3 < end &&
              +
              7667 (text[this->interval.end] == 'u' || text[this->interval.end] == 'U') &&
              +
              7668 (text[this->interval.end + 1] == 'r' || text[this->interval.end + 1] == 'R') &&
              +
              7669 (text[this->interval.end + 2] == 'l' || text[this->interval.end + 2] == 'L') &&
              +
              7670 text[this->interval.end + 3] == '(')
              +
              7671 {
              +
              7672 // url(
              +
              7673 this->interval.end = this->interval.end + 4;
              +
              7674
              +
              7675 // Skip whitespace.
              +
              7676 const auto& ctype = std::use_facet<std::ctype<T>>(m_locale);
              +
              7677 for (; this->interval.end < end && text[this->interval.end] && ctype.is(ctype.space, text[this->interval.end]); this->interval.end++);
              +
              7678
              +
              7679 if (this->interval.end < end &&
              +
              7680 (text[this->interval.end] == '\"' || text[this->interval.end] == '\''))
              +
              7681 {
              +
              7682 // url("Quoted...
              +
              7683 T quote = text[this->interval.end];
              +
              7684 this->content.start = ++this->interval.end;
              +
              7685 for (;;) {
              +
              7686 if (this->interval.end >= end || !text[this->interval.end])
              +
              7687 goto error;
              +
              7688 if (text[this->interval.end] == quote) {
              +
              7689 // End quote"
              +
              7690 this->content.end = this->interval.end;
              +
              7691 this->interval.end++;
              +
              7692 break;
              +
              7693 }
              +
              7694 if (this->interval.end + 1 < end &&
              +
              7695 text[this->interval.end] == '\\' &&
              +
              7696 (text[this->interval.end + 1] == '\"' || text[this->interval.end + 1] == '\''))
              +
              7697 {
              +
              7698 // Escaped quote
              +
              7699 this->interval.end = this->interval.end + 2;
              +
              7700 }
              +
              7701 else
              +
              7702 this->interval.end++;
              +
              7703 }
              +
              7704
              +
              7705 // Skip whitespace.
              +
              7706 for (; this->interval.end < end && text[this->interval.end] && ctype.is(ctype.space, text[this->interval.end]); this->interval.end++);
              +
              7707
              +
              7708 if (this->interval.end < end &&
              +
              7709 text[this->interval.end] == ')')
              +
              7710 {
              +
              7711 // url("...")
              +
              7712 this->interval.start = start;
              +
              7713 this->interval.end++;
              +
              7714 return true;
              +
              7715 }
              +
              7716 }
              +
              7717 else {
              +
              7718 // url(...
              +
              7719 this->content.start = content.end = this->interval.end;
              +
              7720 for (;;) {
              +
              7721 if (this->interval.end >= end || !text[this->interval.end])
              +
              7722 goto error;
              +
              7723 if (text[this->interval.end] == ')') {
              +
              7724 // url(...)
              +
              7725 this->interval.start = start;
              +
              7726 this->interval.end++;
              +
              7727 return true;
              +
              7728 }
              +
              7729 if (ctype.is(ctype.space, text[this->interval.end]))
              +
              7730 this->interval.end++;
              +
              7731 else
              +
              7732 this->content.end = ++this->interval.end;
              +
              7733 }
              +
              7734 }
              +
              7735 }
              +
              7736
              +
              7737 error:
              +
              7738 this->content.invalidate();
              +
              7739 this->interval.invalidate();
              +
              7740 return false;
              +
              7741 }
              +
              7742
              +
              7743 virtual void invalidate()
              +
              7744 {
              +
              7745 this->content.invalidate();
              +
              7746 basic_parser::invalidate();
              +
              7747 }
              +
              7748
              +
              7749 public:
              + +
              7751 };
              +
              +
              7752
              + + +
              7755#ifdef _UNICODE
              +
              7756 using tcss_uri = wcss_uri;
              +
              7757#else
              +
              7758 using tcss_uri = css_uri;
              +
              7759#endif
              +
              7760
              +
              7764 template <class T>
              +
              + +
              7766 {
              +
              7767 public:
              +
              7768 virtual bool match(
              +
              7769 _In_reads_or_z_opt_(end) const T* text,
              +
              7770 _In_ size_t start = 0,
              +
              7771 _In_ size_t end = SIZE_MAX,
              +
              7772 _In_ int flags = match_multiline)
              +
              7773 {
              +
              7774 _Unreferenced_(flags);
              +
              7775 this->interval.end = start;
              +
              7776 _Assume_(text || this->interval.end + 6 >= end);
              +
              7777 if (this->interval.end + 6 < end &&
              +
              7778 text[this->interval.end] == '@' &&
              +
              7779 (text[this->interval.end + 1] == 'i' || text[this->interval.end + 1] == 'I') &&
              +
              7780 (text[this->interval.end + 2] == 'm' || text[this->interval.end + 2] == 'M') &&
              +
              7781 (text[this->interval.end + 3] == 'p' || text[this->interval.end + 3] == 'P') &&
              +
              7782 (text[this->interval.end + 4] == 'o' || text[this->interval.end + 4] == 'O') &&
              +
              7783 (text[this->interval.end + 5] == 'r' || text[this->interval.end + 5] == 'R') &&
              +
              7784 (text[this->interval.end + 6] == 't' || text[this->interval.end + 6] == 'T'))
              +
              7785 {
              +
              7786 // @import...
              +
              7787 this->interval.end = this->interval.end + 7;
              +
              7788
              +
              7789 // Skip whitespace.
              +
              7790 const auto& ctype = std::use_facet<std::ctype<T>>(m_locale);
              +
              7791 for (; this->interval.end < end && text[this->interval.end] && ctype.is(ctype.space, text[this->interval.end]); this->interval.end++);
              +
              7792
              +
              7793 if (this->interval.end < end &&
              +
              7794 (text[this->interval.end] == '\"' || text[this->interval.end] == '\''))
              +
              7795 {
              +
              7796 // @import "Quoted
              +
              7797 T quote = text[this->interval.end];
              +
              7798 this->content.start = ++this->interval.end;
              +
              7799 for (;;) {
              +
              7800 if (this->interval.end >= end || !text[this->interval.end])
              +
              7801 goto error;
              +
              7802 if (text[this->interval.end] == quote) {
              +
              7803 // End quote"
              +
              7804 this->content.end = this->interval.end;
              +
              7805 this->interval.start = start;
              +
              7806 this->interval.end++;
              +
              7807 return true;
              +
              7808 }
              +
              7809 if (this->interval.end + 1 < end &&
              +
              7810 text[this->interval.end] == '\\' &&
              +
              7811 (text[this->interval.end + 1] == '\"' || text[this->interval.end + 1] == '\''))
              +
              7812 {
              +
              7813 // Escaped quote
              +
              7814 this->interval.end = this->interval.end + 2;
              +
              7815 }
              +
              7816 else
              +
              7817 this->interval.end++;
              +
              7818 }
              +
              7819 }
              +
              7820 }
              +
              7821
              +
              7822 error:
              +
              7823 this->content.invalidate();
              +
              7824 this->interval.invalidate();
              +
              7825 return false;
              +
              7826 }
              +
              7827
              +
              7828 virtual void invalidate()
              +
              7829 {
              +
              7830 this->content.invalidate();
              +
              7831 basic_parser::invalidate();
              +
              7832 }
              +
              7833
              +
              7834 public:
              + +
              7836 };
              +
              +
              7837
              + + +
              7840#ifdef _UNICODE
              +
              7841 using tcss_import = wcss_import;
              +
              7842#else
              +
              7843 using tcss_import = css_import;
              +
              7844#endif
              +
              7845
              +
              7849 template <class T>
              +
              + +
              7851 {
              +
              7852 public:
              +
              7853 virtual bool match(
              +
              7854 _In_reads_or_z_opt_(end) const T* text,
              +
              7855 _In_ size_t start = 0,
              +
              7856 _In_ size_t end = SIZE_MAX,
              +
              7857 _In_ int flags = match_multiline)
              +
              7858 {
              +
              7859 _Unreferenced_(flags);
              +
              7860 const auto& ctype = std::use_facet<std::ctype<T>>(m_locale);
              +
              7861
              +
              7862 this->interval.end = start;
              +
              7863 this->base_type.start = this->interval.end;
              +
              7864 for (;;) {
              +
              7865 _Assume_(text || this->interval.end >= end);
              +
              7866 if (this->interval.end >= end || !text[this->interval.end])
              +
              7867 break;
              +
              7868 if (text[this->interval.end] == '/' ||
              +
              7869 text[this->interval.end] == ';' ||
              +
              7870 ctype.is(ctype.space, text[this->interval.end]))
              +
              7871 break;
              +
              7872 this->interval.end++;
              +
              7873 }
              +
              7874 if (this->interval.end <= this->base_type.start)
              +
              7875 goto error;
              +
              7876 this->base_type.end = this->interval.end;
              +
              7877
              +
              7878 if (end <= this->interval.end || text[this->interval.end] != '/')
              +
              7879 goto error;
              +
              7880
              +
              7881 this->interval.end++;
              +
              7882 this->sub_type.start = this->interval.end;
              +
              7883 for (;;) {
              +
              7884 if (this->interval.end >= end || !text[this->interval.end])
              +
              7885 break;
              +
              7886 if (text[this->interval.end] == '/' ||
              +
              7887 text[this->interval.end] == ';' ||
              +
              7888 ctype.is(ctype.space, text[this->interval.end]))
              +
              7889 break;
              +
              7890 this->interval.end++;
              +
              7891 }
              +
              7892 if (this->interval.end <= this->sub_type.start)
              +
              7893 goto error;
              +
              7894
              +
              7895 this->sub_type.end = this->interval.end;
              +
              7896 this->charset.invalidate();
              +
              7897 if (this->interval.end < end && text[this->interval.end] == ';') {
              +
              7898 this->interval.end++;
              +
              7899
              +
              7900 // Skip whitespace.
              +
              7901 for (; this->interval.end < end && text[this->interval.end] && ctype.is(ctype.space, text[this->interval.end]); this->interval.end++);
              +
              7902
              +
              7903 if (this->interval.end + 7 < end &&
              +
              7904 (text[this->interval.end] == 'c' || text[this->interval.end] == 'C') &&
              +
              7905 (text[this->interval.end + 1] == 'h' || text[this->interval.end + 1] == 'H') &&
              +
              7906 (text[this->interval.end + 2] == 'a' || text[this->interval.end + 2] == 'A') &&
              +
              7907 (text[this->interval.end + 3] == 'r' || text[this->interval.end + 3] == 'R') &&
              +
              7908 (text[this->interval.end + 4] == 's' || text[this->interval.end + 4] == 'S') &&
              +
              7909 (text[this->interval.end + 5] == 'e' || text[this->interval.end + 5] == 'E') &&
              +
              7910 (text[this->interval.end + 6] == 't' || text[this->interval.end + 6] == 'T') &&
              +
              7911 text[this->interval.end + 7] == '=')
              +
              7912 {
              +
              7913 this->interval.end = this->interval.end + 8;
              +
              7914 if (this->interval.end < end &&
              +
              7915 (text[this->interval.end] == '\"' || text[this->interval.end] == '\''))
              +
              7916 {
              +
              7917 // "Quoted...
              +
              7918 T quote = text[this->interval.end];
              +
              7919 this->charset.start = ++this->interval.end;
              +
              7920 for (;;) {
              +
              7921 if (this->interval.end >= end || !text[this->interval.end]) {
              +
              7922 // No end quote!
              +
              7923 this->charset.invalidate();
              +
              7924 break;
              +
              7925 }
              +
              7926 if (text[this->interval.end] == quote) {
              +
              7927 // End quote"
              +
              7928 this->charset.end = this->interval.end;
              +
              7929 this->interval.end++;
              +
              7930 break;
              +
              7931 }
              +
              7932 this->interval.end++;
              +
              7933 }
              +
              7934 }
              +
              7935 else {
              +
              7936 // Nonquoted
              +
              7937 this->charset.start = this->interval.end;
              +
              7938 for (;;) {
              +
              7939 if (this->interval.end >= end || !text[this->interval.end] ||
              +
              7940 ctype.is(ctype.space, text[this->interval.end])) {
              +
              7941 this->charset.end = this->interval.end;
              +
              7942 break;
              +
              7943 }
              +
              7944 this->interval.end++;
              +
              7945 }
              +
              7946 }
              +
              7947 }
              +
              7948 }
              +
              7949 this->interval.start = start;
              +
              7950 return true;
              +
              7951
              +
              7952 error:
              +
              7953 this->base_type.invalidate();
              +
              7954 this->sub_type.invalidate();
              +
              7955 this->charset.invalidate();
              +
              7956 this->interval.invalidate();
              +
              7957 return false;
              +
              7958 }
              +
              7959
              +
              7960 virtual void invalidate()
              +
              7961 {
              +
              7962 this->base_type.invalidate();
              +
              7963 this->sub_type.invalidate();
              +
              7964 this->charset.invalidate();
              +
              7965 basic_parser::invalidate();
              +
              7966 }
              +
              7967
              +
              7968 public:
              + + + +
              7972 };
              +
              +
              7973
              + + +
              7976#ifdef _UNICODE
              +
              7977 using tmime_type = wmime_type;
              +
              7978#else
              +
              7979 using tmime_type = mime_type;
              +
              7980#endif
              +
              7981
              +
              7985 template <class T>
              +
              + +
              7987 {
              +
              7988 public:
              +
              7989 virtual bool match(
              +
              7990 _In_reads_or_z_opt_(end) const T* text,
              +
              7991 _In_ size_t start = 0,
              +
              7992 _In_ size_t end = SIZE_MAX,
              +
              7993 _In_ int flags = match_default)
              +
              7994 {
              +
              7995 _Unreferenced_(flags);
              +
              7996 const auto& ctype = std::use_facet<std::ctype<T>>(m_locale);
              +
              7997 this->interval.end = start;
              +
              7998 for (;;) {
              +
              7999 _Assume_(text || this->interval.end >= end);
              +
              8000 if (this->interval.end >= end || !text[this->interval.end]) {
              + +
              8002 this->interval.start = start;
              +
              8003 return true;
              +
              8004 }
              +
              8005 this->interval.invalidate();
              +
              8006 return false;
              +
              8007 }
              +
              8008 if (text[this->interval.end] == '>' ||
              +
              8009 text[this->interval.end] == '=' ||
              +
              8010 text[this->interval.end] == '/' && this->interval.end + 1 < end && text[this->interval.end + 1] == '>' ||
              +
              8011 ctype.is(ctype.space, text[this->interval.end]))
              +
              8012 {
              +
              8013 this->interval.start = start;
              +
              8014 return true;
              +
              8015 }
              +
              8016 this->interval.end++;
              +
              8017 }
              +
              8018 }
              +
              8019 };
              +
              +
              8020
              + + +
              8023#ifdef _UNICODE
              +
              8024 using thtml_ident = whtml_ident;
              +
              8025#else
              +
              8026 using thtml_ident = html_ident;
              +
              8027#endif
              +
              8028
              +
              8032 template <class T>
              +
              + +
              8034 {
              +
              8035 public:
              +
              8036 virtual bool match(
              +
              8037 _In_reads_or_z_opt_(end) const T* text,
              +
              8038 _In_ size_t start = 0,
              +
              8039 _In_ size_t end = SIZE_MAX,
              +
              8040 _In_ int flags = match_default)
              +
              8041 {
              +
              8042 _Unreferenced_(flags);
              +
              8043 this->interval.end = start;
              +
              8044 _Assume_(text || this->interval.end >= end);
              +
              8045 if (this->interval.end < end &&
              +
              8046 (text[this->interval.end] == '\"' || text[this->interval.end] == '\''))
              +
              8047 {
              +
              8048 // "Quoted...
              +
              8049 T quote = text[this->interval.end];
              +
              8050 this->content.start = ++this->interval.end;
              +
              8051 for (;;) {
              +
              8052 if (this->interval.end >= end || !text[this->interval.end]) {
              +
              8053 // No end quote!
              +
              8054 this->content.invalidate();
              +
              8055 this->interval.invalidate();
              +
              8056 return false;
              +
              8057 }
              +
              8058 if (text[this->interval.end] == quote) {
              +
              8059 // End quote"
              +
              8060 this->content.end = this->interval.end;
              +
              8061 this->interval.start = start;
              +
              8062 this->interval.end++;
              +
              8063 return true;
              +
              8064 }
              +
              8065 this->interval.end++;
              +
              8066 }
              +
              8067 }
              +
              8068
              +
              8069 // Nonquoted
              +
              8070 this->content.start = this->interval.end;
              +
              8071 const auto& ctype = std::use_facet<std::ctype<T>>(m_locale);
              +
              8072 for (;;) {
              +
              8073 _Assume_(text || this->interval.end >= end);
              +
              8074 if (this->interval.end >= end || !text[this->interval.end]) {
              +
              8075 this->content.end = this->interval.end;
              +
              8076 this->interval.start = start;
              +
              8077 return true;
              +
              8078 }
              +
              8079 if (text[this->interval.end] == '>' ||
              +
              8080 text[this->interval.end] == '/' && this->interval.end + 1 < end && text[this->interval.end + 1] == '>' ||
              +
              8081 ctype.is(ctype.space, text[this->interval.end]))
              +
              8082 {
              +
              8083 this->content.end = this->interval.end;
              +
              8084 this->interval.start = start;
              +
              8085 return true;
              +
              8086 }
              +
              8087 this->interval.end++;
              +
              8088 }
              +
              8089 }
              +
              8090
              +
              8091 virtual void invalidate()
              +
              8092 {
              +
              8093 this->content.invalidate();
              +
              8094 basic_parser::invalidate();
              +
              8095 }
              +
              8096
              +
              8097 public:
              + +
              8099 };
              +
              +
              8100
              + + +
              8103#ifdef _UNICODE
              +
              8104 using thtml_value = whtml_value;
              +
              8105#else
              +
              8106 using thtml_value = html_value;
              +
              8107#endif
              +
              8108
              +
              8112 enum class html_sequence_t {
              +
              8113 text = 0,
              +
              8114 element,
              +
              8115 element_start,
              +
              8116 element_end,
              +
              8117 declaration,
              +
              8118 comment,
              +
              8119 instruction,
              +
              8120 PCDATA,
              +
              8121 CDATA,
              +
              8122
              +
              8123 unknown = -1,
              +
              8124 };
              +
              8125
              + +
              8133
              +
              8137 template <class T>
              +
              + +
              8139 {
              +
              8140 public:
              +
              8141 basic_html_tag(_In_ const std::locale& locale = std::locale()) :
              +
              8142 basic_parser(locale),
              +
              8143 type(html_sequence_t::unknown)
              +
              8144 {}
              +
              8145
              +
              8146 virtual bool match(
              +
              8147 _In_reads_or_z_opt_(end) const T* text,
              +
              8148 _In_ size_t start = 0,
              +
              8149 _In_ size_t end = SIZE_MAX,
              +
              8150 _In_ int flags = match_multiline)
              +
              8151 {
              +
              8152 _Assume_(text || start >= end);
              +
              8153 if (start >= end || text[start] != '<')
              +
              8154 goto error;
              +
              8155 this->interval.end = start + 1;
              +
              8156 if (this->interval.end >= end || !text[this->interval.end])
              +
              8157 goto error;
              +
              8158 if (text[this->interval.end] == '/' &&
              +
              8159 this->m_ident.match(text, this->interval.end + 1, end, flags))
              +
              8160 {
              +
              8161 // </...
              +
              8162 this->type = html_sequence_t::element_end;
              +
              8163 this->name = this->m_ident.interval;
              +
              8164 this->interval.end = this->m_ident.interval.end;
              +
              8165 }
              +
              8166 else if (text[this->interval.end] == '!') {
              +
              8167 // <!...
              +
              8168 this->interval.end++;
              +
              8169 if (this->interval.end + 1 < end &&
              +
              8170 text[this->interval.end] == '-' &&
              +
              8171 text[this->interval.end + 1] == '-')
              +
              8172 {
              +
              8173 // <!--...
              +
              8174 this->name.start = this->interval.end = this->interval.end + 2;
              +
              8175 for (;;) {
              +
              8176 if (this->interval.end >= end || !text[this->interval.end])
              +
              8177 goto error;
              +
              8178 if (this->interval.end + 2 < end &&
              +
              8179 text[this->interval.end] == '-' &&
              +
              8180 text[this->interval.end + 1] == '-' &&
              +
              8181 text[this->interval.end + 2] == '>')
              +
              8182 {
              +
              8183 // <!--...-->
              +
              8184 this->type = html_sequence_t::comment;
              +
              8185 this->name.end = this->interval.end;
              +
              8186 this->attributes.clear();
              +
              8187 this->interval.start = start;
              +
              8188 this->interval.end = this->interval.end + 3;
              +
              8189 return true;
              +
              8190 }
              +
              8191 this->interval.end++;
              +
              8192 }
              +
              8193 }
              +
              8194 this->type = html_sequence_t::declaration;
              +
              8195 this->name.start = this->name.end = this->interval.end;
              +
              8196 }
              +
              8197 else if (text[this->interval.end] == '?') {
              +
              8198 // <?...
              +
              8199 this->name.start = ++this->interval.end;
              +
              8200 for (;;) {
              +
              8201 if (this->interval.end >= end || !text[this->interval.end])
              +
              8202 goto error;
              +
              8203 if (text[this->interval.end] == '>') {
              +
              8204 // <?...>
              +
              8205 this->type = html_sequence_t::instruction;
              +
              8206 this->name.end = this->interval.end;
              +
              8207 this->attributes.clear();
              +
              8208 this->interval.start = start;
              +
              8209 this->interval.end++;
              +
              8210 return true;
              +
              8211 }
              +
              8212 if (this->interval.end + 1 < end &&
              +
              8213 text[this->interval.end] == '?' &&
              +
              8214 text[this->interval.end + 1] == '>')
              +
              8215 {
              +
              8216 // <?...?>
              +
              8217 this->type = html_sequence_t::instruction;
              +
              8218 this->name.end = this->interval.end;
              +
              8219 this->attributes.clear();
              +
              8220 this->interval.start = start;
              +
              8221 this->interval.end = this->interval.end + 2;
              +
              8222 return true;
              +
              8223 }
              +
              8224 this->interval.end++;
              +
              8225 }
              +
              8226 }
              +
              8227 else if (this->m_ident.match(text, this->interval.end, end, flags)) {
              +
              8228 // <tag...
              +
              8229 this->type = html_sequence_t::element_start;
              +
              8230 this->name = this->m_ident.interval;
              +
              8231 this->interval.end = this->m_ident.interval.end;
              +
              8232 }
              +
              8233 else
              +
              8234 goto error;
              +
              8235
              +
              8236 // Skip whitespace.
              +
              8237 const auto& ctype = std::use_facet<std::ctype<T>>(m_locale);
              +
              8238 for (; this->interval.end < end && text[this->interval.end] && ctype.is(ctype.space, text[this->interval.end]); this->interval.end++);
              +
              8239
              +
              8240 this->attributes.clear();
              +
              8241 for (;;) {
              +
              8242 if (this->type == html_sequence_t::element_start &&
              +
              8243 this->interval.end + 1 < end &&
              +
              8244 text[this->interval.end] == '/' &&
              +
              8245 text[this->interval.end + 1] == '>')
              +
              8246 {
              +
              8247 // <tag .../>
              +
              8248 this->type = html_sequence_t::element;
              +
              8249 this->interval.end = this->interval.end + 2;
              +
              8250 break;
              +
              8251 }
              +
              8252 if (this->interval.end < end &&
              +
              8253 text[this->interval.end] == '>')
              +
              8254 {
              +
              8255 // <tag ...>
              +
              8256 this->interval.end++;
              +
              8257 break;
              +
              8258 }
              +
              8259 if (this->type == html_sequence_t::declaration &&
              +
              8260 this->interval.end + 1 < end &&
              +
              8261 text[this->interval.end] == '!' &&
              +
              8262 text[this->interval.end + 1] == '>')
              +
              8263 {
              +
              8264 // "<!...!>".
              +
              8265 this->interval.end = this->interval.end + 2;
              +
              8266 break;
              +
              8267 }
              +
              8268 if (this->type == html_sequence_t::declaration &&
              +
              8269 this->interval.end + 1 < end &&
              +
              8270 text[this->interval.end] == '-' &&
              +
              8271 text[this->interval.end + 1] == '-')
              +
              8272 {
              +
              8273 // "<! ... --...".
              +
              8274 this->interval.end = this->interval.end + 2;
              +
              8275 for (;;) {
              +
              8276 if (this->interval.end >= end || !text[this->interval.end])
              +
              8277 goto error;
              +
              8278 if (this->interval.end + 1 < end &&
              +
              8279 text[this->interval.end] == '-' &&
              +
              8280 text[this->interval.end + 1] == '-')
              +
              8281 {
              +
              8282 // "<! ... --...--".
              +
              8283 this->interval.end = this->interval.end + 2;
              +
              8284 break;
              +
              8285 }
              +
              8286 this->interval.end++;
              +
              8287 }
              +
              8288
              +
              8289 // Skip whitespace.
              +
              8290 for (; this->interval.end < end && text[this->interval.end] && ctype.is(ctype.space, text[this->interval.end]); this->interval.end++);
              +
              8291 continue;
              +
              8292 }
              +
              8293
              +
              8294 if (this->interval.end >= end || !text[this->interval.end])
              +
              8295 goto error;
              +
              8296
              +
              8297 // Attributes follow...
              +
              8298 html_attribute* a = nullptr;
              +
              8299 if (this->m_ident.match(text, this->interval.end, end, flags)) {
              +
              8300 this->attributes.push_back(std::move(html_attribute{ this->m_ident.interval }));
              +
              8301 a = &this->attributes.back();
              +
              8302 _Assume_(a);
              +
              8303 this->interval.end = this->m_ident.interval.end;
              +
              8304 }
              +
              8305 else {
              +
              8306 // What was that?! Skip.
              +
              8307 this->interval.end++;
              +
              8308 continue;
              +
              8309 }
              +
              8310
              +
              8311 // Skip whitespace.
              +
              8312 for (; this->interval.end < end && text[this->interval.end] && ctype.is(ctype.space, text[this->interval.end]); this->interval.end++);
              +
              8313
              +
              8314 if (this->interval.end < end && text[this->interval.end] == '=') {
              +
              8315 this->interval.end++;
              +
              8316
              +
              8317 // Skip whitespace.
              +
              8318 for (; this->interval.end < end && text[this->interval.end] && ctype.is(ctype.space, text[this->interval.end]); this->interval.end++);
              +
              8319
              +
              8320 if (this->m_value.match(text, this->interval.end, end, flags)) {
              +
              8321 // This attribute has value.
              +
              8322 a->value = this->m_value.content;
              +
              8323 this->interval.end = this->m_value.interval.end;
              +
              8324
              +
              8325 // Skip whitespace.
              +
              8326 for (; this->interval.end < end && text[this->interval.end] && ctype.is(ctype.space, text[this->interval.end]); this->interval.end++);
              +
              8327 }
              +
              8328 }
              +
              8329 else {
              +
              8330 // This attribute has no value.
              +
              8331 a->value.invalidate();
              +
              8332 }
              +
              8333 }
              +
              8334
              +
              8335 this->interval.start = start;
              +
              8336 return true;
              +
              8337
              +
              8338 error:
              +
              8339 this->type = html_sequence_t::unknown;
              +
              8340 this->name.invalidate();
              +
              8341 this->attributes.clear();
              +
              8342 this->interval.invalidate();
              +
              8343 return false;
              +
              8344 }
              +
              8345
              +
              8346 virtual void invalidate()
              +
              8347 {
              +
              8348 this->type = html_sequence_t::unknown;
              +
              8349 this->name.invalidate();
              +
              8350 this->attributes.clear();
              +
              8351 basic_parser::invalidate();
              +
              8352 }
              +
              8353
              +
              8354 public:
              +
              8355 html_sequence_t type;
              + +
              8357 std::vector<html_attribute> attributes;
              +
              8358
              +
              8359 protected:
              +
              8360 basic_html_ident<T> m_ident;
              +
              8361 basic_html_value<T> m_value;
              +
              8362 };
              +
              +
              8363
              + + +
              8366#ifdef _UNICODE
              +
              8367 using thtml_tag = whtml_tag;
              +
              8368#else
              +
              8369 using thtml_tag = html_tag;
              +
              8370#endif
              +
              8371
              +
              8375 template <class T>
              +
              + +
              8377 {
              +
              8378 public:
              +
              8379 virtual bool match(
              +
              8380 _In_reads_or_z_opt_(end) const T* text,
              +
              8381 _In_ size_t start = 0,
              +
              8382 _In_ size_t end = SIZE_MAX,
              +
              8383 _In_ int flags = match_multiline)
              +
              8384 {
              +
              8385 _Unreferenced_(flags);
              +
              8386 _Assume_(text || start + 2 >= end);
              +
              8387 if (start + 2 < end &&
              +
              8388 text[start] == '<' &&
              +
              8389 text[start + 1] == '!' &&
              +
              8390 text[start + 2] == '[')
              +
              8391 {
              +
              8392 this->interval.end = start + 3;
              +
              8393
              +
              8394 // Skip whitespace.
              +
              8395 const auto& ctype = std::use_facet<std::ctype<T>>(m_locale);
              +
              8396 for (; this->interval.end < end && text[this->interval.end] && ctype.is(ctype.space, text[this->interval.end]); this->interval.end++);
              +
              8397
              +
              8398 this->condition.start = this->condition.end = this->interval.end;
              +
              8399
              +
              8400 for (;;) {
              +
              8401 if (this->interval.end >= end || !text[this->interval.end])
              +
              8402 break;
              +
              8403 if (text[this->interval.end] == '[') {
              +
              8404 this->interval.start = start;
              +
              8405 this->interval.end++;
              +
              8406 return true;
              +
              8407 }
              +
              8408 if (ctype.is(ctype.space, text[this->interval.end]))
              +
              8409 this->interval.end++;
              +
              8410 else
              +
              8411 this->condition.end = ++this->interval.end;
              +
              8412 }
              +
              8413 }
              +
              8414
              +
              8415 this->condition.invalidate();
              +
              8416 this->interval.invalidate();
              +
              8417 return false;
              +
              8418 }
              +
              8419
              +
              8420 virtual void invalidate()
              +
              8421 {
              +
              8422 this->condition.invalidate();
              +
              8423 basic_parser::invalidate();
              +
              8424 }
              +
              8425
              +
              8426 public:
              +
              8427 stdex::interval<size_t> condition;
              +
              8428 };
              +
              +
              8429
              + + +
              8432#ifdef _UNICODE
              + +
              8434#else
              + +
              8436#endif
              +
              8437
              +
              8441 template <class T>
              +
              + +
              8443 {
              +
              8444 public:
              +
              8445 virtual bool match(
              +
              8446 _In_reads_or_z_opt_(end) const T* text,
              +
              8447 _In_ size_t start = 0,
              +
              8448 _In_ size_t end = SIZE_MAX,
              +
              8449 _In_ int flags = match_multiline)
              +
              8450 {
              +
              8451 _Unreferenced_(flags);
              +
              8452 _Assume_(text || start + 2 >= end);
              +
              8453 if (start + 2 < end &&
              +
              8454 text[start] == ']' &&
              +
              8455 text[start + 1] == ']' &&
              +
              8456 text[start + 2] == '>')
              +
              8457 {
              +
              8458 this->interval.start = start;
              +
              8459 this->interval.end = start + 3;
              +
              8460 return true;
              +
              8461 }
              +
              8462 this->interval.invalidate();
              +
              8463 return false;
              +
              8464 }
              +
              8465 };
              +
              +
              8466
              + + +
              8469#ifdef _UNICODE
              + +
              8471#else
              + +
              8473#endif
              +
              8474 }
              +
              8475}
              +
              8476
              +
              8477#undef ENUM_FLAG_OPERATOR
              +
              8478#undef ENUM_FLAGS
              +
              8479
              +
              8480#ifdef _MSC_VER
              +
              8481#pragma warning(pop)
              +
              8482#endif
              +
              Test for angle in d°mm'ss.dddd form.
              Definition parser.hpp:4398
              +
              Test for any code unit.
              Definition parser.hpp:224
              +
              Test for beginning of line.
              Definition parser.hpp:618
              +
              Test for any.
              Definition parser.hpp:1060
              +
              Test for chemical formula.
              Definition parser.hpp:5542
              +
              Test for Creditor Reference.
              Definition parser.hpp:4968
              +
              T reference[22]
              Normalized national reference number.
              Definition parser.hpp:5097
              +
              T check_digits[3]
              Two check digits.
              Definition parser.hpp:5096
              +
              bool is_valid
              Is reference valid per ISO 7064.
              Definition parser.hpp:5098
              +
              Legacy CSS comment end -->
              Definition parser.hpp:7551
              +
              Legacy CSS comment start <!--
              Definition parser.hpp:7513
              +
              CSS comment.
              Definition parser.hpp:7453
              +
              stdex::interval< size_t > content
              content position in source
              Definition parser.hpp:7497
              +
              CSS import directive.
              Definition parser.hpp:7766
              +
              stdex::interval< size_t > content
              content position in source
              Definition parser.hpp:7835
              +
              CSS string.
              Definition parser.hpp:7588
              +
              stdex::interval< size_t > content
              content position in source
              Definition parser.hpp:7639
              +
              URI in CSS.
              Definition parser.hpp:7655
              +
              stdex::interval< size_t > content
              content position in source
              Definition parser.hpp:7750
              +
              Test for any code unit from a given string of code units.
              Definition parser.hpp:723
              +
              Test for specific code unit.
              Definition parser.hpp:294
              +
              Test for date.
              Definition parser.hpp:4028
              +
              Test for valid DNS domain character.
              Definition parser.hpp:2809
              +
              bool allow_on_edge
              Is character allowed at the beginning or an end of a DNS domain?
              Definition parser.hpp:2847
              +
              Test for DNS domain/hostname.
              Definition parser.hpp:2909
              +
              bool m_allow_absolute
              May DNS names end with a dot (absolute name)?
              Definition parser.hpp:2973
              +
              Test for e-mail address.
              Definition parser.hpp:3797
              +
              Test for emoticon.
              Definition parser.hpp:3905
              +
              std::shared_ptr< basic_parser< T > > apex
              apex/eyebrows/halo (e.g. O, 0)
              Definition parser.hpp:3994
              +
              std::shared_ptr< basic_parser< T > > eyes
              eyes (e.g. :, ;, >, |, B)
              Definition parser.hpp:3995
              +
              std::shared_ptr< basic_set< T > > mouth
              mouth (e.g. ), ), (, (, |, P, D, p, d)
              Definition parser.hpp:3997
              +
              std::shared_ptr< basic_parser< T > > nose
              nose (e.g. -, o)
              Definition parser.hpp:3996
              +
              std::shared_ptr< basic_parser< T > > emoticon
              emoticon as a whole (e.g. 😀, 🤔, 😶)
              Definition parser.hpp:3993
              +
              Test for end of line.
              Definition parser.hpp:656
              +
              Test for fraction.
              Definition parser.hpp:1689
              +
              End of condition ...]]>
              Definition parser.hpp:8443
              +
              Start of condition <![condition[...
              Definition parser.hpp:8377
              +
              Contiguous sequence of characters representing name of element, attribute etc.
              Definition parser.hpp:7987
              +
              Tag.
              Definition parser.hpp:8139
              +
              std::vector< html_attribute > attributes
              tag attributes
              Definition parser.hpp:8357
              +
              html_sequence_t type
              tag type
              Definition parser.hpp:8355
              +
              stdex::interval< size_t > name
              tag name position in source
              Definition parser.hpp:8356
              +
              Optionally-quoted string representing value of an attribute.
              Definition parser.hpp:8034
              +
              stdex::interval< size_t > content
              content position in source
              Definition parser.hpp:8098
              +
              Test for International Bank Account Number.
              Definition parser.hpp:4674
              +
              T bban[31]
              Normalized Basic Bank Account Number.
              Definition parser.hpp:4945
              +
              T country[3]
              ISO 3166-1 alpha-2 country code.
              Definition parser.hpp:4943
              +
              T check_digits[3]
              Two check digits.
              Definition parser.hpp:4944
              +
              bool is_valid
              Is IBAN valid per ISO 7064.
              Definition parser.hpp:4946
              +
              Test for decimal integer.
              Definition parser.hpp:1298
              +
              Test for decimal integer possibly containing thousand separators.
              Definition parser.hpp:1383
              +
              bool has_separators
              Did integer have any separators?
              Definition parser.hpp:1443
              +
              size_t digit_count
              Total number of digits in integer.
              Definition parser.hpp:1442
              +
              Test for hexadecimal integer.
              Definition parser.hpp:1464
              +
              Base class for integer testing.
              Definition parser.hpp:1276
              +
              size_t value
              Calculated value of the numeral.
              Definition parser.hpp:1290
              +
              Test for IPv4 address.
              Definition parser.hpp:2349
              +
              stdex::interval< size_t > components[4]
              Individual component intervals.
              Definition parser.hpp:2464
              +
              struct in_addr value
              IPv4 address value.
              Definition parser.hpp:2465
              +
              Test for IPv6 address.
              Definition parser.hpp:2568
              +
              std::shared_ptr< basic_parser< T > > scope_id
              Scope ID (e.g. NIC index with link-local addresses)
              Definition parser.hpp:2772
              +
              stdex::interval< size_t > components[8]
              Individual component intervals.
              Definition parser.hpp:2770
              +
              struct in6_addr value
              IPv6 address value.
              Definition parser.hpp:2771
              +
              Test for valid IPv6 address scope ID character.
              Definition parser.hpp:2496
              +
              Test for repeating.
              Definition parser.hpp:913
              +
              bool m_greedy
              try to match as long sequence as possible
              Definition parser.hpp:952
              +
              std::shared_ptr< basic_parser< T > > m_el
              repeating element
              Definition parser.hpp:949
              +
              size_t m_min_iterations
              minimum number of iterations
              Definition parser.hpp:950
              +
              size_t m_max_iterations
              maximum number of iterations
              Definition parser.hpp:951
              +
              Test for JSON string.
              Definition parser.hpp:7300
              +
              MIME content type.
              Definition parser.hpp:7851
              +
              stdex::interval< size_t > base_type
              basic type position in source
              Definition parser.hpp:7969
              +
              stdex::interval< size_t > sub_type
              sub-type position in source
              Definition parser.hpp:7970
              +
              stdex::interval< size_t > charset
              charset position in source
              Definition parser.hpp:7971
              +
              Test for mixed numeral.
              Definition parser.hpp:1925
              +
              std::shared_ptr< basic_parser< T > > fraction
              fraction
              Definition parser.hpp:2031
              +
              std::shared_ptr< basic_parser< T > > special_sign
              Special sign (e.g. plus-minus '±')
              Definition parser.hpp:2029
              +
              std::shared_ptr< basic_parser< T > > negative_sign
              Negative sign.
              Definition parser.hpp:2028
              +
              std::shared_ptr< basic_parser< T > > positive_sign
              Positive sign.
              Definition parser.hpp:2027
              +
              std::shared_ptr< basic_parser< T > > integer
              Integer part.
              Definition parser.hpp:2030
              +
              Test for monetary numeral.
              Definition parser.hpp:2220
              +
              std::shared_ptr< basic_parser< T > > positive_sign
              Positive sign.
              Definition parser.hpp:2326
              +
              std::shared_ptr< basic_parser< T > > decimal_separator
              Decimal separator.
              Definition parser.hpp:2331
              +
              std::shared_ptr< basic_parser< T > > currency
              Currency part.
              Definition parser.hpp:2329
              +
              std::shared_ptr< basic_parser< T > > decimal
              Decimal part.
              Definition parser.hpp:2332
              +
              std::shared_ptr< basic_parser< T > > integer
              Integer part.
              Definition parser.hpp:2330
              +
              std::shared_ptr< basic_parser< T > > negative_sign
              Negative sign.
              Definition parser.hpp:2327
              +
              std::shared_ptr< basic_parser< T > > special_sign
              Special sign (e.g. plus-minus '±')
              Definition parser.hpp:2328
              +
              "No-op" match
              Definition parser.hpp:192
              Base template for all parsers.
              Definition parser.hpp:74
              -
              stdex::interval< size_t > interval
              Region of the last match.
              Definition parser.hpp:173
              -
              Test for permutation.
              Definition parser.hpp:1201
              -
              Test for phone number.
              Definition parser.hpp:4522
              -
              std::basic_string< T > value
              Normalized phone number.
              Definition parser.hpp:4648
              -
              Test for any punctuation code unit.
              Definition parser.hpp:467
              -
              Test for Roman numeral.
              Definition parser.hpp:1574
              -
              Test for scientific numeral.
              Definition parser.hpp:2052
              -
              std::shared_ptr< basic_parser< T > > special_sign
              Special sign (e.g. plus-minus '±')
              Definition parser.hpp:2196
              -
              std::shared_ptr< basic_parser< T > > exponent_symbol
              Exponent symbol (e.g. 'e')
              Definition parser.hpp:2200
              -
              std::shared_ptr< basic_parser< T > > positive_sign
              Positive sign.
              Definition parser.hpp:2194
              -
              std::shared_ptr< basic_parser< T > > negative_sign
              Negative sign.
              Definition parser.hpp:2195
              -
              double value
              Calculated value of the numeral.
              Definition parser.hpp:2204
              -
              std::shared_ptr< basic_parser< T > > negative_exp_sign
              Negative exponent sign (e.g. '-')
              Definition parser.hpp:2202
              -
              std::shared_ptr< basic_integer< T > > decimal
              Decimal part.
              Definition parser.hpp:2199
              -
              std::shared_ptr< basic_parser< T > > positive_exp_sign
              Positive exponent sign (e.g. '+')
              Definition parser.hpp:2201
              -
              std::shared_ptr< basic_integer< T > > exponent
              Exponent part.
              Definition parser.hpp:2203
              -
              std::shared_ptr< basic_parser< T > > decimal_separator
              Decimal separator.
              Definition parser.hpp:2198
              -
              std::shared_ptr< basic_integer< T > > integer
              Integer part.
              Definition parser.hpp:2197
              -
              Test for match score.
              Definition parser.hpp:1753
              -
              Test for sequence.
              Definition parser.hpp:1010
              -
              Definition parser.hpp:692
              -
              Test for SI Reference delimiter.
              Definition parser.hpp:5166
              -
              Test for SI Reference part.
              Definition parser.hpp:5121
              -
              Test for SI Reference.
              Definition parser.hpp:5204
              -
              basic_si_reference_part< T > part3
              Reference data part 3 (P3)
              Definition parser.hpp:5521
              -
              basic_si_reference_part< T > part1
              Reference data part 1 (P1)
              Definition parser.hpp:5519
              -
              bool is_valid
              Is reference valid.
              Definition parser.hpp:5522
              -
              T model[3]
              Reference model.
              Definition parser.hpp:5518
              -
              basic_si_reference_part< T > part2
              Reference data part 2 (P2)
              Definition parser.hpp:5520
              -
              Test for signed numeral.
              Definition parser.hpp:1840
              -
              std::shared_ptr< basic_parser< T > > special_sign
              Special sign (e.g. plus-minus '±')
              Definition parser.hpp:1908
              -
              std::shared_ptr< basic_parser< T > > negative_sign
              Negative sign.
              Definition parser.hpp:1907
              -
              std::shared_ptr< basic_parser< T > > positive_sign
              Positive sign.
              Definition parser.hpp:1906
              -
              std::shared_ptr< basic_parser< T > > number
              Number.
              Definition parser.hpp:1909
              -
              Test for any space code unit.
              Definition parser.hpp:388
              -
              Test for any space or punctuation code unit.
              Definition parser.hpp:541
              -
              Test for any string.
              Definition parser.hpp:1129
              -
              Test for given string.
              Definition parser.hpp:819
              -
              Test for time.
              Definition parser.hpp:4296
              -
              Test for valid URL password character.
              Definition parser.hpp:3092
              -
              Test for valid URL path character.
              Definition parser.hpp:3192
              -
              Test for URL path.
              Definition parser.hpp:3300
              -
              Test for valid URL username character.
              Definition parser.hpp:2993
              -
              Test for URL.
              Definition parser.hpp:3441
              -
              Test for HTTP agent.
              Definition parser.hpp:6828
              -
              Test for HTTP any type.
              Definition parser.hpp:5950
              -
              Test for HTTP asterisk.
              Definition parser.hpp:6592
              - - - - - -
              Test for HTTP header.
              Definition parser.hpp:7151
              -
              Test for HTTP language (RFC1766)
              Definition parser.hpp:6460
              -
              Test for HTTP line break (RFC2616: CRLF | LF)
              Definition parser.hpp:5624
              -
              Test for HTTP media range (RFC2616: media-range)
              Definition parser.hpp:5982
              -
              Test for HTTP media type (RFC2616: media-type)
              Definition parser.hpp:6037
              -
              Test for HTTP parameter (RFC2616: parameter)
              Definition parser.hpp:5895
              -
              http_token name
              Parameter name.
              Definition parser.hpp:5939
              -
              http_value value
              Parameter value.
              Definition parser.hpp:5940
              -
              Test for HTTP protocol.
              Definition parser.hpp:6904
              -
              uint16_t version
              HTTP protocol version: 0x100 = 1.0, 0x101 = 1.1...
              Definition parser.hpp:7006
              -
              Test for HTTP quoted string (RFC2616: quoted-string)
              Definition parser.hpp:5785
              -
              stdex::interval< size_t > content
              String content (without quotes)
              Definition parser.hpp:5841
              -
              Test for HTTP request.
              Definition parser.hpp:7013
              -
              Test for HTTP space (RFC2616: LWS)
              Definition parser.hpp:5660
              -
              Test for HTTP text character (RFC2616: TEXT)
              Definition parser.hpp:5697
              -
              Test for HTTP token (RFC2616: token - tolerates non-ASCII)
              Definition parser.hpp:5731
              -
              Test for HTTP URL parameter.
              Definition parser.hpp:6277
              -
              Test for HTTP URL path segment.
              Definition parser.hpp:6188
              -
              Test for HTTP URL path segment.
              Definition parser.hpp:6221
              -
              std::vector< http_url_path_segment > segments
              Path segments.
              Definition parser.hpp:6270
              -
              Test for HTTP URL port.
              Definition parser.hpp:6132
              -
              Test for HTTP URL server.
              Definition parser.hpp:6095
              -
              Test for HTTP URL.
              Definition parser.hpp:6358
              -
              Collection of HTTP values.
              Definition parser.hpp:7261
              -
              Test for HTTP value (RFC2616: value)
              Definition parser.hpp:5851
              -
              http_quoted_string string
              Value when matched as quoted string.
              Definition parser.hpp:5887
              -
              http_token token
              Value when matched as token.
              Definition parser.hpp:5888
              -
              Test for HTTP weight factor.
              Definition parser.hpp:6523
              -
              float value
              Calculated value of the weight factor.
              Definition parser.hpp:6585
              -
              Test for HTTP weighted value.
              Definition parser.hpp:6615
              -
              Base template for collection-holding parsers.
              Definition parser.hpp:970
              -
              Test for any SGML code point.
              Definition parser.hpp:257
              -
              Test for any SGML code point from a given string of SGML code points.
              Definition parser.hpp:776
              -
              Test for specific SGML code point.
              Definition parser.hpp:344
              -
              Test for valid DNS domain SGML character.
              Definition parser.hpp:2866
              -
              Test for valid IPv6 address scope ID SGML character.
              Definition parser.hpp:2535
              -
              Test for any SGML punctuation code point.
              Definition parser.hpp:508
              -
              Test for any SGML space code point.
              Definition parser.hpp:431
              -
              Test for any SGML space or punctuation code point.
              Definition parser.hpp:584
              -
              Test for SGML given string.
              Definition parser.hpp:866
              -
              Test for valid URL password SGML character.
              Definition parser.hpp:3144
              -
              Test for valid URL path SGML character.
              Definition parser.hpp:3248
              -
              Test for valid URL username SGML character.
              Definition parser.hpp:3044
              +
              stdex::interval< size_t > interval
              Region of the last match.
              Definition parser.hpp:172
              +
              Test for permutation.
              Definition parser.hpp:1200
              +
              Test for phone number.
              Definition parser.hpp:4521
              +
              std::basic_string< T > value
              Normalized phone number.
              Definition parser.hpp:4647
              +
              Test for any punctuation code unit.
              Definition parser.hpp:466
              +
              Test for Roman numeral.
              Definition parser.hpp:1573
              +
              Test for scientific numeral.
              Definition parser.hpp:2051
              +
              std::shared_ptr< basic_parser< T > > special_sign
              Special sign (e.g. plus-minus '±')
              Definition parser.hpp:2195
              +
              std::shared_ptr< basic_parser< T > > exponent_symbol
              Exponent symbol (e.g. 'e')
              Definition parser.hpp:2199
              +
              std::shared_ptr< basic_parser< T > > positive_sign
              Positive sign.
              Definition parser.hpp:2193
              +
              std::shared_ptr< basic_parser< T > > negative_sign
              Negative sign.
              Definition parser.hpp:2194
              +
              double value
              Calculated value of the numeral.
              Definition parser.hpp:2203
              +
              std::shared_ptr< basic_parser< T > > negative_exp_sign
              Negative exponent sign (e.g. '-')
              Definition parser.hpp:2201
              +
              std::shared_ptr< basic_integer< T > > decimal
              Decimal part.
              Definition parser.hpp:2198
              +
              std::shared_ptr< basic_parser< T > > positive_exp_sign
              Positive exponent sign (e.g. '+')
              Definition parser.hpp:2200
              +
              std::shared_ptr< basic_integer< T > > exponent
              Exponent part.
              Definition parser.hpp:2202
              +
              std::shared_ptr< basic_parser< T > > decimal_separator
              Decimal separator.
              Definition parser.hpp:2197
              +
              std::shared_ptr< basic_integer< T > > integer
              Integer part.
              Definition parser.hpp:2196
              +
              Test for match score.
              Definition parser.hpp:1752
              +
              Test for sequence.
              Definition parser.hpp:1009
              +
              Definition parser.hpp:691
              +
              Test for SI Reference delimiter.
              Definition parser.hpp:5165
              +
              Test for SI Reference part.
              Definition parser.hpp:5120
              +
              Test for SI Reference.
              Definition parser.hpp:5203
              +
              basic_si_reference_part< T > part3
              Reference data part 3 (P3)
              Definition parser.hpp:5520
              +
              basic_si_reference_part< T > part1
              Reference data part 1 (P1)
              Definition parser.hpp:5518
              +
              bool is_valid
              Is reference valid.
              Definition parser.hpp:5521
              +
              T model[3]
              Reference model.
              Definition parser.hpp:5517
              +
              basic_si_reference_part< T > part2
              Reference data part 2 (P2)
              Definition parser.hpp:5519
              +
              Test for signed numeral.
              Definition parser.hpp:1839
              +
              std::shared_ptr< basic_parser< T > > special_sign
              Special sign (e.g. plus-minus '±')
              Definition parser.hpp:1907
              +
              std::shared_ptr< basic_parser< T > > negative_sign
              Negative sign.
              Definition parser.hpp:1906
              +
              std::shared_ptr< basic_parser< T > > positive_sign
              Positive sign.
              Definition parser.hpp:1905
              +
              std::shared_ptr< basic_parser< T > > number
              Number.
              Definition parser.hpp:1908
              +
              Test for any space code unit.
              Definition parser.hpp:387
              +
              Test for any space or punctuation code unit.
              Definition parser.hpp:540
              +
              Test for any string.
              Definition parser.hpp:1128
              +
              Test for given string.
              Definition parser.hpp:818
              +
              Test for time.
              Definition parser.hpp:4295
              +
              Test for valid URL password character.
              Definition parser.hpp:3091
              +
              Test for valid URL path character.
              Definition parser.hpp:3191
              +
              Test for URL path.
              Definition parser.hpp:3299
              +
              Test for valid URL username character.
              Definition parser.hpp:2992
              +
              Test for URL.
              Definition parser.hpp:3440
              +
              Test for HTTP agent.
              Definition parser.hpp:6827
              +
              Test for HTTP any type.
              Definition parser.hpp:5949
              +
              Test for HTTP asterisk.
              Definition parser.hpp:6591
              + + + + + +
              Test for HTTP header.
              Definition parser.hpp:7147
              +
              Test for HTTP language (RFC1766)
              Definition parser.hpp:6459
              +
              Test for HTTP line break (RFC2616: CRLF | LF)
              Definition parser.hpp:5623
              +
              Test for HTTP media range (RFC2616: media-range)
              Definition parser.hpp:5981
              +
              Test for HTTP media type (RFC2616: media-type)
              Definition parser.hpp:6036
              +
              Test for HTTP parameter (RFC2616: parameter)
              Definition parser.hpp:5894
              +
              http_token name
              Parameter name.
              Definition parser.hpp:5938
              +
              http_value value
              Parameter value.
              Definition parser.hpp:5939
              +
              Test for HTTP protocol.
              Definition parser.hpp:6902
              +
              uint16_t version
              HTTP protocol version: 0x100 = 1.0, 0x101 = 1.1...
              Definition parser.hpp:7003
              +
              Test for HTTP quoted string (RFC2616: quoted-string)
              Definition parser.hpp:5784
              +
              stdex::interval< size_t > content
              String content (without quotes)
              Definition parser.hpp:5840
              +
              Test for HTTP request.
              Definition parser.hpp:7010
              +
              Test for HTTP space (RFC2616: LWS)
              Definition parser.hpp:5659
              +
              Test for HTTP text character (RFC2616: TEXT)
              Definition parser.hpp:5696
              +
              Test for HTTP token (RFC2616: token - tolerates non-ASCII)
              Definition parser.hpp:5730
              +
              Test for HTTP URL parameter.
              Definition parser.hpp:6276
              +
              Test for HTTP URL path segment.
              Definition parser.hpp:6187
              +
              Test for HTTP URL path segment.
              Definition parser.hpp:6220
              +
              std::vector< http_url_path_segment > segments
              Path segments.
              Definition parser.hpp:6269
              +
              Test for HTTP URL port.
              Definition parser.hpp:6131
              +
              Test for HTTP URL server.
              Definition parser.hpp:6094
              +
              Test for HTTP URL.
              Definition parser.hpp:6357
              +
              Collection of HTTP values.
              Definition parser.hpp:7256
              +
              Test for HTTP value (RFC2616: value)
              Definition parser.hpp:5850
              +
              http_quoted_string string
              Value when matched as quoted string.
              Definition parser.hpp:5886
              +
              http_token token
              Value when matched as token.
              Definition parser.hpp:5887
              +
              Test for HTTP weight factor.
              Definition parser.hpp:6522
              +
              float value
              Calculated value of the weight factor.
              Definition parser.hpp:6584
              +
              Test for HTTP weighted value.
              Definition parser.hpp:6614
              +
              Base template for collection-holding parsers.
              Definition parser.hpp:969
              +
              Test for any SGML code point.
              Definition parser.hpp:256
              +
              Test for any SGML code point from a given string of SGML code points.
              Definition parser.hpp:775
              +
              Test for specific SGML code point.
              Definition parser.hpp:343
              +
              Test for valid DNS domain SGML character.
              Definition parser.hpp:2865
              +
              Test for valid IPv6 address scope ID SGML character.
              Definition parser.hpp:2534
              +
              Test for any SGML punctuation code point.
              Definition parser.hpp:507
              +
              Test for any SGML space code point.
              Definition parser.hpp:430
              +
              Test for any SGML space or punctuation code point.
              Definition parser.hpp:583
              +
              Test for SGML given string.
              Definition parser.hpp:865
              +
              Test for valid URL password SGML character.
              Definition parser.hpp:3143
              +
              Test for valid URL path SGML character.
              Definition parser.hpp:3247
              +
              Test for valid URL username SGML character.
              Definition parser.hpp:3043
              Numerical interval.
              Definition interval.hpp:18
              T size() const
              Returns interval size.
              Definition interval.hpp:47
              T end
              interval end
              Definition interval.hpp:20
              interval() noexcept
              Constructs an invalid interval.
              Definition interval.hpp:25
              +
              void invalidate()
              Invalidates interval.
              Definition interval.hpp:59
              T start
              interval start
              Definition interval.hpp:19
              -
              Definition parser.hpp:7287
              +
              Tag attribute.
              Definition parser.hpp:8129
              +
              stdex::interval< size_t > name
              attribute name position in source
              Definition parser.hpp:8130
              +
              stdex::interval< size_t > value
              attribute value position in source
              Definition parser.hpp:8131
              +
              Definition parser.hpp:7282
              diff --git a/pch_8hpp_source.html b/pch_8hpp_source.html index 0d00b497e..7babf0585 100644 --- a/pch_8hpp_source.html +++ b/pch_8hpp_source.html @@ -94,36 +94,37 @@ $(document).ready(function() { init_codefold(0); });
              10#include <stdex/exception.hpp>
              11#include <stdex/hash.hpp>
              12#include <stdex/hex.hpp>
              -
              13#include <stdex/idrec.hpp>
              -
              14#include <stdex/interval.hpp>
              -
              15#include <stdex/locale.hpp>
              -
              16#include <stdex/mapping.hpp>
              -
              17#include <stdex/math.hpp>
              -
              18#include <stdex/parser.hpp>
              -
              19#include <stdex/pool.hpp>
              -
              20#include <stdex/progress.hpp>
              -
              21#include <stdex/ring.hpp>
              -
              22#include <stdex/sgml.hpp>
              -
              23#include <stdex/socket.hpp>
              -
              24#include <stdex/spinlock.hpp>
              -
              25#include <stdex/stream.hpp>
              -
              26#include <stdex/string.hpp>
              -
              27#include <stdex/sys_info.hpp>
              -
              28#include <stdex/system.hpp>
              -
              29#include <stdex/unicode.hpp>
              -
              30#include <stdex/vector_queue.hpp>
              -
              31#include <stdex/watchdog.hpp>
              -
              32
              -
              33#include "compat.hpp"
              -
              34
              -
              35#include <cstdlib>
              -
              36#include <filesystem>
              -
              37#include <list>
              -
              38#include <thread>
              +
              13#include <stdex/html.hpp>
              +
              14#include <stdex/idrec.hpp>
              +
              15#include <stdex/interval.hpp>
              +
              16#include <stdex/locale.hpp>
              +
              17#include <stdex/mapping.hpp>
              +
              18#include <stdex/math.hpp>
              +
              19#include <stdex/parser.hpp>
              +
              20#include <stdex/pool.hpp>
              +
              21#include <stdex/progress.hpp>
              +
              22#include <stdex/ring.hpp>
              +
              23#include <stdex/sgml.hpp>
              +
              24#include <stdex/socket.hpp>
              +
              25#include <stdex/spinlock.hpp>
              +
              26#include <stdex/stream.hpp>
              +
              27#include <stdex/string.hpp>
              +
              28#include <stdex/sys_info.hpp>
              +
              29#include <stdex/system.hpp>
              +
              30#include <stdex/unicode.hpp>
              +
              31#include <stdex/vector_queue.hpp>
              +
              32#include <stdex/watchdog.hpp>
              +
              33
              +
              34#include "compat.hpp"
              +
              35
              +
              36#include <cstdlib>
              +
              37#include <filesystem>
              +
              38#include <list>
              +
              39#include <thread>
              diff --git a/pool_8hpp_source.html b/pool_8hpp_source.html index 73bef915d..b9376c11d 100644 --- a/pool_8hpp_source.html +++ b/pool_8hpp_source.html @@ -170,7 +170,7 @@ $(document).ready(function() { init_codefold(0); });
              diff --git a/progress_8hpp_source.html b/progress_8hpp_source.html index 2fe7825cf..c45d4934b 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 281bcbf8f..dec85285a 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 7b5d77a3d..98e59085e 100644 --- a/ring_8hpp_source.html +++ b/ring_8hpp_source.html @@ -223,7 +223,7 @@ $(document).ready(function() { init_codefold(0); });
              diff --git a/search/all_0.js b/search/all_0.js index 8a2c17b76..64a643561 100644 --- a/search/all_0.js +++ b/search/all_0.js @@ -1,15 +1,24 @@ var searchData= [ ['abs_0',['abs',['../classstdex_1_1vector__queue.html#ae31dd1a45546dc1ff91eaa82b97c0e1b',1,'stdex::vector_queue']]], - ['admin_1',['admin',['../structstdex_1_1sys__info__t.html#a31d755b61ee96cc3f1174a7c6cbd509c',1,'stdex::sys_info_t']]], - ['allow_5fon_5fedge_2',['allow_on_edge',['../classstdex_1_1parser_1_1basic__dns__domain__char.html#a3307235d495a97c98f9efd1464e8a8a7',1,'stdex::parser::basic_dns_domain_char']]], - ['aosn_5fdate_3',['aosn_date',['../structstdex_1_1chrono_1_1aosn__date.html',1,'stdex::chrono']]], - ['aosn_5ftimestamp_4',['aosn_timestamp',['../structstdex_1_1chrono_1_1aosn__timestamp.html',1,'stdex::chrono']]], - ['apex_5',['apex',['../classstdex_1_1parser_1_1basic__emoticon.html#a1b6b7a024dea373b890c1c4516f5e9a4',1,'stdex::parser::basic_emoticon']]], - ['async_5freader_6',['async_reader',['../classstdex_1_1stream_1_1async__reader.html',1,'stdex::stream']]], - ['async_5fwriter_7',['async_writer',['../classstdex_1_1stream_1_1async__writer.html',1,'stdex::stream']]], - ['at_8',['at',['../classstdex_1_1vector__queue.html#ae135f77af0deabaa5f2cfe5ca25b9f09',1,'stdex::vector_queue::at(size_type pos)'],['../classstdex_1_1vector__queue.html#ac2b559184798a59ee5fed26f27d92e3c',1,'stdex::vector_queue::at(size_type pos) const']]], - ['at_5fabs_9',['at_abs',['../classstdex_1_1vector__queue.html#a881da485c13dcee1d35245570420877a',1,'stdex::vector_queue::at_abs(size_type pos)'],['../classstdex_1_1vector__queue.html#afee762c3280d33544ce8dd8ad20af40b',1,'stdex::vector_queue::at_abs(size_type pos) const']]], - ['atime_10',['atime',['../classstdex_1_1stream_1_1basic__file.html#a84936e230100934793aad8a516efa826',1,'stdex::stream::basic_file::atime()'],['../classstdex_1_1stream_1_1cache.html#a5fd8962b5a49d549a36d96f3e8919cd7',1,'stdex::stream::cache::atime()'],['../classstdex_1_1stream_1_1file.html#a4b5cdfe6c9dccd20726df867e34f4af3',1,'stdex::stream::file::atime()']]], - ['attach_11',['attach',['../classstdex_1_1global__progress.html#aec91532fde2500a5458a397f91c88769',1,'stdex::global_progress']]] + ['active_5felement_1',['active_element',['../classstdex_1_1html_1_1document.html#ac8d974ade6e33245a9354b0fa0c2a762',1,'stdex::html::document']]], + ['active_5ftokens_2',['active_tokens',['../structstdex_1_1html_1_1inserted__token.html#ab1c682b7bd0b4d6b0d0d316af20a4fc9',1,'stdex::html::inserted_token']]], + ['admin_3',['admin',['../structstdex_1_1sys__info__t.html#a31d755b61ee96cc3f1174a7c6cbd509c',1,'stdex::sys_info_t']]], + ['after_5fword_4',['after_word',['../structstdex_1_1html_1_1inserted__token.html#a741265f0cf369113853daae0f01cf775',1,'stdex::html::inserted_token']]], + ['allow_5fon_5fedge_5',['allow_on_edge',['../classstdex_1_1parser_1_1basic__dns__domain__char.html#a3307235d495a97c98f9efd1464e8a8a7',1,'stdex::parser::basic_dns_domain_char']]], + ['aosn_5fdate_6',['aosn_date',['../structstdex_1_1chrono_1_1aosn__date.html',1,'stdex::chrono']]], + ['aosn_5ftimestamp_7',['aosn_timestamp',['../structstdex_1_1chrono_1_1aosn__timestamp.html',1,'stdex::chrono']]], + ['apex_8',['apex',['../classstdex_1_1parser_1_1basic__emoticon.html#a1b6b7a024dea373b890c1c4516f5e9a4',1,'stdex::parser::basic_emoticon']]], + ['append_9',['append',['../classstdex_1_1html_1_1document.html#a79585dbbf1916073dfa9ce8343f3137b',1,'stdex::html::document']]], + ['append_5finserted_5ftokens_10',['append_inserted_tokens',['../classstdex_1_1html_1_1parser.html#aee0d308698b67b5abb21442f14bd19d3',1,'stdex::html::parser']]], + ['append_5ftag_11',['append_tag',['../classstdex_1_1html_1_1token.html#ae0dd3526834ebda56c0e0cc4639f979e',1,'stdex::html::token::append_tag(std::basic_string< wchar_t, _Traits, _Alloc > &str) const'],['../classstdex_1_1html_1_1token.html#a6f486618bd17716e68e8c51aeb8b39e0',1,'stdex::html::token::append_tag(std::basic_string< char, _Traits, _Alloc > &str) const']]], + ['append_5ftoken_12',['append_token',['../classstdex_1_1html_1_1parser.html#aeb7c3071e98511d3215c4fa8c643d1f6',1,'stdex::html::parser::append_token(std::unique_ptr< T > &&token)'],['../classstdex_1_1html_1_1parser.html#a6fe16b4065b1ce300443794aa6d49044',1,'stdex::html::parser::append_token(std::unique_ptr< T > &&token, std::basic_string< _Elem, _Traits, _Alloc > &source)']]], + ['assign_13',['assign',['../classstdex_1_1html_1_1document.html#a85458aea6b21a1154c20e5d6183aa285',1,'stdex::html::document']]], + ['async_5freader_14',['async_reader',['../classstdex_1_1stream_1_1async__reader.html',1,'stdex::stream']]], + ['async_5fwriter_15',['async_writer',['../classstdex_1_1stream_1_1async__writer.html',1,'stdex::stream']]], + ['at_16',['at',['../classstdex_1_1vector__queue.html#ae135f77af0deabaa5f2cfe5ca25b9f09',1,'stdex::vector_queue::at(size_type pos)'],['../classstdex_1_1vector__queue.html#ac2b559184798a59ee5fed26f27d92e3c',1,'stdex::vector_queue::at(size_type pos) const']]], + ['at_5fabs_17',['at_abs',['../classstdex_1_1vector__queue.html#a881da485c13dcee1d35245570420877a',1,'stdex::vector_queue::at_abs(size_type pos)'],['../classstdex_1_1vector__queue.html#afee762c3280d33544ce8dd8ad20af40b',1,'stdex::vector_queue::at_abs(size_type pos) const']]], + ['atime_18',['atime',['../classstdex_1_1stream_1_1basic__file.html#a84936e230100934793aad8a516efa826',1,'stdex::stream::basic_file::atime()'],['../classstdex_1_1stream_1_1cache.html#a5fd8962b5a49d549a36d96f3e8919cd7',1,'stdex::stream::cache::atime()'],['../classstdex_1_1stream_1_1file.html#a4b5cdfe6c9dccd20726df867e34f4af3',1,'stdex::stream::file::atime()']]], + ['attach_19',['attach',['../classstdex_1_1global__progress.html#aec91532fde2500a5458a397f91c88769',1,'stdex::global_progress']]], + ['attributes_20',['attributes',['../classstdex_1_1html_1_1element.html#a7c087846ffc38135f3ff7665aec32364',1,'stdex::html::element::attributes'],['../classstdex_1_1html_1_1declaration.html#a46a0e7db45a103885963629b5b7cba04',1,'stdex::html::declaration::attributes'],['../classstdex_1_1parser_1_1basic__html__tag.html#a02dfb47e560d0b0243b73d09851c4412',1,'stdex::parser::basic_html_tag::attributes']]] ]; diff --git a/search/all_1.js b/search/all_1.js index 11a47cd72..31e8c4b8b 100644 --- a/search/all_1.js +++ b/search/all_1.js @@ -5,80 +5,106 @@ var searchData= ['base64_5fenc_2',['base64_enc',['../classstdex_1_1base64__enc.html',1,'stdex::base64_enc'],['../classstdex_1_1base64__enc.html#abc6c72530634c3fea8168710ab5b1a28',1,'stdex::base64_enc::base64_enc()']]], ['base64_5freader_3',['base64_reader',['../classstdex_1_1base64__reader.html',1,'stdex']]], ['base64_5fwriter_4',['base64_writer',['../classstdex_1_1base64__writer.html',1,'stdex']]], - ['basic_5',['basic',['../classstdex_1_1stream_1_1basic.html',1,'stdex::stream']]], - ['basic_5fangle_6',['basic_angle',['../classstdex_1_1parser_1_1basic__angle.html',1,'stdex::parser']]], - ['basic_5fany_5fcu_7',['basic_any_cu',['../classstdex_1_1parser_1_1basic__any__cu.html',1,'stdex::parser']]], - ['basic_5fany_5fcu_3c_20char_20_3e_8',['basic_any_cu< char >',['../classstdex_1_1parser_1_1basic__any__cu.html',1,'stdex::parser']]], - ['basic_5fbol_9',['basic_bol',['../classstdex_1_1parser_1_1basic__bol.html',1,'stdex::parser']]], - ['basic_5fbranch_10',['basic_branch',['../classstdex_1_1parser_1_1basic__branch.html',1,'stdex::parser']]], - ['basic_5fchemical_5fformula_11',['basic_chemical_formula',['../classstdex_1_1parser_1_1basic__chemical__formula.html',1,'stdex::parser']]], - ['basic_5fcreditor_5freference_12',['basic_creditor_reference',['../classstdex_1_1parser_1_1basic__creditor__reference.html',1,'stdex::parser']]], - ['basic_5fcu_13',['basic_cu',['../classstdex_1_1parser_1_1basic__cu.html',1,'stdex::parser']]], - ['basic_5fcu_5fset_14',['basic_cu_set',['../classstdex_1_1parser_1_1basic__cu__set.html',1,'stdex::parser']]], - ['basic_5fdate_15',['basic_date',['../classstdex_1_1parser_1_1basic__date.html',1,'stdex::parser']]], - ['basic_5fdns_5fdomain_5fchar_16',['basic_dns_domain_char',['../classstdex_1_1parser_1_1basic__dns__domain__char.html',1,'stdex::parser']]], - ['basic_5fdns_5fdomain_5fchar_3c_20char_20_3e_17',['basic_dns_domain_char< char >',['../classstdex_1_1parser_1_1basic__dns__domain__char.html',1,'stdex::parser']]], - ['basic_5fdns_5fname_18',['basic_dns_name',['../classstdex_1_1parser_1_1basic__dns__name.html',1,'stdex::parser']]], - ['basic_5femail_5faddress_19',['basic_email_address',['../classstdex_1_1parser_1_1basic__email__address.html',1,'stdex::parser']]], - ['basic_5femoticon_20',['basic_emoticon',['../classstdex_1_1parser_1_1basic__emoticon.html',1,'stdex::parser']]], - ['basic_5feol_21',['basic_eol',['../classstdex_1_1parser_1_1basic__eol.html',1,'stdex::parser']]], - ['basic_5ffile_22',['basic_file',['../classstdex_1_1stream_1_1basic__file.html',1,'stdex::stream']]], - ['basic_5ffraction_23',['basic_fraction',['../classstdex_1_1parser_1_1basic__fraction.html',1,'stdex::parser']]], - ['basic_5fhash_24',['basic_hash',['../classstdex_1_1basic__hash.html',1,'stdex']]], - ['basic_5fhash_3c_20crc32_5ft_20_3e_25',['basic_hash< crc32_t >',['../classstdex_1_1basic__hash.html',1,'stdex']]], - ['basic_5fhash_3c_20md5_5ft_20_3e_26',['basic_hash< md5_t >',['../classstdex_1_1basic__hash.html',1,'stdex']]], - ['basic_5fhash_3c_20sha1_5ft_20_3e_27',['basic_hash< sha1_t >',['../classstdex_1_1basic__hash.html',1,'stdex']]], - ['basic_5fiban_28',['basic_iban',['../classstdex_1_1parser_1_1basic__iban.html',1,'stdex::parser']]], - ['basic_5finteger_29',['basic_integer',['../classstdex_1_1parser_1_1basic__integer.html',1,'stdex::parser']]], - ['basic_5finteger10_30',['basic_integer10',['../classstdex_1_1parser_1_1basic__integer10.html',1,'stdex::parser']]], - ['basic_5finteger10ts_31',['basic_integer10ts',['../classstdex_1_1parser_1_1basic__integer10ts.html',1,'stdex::parser']]], - ['basic_5finteger16_32',['basic_integer16',['../classstdex_1_1parser_1_1basic__integer16.html',1,'stdex::parser']]], - ['basic_5fipv4_5faddress_33',['basic_ipv4_address',['../classstdex_1_1parser_1_1basic__ipv4__address.html',1,'stdex::parser']]], - ['basic_5fipv6_5faddress_34',['basic_ipv6_address',['../classstdex_1_1parser_1_1basic__ipv6__address.html',1,'stdex::parser']]], - ['basic_5fipv6_5fscope_5fid_5fchar_35',['basic_ipv6_scope_id_char',['../classstdex_1_1parser_1_1basic__ipv6__scope__id__char.html',1,'stdex::parser']]], - ['basic_5fiterations_36',['basic_iterations',['../classstdex_1_1parser_1_1basic__iterations.html',1,'stdex::parser']]], - ['basic_5fjson_5fstring_37',['basic_json_string',['../classstdex_1_1parser_1_1basic__json__string.html',1,'stdex::parser']]], - ['basic_5fmixed_5fnumeral_38',['basic_mixed_numeral',['../classstdex_1_1parser_1_1basic__mixed__numeral.html',1,'stdex::parser']]], - ['basic_5fmonetary_5fnumeral_39',['basic_monetary_numeral',['../classstdex_1_1parser_1_1basic__monetary__numeral.html',1,'stdex::parser']]], - ['basic_5fnoop_40',['basic_noop',['../classstdex_1_1parser_1_1basic__noop.html',1,'stdex::parser']]], - ['basic_5fparser_41',['basic_parser',['../classstdex_1_1parser_1_1basic__parser.html',1,'stdex::parser']]], - ['basic_5fparser_3c_20char_20_3e_42',['basic_parser< char >',['../classstdex_1_1parser_1_1basic__parser.html',1,'stdex::parser']]], - ['basic_5fpermutation_43',['basic_permutation',['../classstdex_1_1parser_1_1basic__permutation.html',1,'stdex::parser']]], - ['basic_5fphone_5fnumber_44',['basic_phone_number',['../classstdex_1_1parser_1_1basic__phone__number.html',1,'stdex::parser']]], - ['basic_5fpunct_5fcu_45',['basic_punct_cu',['../classstdex_1_1parser_1_1basic__punct__cu.html',1,'stdex::parser']]], - ['basic_5fpunct_5fcu_3c_20char_20_3e_46',['basic_punct_cu< char >',['../classstdex_1_1parser_1_1basic__punct__cu.html',1,'stdex::parser']]], - ['basic_5froman_5fnumeral_47',['basic_roman_numeral',['../classstdex_1_1parser_1_1basic__roman__numeral.html',1,'stdex::parser']]], - ['basic_5fscientific_5fnumeral_48',['basic_scientific_numeral',['../classstdex_1_1parser_1_1basic__scientific__numeral.html',1,'stdex::parser']]], - ['basic_5fscore_49',['basic_score',['../classstdex_1_1parser_1_1basic__score.html',1,'stdex::parser']]], - ['basic_5fsequence_50',['basic_sequence',['../classstdex_1_1parser_1_1basic__sequence.html',1,'stdex::parser']]], - ['basic_5fset_51',['basic_set',['../classstdex_1_1parser_1_1basic__set.html',1,'stdex::parser']]], - ['basic_5fset_3c_20char_20_3e_52',['basic_set< char >',['../classstdex_1_1parser_1_1basic__set.html',1,'stdex::parser']]], - ['basic_5fsi_5freference_53',['basic_si_reference',['../classstdex_1_1parser_1_1basic__si__reference.html',1,'stdex::parser']]], - ['basic_5fsi_5freference_5fdelimiter_54',['basic_si_reference_delimiter',['../classstdex_1_1parser_1_1basic__si__reference__delimiter.html',1,'stdex::parser']]], - ['basic_5fsi_5freference_5fpart_55',['basic_si_reference_part',['../classstdex_1_1parser_1_1basic__si__reference__part.html',1,'stdex::parser']]], - ['basic_5fsigned_5fnumeral_56',['basic_signed_numeral',['../classstdex_1_1parser_1_1basic__signed__numeral.html',1,'stdex::parser']]], - ['basic_5fspace_5fcu_57',['basic_space_cu',['../classstdex_1_1parser_1_1basic__space__cu.html',1,'stdex::parser']]], - ['basic_5fspace_5fcu_3c_20char_20_3e_58',['basic_space_cu< char >',['../classstdex_1_1parser_1_1basic__space__cu.html',1,'stdex::parser']]], - ['basic_5fspace_5for_5fpunct_5fcu_59',['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_60',['basic_space_or_punct_cu< char >',['../classstdex_1_1parser_1_1basic__space__or__punct__cu.html',1,'stdex::parser']]], - ['basic_5fstring_61',['basic_string',['../classstdex_1_1parser_1_1basic__string.html',1,'stdex::parser']]], - ['basic_5fstring_5fbranch_62',['basic_string_branch',['../classstdex_1_1parser_1_1basic__string__branch.html',1,'stdex::parser']]], - ['basic_5fsys_63',['basic_sys',['../classstdex_1_1stream_1_1basic__sys.html',1,'stdex::stream']]], - ['basic_5ftime_64',['basic_time',['../classstdex_1_1parser_1_1basic__time.html',1,'stdex::parser']]], - ['basic_5furl_65',['basic_url',['../classstdex_1_1parser_1_1basic__url.html',1,'stdex::parser']]], - ['basic_5furl_5fpassword_5fchar_66',['basic_url_password_char',['../classstdex_1_1parser_1_1basic__url__password__char.html',1,'stdex::parser']]], - ['basic_5furl_5fpassword_5fchar_3c_20char_20_3e_67',['basic_url_password_char< char >',['../classstdex_1_1parser_1_1basic__url__password__char.html',1,'stdex::parser']]], - ['basic_5furl_5fpath_68',['basic_url_path',['../classstdex_1_1parser_1_1basic__url__path.html',1,'stdex::parser']]], - ['basic_5furl_5fpath_5fchar_69',['basic_url_path_char',['../classstdex_1_1parser_1_1basic__url__path__char.html',1,'stdex::parser']]], - ['basic_5furl_5fpath_5fchar_3c_20char_20_3e_70',['basic_url_path_char< char >',['../classstdex_1_1parser_1_1basic__url__path__char.html',1,'stdex::parser']]], - ['basic_5furl_5fusername_5fchar_71',['basic_url_username_char',['../classstdex_1_1parser_1_1basic__url__username__char.html',1,'stdex::parser']]], - ['basic_5furl_5fusername_5fchar_3c_20char_20_3e_72',['basic_url_username_char< char >',['../classstdex_1_1parser_1_1basic__url__username__char.html',1,'stdex::parser']]], - ['bban_73',['bban',['../classstdex_1_1parser_1_1basic__iban.html#a527b724e495e34938d8e57179e5dbd71',1,'stdex::parser::basic_iban']]], - ['block_5fhash_74',['block_hash',['../classstdex_1_1block__hash.html',1,'stdex']]], - ['block_5fhash_3c_20md5_5ft_20_3e_75',['block_hash< md5_t >',['../classstdex_1_1block__hash.html',1,'stdex']]], - ['block_5fhash_3c_20sha1_5ft_20_3e_76',['block_hash< sha1_t >',['../classstdex_1_1block__hash.html',1,'stdex']]], - ['buf_77',['buf',['../classstdex_1_1hex__dec.html#a47a6b05d03e3cd075fe74505675b5126',1,'stdex::hex_dec']]], - ['buffer_78',['buffer',['../classstdex_1_1stream_1_1buffer.html',1,'stdex::stream']]], - ['buffer_5ft_79',['buffer_t',['../structstdex_1_1stream_1_1buffer_1_1buffer__t.html',1,'stdex::stream::buffer']]], - ['buffered_5fsys_80',['buffered_sys',['../classstdex_1_1stream_1_1buffered__sys.html',1,'stdex::stream']]] + ['base_5ftype_5',['base_type',['../classstdex_1_1parser_1_1basic__mime__type.html#a3d5b3fb07dab74031bbf0c4676579b89',1,'stdex::parser::basic_mime_type']]], + ['basic_6',['basic',['../classstdex_1_1stream_1_1basic.html',1,'stdex::stream']]], + ['basic_5fangle_7',['basic_angle',['../classstdex_1_1parser_1_1basic__angle.html',1,'stdex::parser']]], + ['basic_5fany_5fcu_8',['basic_any_cu',['../classstdex_1_1parser_1_1basic__any__cu.html',1,'stdex::parser']]], + ['basic_5fany_5fcu_3c_20_5felem_20_3e_9',['basic_any_cu< _Elem >',['../classstdex_1_1parser_1_1basic__any__cu.html',1,'stdex::parser']]], + ['basic_5fany_5fcu_3c_20char_20_3e_10',['basic_any_cu< char >',['../classstdex_1_1parser_1_1basic__any__cu.html',1,'stdex::parser']]], + ['basic_5fbol_11',['basic_bol',['../classstdex_1_1parser_1_1basic__bol.html',1,'stdex::parser']]], + ['basic_5fbranch_12',['basic_branch',['../classstdex_1_1parser_1_1basic__branch.html',1,'stdex::parser']]], + ['basic_5fchemical_5fformula_13',['basic_chemical_formula',['../classstdex_1_1parser_1_1basic__chemical__formula.html',1,'stdex::parser']]], + ['basic_5fcreditor_5freference_14',['basic_creditor_reference',['../classstdex_1_1parser_1_1basic__creditor__reference.html',1,'stdex::parser']]], + ['basic_5fcss_5fcdc_15',['basic_css_cdc',['../classstdex_1_1parser_1_1basic__css__cdc.html',1,'stdex::parser']]], + ['basic_5fcss_5fcdc_3c_20_5felem_20_3e_16',['basic_css_cdc< _Elem >',['../classstdex_1_1parser_1_1basic__css__cdc.html',1,'stdex::parser']]], + ['basic_5fcss_5fcdo_17',['basic_css_cdo',['../classstdex_1_1parser_1_1basic__css__cdo.html',1,'stdex::parser']]], + ['basic_5fcss_5fcdo_3c_20_5felem_20_3e_18',['basic_css_cdo< _Elem >',['../classstdex_1_1parser_1_1basic__css__cdo.html',1,'stdex::parser']]], + ['basic_5fcss_5fcomment_19',['basic_css_comment',['../classstdex_1_1parser_1_1basic__css__comment.html',1,'stdex::parser']]], + ['basic_5fcss_5fcomment_3c_20_5felem_20_3e_20',['basic_css_comment< _Elem >',['../classstdex_1_1parser_1_1basic__css__comment.html',1,'stdex::parser']]], + ['basic_5fcss_5fimport_21',['basic_css_import',['../classstdex_1_1parser_1_1basic__css__import.html',1,'stdex::parser']]], + ['basic_5fcss_5fimport_3c_20_5felem_20_3e_22',['basic_css_import< _Elem >',['../classstdex_1_1parser_1_1basic__css__import.html',1,'stdex::parser']]], + ['basic_5fcss_5fstring_23',['basic_css_string',['../classstdex_1_1parser_1_1basic__css__string.html',1,'stdex::parser']]], + ['basic_5fcss_5fstring_3c_20_5felem_20_3e_24',['basic_css_string< _Elem >',['../classstdex_1_1parser_1_1basic__css__string.html',1,'stdex::parser']]], + ['basic_5fcss_5furi_25',['basic_css_uri',['../classstdex_1_1parser_1_1basic__css__uri.html',1,'stdex::parser']]], + ['basic_5fcss_5furi_3c_20_5felem_20_3e_26',['basic_css_uri< _Elem >',['../classstdex_1_1parser_1_1basic__css__uri.html',1,'stdex::parser']]], + ['basic_5fcu_27',['basic_cu',['../classstdex_1_1parser_1_1basic__cu.html',1,'stdex::parser']]], + ['basic_5fcu_5fset_28',['basic_cu_set',['../classstdex_1_1parser_1_1basic__cu__set.html',1,'stdex::parser']]], + ['basic_5fdate_29',['basic_date',['../classstdex_1_1parser_1_1basic__date.html',1,'stdex::parser']]], + ['basic_5fdns_5fdomain_5fchar_30',['basic_dns_domain_char',['../classstdex_1_1parser_1_1basic__dns__domain__char.html',1,'stdex::parser']]], + ['basic_5fdns_5fdomain_5fchar_3c_20char_20_3e_31',['basic_dns_domain_char< char >',['../classstdex_1_1parser_1_1basic__dns__domain__char.html',1,'stdex::parser']]], + ['basic_5fdns_5fname_32',['basic_dns_name',['../classstdex_1_1parser_1_1basic__dns__name.html',1,'stdex::parser']]], + ['basic_5femail_5faddress_33',['basic_email_address',['../classstdex_1_1parser_1_1basic__email__address.html',1,'stdex::parser']]], + ['basic_5femoticon_34',['basic_emoticon',['../classstdex_1_1parser_1_1basic__emoticon.html',1,'stdex::parser']]], + ['basic_5feol_35',['basic_eol',['../classstdex_1_1parser_1_1basic__eol.html',1,'stdex::parser']]], + ['basic_5ffile_36',['basic_file',['../classstdex_1_1stream_1_1basic__file.html',1,'stdex::stream']]], + ['basic_5ffraction_37',['basic_fraction',['../classstdex_1_1parser_1_1basic__fraction.html',1,'stdex::parser']]], + ['basic_5fhash_38',['basic_hash',['../classstdex_1_1basic__hash.html',1,'stdex']]], + ['basic_5fhash_3c_20crc32_5ft_20_3e_39',['basic_hash< crc32_t >',['../classstdex_1_1basic__hash.html',1,'stdex']]], + ['basic_5fhash_3c_20md5_5ft_20_3e_40',['basic_hash< md5_t >',['../classstdex_1_1basic__hash.html',1,'stdex']]], + ['basic_5fhash_3c_20sha1_5ft_20_3e_41',['basic_hash< sha1_t >',['../classstdex_1_1basic__hash.html',1,'stdex']]], + ['basic_5fhtml_5fdeclaration_5fcondition_5fend_42',['basic_html_declaration_condition_end',['../classstdex_1_1parser_1_1basic__html__declaration__condition__end.html',1,'stdex::parser']]], + ['basic_5fhtml_5fdeclaration_5fcondition_5fend_3c_20_5felem_20_3e_43',['basic_html_declaration_condition_end< _Elem >',['../classstdex_1_1parser_1_1basic__html__declaration__condition__end.html',1,'stdex::parser']]], + ['basic_5fhtml_5fdeclaration_5fcondition_5fstart_44',['basic_html_declaration_condition_start',['../classstdex_1_1parser_1_1basic__html__declaration__condition__start.html',1,'stdex::parser']]], + ['basic_5fhtml_5fdeclaration_5fcondition_5fstart_3c_20_5felem_20_3e_45',['basic_html_declaration_condition_start< _Elem >',['../classstdex_1_1parser_1_1basic__html__declaration__condition__start.html',1,'stdex::parser']]], + ['basic_5fhtml_5fident_46',['basic_html_ident',['../classstdex_1_1parser_1_1basic__html__ident.html',1,'stdex::parser']]], + ['basic_5fhtml_5fident_3c_20_5felem_20_3e_47',['basic_html_ident< _Elem >',['../classstdex_1_1parser_1_1basic__html__ident.html',1,'stdex::parser']]], + ['basic_5fhtml_5ftag_48',['basic_html_tag',['../classstdex_1_1parser_1_1basic__html__tag.html',1,'stdex::parser']]], + ['basic_5fhtml_5ftag_3c_20_5felem_20_3e_49',['basic_html_tag< _Elem >',['../classstdex_1_1parser_1_1basic__html__tag.html',1,'stdex::parser']]], + ['basic_5fhtml_5fvalue_50',['basic_html_value',['../classstdex_1_1parser_1_1basic__html__value.html',1,'stdex::parser']]], + ['basic_5fhtml_5fvalue_3c_20_5felem_20_3e_51',['basic_html_value< _Elem >',['../classstdex_1_1parser_1_1basic__html__value.html',1,'stdex::parser']]], + ['basic_5fiban_52',['basic_iban',['../classstdex_1_1parser_1_1basic__iban.html',1,'stdex::parser']]], + ['basic_5finteger_53',['basic_integer',['../classstdex_1_1parser_1_1basic__integer.html',1,'stdex::parser']]], + ['basic_5finteger10_54',['basic_integer10',['../classstdex_1_1parser_1_1basic__integer10.html',1,'stdex::parser']]], + ['basic_5finteger10ts_55',['basic_integer10ts',['../classstdex_1_1parser_1_1basic__integer10ts.html',1,'stdex::parser']]], + ['basic_5finteger16_56',['basic_integer16',['../classstdex_1_1parser_1_1basic__integer16.html',1,'stdex::parser']]], + ['basic_5fipv4_5faddress_57',['basic_ipv4_address',['../classstdex_1_1parser_1_1basic__ipv4__address.html',1,'stdex::parser']]], + ['basic_5fipv6_5faddress_58',['basic_ipv6_address',['../classstdex_1_1parser_1_1basic__ipv6__address.html',1,'stdex::parser']]], + ['basic_5fipv6_5fscope_5fid_5fchar_59',['basic_ipv6_scope_id_char',['../classstdex_1_1parser_1_1basic__ipv6__scope__id__char.html',1,'stdex::parser']]], + ['basic_5fiterations_60',['basic_iterations',['../classstdex_1_1parser_1_1basic__iterations.html',1,'stdex::parser']]], + ['basic_5fjson_5fstring_61',['basic_json_string',['../classstdex_1_1parser_1_1basic__json__string.html',1,'stdex::parser']]], + ['basic_5fmime_5ftype_62',['basic_mime_type',['../classstdex_1_1parser_1_1basic__mime__type.html',1,'stdex::parser']]], + ['basic_5fmixed_5fnumeral_63',['basic_mixed_numeral',['../classstdex_1_1parser_1_1basic__mixed__numeral.html',1,'stdex::parser']]], + ['basic_5fmonetary_5fnumeral_64',['basic_monetary_numeral',['../classstdex_1_1parser_1_1basic__monetary__numeral.html',1,'stdex::parser']]], + ['basic_5fnoop_65',['basic_noop',['../classstdex_1_1parser_1_1basic__noop.html',1,'stdex::parser']]], + ['basic_5fparser_66',['basic_parser',['../classstdex_1_1parser_1_1basic__parser.html',1,'stdex::parser']]], + ['basic_5fparser_3c_20_5felem_20_3e_67',['basic_parser< _Elem >',['../classstdex_1_1parser_1_1basic__parser.html',1,'stdex::parser']]], + ['basic_5fparser_3c_20char_20_3e_68',['basic_parser< char >',['../classstdex_1_1parser_1_1basic__parser.html',1,'stdex::parser']]], + ['basic_5fpermutation_69',['basic_permutation',['../classstdex_1_1parser_1_1basic__permutation.html',1,'stdex::parser']]], + ['basic_5fphone_5fnumber_70',['basic_phone_number',['../classstdex_1_1parser_1_1basic__phone__number.html',1,'stdex::parser']]], + ['basic_5fpunct_5fcu_71',['basic_punct_cu',['../classstdex_1_1parser_1_1basic__punct__cu.html',1,'stdex::parser']]], + ['basic_5fpunct_5fcu_3c_20char_20_3e_72',['basic_punct_cu< char >',['../classstdex_1_1parser_1_1basic__punct__cu.html',1,'stdex::parser']]], + ['basic_5froman_5fnumeral_73',['basic_roman_numeral',['../classstdex_1_1parser_1_1basic__roman__numeral.html',1,'stdex::parser']]], + ['basic_5fscientific_5fnumeral_74',['basic_scientific_numeral',['../classstdex_1_1parser_1_1basic__scientific__numeral.html',1,'stdex::parser']]], + ['basic_5fscore_75',['basic_score',['../classstdex_1_1parser_1_1basic__score.html',1,'stdex::parser']]], + ['basic_5fsequence_76',['basic_sequence',['../classstdex_1_1parser_1_1basic__sequence.html',1,'stdex::parser']]], + ['basic_5fset_77',['basic_set',['../classstdex_1_1parser_1_1basic__set.html',1,'stdex::parser']]], + ['basic_5fset_3c_20char_20_3e_78',['basic_set< char >',['../classstdex_1_1parser_1_1basic__set.html',1,'stdex::parser']]], + ['basic_5fsi_5freference_79',['basic_si_reference',['../classstdex_1_1parser_1_1basic__si__reference.html',1,'stdex::parser']]], + ['basic_5fsi_5freference_5fdelimiter_80',['basic_si_reference_delimiter',['../classstdex_1_1parser_1_1basic__si__reference__delimiter.html',1,'stdex::parser']]], + ['basic_5fsi_5freference_5fpart_81',['basic_si_reference_part',['../classstdex_1_1parser_1_1basic__si__reference__part.html',1,'stdex::parser']]], + ['basic_5fsigned_5fnumeral_82',['basic_signed_numeral',['../classstdex_1_1parser_1_1basic__signed__numeral.html',1,'stdex::parser']]], + ['basic_5fspace_5fcu_83',['basic_space_cu',['../classstdex_1_1parser_1_1basic__space__cu.html',1,'stdex::parser']]], + ['basic_5fspace_5fcu_3c_20char_20_3e_84',['basic_space_cu< char >',['../classstdex_1_1parser_1_1basic__space__cu.html',1,'stdex::parser']]], + ['basic_5fspace_5for_5fpunct_5fcu_85',['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_86',['basic_space_or_punct_cu< char >',['../classstdex_1_1parser_1_1basic__space__or__punct__cu.html',1,'stdex::parser']]], + ['basic_5fstring_87',['basic_string',['../classstdex_1_1parser_1_1basic__string.html',1,'stdex::parser']]], + ['basic_5fstring_5fbranch_88',['basic_string_branch',['../classstdex_1_1parser_1_1basic__string__branch.html',1,'stdex::parser']]], + ['basic_5fsys_89',['basic_sys',['../classstdex_1_1stream_1_1basic__sys.html',1,'stdex::stream']]], + ['basic_5ftime_90',['basic_time',['../classstdex_1_1parser_1_1basic__time.html',1,'stdex::parser']]], + ['basic_5furl_91',['basic_url',['../classstdex_1_1parser_1_1basic__url.html',1,'stdex::parser']]], + ['basic_5furl_5fpassword_5fchar_92',['basic_url_password_char',['../classstdex_1_1parser_1_1basic__url__password__char.html',1,'stdex::parser']]], + ['basic_5furl_5fpassword_5fchar_3c_20char_20_3e_93',['basic_url_password_char< char >',['../classstdex_1_1parser_1_1basic__url__password__char.html',1,'stdex::parser']]], + ['basic_5furl_5fpath_94',['basic_url_path',['../classstdex_1_1parser_1_1basic__url__path.html',1,'stdex::parser']]], + ['basic_5furl_5fpath_5fchar_95',['basic_url_path_char',['../classstdex_1_1parser_1_1basic__url__path__char.html',1,'stdex::parser']]], + ['basic_5furl_5fpath_5fchar_3c_20char_20_3e_96',['basic_url_path_char< char >',['../classstdex_1_1parser_1_1basic__url__path__char.html',1,'stdex::parser']]], + ['basic_5furl_5fusername_5fchar_97',['basic_url_username_char',['../classstdex_1_1parser_1_1basic__url__username__char.html',1,'stdex::parser']]], + ['basic_5furl_5fusername_5fchar_3c_20char_20_3e_98',['basic_url_username_char< char >',['../classstdex_1_1parser_1_1basic__url__username__char.html',1,'stdex::parser']]], + ['bban_99',['bban',['../classstdex_1_1parser_1_1basic__iban.html#a527b724e495e34938d8e57179e5dbd71',1,'stdex::parser::basic_iban']]], + ['block_5fhash_100',['block_hash',['../classstdex_1_1block__hash.html',1,'stdex']]], + ['block_5fhash_3c_20md5_5ft_20_3e_101',['block_hash< md5_t >',['../classstdex_1_1block__hash.html',1,'stdex']]], + ['block_5fhash_3c_20sha1_5ft_20_3e_102',['block_hash< sha1_t >',['../classstdex_1_1block__hash.html',1,'stdex']]], + ['buf_103',['buf',['../classstdex_1_1hex__dec.html#a47a6b05d03e3cd075fe74505675b5126',1,'stdex::hex_dec']]], + ['buffer_104',['buffer',['../classstdex_1_1stream_1_1buffer.html',1,'stdex::stream']]], + ['buffer_5ft_105',['buffer_t',['../structstdex_1_1stream_1_1buffer_1_1buffer__t.html',1,'stdex::stream::buffer']]], + ['buffered_5fsys_106',['buffered_sys',['../classstdex_1_1stream_1_1buffered__sys.html',1,'stdex::stream']]] ]; diff --git a/search/all_10.js b/search/all_10.js index 95802b9ed..a58a75b94 100644 --- a/search/all_10.js +++ b/search/all_10.js @@ -1,52 +1,58 @@ var searchData= [ - ['save_0',['save',['../classstdex_1_1stream_1_1memory__file.html#a96210fbbca48af7097ddad7cc9bf6cb5',1,'stdex::stream::memory_file::save(const schar_t *filename, int mode)'],['../classstdex_1_1stream_1_1memory__file.html#ac5ae0ef789e71cf8b6561f2d6b22041a',1,'stdex::stream::memory_file::save(const stdex::sstring &filename, int mode)']]], + ['save_0',['save',['../classstdex_1_1stream_1_1memory__file.html#ac5ae0ef789e71cf8b6561f2d6b22041a',1,'stdex::stream::memory_file::save(const stdex::sstring &filename, int mode)'],['../classstdex_1_1stream_1_1memory__file.html#a96210fbbca48af7097ddad7cc9bf6cb5',1,'stdex::stream::memory_file::save(const schar_t *filename, int mode)']]], ['scope_5fid_1',['scope_id',['../classstdex_1_1parser_1_1basic__ipv6__address.html#a67486e83888f48afc62b031f745012c0',1,'stdex::parser::basic_ipv6_address']]], ['seek_2',['seek',['../classstdex_1_1stream_1_1diag__file.html#a9f616580a2547b37beccd7d114ed06d0',1,'stdex::stream::diag_file::seek()'],['../classstdex_1_1stream_1_1memory__file.html#a9e67e40e9e3c0f7b002fcdab5220b4e7',1,'stdex::stream::memory_file::seek()'],['../classstdex_1_1stream_1_1file.html#acdfc1dc079ebeaeb05312e03925485ff',1,'stdex::stream::file::seek()'],['../classstdex_1_1stream_1_1cache.html#af2979118bdeca35cbfd84a8a2be00f8a',1,'stdex::stream::cache::seek()'],['../classstdex_1_1stream_1_1file__window.html#a53a12a1979b770030c0de05b349f1e55',1,'stdex::stream::file_window::seek()'],['../classstdex_1_1stream_1_1basic__file.html#afcaac612398bd7d02d8d146dcad74465',1,'stdex::stream::basic_file::seek(foff_t offset, seek_t how=seek_t::beg)=0']]], ['seekbeg_3',['seekbeg',['../classstdex_1_1stream_1_1basic__file.html#a6a8da9a1b0a3926b9bc453bf0209ee5e',1,'stdex::stream::basic_file']]], ['seekcur_4',['seekcur',['../classstdex_1_1stream_1_1basic__file.html#a8158cb89ef54a737b7bcfed635c215d6',1,'stdex::stream::basic_file']]], ['seekend_5',['seekend',['../classstdex_1_1stream_1_1basic__file.html#ae13b5941415b3dbb9883c1da9bcd39c7',1,'stdex::stream::basic_file']]], ['segments_6',['segments',['../classstdex_1_1parser_1_1http__url__path.html#a9a5f4002c55cb4500ce43536512b02b9',1,'stdex::parser::http_url_path']]], - ['set_7',['set',['../classstdex_1_1stream_1_1memory__file.html#a8ccb02a23999882255d5c16c83f91571',1,'stdex::stream::memory_file::set()'],['../classstdex_1_1global__progress.html#a76e66104444c77b89b687b4ad4945e8e',1,'stdex::global_progress::set()'],['../classstdex_1_1progress.html#acf3a29daf22709bf7e94e864c8be95a1',1,'stdex::progress::set()'],['../classstdex_1_1lazy__progress.html#a4e3e7a80da8cce7ccec69c78fcaaabae',1,'stdex::lazy_progress::set()']]], - ['set_5fatime_8',['set_atime',['../classstdex_1_1stream_1_1basic__file.html#ae76436514ac66d88bbd584ea07d879d0',1,'stdex::stream::basic_file::set_atime()'],['../classstdex_1_1stream_1_1cache.html#af026881969ee78e2aef1bf02922aea93',1,'stdex::stream::cache::set_atime()'],['../classstdex_1_1stream_1_1file.html#a64ded627a8843c155ea3a59b94c225f6',1,'stdex::stream::file::set_atime()']]], - ['set_5fctime_9',['set_ctime',['../classstdex_1_1stream_1_1basic__file.html#aba668e53fc4709cd545f12a49521ed56',1,'stdex::stream::basic_file::set_ctime()'],['../classstdex_1_1stream_1_1cache.html#ae62a75156ff79910e1b9afc506e38e44',1,'stdex::stream::cache::set_ctime()'],['../classstdex_1_1stream_1_1file.html#a337a27cd63975e155b6ba29a18ed9a23',1,'stdex::stream::file::set_ctime()']]], - ['set_5fglobal_5frange_10',['set_global_range',['../classstdex_1_1global__progress.html#ac68b491c62861fae1b16abb3477cb9c1',1,'stdex::global_progress']]], - ['set_5fmtime_11',['set_mtime',['../classstdex_1_1stream_1_1cache.html#aafad7bfb4c03d0d56854b4c148ae0ee1',1,'stdex::stream::cache::set_mtime()'],['../classstdex_1_1stream_1_1file.html#a567620d1eb84032e460f3e173f9bd762',1,'stdex::stream::file::set_mtime()'],['../classstdex_1_1stream_1_1basic__file.html#a814a080cb6da2041013749cc125bfd2b',1,'stdex::stream::basic_file::set_mtime()']]], - ['set_5frange_12',['set_range',['../classstdex_1_1progress.html#afbb1513bdb20340ebb21bd988f4e424a',1,'stdex::progress::set_range()'],['../classstdex_1_1lazy__progress.html#ada3a0d4f0086823558115a8064ffffb6',1,'stdex::lazy_progress::set_range()'],['../classstdex_1_1global__progress.html#afb204b820637c19b494976af4a284704',1,'stdex::global_progress::set_range(T start, T end)']]], - ['set_5fsection_5frange_13',['set_section_range',['../classstdex_1_1global__progress.html#a242009bce7ac595975bbfd703ec58c3b',1,'stdex::global_progress']]], - ['set_5ftext_14',['set_text',['../classstdex_1_1progress.html#a2cab8b5ac137d16fced31ee205264b01',1,'stdex::progress::set_text()'],['../classstdex_1_1global__progress.html#a89b7116003ab3b6344d90f130c14933e',1,'stdex::global_progress::set_text()']]], - ['sgml_5fany_5fcp_15',['sgml_any_cp',['../classstdex_1_1parser_1_1sgml__any__cp.html',1,'stdex::parser']]], - ['sgml_5fcp_16',['sgml_cp',['../classstdex_1_1parser_1_1sgml__cp.html',1,'stdex::parser']]], - ['sgml_5fcp_5fset_17',['sgml_cp_set',['../classstdex_1_1parser_1_1sgml__cp__set.html',1,'stdex::parser']]], - ['sgml_5fdns_5fdomain_5fchar_18',['sgml_dns_domain_char',['../classstdex_1_1parser_1_1sgml__dns__domain__char.html',1,'stdex::parser']]], - ['sgml_5fipv6_5fscope_5fid_5fchar_19',['sgml_ipv6_scope_id_char',['../classstdex_1_1parser_1_1sgml__ipv6__scope__id__char.html',1,'stdex::parser']]], - ['sgml_5fpunct_5fcp_20',['sgml_punct_cp',['../classstdex_1_1parser_1_1sgml__punct__cp.html',1,'stdex::parser']]], - ['sgml_5fspace_5fcp_21',['sgml_space_cp',['../classstdex_1_1parser_1_1sgml__space__cp.html',1,'stdex::parser']]], - ['sgml_5fspace_5for_5fpunct_5fcp_22',['sgml_space_or_punct_cp',['../classstdex_1_1parser_1_1sgml__space__or__punct__cp.html',1,'stdex::parser']]], - ['sgml_5fstring_23',['sgml_string',['../classstdex_1_1parser_1_1sgml__string.html',1,'stdex::parser']]], - ['sgml_5furl_5fpassword_5fchar_24',['sgml_url_password_char',['../classstdex_1_1parser_1_1sgml__url__password__char.html',1,'stdex::parser']]], - ['sgml_5furl_5fpath_5fchar_25',['sgml_url_path_char',['../classstdex_1_1parser_1_1sgml__url__path__char.html',1,'stdex::parser']]], - ['sgml_5furl_5fusername_5fchar_26',['sgml_url_username_char',['../classstdex_1_1parser_1_1sgml__url__username__char.html',1,'stdex::parser']]], - ['sha1_5fhash_27',['sha1_hash',['../classstdex_1_1sha1__hash.html',1,'stdex']]], - ['sha256_5ft_28',['sha256_t',['../unionstdex_1_1sha256__t.html',1,'stdex']]], - ['sha_5ft_29',['sha_t',['../unionstdex_1_1sha__t.html',1,'stdex']]], - ['show_30',['show',['../classstdex_1_1progress.html#ab6e57aed9e7a18a501e8a63cef199d8e',1,'stdex::progress::show()'],['../classstdex_1_1global__progress.html#a32350e02d5904867402187e81a3c4a26',1,'stdex::global_progress::show()']]], - ['size_31',['size',['../classstdex_1_1stream_1_1file__window.html#a70d596dd863a5265303aab11db59768e',1,'stdex::stream::file_window::size()'],['../classstdex_1_1stream_1_1cache.html#a769034b8641a17210a916091b112af2d',1,'stdex::stream::cache::size()'],['../classstdex_1_1vector__queue.html#ad704df8c3664a6d3f3e0977d87162114',1,'stdex::vector_queue::size()'],['../classstdex_1_1stream_1_1file.html#acc591c2378e51340b7af7fbf12d1a98f',1,'stdex::stream::file::size()'],['../classstdex_1_1stream_1_1memory__file.html#a99b32855f1f85ccc7c08d71786c17a1c',1,'stdex::stream::memory_file::size()'],['../classstdex_1_1stream_1_1fifo.html#a3272bc89573fe75fe0e6de2600967c10',1,'stdex::stream::fifo::size()'],['../classstdex_1_1stream_1_1diag__file.html#a0797e4eba9f702022e1c467694302871',1,'stdex::stream::diag_file::size()'],['../classstdex_1_1stream_1_1basic__file.html#ad868d7c25aa45cefc95dd54a24febf2f',1,'stdex::stream::basic_file::size()'],['../structstdex_1_1interval.html#a8c5222bc73fc66ba78bfabc1b985c864',1,'stdex::interval::size()'],['../classstdex_1_1basic__hash.html#a9b8b5f91873e5d2cfe93533832318b5a',1,'stdex::basic_hash::size()']]], - ['size_5ftype_32',['size_type',['../classstdex_1_1vector__queue.html#a2a044b4eb0242a00568d08b4d8b6343a',1,'stdex::vector_queue']]], - ['skip_33',['skip',['../classstdex_1_1stream_1_1basic.html#a52ce3bdf28a9a7fc5a881616c8db2da4',1,'stdex::stream::basic::skip()'],['../classstdex_1_1stream_1_1basic__file.html#a15a1e6a778adefea421f32d14c8178dd',1,'stdex::stream::basic_file::skip()'],['../classstdex_1_1stream_1_1file__window.html#a4202fcc2b9e69e40bf15aaa3b5f50dda',1,'stdex::stream::file_window::skip()']]], - ['socket_34',['socket',['../classstdex_1_1stream_1_1socket.html#aae9f08b885315a555d46faee399196c9',1,'stdex::stream::socket::socket()'],['../classstdex_1_1stream_1_1socket.html',1,'stdex::stream::socket']]], - ['special_5fsign_35',['special_sign',['../classstdex_1_1parser_1_1basic__signed__numeral.html#a38b8207e2b384ed5ffb3f2bfb3e8755f',1,'stdex::parser::basic_signed_numeral::special_sign'],['../classstdex_1_1parser_1_1basic__mixed__numeral.html#a46c6721810cc8f90218aee66a4c27132',1,'stdex::parser::basic_mixed_numeral::special_sign'],['../classstdex_1_1parser_1_1basic__scientific__numeral.html#a5ce9abfbcdc1247e8f504ae13492e7ea',1,'stdex::parser::basic_scientific_numeral::special_sign'],['../classstdex_1_1parser_1_1basic__monetary__numeral.html#af0190fa4b0de5e894a14c05550e78365',1,'stdex::parser::basic_monetary_numeral::special_sign']]], - ['spinlock_36',['spinlock',['../classstdex_1_1spinlock.html',1,'stdex']]], - ['start_37',['start',['../structstdex_1_1interval.html#ab6a104de0f15b29bea77fe181b49c40b',1,'stdex::interval']]], - ['state_38',['state',['../classstdex_1_1stream_1_1basic.html#a2aa36b007017c2052a0118c1df4910d0',1,'stdex::stream::basic']]], - ['std_20c_39',['stdex - Random stuff that didn't made it into std C++',['../index.html',1,'']]], - ['stdex_20random_20stuff_20that_20didn_20t_20made_20it_20into_20std_20c_40',['stdex - Random stuff that didn't made it into std C++',['../index.html',1,'']]], - ['strcat_41',['strcat',['../classstdex_1_1charset__encoder.html#aa1561af3ad0711c80a25eda924959504',1,'stdex::charset_encoder::strcat(std::basic_string< T_to, _Traits_to, _Alloc_to > &dst, _In_reads_or_z_opt_(count_src) const T_from *src, size_t count_src)'],['../classstdex_1_1charset__encoder.html#ac8103624858c3d2bca02ab8a66300109',1,'stdex::charset_encoder::strcat(std::basic_string< T_to, _Traits_to, _Alloc_to > &dst, const T_from *src)'],['../classstdex_1_1charset__encoder.html#a8c8560680049e7558bd536e604532a7b',1,'stdex::charset_encoder::strcat(std::basic_string< T_to, _Traits_to, _Alloc_to > &dst, const std::basic_string< T_from, _Traits_from, _Alloc_from > &src)']]], - ['strcpy_42',['strcpy',['../classstdex_1_1charset__encoder.html#ad0cf9cb04b8c9f2996aeeeb493c4b646',1,'stdex::charset_encoder::strcpy(std::basic_string< T_to, _Traits_to, _Alloc_to > &dst, _In_reads_or_z_opt_(count_src) const T_from *src, size_t count_src)'],['../classstdex_1_1charset__encoder.html#a98b5679c20673dc97d33d545301d46ea',1,'stdex::charset_encoder::strcpy(std::basic_string< T_to, _Traits_to, _Alloc_to > &dst, const T_from *src)'],['../classstdex_1_1charset__encoder.html#a32763d70094c350868a1acb3e51a9e01',1,'stdex::charset_encoder::strcpy(std::basic_string< T_to, _Traits_to, _Alloc_to > &dst, const std::basic_string< T_from, _Traits_from, _Alloc_from > &src)']]], - ['stream_5fhasher_43',['stream_hasher',['../classstdex_1_1stream__hasher.html',1,'stdex']]], - ['string_44',['string',['../classstdex_1_1parser_1_1http__value.html#a808ed411ff6816162a54b99fb7307315',1,'stdex::parser::http_value']]], - ['stuff_20that_20didn_20t_20made_20it_20into_20std_20c_45',['stdex - Random stuff that didn't made it into std C++',['../index.html',1,'']]], - ['sync_46',['sync',['../classstdex_1_1ring.html#a68e471c5801c9c8232464005a3225eb3',1,'stdex::ring']]], - ['sys_5finfo_5ft_47',['sys_info_t',['../structstdex_1_1sys__info__t.html',1,'stdex']]], - ['sys_5fobject_48',['sys_object',['../classstdex_1_1sys__object.html',1,'stdex']]] + ['sequence_7',['sequence',['../classstdex_1_1html_1_1sequence.html',1,'stdex::html::sequence'],['../classstdex_1_1html_1_1token.html#a20890ed953b05911dd66fc23a81fd362',1,'stdex::html::token::sequence']]], + ['set_8',['set',['../classstdex_1_1stream_1_1memory__file.html#a8ccb02a23999882255d5c16c83f91571',1,'stdex::stream::memory_file::set()'],['../classstdex_1_1global__progress.html#a76e66104444c77b89b687b4ad4945e8e',1,'stdex::global_progress::set()'],['../classstdex_1_1lazy__progress.html#a4e3e7a80da8cce7ccec69c78fcaaabae',1,'stdex::lazy_progress::set()'],['../classstdex_1_1progress.html#acf3a29daf22709bf7e94e864c8be95a1',1,'stdex::progress::set()']]], + ['set_5fatime_9',['set_atime',['../classstdex_1_1stream_1_1cache.html#af026881969ee78e2aef1bf02922aea93',1,'stdex::stream::cache::set_atime()'],['../classstdex_1_1stream_1_1basic__file.html#ae76436514ac66d88bbd584ea07d879d0',1,'stdex::stream::basic_file::set_atime()'],['../classstdex_1_1stream_1_1file.html#a64ded627a8843c155ea3a59b94c225f6',1,'stdex::stream::file::set_atime()']]], + ['set_5fctime_10',['set_ctime',['../classstdex_1_1stream_1_1basic__file.html#aba668e53fc4709cd545f12a49521ed56',1,'stdex::stream::basic_file::set_ctime()'],['../classstdex_1_1stream_1_1cache.html#ae62a75156ff79910e1b9afc506e38e44',1,'stdex::stream::cache::set_ctime()'],['../classstdex_1_1stream_1_1file.html#a337a27cd63975e155b6ba29a18ed9a23',1,'stdex::stream::file::set_ctime()']]], + ['set_5fglobal_5frange_11',['set_global_range',['../classstdex_1_1global__progress.html#ac68b491c62861fae1b16abb3477cb9c1',1,'stdex::global_progress']]], + ['set_5fmtime_12',['set_mtime',['../classstdex_1_1stream_1_1basic__file.html#a814a080cb6da2041013749cc125bfd2b',1,'stdex::stream::basic_file::set_mtime()'],['../classstdex_1_1stream_1_1cache.html#aafad7bfb4c03d0d56854b4c148ae0ee1',1,'stdex::stream::cache::set_mtime()'],['../classstdex_1_1stream_1_1file.html#a567620d1eb84032e460f3e173f9bd762',1,'stdex::stream::file::set_mtime()']]], + ['set_5frange_13',['set_range',['../classstdex_1_1progress.html#afbb1513bdb20340ebb21bd988f4e424a',1,'stdex::progress::set_range()'],['../classstdex_1_1lazy__progress.html#ada3a0d4f0086823558115a8064ffffb6',1,'stdex::lazy_progress::set_range()'],['../classstdex_1_1global__progress.html#afb204b820637c19b494976af4a284704',1,'stdex::global_progress::set_range(T start, T end)']]], + ['set_5fsection_5frange_14',['set_section_range',['../classstdex_1_1global__progress.html#a242009bce7ac595975bbfd703ec58c3b',1,'stdex::global_progress']]], + ['set_5ftext_15',['set_text',['../classstdex_1_1progress.html#a2cab8b5ac137d16fced31ee205264b01',1,'stdex::progress::set_text()'],['../classstdex_1_1global__progress.html#a89b7116003ab3b6344d90f130c14933e',1,'stdex::global_progress::set_text()']]], + ['sgml_5fany_5fcp_16',['sgml_any_cp',['../classstdex_1_1parser_1_1sgml__any__cp.html',1,'stdex::parser']]], + ['sgml_5fcp_17',['sgml_cp',['../classstdex_1_1parser_1_1sgml__cp.html',1,'stdex::parser']]], + ['sgml_5fcp_5fset_18',['sgml_cp_set',['../classstdex_1_1parser_1_1sgml__cp__set.html',1,'stdex::parser']]], + ['sgml_5fdns_5fdomain_5fchar_19',['sgml_dns_domain_char',['../classstdex_1_1parser_1_1sgml__dns__domain__char.html',1,'stdex::parser']]], + ['sgml_5fipv6_5fscope_5fid_5fchar_20',['sgml_ipv6_scope_id_char',['../classstdex_1_1parser_1_1sgml__ipv6__scope__id__char.html',1,'stdex::parser']]], + ['sgml_5fpunct_5fcp_21',['sgml_punct_cp',['../classstdex_1_1parser_1_1sgml__punct__cp.html',1,'stdex::parser']]], + ['sgml_5fspace_5fcp_22',['sgml_space_cp',['../classstdex_1_1parser_1_1sgml__space__cp.html',1,'stdex::parser']]], + ['sgml_5fspace_5for_5fpunct_5fcp_23',['sgml_space_or_punct_cp',['../classstdex_1_1parser_1_1sgml__space__or__punct__cp.html',1,'stdex::parser']]], + ['sgml_5fstring_24',['sgml_string',['../classstdex_1_1parser_1_1sgml__string.html',1,'stdex::parser']]], + ['sgml_5furl_5fpassword_5fchar_25',['sgml_url_password_char',['../classstdex_1_1parser_1_1sgml__url__password__char.html',1,'stdex::parser']]], + ['sgml_5furl_5fpath_5fchar_26',['sgml_url_path_char',['../classstdex_1_1parser_1_1sgml__url__path__char.html',1,'stdex::parser']]], + ['sgml_5furl_5fusername_5fchar_27',['sgml_url_username_char',['../classstdex_1_1parser_1_1sgml__url__username__char.html',1,'stdex::parser']]], + ['sha1_5fhash_28',['sha1_hash',['../classstdex_1_1sha1__hash.html',1,'stdex']]], + ['sha256_5ft_29',['sha256_t',['../unionstdex_1_1sha256__t.html',1,'stdex']]], + ['sha_5ft_30',['sha_t',['../unionstdex_1_1sha__t.html',1,'stdex']]], + ['show_31',['show',['../classstdex_1_1progress.html#ab6e57aed9e7a18a501e8a63cef199d8e',1,'stdex::progress::show()'],['../classstdex_1_1global__progress.html#a32350e02d5904867402187e81a3c4a26',1,'stdex::global_progress::show()']]], + ['size_32',['size',['../structstdex_1_1interval.html#a8c5222bc73fc66ba78bfabc1b985c864',1,'stdex::interval::size()'],['../classstdex_1_1stream_1_1fifo.html#a3272bc89573fe75fe0e6de2600967c10',1,'stdex::stream::fifo::size()'],['../classstdex_1_1stream_1_1basic__file.html#ad868d7c25aa45cefc95dd54a24febf2f',1,'stdex::stream::basic_file::size()'],['../classstdex_1_1stream_1_1file__window.html#a70d596dd863a5265303aab11db59768e',1,'stdex::stream::file_window::size()'],['../classstdex_1_1stream_1_1cache.html#a769034b8641a17210a916091b112af2d',1,'stdex::stream::cache::size()'],['../classstdex_1_1stream_1_1file.html#acc591c2378e51340b7af7fbf12d1a98f',1,'stdex::stream::file::size()'],['../classstdex_1_1stream_1_1memory__file.html#a99b32855f1f85ccc7c08d71786c17a1c',1,'stdex::stream::memory_file::size()'],['../classstdex_1_1basic__hash.html#a9b8b5f91873e5d2cfe93533832318b5a',1,'stdex::basic_hash::size()'],['../classstdex_1_1stream_1_1diag__file.html#a0797e4eba9f702022e1c467694302871',1,'stdex::stream::diag_file::size()'],['../classstdex_1_1vector__queue.html#ad704df8c3664a6d3f3e0977d87162114',1,'stdex::vector_queue::size() const']]], + ['size_5ftype_33',['size_type',['../classstdex_1_1vector__queue.html#a2a044b4eb0242a00568d08b4d8b6343a',1,'stdex::vector_queue']]], + ['skip_34',['skip',['../classstdex_1_1stream_1_1basic.html#a52ce3bdf28a9a7fc5a881616c8db2da4',1,'stdex::stream::basic::skip()'],['../classstdex_1_1stream_1_1basic__file.html#a15a1e6a778adefea421f32d14c8178dd',1,'stdex::stream::basic_file::skip()'],['../classstdex_1_1stream_1_1file__window.html#a4202fcc2b9e69e40bf15aaa3b5f50dda',1,'stdex::stream::file_window::skip()']]], + ['socket_35',['socket',['../classstdex_1_1stream_1_1socket.html',1,'stdex::stream::socket'],['../classstdex_1_1stream_1_1socket.html#aae9f08b885315a555d46faee399196c9',1,'stdex::stream::socket::socket()']]], + ['source_36',['source',['../classstdex_1_1html_1_1document.html#adf28cd75b7cfcf892a77bc25d921f673',1,'stdex::html::document']]], + ['span_37',['span',['../structstdex_1_1html_1_1element__traits.html#afd49ebff449f313eecb1f8fb70716968',1,'stdex::html::element_traits']]], + ['special_5fsign_38',['special_sign',['../classstdex_1_1parser_1_1basic__signed__numeral.html#a38b8207e2b384ed5ffb3f2bfb3e8755f',1,'stdex::parser::basic_signed_numeral::special_sign'],['../classstdex_1_1parser_1_1basic__mixed__numeral.html#a46c6721810cc8f90218aee66a4c27132',1,'stdex::parser::basic_mixed_numeral::special_sign'],['../classstdex_1_1parser_1_1basic__scientific__numeral.html#a5ce9abfbcdc1247e8f504ae13492e7ea',1,'stdex::parser::basic_scientific_numeral::special_sign'],['../classstdex_1_1parser_1_1basic__monetary__numeral.html#af0190fa4b0de5e894a14c05550e78365',1,'stdex::parser::basic_monetary_numeral::special_sign']]], + ['spinlock_39',['spinlock',['../classstdex_1_1spinlock.html',1,'stdex']]], + ['start_40',['start',['../classstdex_1_1html_1_1element__end.html#ab261fd8fa4c08c10e81b2e50b94d1cc0',1,'stdex::html::element_end::start'],['../structstdex_1_1interval.html#ab6a104de0f15b29bea77fe181b49c40b',1,'stdex::interval::start']]], + ['start_5ftokens_41',['start_tokens',['../classstdex_1_1html_1_1parser.html#ae4b213dd9b196120c05a062229688172',1,'stdex::html::parser']]], + ['starting_5ftoken_42',['starting_token',['../classstdex_1_1html_1_1starting__token.html',1,'stdex::html']]], + ['state_43',['state',['../classstdex_1_1stream_1_1basic.html#a2aa36b007017c2052a0118c1df4910d0',1,'stdex::stream::basic']]], + ['std_20c_44',['stdex - Random stuff that didn't made it into std C++',['../index.html',1,'']]], + ['stdex_20random_20stuff_20that_20didn_20t_20made_20it_20into_20std_20c_45',['stdex - Random stuff that didn't made it into std C++',['../index.html',1,'']]], + ['strcat_46',['strcat',['../classstdex_1_1charset__encoder.html#aa1561af3ad0711c80a25eda924959504',1,'stdex::charset_encoder::strcat(std::basic_string< T_to, _Traits_to, _Alloc_to > &dst, _In_reads_or_z_opt_(count_src) const T_from *src, size_t count_src)'],['../classstdex_1_1charset__encoder.html#ac8103624858c3d2bca02ab8a66300109',1,'stdex::charset_encoder::strcat(std::basic_string< T_to, _Traits_to, _Alloc_to > &dst, const T_from *src)'],['../classstdex_1_1charset__encoder.html#a8c8560680049e7558bd536e604532a7b',1,'stdex::charset_encoder::strcat(std::basic_string< T_to, _Traits_to, _Alloc_to > &dst, const std::basic_string< T_from, _Traits_from, _Alloc_from > &src)']]], + ['strcpy_47',['strcpy',['../classstdex_1_1charset__encoder.html#ad0cf9cb04b8c9f2996aeeeb493c4b646',1,'stdex::charset_encoder::strcpy(std::basic_string< T_to, _Traits_to, _Alloc_to > &dst, _In_reads_or_z_opt_(count_src) const T_from *src, size_t count_src)'],['../classstdex_1_1charset__encoder.html#a98b5679c20673dc97d33d545301d46ea',1,'stdex::charset_encoder::strcpy(std::basic_string< T_to, _Traits_to, _Alloc_to > &dst, const T_from *src)'],['../classstdex_1_1charset__encoder.html#a32763d70094c350868a1acb3e51a9e01',1,'stdex::charset_encoder::strcpy(std::basic_string< T_to, _Traits_to, _Alloc_to > &dst, const std::basic_string< T_from, _Traits_from, _Alloc_from > &src)']]], + ['stream_5fhasher_48',['stream_hasher',['../classstdex_1_1stream__hasher.html',1,'stdex']]], + ['string_49',['string',['../classstdex_1_1parser_1_1http__value.html#a808ed411ff6816162a54b99fb7307315',1,'stdex::parser::http_value']]], + ['stuff_20that_20didn_20t_20made_20it_20into_20std_20c_50',['stdex - Random stuff that didn't made it into std C++',['../index.html',1,'']]], + ['sub_5ftype_51',['sub_type',['../classstdex_1_1parser_1_1basic__mime__type.html#a6f0543705511623958d99bf04194a96a',1,'stdex::parser::basic_mime_type']]], + ['sync_52',['sync',['../classstdex_1_1ring.html#a68e471c5801c9c8232464005a3225eb3',1,'stdex::ring']]], + ['sys_5finfo_5ft_53',['sys_info_t',['../structstdex_1_1sys__info__t.html',1,'stdex']]], + ['sys_5fobject_54',['sys_object',['../classstdex_1_1sys__object.html',1,'stdex']]] ]; diff --git a/search/all_11.js b/search/all_11.js index 66985d7c7..45fc9a788 100644 --- a/search/all_11.js +++ b/search/all_11.js @@ -2,12 +2,18 @@ var searchData= [ ['t_20made_20it_20into_20std_20c_0',['stdex - Random stuff that didn't made it into std C++',['../index.html',1,'']]], ['tail_1',['tail',['../classstdex_1_1vector__queue.html#a1b87831a03da17b15d8c330a47708d00',1,'stdex::vector_queue']]], - ['tell_2',['tell',['../classstdex_1_1stream_1_1basic__file.html#ae072990f9c42b372048045717de438c3',1,'stdex::stream::basic_file::tell()'],['../classstdex_1_1stream_1_1diag__file.html#aa4ea6e5ca1ff91a6f5c9726f4251f3ce',1,'stdex::stream::diag_file::tell()'],['../classstdex_1_1stream_1_1memory__file.html#a665d78bdb906762139530035ba6013fa',1,'stdex::stream::memory_file::tell()'],['../classstdex_1_1stream_1_1cache.html#ae790c5f526771cfe2cb3b28d38a11dd9',1,'stdex::stream::cache::tell()'],['../classstdex_1_1stream_1_1file__window.html#ac5977ca09563126e2976abb356cb3b36',1,'stdex::stream::file_window::tell()'],['../classstdex_1_1stream_1_1file.html#aead21702bfdb09193a202afbce35421b',1,'stdex::stream::file::tell()']]], - ['that_20didn_20t_20made_20it_20into_20std_20c_3',['stdex - Random stuff that didn't made it into std C++',['../index.html',1,'']]], - ['to_5fdate_4',['to_date',['../structstdex_1_1chrono_1_1aosn__timestamp.html#a805c2ab1855a554a0fc2be56fa234489',1,'stdex::chrono::aosn_timestamp']]], - ['to_5fdmy_5',['to_dmy',['../structstdex_1_1chrono_1_1aosn__date.html#a1d7511309210a6766b8a7d5d792dbc62',1,'stdex::chrono::aosn_date::to_dmy()'],['../structstdex_1_1chrono_1_1aosn__timestamp.html#ae20e512af8ec094253b5af13f1d2e9ad',1,'stdex::chrono::aosn_timestamp::to_dmy()']]], - ['to_5ftime_5ft_6',['to_time_t',['../structstdex_1_1chrono_1_1aosn__date.html#a75edba9ce0fff5c322209ce7ce6617b9',1,'stdex::chrono::aosn_date::to_time_t()'],['../structstdex_1_1chrono_1_1aosn__timestamp.html#a7e6d02fbb9bccc438528aaec62babbd8',1,'stdex::chrono::aosn_timestamp::to_time_t()']]], - ['token_7',['token',['../classstdex_1_1parser_1_1http__value.html#aecdecacd265379c1d6e12a75424c5573',1,'stdex::parser::http_value']]], - ['truncate_8',['truncate',['../classstdex_1_1stream_1_1basic__file.html#a522305da60cc442ca3cd6b7aa2214d6e',1,'stdex::stream::basic_file::truncate()'],['../classstdex_1_1stream_1_1file__window.html#a10f67434e8f3784933e3f7fddd20ce54',1,'stdex::stream::file_window::truncate()'],['../classstdex_1_1stream_1_1cache.html#a2e19026e55cda14db786948b66d63aba',1,'stdex::stream::cache::truncate()'],['../classstdex_1_1stream_1_1file.html#aa1c4de0bca72ddc02db4e8328cefcf17',1,'stdex::stream::file::truncate()'],['../classstdex_1_1stream_1_1memory__file.html#aa35db1681e5c56046eaf0c70068b0d42',1,'stdex::stream::memory_file::truncate()'],['../classstdex_1_1stream_1_1diag__file.html#a1d0824a191f261a1c552b71a92584745',1,'stdex::stream::diag_file::truncate()']]], - ['try_5flock_9',['try_lock',['../classstdex_1_1spinlock.html#a47aca0d4a40922892035d7f18dee8f32',1,'stdex::spinlock']]] + ['tell_2',['tell',['../classstdex_1_1stream_1_1basic__file.html#ae072990f9c42b372048045717de438c3',1,'stdex::stream::basic_file::tell()'],['../classstdex_1_1stream_1_1file__window.html#ac5977ca09563126e2976abb356cb3b36',1,'stdex::stream::file_window::tell()'],['../classstdex_1_1stream_1_1cache.html#ae790c5f526771cfe2cb3b28d38a11dd9',1,'stdex::stream::cache::tell()'],['../classstdex_1_1stream_1_1file.html#aead21702bfdb09193a202afbce35421b',1,'stdex::stream::file::tell()'],['../classstdex_1_1stream_1_1memory__file.html#a665d78bdb906762139530035ba6013fa',1,'stdex::stream::memory_file::tell()'],['../classstdex_1_1stream_1_1diag__file.html#aa4ea6e5ca1ff91a6f5c9726f4251f3ce',1,'stdex::stream::diag_file::tell()']]], + ['text_3',['text',['../classstdex_1_1html_1_1text__token.html#a5115eb3a7c3261d69127b3996941ccd7',1,'stdex::html::text_token']]], + ['text_5ftoken_4',['text_token',['../classstdex_1_1html_1_1text__token.html',1,'stdex::html']]], + ['text_5ftoken_3c_20_5felem_2c_20std_3a_3achar_5ftraits_3c_20_5felem_20_3e_2c_20std_3a_3aallocator_3c_20_5felem_20_3e_20_3e_5',['text_token< _Elem, std::char_traits< _Elem >, std::allocator< _Elem > >',['../classstdex_1_1html_1_1text__token.html',1,'stdex::html']]], + ['text_5ftype_6',['text_type',['../classstdex_1_1html_1_1text__token.html#aa8021e395a161d2b928d6e16efbcbb53',1,'stdex::html::text_token']]], + ['that_20didn_20t_20made_20it_20into_20std_20c_7',['stdex - Random stuff that didn't made it into std C++',['../index.html',1,'']]], + ['to_5fdate_8',['to_date',['../structstdex_1_1chrono_1_1aosn__timestamp.html#a805c2ab1855a554a0fc2be56fa234489',1,'stdex::chrono::aosn_timestamp']]], + ['to_5fdmy_9',['to_dmy',['../structstdex_1_1chrono_1_1aosn__date.html#a1d7511309210a6766b8a7d5d792dbc62',1,'stdex::chrono::aosn_date::to_dmy()'],['../structstdex_1_1chrono_1_1aosn__timestamp.html#ae20e512af8ec094253b5af13f1d2e9ad',1,'stdex::chrono::aosn_timestamp::to_dmy()']]], + ['to_5ftime_5ft_10',['to_time_t',['../structstdex_1_1chrono_1_1aosn__date.html#a75edba9ce0fff5c322209ce7ce6617b9',1,'stdex::chrono::aosn_date::to_time_t()'],['../structstdex_1_1chrono_1_1aosn__timestamp.html#a7e6d02fbb9bccc438528aaec62babbd8',1,'stdex::chrono::aosn_timestamp::to_time_t()']]], + ['token_11',['token',['../classstdex_1_1html_1_1token.html',1,'stdex::html::token'],['../classstdex_1_1parser_1_1http__value.html#aecdecacd265379c1d6e12a75424c5573',1,'stdex::parser::http_value::token'],['../structstdex_1_1html_1_1inserted__token.html#ae7e37c09d69501cc5b33e057b277b2e8',1,'stdex::html::inserted_token::token']]], + ['tokens_12',['tokens',['../classstdex_1_1html_1_1parser.html#a759bd73194ebb69a0d1bebb289023816',1,'stdex::html::parser']]], + ['truncate_13',['truncate',['../classstdex_1_1stream_1_1basic__file.html#a522305da60cc442ca3cd6b7aa2214d6e',1,'stdex::stream::basic_file::truncate()'],['../classstdex_1_1stream_1_1file__window.html#a10f67434e8f3784933e3f7fddd20ce54',1,'stdex::stream::file_window::truncate()'],['../classstdex_1_1stream_1_1cache.html#a2e19026e55cda14db786948b66d63aba',1,'stdex::stream::cache::truncate()'],['../classstdex_1_1stream_1_1file.html#aa1c4de0bca72ddc02db4e8328cefcf17',1,'stdex::stream::file::truncate()'],['../classstdex_1_1stream_1_1memory__file.html#aa35db1681e5c56046eaf0c70068b0d42',1,'stdex::stream::memory_file::truncate()'],['../classstdex_1_1stream_1_1diag__file.html#a1d0824a191f261a1c552b71a92584745',1,'stdex::stream::diag_file::truncate()']]], + ['try_5flock_14',['try_lock',['../classstdex_1_1spinlock.html#a47aca0d4a40922892035d7f18dee8f32',1,'stdex::spinlock']]], + ['type_15',['type',['../classstdex_1_1html_1_1sequence.html#a49c618139178a5fcbefaf13c08a98969',1,'stdex::html::sequence::type'],['../classstdex_1_1html_1_1token.html#acd884397cc90fb8673de7958896954dc',1,'stdex::html::token::type'],['../classstdex_1_1parser_1_1basic__html__tag.html#a0b65b7b5d42aa4e113eef7aae334e989',1,'stdex::parser::basic_html_tag::type']]] ]; diff --git a/search/all_12.js b/search/all_12.js index aad5ea660..9987410d7 100644 --- a/search/all_12.js +++ b/search/all_12.js @@ -1,5 +1,7 @@ var searchData= [ ['unlock_0',['unlock',['../classstdex_1_1spinlock.html#aabdcf0cbe80a8eb5b68f656fb587d74a',1,'stdex::spinlock::unlock()'],['../classstdex_1_1stream_1_1basic__file.html#adf1a39e7aec3f14fedf6ce5c0984a791',1,'stdex::stream::basic_file::unlock()'],['../classstdex_1_1stream_1_1file__window.html#ac3d9a3cf3636010b43612d2c298e7c3d',1,'stdex::stream::file_window::unlock()'],['../classstdex_1_1stream_1_1cache.html#a7a15ab17abc847b380b13b43b4f1d12e',1,'stdex::stream::cache::unlock()'],['../classstdex_1_1stream_1_1file.html#a28e6d46e4183e094ef9fdcf591ebec46',1,'stdex::stream::file::unlock()'],['../classstdex_1_1stream_1_1diag__file.html#a9f0c158f4875c862f981282b818e7296',1,'stdex::stream::diag_file::unlock()']]], - ['user_5fcancelled_1',['user_cancelled',['../classstdex_1_1user__cancelled.html',1,'stdex::user_cancelled'],['../classstdex_1_1user__cancelled.html#af2e1ebab1038ba4356e19c04f167d23d',1,'stdex::user_cancelled::user_cancelled()']]] + ['url_1',['url',['../classstdex_1_1html_1_1url__token.html#a8ff40042e9c2e25b97c72a9f47220ac2',1,'stdex::html::url_token']]], + ['url_5ftoken_2',['url_token',['../classstdex_1_1html_1_1url__token.html',1,'stdex::html']]], + ['user_5fcancelled_3',['user_cancelled',['../classstdex_1_1user__cancelled.html',1,'stdex::user_cancelled'],['../classstdex_1_1user__cancelled.html#af2e1ebab1038ba4356e19c04f167d23d',1,'stdex::user_cancelled::user_cancelled()']]] ]; diff --git a/search/all_13.js b/search/all_13.js index 9a1b09106..6fb89ca5d 100644 --- a/search/all_13.js +++ b/search/all_13.js @@ -1,6 +1,6 @@ var searchData= [ - ['value_0',['value',['../classstdex_1_1parser_1_1basic__integer.html#ac42a57e08e8189c89817bfde6e507c95',1,'stdex::parser::basic_integer::value'],['../classstdex_1_1parser_1_1basic__scientific__numeral.html#a9aa6f1cbde1efccf75fd0df385f03477',1,'stdex::parser::basic_scientific_numeral::value'],['../classstdex_1_1parser_1_1basic__ipv4__address.html#ad50e8e52cf16226e57fa25e48bf17deb',1,'stdex::parser::basic_ipv4_address::value'],['../classstdex_1_1parser_1_1basic__ipv6__address.html#aee9fca8501ba3cd5e5c875ecdb419376',1,'stdex::parser::basic_ipv6_address::value'],['../classstdex_1_1parser_1_1basic__phone__number.html#aa0650f9f19dfe2d50bcdd79884dd6475',1,'stdex::parser::basic_phone_number::value'],['../classstdex_1_1parser_1_1http__parameter.html#a616b1cd7f872c3ff453c8d854a7db638',1,'stdex::parser::http_parameter::value'],['../classstdex_1_1parser_1_1http__weight.html#ac889015ae4b2640eaf067b343f7c05ff',1,'stdex::parser::http_weight::value'],['../classstdex_1_1parser_1_1http__cookie.html#add653aef947c19d25730adc728089a9f',1,'stdex::parser::http_cookie::value']]], + ['value_0',['value',['../structstdex_1_1html_1_1entity.html#ada811e70c54ad26fd971698121a7acaf',1,'stdex::html::entity::value'],['../classstdex_1_1parser_1_1basic__integer.html#ac42a57e08e8189c89817bfde6e507c95',1,'stdex::parser::basic_integer::value'],['../classstdex_1_1parser_1_1basic__scientific__numeral.html#a9aa6f1cbde1efccf75fd0df385f03477',1,'stdex::parser::basic_scientific_numeral::value'],['../classstdex_1_1parser_1_1basic__ipv4__address.html#ad50e8e52cf16226e57fa25e48bf17deb',1,'stdex::parser::basic_ipv4_address::value'],['../classstdex_1_1parser_1_1basic__ipv6__address.html#aee9fca8501ba3cd5e5c875ecdb419376',1,'stdex::parser::basic_ipv6_address::value'],['../classstdex_1_1parser_1_1basic__phone__number.html#aa0650f9f19dfe2d50bcdd79884dd6475',1,'stdex::parser::basic_phone_number::value'],['../classstdex_1_1parser_1_1http__parameter.html#a616b1cd7f872c3ff453c8d854a7db638',1,'stdex::parser::http_parameter::value'],['../classstdex_1_1parser_1_1http__weight.html#ac889015ae4b2640eaf067b343f7c05ff',1,'stdex::parser::http_weight::value'],['../classstdex_1_1parser_1_1http__cookie.html#add653aef947c19d25730adc728089a9f',1,'stdex::parser::http_cookie::value'],['../structstdex_1_1parser_1_1html__attribute.html#afbec76aaeed004cabcc647afe4ce9001',1,'stdex::parser::html_attribute::value']]], ['value_5ftype_1',['value_type',['../classstdex_1_1vector__queue.html#aa1f9e69fd453bc2a2e72cf937a50995e',1,'stdex::vector_queue']]], ['vector_5fqueue_2',['vector_queue',['../classstdex_1_1vector__queue.html',1,'stdex::vector_queue< T >'],['../classstdex_1_1vector__queue.html#a9cb327539aca0293920c0d436c6ea29b',1,'stdex::vector_queue::vector_queue(size_type size_max)'],['../classstdex_1_1vector__queue.html#a224fc214f514bb6dd333511613d89683',1,'stdex::vector_queue::vector_queue(const vector_queue< value_type > &other)'],['../classstdex_1_1vector__queue.html#a50fcb4c564c100ad02f963969572a7fb',1,'stdex::vector_queue::vector_queue(vector_queue< value_type > &&other)']]], ['version_3',['version',['../classstdex_1_1parser_1_1http__protocol.html#a49afaa7910baf6092f5042eca86824c7',1,'stdex::parser::http_protocol']]] diff --git a/search/all_14.js b/search/all_14.js index c39c32827..323f71828 100644 --- a/search/all_14.js +++ b/search/all_14.js @@ -2,16 +2,17 @@ var searchData= [ ['watchdog_0',['watchdog',['../classstdex_1_1watchdog.html#a045c86421267f195c45d7fa01c6147c0',1,'stdex::watchdog::watchdog()'],['../classstdex_1_1watchdog.html',1,'stdex::watchdog< _Clock, _Duration >']]], ['window_1',['window',['../classstdex_1_1stream_1_1window.html',1,'stdex::stream']]], - ['worker_2',['worker',['../classstdex_1_1stream_1_1replicator_1_1worker.html',1,'stdex::stream::replicator']]], - ['write_3',['write',['../classstdex_1_1stream_1_1limiter.html#a8fe783b504f019e29034c0572cec7834',1,'stdex::stream::limiter::write()'],['../classstdex_1_1stream_1_1diag__file.html#a3157aee8e9c754b02e876897fcb82236',1,'stdex::stream::diag_file::write()'],['../classstdex_1_1stream_1_1fifo.html#a30c7adb43b6f4bd0cb5d9c72f15fe9bf',1,'stdex::stream::fifo::write()'],['../classstdex_1_1stream_1_1memory__file.html#ae5b6602e176f1053ab2eef88d8312b49',1,'stdex::stream::memory_file::write()'],['../classstdex_1_1stream_1_1socket.html#ad83f6d5d4844092e9e6831a597c6e2e9',1,'stdex::stream::socket::write()'],['../classstdex_1_1stream_1_1basic__sys.html#a06666e09bf1e7486d277996267b51618',1,'stdex::stream::basic_sys::write()'],['../classstdex_1_1stream_1_1cache.html#ac436fbcac7eddf95b6e25d6368da3fb7',1,'stdex::stream::cache::write()'],['../classstdex_1_1stream_1_1file__window.html#a7a264381cf344fcd6fa70e0a4964cc93',1,'stdex::stream::file_window::write()'],['../classstdex_1_1stream_1_1window.html#a06f05191c35fdbadebc49e05a19d9f3c',1,'stdex::stream::window::write()'],['../classstdex_1_1stream_1_1buffer.html#a489a01a4c187e85f06ebe10314a891ae',1,'stdex::stream::buffer::write()'],['../classstdex_1_1stream_1_1async__writer.html#a39d3fc4fffb8aa9b971fa15beaa8149b',1,'stdex::stream::async_writer::write()'],['../classstdex_1_1stream_1_1replicator.html#abbbaa912a887b00a4a7a5d518079f5ec',1,'stdex::stream::replicator::write()'],['../classstdex_1_1stream_1_1converter.html#ae84a5c8d64942dbaa81ed54a181b3d7a',1,'stdex::stream::converter::write()'],['../classstdex_1_1stream_1_1basic.html#ad8af0444273509eb36ad81046ac92081',1,'stdex::stream::basic::write()'],['../classstdex_1_1stream__hasher.html#aea835790f7aba9fb6ad28363eaaf736b',1,'stdex::stream_hasher::write()'],['../classstdex_1_1base64__writer.html#aaca6933a48a0266e4e46cc93b03ef410',1,'stdex::base64_writer::write()']]], - ['write_5farray_4',['write_array',['../classstdex_1_1stream_1_1basic.html#af6c10ec4ab181b5ed5b061d115059b7a',1,'stdex::stream::basic::write_array(_In_reads_bytes_opt_(size *count) const void *array, size_t size, size_t count)'],['../classstdex_1_1stream_1_1basic.html#a22f9e1f6c1cf8fbd4e81b236ee41dcc6',1,'stdex::stream::basic::write_array(const std::basic_string< T_from, _Traits, _Ax > &wstr, charset_encoder< T_from, T_to > &encoder)'],['../classstdex_1_1stream_1_1basic.html#acdf4521be87593a8d09b2263d04582f8',1,'stdex::stream::basic::write_array(const T_from *wstr, charset_encoder< T_from, T_to > &encoder)'],['../classstdex_1_1stream_1_1basic.html#af43fb72c91263bee7f39c4f51fe0e272',1,'stdex::stream::basic::write_array(_In_reads_or_z_opt_(num_chars) const T_from *wstr, size_t num_chars, charset_encoder< T_from, T_to > &encoder)']]], - ['write_5fbyte_5',['write_byte',['../classstdex_1_1stream_1_1basic.html#af83cd6902f3f3bf18df2f08045570603',1,'stdex::stream::basic::write_byte()'],['../classstdex_1_1stream_1_1memory__file.html#a7d2187e9f98729b2c711a9cd242b7fc2',1,'stdex::stream::memory_file::write_byte()']]], - ['write_5fcharset_6',['write_charset',['../classstdex_1_1stream_1_1basic.html#ab61abc19936554288ea929e0eb299144',1,'stdex::stream::basic']]], - ['write_5fdata_7',['write_data',['../classstdex_1_1stream_1_1basic.html#acabab42a910d149fec6ef60090a34aab',1,'stdex::stream::basic::write_data()'],['../classstdex_1_1stream_1_1memory__file.html#ab0bcf389dd3540a5f978ef13dff5d332',1,'stdex::stream::memory_file::write_data()']]], - ['write_5flimit_8',['write_limit',['../classstdex_1_1stream_1_1limiter.html#af3d8db598efea694c0274b5420787873',1,'stdex::stream::limiter']]], - ['write_5foffset_9',['write_offset',['../classstdex_1_1stream_1_1window.html#a01d191d653be7a6d218c7feffa1b0ec3',1,'stdex::stream::window']]], - ['write_5fsprintf_10',['write_sprintf',['../classstdex_1_1stream_1_1basic.html#a63528d1cf030257c9d7f24d0d1d668f7',1,'stdex::stream::basic::write_sprintf(_Printf_format_string_params_(2) const char *format, locale_t locale,...)'],['../classstdex_1_1stream_1_1basic.html#a32f854944dc108d99c5ea5e87b19db7e',1,'stdex::stream::basic::write_sprintf(_Printf_format_string_params_(2) const wchar_t *format, locale_t locale,...)']]], - ['write_5fstr_11',['write_str',['../classstdex_1_1stream_1_1basic.html#a815369ef1a8ba07b289b8236fce018ac',1,'stdex::stream::basic::write_str(const T *data)'],['../classstdex_1_1stream_1_1basic.html#aca727d3cab3c7989f691957078a18471',1,'stdex::stream::basic::write_str(const std::basic_string< _Elem, _Traits, _Ax > &data)'],['../classstdex_1_1stream_1_1memory__file.html#ab8326c16c06548801982b07c930d7dfd',1,'stdex::stream::memory_file::write_str(const T *data)'],['../classstdex_1_1stream_1_1memory__file.html#a0e92587c1de0e39adbb9cf421e33646b',1,'stdex::stream::memory_file::write_str(const std::basic_string< _Elem, _Traits, _Ax > &data)']]], - ['write_5fstream_12',['write_stream',['../classstdex_1_1stream_1_1basic.html#ad28b193e6afa1352a00864bd28193cc2',1,'stdex::stream::basic::write_stream()'],['../classstdex_1_1stream_1_1memory__file.html#a4216e7ae6e306170357aef1ea1c304c7',1,'stdex::stream::memory_file::write_stream()']]], - ['write_5fvsprintf_13',['write_vsprintf',['../classstdex_1_1stream_1_1basic.html#a14931af91db2bab8204d6352a59c1bf7',1,'stdex::stream::basic::write_vsprintf(_Printf_format_string_params_(2) const char *format, locale_t locale, va_list params)'],['../classstdex_1_1stream_1_1basic.html#a3a7ac9211cd81b2203b55f1a2f131bc1',1,'stdex::stream::basic::write_vsprintf(_Printf_format_string_params_(2) const wchar_t *format, locale_t locale, va_list params)']]] + ['word_5findex_2',['word_index',['../structstdex_1_1html_1_1inserted__token.html#ada63f25062c74259e834a4ee0390d9a2',1,'stdex::html::inserted_token']]], + ['worker_3',['worker',['../classstdex_1_1stream_1_1replicator_1_1worker.html',1,'stdex::stream::replicator']]], + ['write_4',['write',['../classstdex_1_1stream_1_1buffer.html#a489a01a4c187e85f06ebe10314a891ae',1,'stdex::stream::buffer::write()'],['../classstdex_1_1stream_1_1diag__file.html#a3157aee8e9c754b02e876897fcb82236',1,'stdex::stream::diag_file::write()'],['../classstdex_1_1stream_1_1fifo.html#a30c7adb43b6f4bd0cb5d9c72f15fe9bf',1,'stdex::stream::fifo::write()'],['../classstdex_1_1stream_1_1memory__file.html#ae5b6602e176f1053ab2eef88d8312b49',1,'stdex::stream::memory_file::write()'],['../classstdex_1_1stream_1_1socket.html#ad83f6d5d4844092e9e6831a597c6e2e9',1,'stdex::stream::socket::write()'],['../classstdex_1_1stream_1_1basic__sys.html#a06666e09bf1e7486d277996267b51618',1,'stdex::stream::basic_sys::write()'],['../classstdex_1_1stream_1_1cache.html#ac436fbcac7eddf95b6e25d6368da3fb7',1,'stdex::stream::cache::write()'],['../classstdex_1_1stream_1_1file__window.html#a7a264381cf344fcd6fa70e0a4964cc93',1,'stdex::stream::file_window::write()'],['../classstdex_1_1stream_1_1window.html#a06f05191c35fdbadebc49e05a19d9f3c',1,'stdex::stream::window::write()'],['../classstdex_1_1stream_1_1limiter.html#a8fe783b504f019e29034c0572cec7834',1,'stdex::stream::limiter::write()'],['../classstdex_1_1stream_1_1async__writer.html#a39d3fc4fffb8aa9b971fa15beaa8149b',1,'stdex::stream::async_writer::write()'],['../classstdex_1_1stream_1_1replicator.html#abbbaa912a887b00a4a7a5d518079f5ec',1,'stdex::stream::replicator::write()'],['../classstdex_1_1stream_1_1converter.html#ae84a5c8d64942dbaa81ed54a181b3d7a',1,'stdex::stream::converter::write()'],['../classstdex_1_1stream_1_1basic.html#ad8af0444273509eb36ad81046ac92081',1,'stdex::stream::basic::write()'],['../classstdex_1_1stream__hasher.html#aea835790f7aba9fb6ad28363eaaf736b',1,'stdex::stream_hasher::write()'],['../classstdex_1_1base64__writer.html#aaca6933a48a0266e4e46cc93b03ef410',1,'stdex::base64_writer::write()']]], + ['write_5farray_5',['write_array',['../classstdex_1_1stream_1_1basic.html#af6c10ec4ab181b5ed5b061d115059b7a',1,'stdex::stream::basic::write_array(_In_reads_bytes_opt_(size *count) const void *array, size_t size, size_t count)'],['../classstdex_1_1stream_1_1basic.html#a22f9e1f6c1cf8fbd4e81b236ee41dcc6',1,'stdex::stream::basic::write_array(const std::basic_string< T_from, _Traits, _Ax > &wstr, charset_encoder< T_from, T_to > &encoder)'],['../classstdex_1_1stream_1_1basic.html#acdf4521be87593a8d09b2263d04582f8',1,'stdex::stream::basic::write_array(const T_from *wstr, charset_encoder< T_from, T_to > &encoder)'],['../classstdex_1_1stream_1_1basic.html#af43fb72c91263bee7f39c4f51fe0e272',1,'stdex::stream::basic::write_array(_In_reads_or_z_opt_(num_chars) const T_from *wstr, size_t num_chars, charset_encoder< T_from, T_to > &encoder)']]], + ['write_5fbyte_6',['write_byte',['../classstdex_1_1stream_1_1basic.html#af83cd6902f3f3bf18df2f08045570603',1,'stdex::stream::basic::write_byte()'],['../classstdex_1_1stream_1_1memory__file.html#a7d2187e9f98729b2c711a9cd242b7fc2',1,'stdex::stream::memory_file::write_byte()']]], + ['write_5fcharset_7',['write_charset',['../classstdex_1_1stream_1_1basic.html#ab61abc19936554288ea929e0eb299144',1,'stdex::stream::basic']]], + ['write_5fdata_8',['write_data',['../classstdex_1_1stream_1_1basic.html#acabab42a910d149fec6ef60090a34aab',1,'stdex::stream::basic::write_data()'],['../classstdex_1_1stream_1_1memory__file.html#ab0bcf389dd3540a5f978ef13dff5d332',1,'stdex::stream::memory_file::write_data()']]], + ['write_5flimit_9',['write_limit',['../classstdex_1_1stream_1_1limiter.html#af3d8db598efea694c0274b5420787873',1,'stdex::stream::limiter']]], + ['write_5foffset_10',['write_offset',['../classstdex_1_1stream_1_1window.html#a01d191d653be7a6d218c7feffa1b0ec3',1,'stdex::stream::window']]], + ['write_5fsprintf_11',['write_sprintf',['../classstdex_1_1stream_1_1basic.html#a63528d1cf030257c9d7f24d0d1d668f7',1,'stdex::stream::basic::write_sprintf(_Printf_format_string_params_(2) const char *format, locale_t locale,...)'],['../classstdex_1_1stream_1_1basic.html#a32f854944dc108d99c5ea5e87b19db7e',1,'stdex::stream::basic::write_sprintf(_Printf_format_string_params_(2) const wchar_t *format, locale_t locale,...)']]], + ['write_5fstr_12',['write_str',['../classstdex_1_1stream_1_1basic.html#a815369ef1a8ba07b289b8236fce018ac',1,'stdex::stream::basic::write_str(const T *data)'],['../classstdex_1_1stream_1_1basic.html#aca727d3cab3c7989f691957078a18471',1,'stdex::stream::basic::write_str(const std::basic_string< _Elem, _Traits, _Ax > &data)'],['../classstdex_1_1stream_1_1memory__file.html#ab8326c16c06548801982b07c930d7dfd',1,'stdex::stream::memory_file::write_str(const T *data)'],['../classstdex_1_1stream_1_1memory__file.html#a0e92587c1de0e39adbb9cf421e33646b',1,'stdex::stream::memory_file::write_str(const std::basic_string< _Elem, _Traits, _Ax > &data)']]], + ['write_5fstream_13',['write_stream',['../classstdex_1_1stream_1_1basic.html#ad28b193e6afa1352a00864bd28193cc2',1,'stdex::stream::basic::write_stream()'],['../classstdex_1_1stream_1_1memory__file.html#a4216e7ae6e306170357aef1ea1c304c7',1,'stdex::stream::memory_file::write_stream()']]], + ['write_5fvsprintf_14',['write_vsprintf',['../classstdex_1_1stream_1_1basic.html#a14931af91db2bab8204d6352a59c1bf7',1,'stdex::stream::basic::write_vsprintf(_Printf_format_string_params_(2) const char *format, locale_t locale, va_list params)'],['../classstdex_1_1stream_1_1basic.html#a3a7ac9211cd81b2203b55f1a2f131bc1',1,'stdex::stream::basic::write_vsprintf(_Printf_format_string_params_(2) const wchar_t *format, locale_t locale, va_list params)']]] ]; diff --git a/search/all_2.js b/search/all_2.js index be4b2c70d..46bf02347 100644 --- a/search/all_2.js +++ b/search/all_2.js @@ -5,19 +5,22 @@ var searchData= ['cached_5ffile_2',['cached_file',['../classstdex_1_1stream_1_1cached__file.html',1,'stdex::stream::cached_file'],['../classstdex_1_1stream_1_1cached__file.html#a2f88fcb00079a2303040a63dbfda09ff',1,'stdex::stream::cached_file::cached_file(const stdex::sstring &filename, int mode, size_t cache_size=default_cache_size)'],['../classstdex_1_1stream_1_1cached__file.html#aa53149a79b463450f64223f45285dc02',1,'stdex::stream::cached_file::cached_file(const schar_t *filename, int mode, size_t cache_size=default_cache_size)']]], ['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']]], - ['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_1crc32__hash.html#addf745566fe5a1ba3f947a70603ea235',1,'stdex::crc32_hash::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_1sha1__hash.html#a36f38887f8e90f88df0a420f0011b9b3',1,'stdex::sha1_hash::clear()'],['../classstdex_1_1md5__hash.html#a0952042043c10e184d9ee8a79421cc0f',1,'stdex::md5_hash::clear()'],['../classstdex_1_1block__hash.html#a8750f9c24cd22bd879dc638256534aec',1,'stdex::block_hash::clear()'],['../classstdex_1_1basic__hash.html#af5e2ff7b83da5a663fa3c9766734b771',1,'stdex::basic_hash::clear()'],['../classstdex_1_1base64__dec.html#a94738b63789489022e0c16063b732305',1,'stdex::base64_dec::clear()'],['../classstdex_1_1base64__enc.html#afb6a85176589d9ce1f65ce6355592fe7',1,'stdex::base64_enc::clear()']]], - ['close_8',['close',['../classstdex_1_1stream_1_1cache.html#aa88074bb669bcb654e027b76e32a2799',1,'stdex::stream::cache::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_1socket.html#a74e2f261c117cf8f20866632fb79b3c5',1,'stdex::stream::socket::close()'],['../classstdex_1_1stream_1_1basic__sys.html#aee56fbeb8b576a4337cb205ae865fafc',1,'stdex::stream::basic_sys::close()'],['../classstdex_1_1stream_1_1file__window.html#acace60a7ba95a139852f85aa4232bb14',1,'stdex::stream::file_window::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)']]], - ['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']]], - ['crc32_5fhash_17',['crc32_hash',['../classstdex_1_1crc32__hash.html',1,'stdex']]], - ['ctime_18',['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_19',['currency',['../classstdex_1_1parser_1_1basic__monetary__numeral.html#a62545d1c49178d4412da46d3cb2eba25',1,'stdex::parser::basic_monetary_numeral']]] + ['charset_5',['charset',['../classstdex_1_1parser_1_1basic__mime__type.html#ae6906c756cc427d662bac8fd392e2f70',1,'stdex::parser::basic_mime_type']]], + ['charset_5fencoder_6',['charset_encoder',['../classstdex_1_1charset__encoder.html',1,'stdex']]], + ['check_5fdigits_7',['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_8',['clear',['../classstdex_1_1block__hash.html#a8750f9c24cd22bd879dc638256534aec',1,'stdex::block_hash::clear()'],['../classstdex_1_1vector__queue.html#a93259be5f471580d2f8d7bee41032f9b',1,'stdex::vector_queue::clear()'],['../classstdex_1_1html_1_1document.html#adb0c50a68ad6ef3cbc3a78e3361932b7',1,'stdex::html::document::clear()'],['../classstdex_1_1hex__dec.html#a282bf5db0d16b29b12c71b73d3a33cc4',1,'stdex::hex_dec::clear()'],['../classstdex_1_1sha1__hash.html#a36f38887f8e90f88df0a420f0011b9b3',1,'stdex::sha1_hash::clear()'],['../classstdex_1_1md5__hash.html#a0952042043c10e184d9ee8a79421cc0f',1,'stdex::md5_hash::clear()'],['../classstdex_1_1crc32__hash.html#addf745566fe5a1ba3f947a70603ea235',1,'stdex::crc32_hash::clear()'],['../classstdex_1_1basic__hash.html#af5e2ff7b83da5a663fa3c9766734b771',1,'stdex::basic_hash::clear()'],['../classstdex_1_1base64__dec.html#a94738b63789489022e0c16063b732305',1,'stdex::base64_dec::clear()'],['../classstdex_1_1base64__enc.html#afb6a85176589d9ce1f65ce6355592fe7',1,'stdex::base64_enc::clear()']]], + ['close_9',['close',['../classstdex_1_1stream_1_1memory__file.html#a4cf33faaf1686335bd3e3a7e72813dd6',1,'stdex::stream::memory_file::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_1socket.html#a74e2f261c117cf8f20866632fb79b3c5',1,'stdex::stream::socket::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_1file__window.html#acace60a7ba95a139852f85aa4232bb14',1,'stdex::stream::file_window::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)']]], + ['code_10',['code',['../classstdex_1_1html_1_1element__end.html#ae84212100b568b2ba305592b93219f5a',1,'stdex::html::element_end::code'],['../classstdex_1_1html_1_1element.html#acad269ffc367d3a7df7cb42fed0ed486',1,'stdex::html::element::code']]], + ['comment_11',['comment',['../classstdex_1_1html_1_1comment.html',1,'stdex::html']]], + ['components_12',['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_13',['const_pointer',['../classstdex_1_1vector__queue.html#a0da411250e23047a37c4ac09abfa109d',1,'stdex::vector_queue']]], + ['const_5freference_14',['const_reference',['../classstdex_1_1vector__queue.html#afc37b516c234d4be0102412b28f46562',1,'stdex::vector_queue']]], + ['contains_15',['contains',['../structstdex_1_1interval.html#a1624ca77e8c9cb45cef61f7f8b532222',1,'stdex::interval']]], + ['content_16',['content',['../classstdex_1_1html_1_1instruction.html#a43dc8f8be5cc4de98bd272d3479412e3',1,'stdex::html::instruction::content'],['../classstdex_1_1parser_1_1basic__css__import.html#a78961a2a1a4354f019b83ac9f1debb3d',1,'stdex::parser::basic_css_import::content'],['../classstdex_1_1parser_1_1basic__html__value.html#a0f082125e7cfe97e9f1c3682a23a6d97',1,'stdex::parser::basic_html_value::content'],['../classstdex_1_1parser_1_1basic__css__uri.html#a6dffc08c3df290e8ce650f081f540d31',1,'stdex::parser::basic_css_uri::content'],['../classstdex_1_1parser_1_1basic__css__string.html#ad517fcde901d706866439378b1f4a4b8',1,'stdex::parser::basic_css_string::content'],['../classstdex_1_1parser_1_1basic__css__comment.html#affbd26e06808a2decb4832250b6efed3',1,'stdex::parser::basic_css_comment::content'],['../classstdex_1_1parser_1_1http__quoted__string.html#ab6e413ccf79e9f3dddd35c2a607381dd',1,'stdex::parser::http_quoted_string::content'],['../classstdex_1_1html_1_1comment.html#a12d9a22d5b67fbed22fc033b5e5c932f',1,'stdex::html::comment::content']]], + ['convert_17',['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_18',['converter',['../classstdex_1_1stream_1_1converter.html',1,'stdex::stream']]], + ['country_19',['country',['../classstdex_1_1parser_1_1basic__iban.html#a558e20a09ecb7796ce1cb02c638aec0a',1,'stdex::parser::basic_iban']]], + ['crc32_5fhash_20',['crc32_hash',['../classstdex_1_1crc32__hash.html',1,'stdex']]], + ['ctime_21',['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_22',['currency',['../classstdex_1_1parser_1_1basic__monetary__numeral.html#a62545d1c49178d4412da46d3cb2eba25',1,'stdex::parser::basic_monetary_numeral']]] ]; diff --git a/search/all_3.js b/search/all_3.js index 1131443b8..028c061da 100644 --- a/search/all_3.js +++ b/search/all_3.js @@ -1,15 +1,18 @@ var searchData= [ - ['data_0',['data',['../classstdex_1_1idrec_1_1record.html#a1ab09fae53142836c958a63137fb37cb',1,'stdex::idrec::record::data'],['../classstdex_1_1stream_1_1replicator_1_1worker.html#af37e1df8c6e0189e856a2bb38dd603bf',1,'stdex::stream::replicator::worker::data'],['../classstdex_1_1basic__hash.html#a00c5ecc12bc29e5381743fa2239a1dc3',1,'stdex::basic_hash::data()'],['../classstdex_1_1stream_1_1memory__file.html#aff374fc64c7453dc0cef22f19bc400ce',1,'stdex::stream::memory_file::data()']]], + ['data_0',['data',['../classstdex_1_1html_1_1token.html#ab9a44b08a117fe7c3f19982ec3c1edab',1,'stdex::html::token::data'],['../classstdex_1_1idrec_1_1record.html#a1ab09fae53142836c958a63137fb37cb',1,'stdex::idrec::record::data'],['../classstdex_1_1stream_1_1replicator_1_1worker.html#af37e1df8c6e0189e856a2bb38dd603bf',1,'stdex::stream::replicator::worker::data'],['../classstdex_1_1basic__hash.html#a00c5ecc12bc29e5381743fa2239a1dc3',1,'stdex::basic_hash::data()'],['../classstdex_1_1stream_1_1memory__file.html#aff374fc64c7453dc0cef22f19bc400ce',1,'stdex::stream::memory_file::data()']]], ['day_5fof_5fweek_1',['day_of_week',['../structstdex_1_1chrono_1_1aosn__date.html#a22273e1d536ed78a67beef7be5d0ebd6',1,'stdex::chrono::aosn_date::day_of_week(const time_point tp)'],['../structstdex_1_1chrono_1_1aosn__date.html#a27f6f9c4f44d9f874b9edb868afa264d',1,'stdex::chrono::aosn_date::day_of_week(uint8_t day, uint8_t month, int32_t year)']]], ['dec_5fsize_2',['dec_size',['../classstdex_1_1base64__dec.html#a203f2afa5839242c1230cb22e0a65b25',1,'stdex::base64_dec::dec_size()'],['../classstdex_1_1hex__dec.html#acf3d5adf4766056a630d1ceeab946b55',1,'stdex::hex_dec::dec_size()']]], - ['decimal_3',['decimal',['../classstdex_1_1parser_1_1basic__scientific__numeral.html#ab002d811ce7c7590863492bbc4ac355f',1,'stdex::parser::basic_scientific_numeral::decimal'],['../classstdex_1_1parser_1_1basic__monetary__numeral.html#ac1442f0871a1b43db2d4cd45e05803ac',1,'stdex::parser::basic_monetary_numeral::decimal']]], - ['decimal_5fseparator_4',['decimal_separator',['../classstdex_1_1parser_1_1basic__scientific__numeral.html#ae09233c93964704acf2bbd762fc14372',1,'stdex::parser::basic_scientific_numeral::decimal_separator'],['../classstdex_1_1parser_1_1basic__monetary__numeral.html#a5393628850b747e190a4e0d50eb97144',1,'stdex::parser::basic_monetary_numeral::decimal_separator']]], - ['decode_5',['decode',['../classstdex_1_1base64__dec.html#a1beaf09718d63d49f9d95cf0e75a50bf',1,'stdex::base64_dec::decode(std::vector< _Ty, _Ax > &out, bool &is_last, const _Tchr *data, size_t size)'],['../classstdex_1_1base64__dec.html#a4b5f0334d5d5f85b7d02b6b21db8759e',1,'stdex::base64_dec::decode(std::vector< _Ty, _Ax > &out)'],['../classstdex_1_1base64__reader.html#a523ece0190b031882162c7e4edd33fbb',1,'stdex::base64_reader::decode()'],['../classstdex_1_1hex__dec.html#ab5ac7cfefa8db97c8196d1ef2c327406',1,'stdex::hex_dec::decode()']]], - ['detach_6',['detach',['../classstdex_1_1global__progress.html#aa2c5391aa2f1f30e72a700768bc52f84',1,'stdex::global_progress']]], - ['diag_5ffile_7',['diag_file',['../classstdex_1_1stream_1_1diag__file.html',1,'stdex::stream']]], - ['didn_20t_20made_20it_20into_20std_20c_8',['stdex - Random stuff that didn't made it into std C++',['../index.html',1,'']]], - ['digit_5fcount_9',['digit_count',['../classstdex_1_1parser_1_1basic__integer10ts.html#a3c400d7c6e0edf695e7cf5e9f43ae388',1,'stdex::parser::basic_integer10ts']]], - ['do_5fset_10',['do_set',['../classstdex_1_1lazy__progress.html#ad0242cb4f3ece8aacfaab8804e7c646e',1,'stdex::lazy_progress']]], - ['duplicate_11',['duplicate',['../classstdex_1_1sys__object.html#abf438fb703eeed47147841b07b44d46d',1,'stdex::sys_object']]] + ['decimal_3',['decimal',['../classstdex_1_1parser_1_1basic__monetary__numeral.html#ac1442f0871a1b43db2d4cd45e05803ac',1,'stdex::parser::basic_monetary_numeral::decimal'],['../classstdex_1_1parser_1_1basic__scientific__numeral.html#ab002d811ce7c7590863492bbc4ac355f',1,'stdex::parser::basic_scientific_numeral::decimal']]], + ['decimal_5fseparator_4',['decimal_separator',['../classstdex_1_1parser_1_1basic__monetary__numeral.html#a5393628850b747e190a4e0d50eb97144',1,'stdex::parser::basic_monetary_numeral::decimal_separator'],['../classstdex_1_1parser_1_1basic__scientific__numeral.html#ae09233c93964704acf2bbd762fc14372',1,'stdex::parser::basic_scientific_numeral::decimal_separator']]], + ['declaration_5',['declaration',['../classstdex_1_1html_1_1declaration.html',1,'stdex::html']]], + ['decode_6',['decode',['../classstdex_1_1hex__dec.html#ab5ac7cfefa8db97c8196d1ef2c327406',1,'stdex::hex_dec::decode()'],['../classstdex_1_1base64__dec.html#a1beaf09718d63d49f9d95cf0e75a50bf',1,'stdex::base64_dec::decode(std::vector< _Ty, _Ax > &out, bool &is_last, const _Tchr *data, size_t size)'],['../classstdex_1_1base64__dec.html#a4b5f0334d5d5f85b7d02b6b21db8759e',1,'stdex::base64_dec::decode(std::vector< _Ty, _Ax > &out)'],['../classstdex_1_1base64__reader.html#a523ece0190b031882162c7e4edd33fbb',1,'stdex::base64_reader::decode()']]], + ['detach_7',['detach',['../classstdex_1_1global__progress.html#aa2c5391aa2f1f30e72a700768bc52f84',1,'stdex::global_progress']]], + ['diag_5ffile_8',['diag_file',['../classstdex_1_1stream_1_1diag__file.html',1,'stdex::stream']]], + ['didn_20t_20made_20it_20into_20std_20c_9',['stdex - Random stuff that didn't made it into std C++',['../index.html',1,'']]], + ['digit_5fcount_10',['digit_count',['../classstdex_1_1parser_1_1basic__integer10ts.html#a3c400d7c6e0edf695e7cf5e9f43ae388',1,'stdex::parser::basic_integer10ts']]], + ['do_5fset_11',['do_set',['../classstdex_1_1lazy__progress.html#ad0242cb4f3ece8aacfaab8804e7c646e',1,'stdex::lazy_progress']]], + ['document_12',['document',['../classstdex_1_1html_1_1document.html',1,'stdex::html']]], + ['document_3c_20_5felem_2c_20_5ftraits_2c_20_5falloc_20_3e_13',['document< _Elem, _Traits, _Alloc >',['../classstdex_1_1html_1_1document.html',1,'stdex::html']]], + ['duplicate_14',['duplicate',['../classstdex_1_1sys__object.html#abf438fb703eeed47147841b07b44d46d',1,'stdex::sys_object']]] ]; diff --git a/search/all_4.js b/search/all_4.js index 472f1733a..b3f2825c6 100644 --- a/search/all_4.js +++ b/search/all_4.js @@ -1,13 +1,21 @@ var searchData= [ - ['elevated_0',['elevated',['../structstdex_1_1sys__info__t.html#a5ab4199ac9092bd900eabd5a1361b0f7',1,'stdex::sys_info_t']]], - ['emoticon_1',['emoticon',['../classstdex_1_1parser_1_1basic__emoticon.html#ab746ed27e68939dd9e544b6e70476650',1,'stdex::parser::basic_emoticon']]], - ['empty_2',['empty',['../structstdex_1_1interval.html#a1fa5153f1f7707e21dc41c31197659a4',1,'stdex::interval::empty()'],['../classstdex_1_1vector__queue.html#a1502ae16a184fac7b1be9e1709dd1b5d',1,'stdex::vector_queue::empty()']]], - ['enc_5fsize_3',['enc_size',['../classstdex_1_1base64__enc.html#afbae8f49a0948ea7bb23d0faa8f67f21',1,'stdex::base64_enc::enc_size()'],['../classstdex_1_1hex__enc.html#a47db116dcc51daa878d3ecc4c1ab4d8f',1,'stdex::hex_enc::enc_size()']]], - ['encode_4',['encode',['../classstdex_1_1base64__writer.html#a54f0c38bb19f7757e42f5f76695c3a17',1,'stdex::base64_writer::encode()'],['../classstdex_1_1hex__enc.html#a51554940e79b6192f10a7860ca407191',1,'stdex::hex_enc::encode()'],['../classstdex_1_1base64__writer.html#a60b74be588c41f28c88ca0d49deb53af',1,'stdex::base64_writer::encode()'],['../classstdex_1_1base64__enc.html#a709172f7120284fcea1d7856d8ff550d',1,'stdex::base64_enc::encode(std::basic_string< _Elem, _Traits, _Ax > &out, size_t size)'],['../classstdex_1_1base64__enc.html#a506985ccd54fd95dbc021457881d77c2',1,'stdex::base64_enc::encode(std::basic_string< _Elem, _Traits, _Ax > &out)'],['../classstdex_1_1base64__enc.html#a0ee96b5ec63fecc20c44afe1f1df6f04',1,'stdex::base64_enc::encode(std::basic_string< _Elem, _Traits, _Ax > &out, const void *data, size_t size, bool is_last=true)']]], - ['end_5',['end',['../structstdex_1_1interval.html#a9b92e2b20290d8ac5a9b00209f25e27a',1,'stdex::interval']]], - ['exists_6',['exists',['../classstdex_1_1stream_1_1file.html#afb21712a5d43ecfe18dbe6aea2785e7f',1,'stdex::stream::file::exists(const stdex::schar_t *filename)'],['../classstdex_1_1stream_1_1file.html#a4b483f3051aa3d9f47da64ea0eb981d3',1,'stdex::stream::file::exists(const stdex::sstring &filename)']]], - ['exponent_7',['exponent',['../classstdex_1_1parser_1_1basic__scientific__numeral.html#ac3b886b3334d64811d82d1d47fbafe66',1,'stdex::parser::basic_scientific_numeral']]], - ['exponent_5fsymbol_8',['exponent_symbol',['../classstdex_1_1parser_1_1basic__scientific__numeral.html#a66134e1cb72bdfb75f2ac634fee02ee3',1,'stdex::parser::basic_scientific_numeral']]], - ['eyes_9',['eyes',['../classstdex_1_1parser_1_1basic__emoticon.html#a2700be6652350445e571cf95940fd32a',1,'stdex::parser::basic_emoticon']]] + ['element_0',['element',['../classstdex_1_1html_1_1element.html',1,'stdex::html']]], + ['element_5fend_1',['element_end',['../classstdex_1_1html_1_1element__end.html',1,'stdex::html']]], + ['element_5fstart_2',['element_start',['../classstdex_1_1html_1_1element__start.html',1,'stdex::html']]], + ['element_5ftraits_3',['element_traits',['../structstdex_1_1html_1_1element__traits.html',1,'stdex::html']]], + ['elevated_4',['elevated',['../structstdex_1_1sys__info__t.html#a5ab4199ac9092bd900eabd5a1361b0f7',1,'stdex::sys_info_t']]], + ['emoticon_5',['emoticon',['../classstdex_1_1parser_1_1basic__emoticon.html#ab746ed27e68939dd9e544b6e70476650',1,'stdex::parser::basic_emoticon']]], + ['empty_6',['empty',['../structstdex_1_1interval.html#a1fa5153f1f7707e21dc41c31197659a4',1,'stdex::interval::empty()'],['../classstdex_1_1vector__queue.html#a1502ae16a184fac7b1be9e1709dd1b5d',1,'stdex::vector_queue::empty()']]], + ['enc_5fsize_7',['enc_size',['../classstdex_1_1base64__enc.html#afbae8f49a0948ea7bb23d0faa8f67f21',1,'stdex::base64_enc::enc_size()'],['../classstdex_1_1hex__enc.html#a47db116dcc51daa878d3ecc4c1ab4d8f',1,'stdex::hex_enc::enc_size()']]], + ['encode_8',['encode',['../classstdex_1_1base64__enc.html#a709172f7120284fcea1d7856d8ff550d',1,'stdex::base64_enc::encode()'],['../classstdex_1_1hex__enc.html#a51554940e79b6192f10a7860ca407191',1,'stdex::hex_enc::encode()'],['../classstdex_1_1base64__writer.html#a60b74be588c41f28c88ca0d49deb53af',1,'stdex::base64_writer::encode(size_t size)'],['../classstdex_1_1base64__writer.html#a54f0c38bb19f7757e42f5f76695c3a17',1,'stdex::base64_writer::encode()'],['../classstdex_1_1base64__enc.html#a506985ccd54fd95dbc021457881d77c2',1,'stdex::base64_enc::encode(std::basic_string< _Elem, _Traits, _Ax > &out)'],['../classstdex_1_1base64__enc.html#a0ee96b5ec63fecc20c44afe1f1df6f04',1,'stdex::base64_enc::encode(std::basic_string< _Elem, _Traits, _Ax > &out, const void *data, size_t size, bool is_last=true)']]], + ['encoding_9',['encoding',['../classstdex_1_1html_1_1url__token.html#a2c3f829a7162f678bc2cd1f080747a66',1,'stdex::html::url_token']]], + ['end_10',['end',['../classstdex_1_1html_1_1element__start.html#a8527b1a5398d4f6702c97824a44479cc',1,'stdex::html::element_start::end'],['../structstdex_1_1interval.html#a9b92e2b20290d8ac5a9b00209f25e27a',1,'stdex::interval::end']]], + ['end_5fsequence_11',['end_sequence',['../classstdex_1_1html_1_1starting__token.html#a314307ae87aead197750b2457e1df21d',1,'stdex::html::starting_token']]], + ['end_5ftokens_12',['end_tokens',['../classstdex_1_1html_1_1parser.html#a290412efc03679f0408120b390ee3028',1,'stdex::html::parser']]], + ['entity_13',['entity',['../structstdex_1_1html_1_1entity.html',1,'stdex::html']]], + ['exists_14',['exists',['../classstdex_1_1stream_1_1file.html#afb21712a5d43ecfe18dbe6aea2785e7f',1,'stdex::stream::file::exists(const stdex::schar_t *filename)'],['../classstdex_1_1stream_1_1file.html#a4b483f3051aa3d9f47da64ea0eb981d3',1,'stdex::stream::file::exists(const stdex::sstring &filename)']]], + ['exponent_15',['exponent',['../classstdex_1_1parser_1_1basic__scientific__numeral.html#ac3b886b3334d64811d82d1d47fbafe66',1,'stdex::parser::basic_scientific_numeral']]], + ['exponent_5fsymbol_16',['exponent_symbol',['../classstdex_1_1parser_1_1basic__scientific__numeral.html#a66134e1cb72bdfb75f2ac634fee02ee3',1,'stdex::parser::basic_scientific_numeral']]], + ['eyes_17',['eyes',['../classstdex_1_1parser_1_1basic__emoticon.html#a2700be6652350445e571cf95940fd32a',1,'stdex::parser::basic_emoticon']]] ]; diff --git a/search/all_5.js b/search/all_5.js index 4fa233cb8..658ae3ed4 100644 --- a/search/all_5.js +++ b/search/all_5.js @@ -1,11 +1,11 @@ var searchData= [ ['fifo_0',['fifo',['../classstdex_1_1stream_1_1fifo.html',1,'stdex::stream']]], - ['file_1',['file',['../classstdex_1_1stream_1_1file.html',1,'stdex::stream::file'],['../classstdex_1_1stream_1_1file.html#a31e46e58ec40db989b36c3553b09084f',1,'stdex::stream::file::file(const schar_t *filename, int mode)'],['../classstdex_1_1stream_1_1file.html#a0b923e8b3d01987973d4e2a9ea05a1e1',1,'stdex::stream::file::file(const stdex::sstring &filename, int mode)']]], + ['file_1',['file',['../classstdex_1_1stream_1_1file.html',1,'stdex::stream::file'],['../classstdex_1_1stream_1_1file.html#a0b923e8b3d01987973d4e2a9ea05a1e1',1,'stdex::stream::file::file(const stdex::sstring &filename, int mode)'],['../classstdex_1_1stream_1_1file.html#a31e46e58ec40db989b36c3553b09084f',1,'stdex::stream::file::file(const schar_t *filename, int mode)']]], ['file_5fwindow_2',['file_window',['../classstdex_1_1stream_1_1file__window.html',1,'stdex::stream']]], - ['finalize_3',['finalize',['../classstdex_1_1basic__hash.html#ab2f4729c60bbb2ce12d5100be26108cf',1,'stdex::basic_hash::finalize()'],['../classstdex_1_1crc32__hash.html#a04aeb2009f5e615481752757b9ec0731',1,'stdex::crc32_hash::finalize()'],['../classstdex_1_1md5__hash.html#ab72e50dfa280696db29143b063fccbcb',1,'stdex::md5_hash::finalize()'],['../classstdex_1_1sha1__hash.html#aaf5f58e8b62d19d1fcc80b4f73f9ca8d',1,'stdex::sha1_hash::finalize()']]], + ['finalize_3',['finalize',['../classstdex_1_1basic__hash.html#ab2f4729c60bbb2ce12d5100be26108cf',1,'stdex::basic_hash::finalize()'],['../classstdex_1_1crc32__hash.html#a04aeb2009f5e615481752757b9ec0731',1,'stdex::crc32_hash::finalize()'],['../classstdex_1_1md5__hash.html#ab72e50dfa280696db29143b063fccbcb',1,'stdex::md5_hash::finalize()'],['../classstdex_1_1sha1__hash.html#aaf5f58e8b62d19d1fcc80b4f73f9ca8d',1,'stdex::sha1_hash::finalize()'],['../classstdex_1_1html_1_1document.html#a25a46afab4d3c523ef3734f6b7584098',1,'stdex::html::document::finalize()']]], ['find_4',['find',['../classstdex_1_1idrec_1_1record.html#a19523040d07119055884a7a2f8ef25fd',1,'stdex::idrec::record::find(std::istream &stream, std::streamoff end=(std::streamoff) -1)'],['../classstdex_1_1idrec_1_1record.html#a6566678aa326da5b2d84c38b76d1c195',1,'stdex::idrec::record::find(stdex::stream::basic_file &stream, stdex::stream::foff_t end=stdex::stream::foff_max)']]], - ['flush_5',['flush',['../classstdex_1_1stream_1_1buffer.html#a18f9edc9af41f3a71d84f7eb4e7d5332',1,'stdex::stream::buffer::flush()'],['../classstdex_1_1stream_1_1diag__file.html#aadb3e9de2c84e317bf454ae764d8fcdf',1,'stdex::stream::diag_file::flush()'],['../classstdex_1_1stream_1_1basic__sys.html#a6eae9769feea69fa9ce8b127ca2f7891',1,'stdex::stream::basic_sys::flush()'],['../classstdex_1_1stream_1_1cache.html#ac33e763d8103ad8e910b75085a4cf3ac',1,'stdex::stream::cache::flush()'],['../classstdex_1_1stream_1_1file__window.html#a2a2b88934b073b456da579ca3e3b43ff',1,'stdex::stream::file_window::flush()'],['../classstdex_1_1stream_1_1async__writer.html#a25c72d3b2edaba300eb158d06dfd03d2',1,'stdex::stream::async_writer::flush()'],['../classstdex_1_1stream_1_1replicator.html#a77d2ddda29ef5dfb835453ff1dd90f2e',1,'stdex::stream::replicator::flush()'],['../classstdex_1_1stream_1_1converter.html#a0d6af4c223625bc8ab677978b225d06e',1,'stdex::stream::converter::flush()'],['../classstdex_1_1stream_1_1basic.html#a46c70519f3e4b1f3436e85a6623555dc',1,'stdex::stream::basic::flush()']]], + ['flush_5',['flush',['../classstdex_1_1stream_1_1diag__file.html#aadb3e9de2c84e317bf454ae764d8fcdf',1,'stdex::stream::diag_file::flush()'],['../classstdex_1_1stream_1_1basic__sys.html#a6eae9769feea69fa9ce8b127ca2f7891',1,'stdex::stream::basic_sys::flush()'],['../classstdex_1_1stream_1_1cache.html#ac33e763d8103ad8e910b75085a4cf3ac',1,'stdex::stream::cache::flush()'],['../classstdex_1_1stream_1_1file__window.html#a2a2b88934b073b456da579ca3e3b43ff',1,'stdex::stream::file_window::flush()'],['../classstdex_1_1stream_1_1async__writer.html#a25c72d3b2edaba300eb158d06dfd03d2',1,'stdex::stream::async_writer::flush()'],['../classstdex_1_1stream_1_1buffer.html#a18f9edc9af41f3a71d84f7eb4e7d5332',1,'stdex::stream::buffer::flush()'],['../classstdex_1_1stream_1_1replicator.html#a77d2ddda29ef5dfb835453ff1dd90f2e',1,'stdex::stream::replicator::flush()'],['../classstdex_1_1stream_1_1converter.html#a0d6af4c223625bc8ab677978b225d06e',1,'stdex::stream::converter::flush()'],['../classstdex_1_1stream_1_1basic.html#a46c70519f3e4b1f3436e85a6623555dc',1,'stdex::stream::basic::flush()']]], ['fraction_6',['fraction',['../classstdex_1_1parser_1_1basic__mixed__numeral.html#a288fa70b3073080487d6d253600dca34',1,'stdex::parser::basic_mixed_numeral']]], ['free_5flocale_5fdelete_7',['free_locale_delete',['../structstdex_1_1free__locale__delete.html',1,'stdex']]], ['from_5fdate_8',['from_date',['../structstdex_1_1chrono_1_1aosn__timestamp.html#a47f38a2cdf1525e44ac800311d9ab825',1,'stdex::chrono::aosn_timestamp']]], diff --git a/search/all_7.js b/search/all_7.js index e79c9070b..d3e454997 100644 --- a/search/all_7.js +++ b/search/all_7.js @@ -5,32 +5,33 @@ var searchData= ['head_2',['head',['../classstdex_1_1vector__queue.html#a5d1e9d77cf329abd9127d2a6dfbd08c4',1,'stdex::vector_queue']]], ['hex_5fdec_3',['hex_dec',['../classstdex_1_1hex__dec.html',1,'stdex::hex_dec'],['../classstdex_1_1hex__dec.html#a61bd84f6b79b2b8e9daebfafeb2f17ad',1,'stdex::hex_dec::hex_dec()']]], ['hex_5fenc_4',['hex_enc',['../classstdex_1_1hex__enc.html',1,'stdex::hex_enc'],['../classstdex_1_1hex__enc.html#a882581bc4798b138de9322d1b0bdd433',1,'stdex::hex_enc::hex_enc()']]], - ['http_5fagent_5',['http_agent',['../classstdex_1_1parser_1_1http__agent.html',1,'stdex::parser']]], - ['http_5fany_5ftype_6',['http_any_type',['../classstdex_1_1parser_1_1http__any__type.html',1,'stdex::parser']]], - ['http_5fasterisk_7',['http_asterisk',['../classstdex_1_1parser_1_1http__asterisk.html',1,'stdex::parser']]], - ['http_5fcookie_8',['http_cookie',['../classstdex_1_1parser_1_1http__cookie.html',1,'stdex::parser']]], - ['http_5fcookie_5fparameter_9',['http_cookie_parameter',['../classstdex_1_1parser_1_1http__cookie__parameter.html',1,'stdex::parser']]], - ['http_5ffactor_5fmore_10',['http_factor_more',['../structstdex_1_1parser_1_1http__factor__more.html',1,'stdex::parser']]], - ['http_5fheader_11',['http_header',['../classstdex_1_1parser_1_1http__header.html',1,'stdex::parser']]], - ['http_5flanguage_12',['http_language',['../classstdex_1_1parser_1_1http__language.html',1,'stdex::parser']]], - ['http_5fline_5fbreak_13',['http_line_break',['../classstdex_1_1parser_1_1http__line__break.html',1,'stdex::parser']]], - ['http_5fmedia_5frange_14',['http_media_range',['../classstdex_1_1parser_1_1http__media__range.html',1,'stdex::parser']]], - ['http_5fmedia_5ftype_15',['http_media_type',['../classstdex_1_1parser_1_1http__media__type.html',1,'stdex::parser']]], - ['http_5fparameter_16',['http_parameter',['../classstdex_1_1parser_1_1http__parameter.html',1,'stdex::parser']]], - ['http_5fprotocol_17',['http_protocol',['../classstdex_1_1parser_1_1http__protocol.html',1,'stdex::parser']]], - ['http_5fquoted_5fstring_18',['http_quoted_string',['../classstdex_1_1parser_1_1http__quoted__string.html',1,'stdex::parser']]], - ['http_5frequest_19',['http_request',['../classstdex_1_1parser_1_1http__request.html',1,'stdex::parser']]], - ['http_5fspace_20',['http_space',['../classstdex_1_1parser_1_1http__space.html',1,'stdex::parser']]], - ['http_5ftext_5fchar_21',['http_text_char',['../classstdex_1_1parser_1_1http__text__char.html',1,'stdex::parser']]], - ['http_5ftoken_22',['http_token',['../classstdex_1_1parser_1_1http__token.html',1,'stdex::parser']]], - ['http_5furl_23',['http_url',['../classstdex_1_1parser_1_1http__url.html',1,'stdex::parser']]], - ['http_5furl_5fparameter_24',['http_url_parameter',['../classstdex_1_1parser_1_1http__url__parameter.html',1,'stdex::parser']]], - ['http_5furl_5fpath_25',['http_url_path',['../classstdex_1_1parser_1_1http__url__path.html',1,'stdex::parser']]], - ['http_5furl_5fpath_5fsegment_26',['http_url_path_segment',['../classstdex_1_1parser_1_1http__url__path__segment.html',1,'stdex::parser']]], - ['http_5furl_5fport_27',['http_url_port',['../classstdex_1_1parser_1_1http__url__port.html',1,'stdex::parser']]], - ['http_5furl_5fserver_28',['http_url_server',['../classstdex_1_1parser_1_1http__url__server.html',1,'stdex::parser']]], - ['http_5fvalue_29',['http_value',['../classstdex_1_1parser_1_1http__value.html',1,'stdex::parser']]], - ['http_5fvalue_5fcollection_30',['http_value_collection',['../classstdex_1_1parser_1_1http__value__collection.html',1,'stdex::parser']]], - ['http_5fweight_31',['http_weight',['../classstdex_1_1parser_1_1http__weight.html',1,'stdex::parser']]], - ['http_5fweighted_5fvalue_32',['http_weighted_value',['../classstdex_1_1parser_1_1http__weighted__value.html',1,'stdex::parser']]] + ['html_5fattribute_5',['html_attribute',['../structstdex_1_1parser_1_1html__attribute.html',1,'stdex::parser']]], + ['http_5fagent_6',['http_agent',['../classstdex_1_1parser_1_1http__agent.html',1,'stdex::parser']]], + ['http_5fany_5ftype_7',['http_any_type',['../classstdex_1_1parser_1_1http__any__type.html',1,'stdex::parser']]], + ['http_5fasterisk_8',['http_asterisk',['../classstdex_1_1parser_1_1http__asterisk.html',1,'stdex::parser']]], + ['http_5fcookie_9',['http_cookie',['../classstdex_1_1parser_1_1http__cookie.html',1,'stdex::parser']]], + ['http_5fcookie_5fparameter_10',['http_cookie_parameter',['../classstdex_1_1parser_1_1http__cookie__parameter.html',1,'stdex::parser']]], + ['http_5ffactor_5fmore_11',['http_factor_more',['../structstdex_1_1parser_1_1http__factor__more.html',1,'stdex::parser']]], + ['http_5fheader_12',['http_header',['../classstdex_1_1parser_1_1http__header.html',1,'stdex::parser']]], + ['http_5flanguage_13',['http_language',['../classstdex_1_1parser_1_1http__language.html',1,'stdex::parser']]], + ['http_5fline_5fbreak_14',['http_line_break',['../classstdex_1_1parser_1_1http__line__break.html',1,'stdex::parser']]], + ['http_5fmedia_5frange_15',['http_media_range',['../classstdex_1_1parser_1_1http__media__range.html',1,'stdex::parser']]], + ['http_5fmedia_5ftype_16',['http_media_type',['../classstdex_1_1parser_1_1http__media__type.html',1,'stdex::parser']]], + ['http_5fparameter_17',['http_parameter',['../classstdex_1_1parser_1_1http__parameter.html',1,'stdex::parser']]], + ['http_5fprotocol_18',['http_protocol',['../classstdex_1_1parser_1_1http__protocol.html',1,'stdex::parser']]], + ['http_5fquoted_5fstring_19',['http_quoted_string',['../classstdex_1_1parser_1_1http__quoted__string.html',1,'stdex::parser']]], + ['http_5frequest_20',['http_request',['../classstdex_1_1parser_1_1http__request.html',1,'stdex::parser']]], + ['http_5fspace_21',['http_space',['../classstdex_1_1parser_1_1http__space.html',1,'stdex::parser']]], + ['http_5ftext_5fchar_22',['http_text_char',['../classstdex_1_1parser_1_1http__text__char.html',1,'stdex::parser']]], + ['http_5ftoken_23',['http_token',['../classstdex_1_1parser_1_1http__token.html',1,'stdex::parser']]], + ['http_5furl_24',['http_url',['../classstdex_1_1parser_1_1http__url.html',1,'stdex::parser']]], + ['http_5furl_5fparameter_25',['http_url_parameter',['../classstdex_1_1parser_1_1http__url__parameter.html',1,'stdex::parser']]], + ['http_5furl_5fpath_26',['http_url_path',['../classstdex_1_1parser_1_1http__url__path.html',1,'stdex::parser']]], + ['http_5furl_5fpath_5fsegment_27',['http_url_path_segment',['../classstdex_1_1parser_1_1http__url__path__segment.html',1,'stdex::parser']]], + ['http_5furl_5fport_28',['http_url_port',['../classstdex_1_1parser_1_1http__url__port.html',1,'stdex::parser']]], + ['http_5furl_5fserver_29',['http_url_server',['../classstdex_1_1parser_1_1http__url__server.html',1,'stdex::parser']]], + ['http_5fvalue_30',['http_value',['../classstdex_1_1parser_1_1http__value.html',1,'stdex::parser']]], + ['http_5fvalue_5fcollection_31',['http_value_collection',['../classstdex_1_1parser_1_1http__value__collection.html',1,'stdex::parser']]], + ['http_5fweight_32',['http_weight',['../classstdex_1_1parser_1_1http__weight.html',1,'stdex::parser']]], + ['http_5fweighted_5fvalue_33',['http_weighted_value',['../classstdex_1_1parser_1_1http__weighted__value.html',1,'stdex::parser']]] ]; diff --git a/search/all_8.js b/search/all_8.js index 801db3148..4133475c6 100644 --- a/search/all_8.js +++ b/search/all_8.js @@ -1,13 +1,32 @@ var searchData= [ ['id_0',['id',['../classstdex_1_1idrec_1_1record.html#a24e54541a476b01e332290c57a495926',1,'stdex::idrec::record']]], - ['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']]], - ['interactive_5fprocess_2',['interactive_process',['../structstdex_1_1sys__info__t.html#ae2a466655022e5df25ddbe56eec8b54f',1,'stdex::sys_info_t']]], - ['interval_3',['interval',['../structstdex_1_1interval.html',1,'stdex::interval< T >'],['../structstdex_1_1interval.html#a41ac8e9fdb33a2dfaae6113006b792d8',1,'stdex::interval::interval()'],['../classstdex_1_1parser_1_1basic__parser.html#a5e9bd1c618c97e206f943c6eacd1b3aa',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']]], - ['interval_3c_20fpos_5ft_20_3e_4',['interval< fpos_t >',['../structstdex_1_1interval.html',1,'stdex']]], - ['interval_3c_20size_5ft_20_3e_5',['interval< size_t >',['../structstdex_1_1interval.html',1,'stdex']]], - ['into_20std_20c_6',['stdex - Random stuff that didn't made it into std C++',['../index.html',1,'']]], - ['invalidate_7',['invalidate',['../structstdex_1_1interval.html#aa8113c9f2e3781fb25e30cb3d139e119',1,'stdex::interval']]], - ['is_5fvalid_8',['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']]], - ['it_20into_20std_20c_9',['stdex - Random stuff that didn't made it into std C++',['../index.html',1,'']]] + ['inserted_5ftoken_1',['inserted_token',['../structstdex_1_1html_1_1inserted__token.html',1,'stdex::html']]], + ['instruction_2',['instruction',['../classstdex_1_1html_1_1instruction.html',1,'stdex::html']]], + ['integer_3',['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']]], + ['interactive_5fprocess_4',['interactive_process',['../structstdex_1_1sys__info__t.html#ae2a466655022e5df25ddbe56eec8b54f',1,'stdex::sys_info_t']]], + ['interval_5',['interval',['../structstdex_1_1interval.html',1,'stdex::interval< T >'],['../classstdex_1_1html_1_1sequence.html#a20b20431f4799454543b962d482a6ed7',1,'stdex::html::sequence::interval'],['../classstdex_1_1parser_1_1basic__parser.html#a5e9bd1c618c97e206f943c6eacd1b3aa',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_6',['interval< fpos_t >',['../structstdex_1_1interval.html',1,'stdex']]], + ['interval_3c_20size_5ft_20_3e_7',['interval< size_t >',['../structstdex_1_1interval.html',1,'stdex']]], + ['into_20std_20c_8',['stdex - Random stuff that didn't made it into std C++',['../index.html',1,'']]], + ['invalidate_9',['invalidate',['../structstdex_1_1interval.html#aa8113c9f2e3781fb25e30cb3d139e119',1,'stdex::interval']]], + ['is_5fblock_10',['is_block',['../structstdex_1_1html_1_1element__traits.html#a535a7dfdab50ca65c87bedbb40845a5a',1,'stdex::html::element_traits']]], + ['is_5fflow_11',['is_flow',['../structstdex_1_1html_1_1element__traits.html#a3267ea7859bf8772b12eb1d34e2d98fc',1,'stdex::html::element_traits']]], + ['is_5ffontstyle_12',['is_fontstyle',['../structstdex_1_1html_1_1element__traits.html#a443a7603256f8194feb8f8ba2d647288',1,'stdex::html::element_traits']]], + ['is_5fformctrl_13',['is_formctrl',['../structstdex_1_1html_1_1element__traits.html#ae0fbdb91f2d7600f5905eeae8b238592',1,'stdex::html::element_traits']]], + ['is_5fgroup_14',['is_group',['../structstdex_1_1html_1_1element__traits.html#a2f59281031452c11e098abc96797d283',1,'stdex::html::element_traits']]], + ['is_5fhead_5fcontent_15',['is_head_content',['../structstdex_1_1html_1_1element__traits.html#a3f4e600128d269a147c5a61cb854b35e',1,'stdex::html::element_traits']]], + ['is_5fhead_5fmisc_16',['is_head_misc',['../structstdex_1_1html_1_1element__traits.html#a676dac27de161ca0970cf578105eda11',1,'stdex::html::element_traits']]], + ['is_5fheading_17',['is_heading',['../structstdex_1_1html_1_1element__traits.html#a3f477f87a086ae873df5fd98642a0301',1,'stdex::html::element_traits']]], + ['is_5fhtml_5fcontent_18',['is_html_content',['../structstdex_1_1html_1_1element__traits.html#aa8c58c5e074675f163b9e3b66df1b7bb',1,'stdex::html::element_traits']]], + ['is_5finline_19',['is_inline',['../structstdex_1_1html_1_1element__traits.html#aa2ccd7c62763e56155885b396a610962',1,'stdex::html::element_traits']]], + ['is_5flist_20',['is_list',['../structstdex_1_1html_1_1element__traits.html#a6e1a6e9b19b1ec43aa560dd8bc500cc7',1,'stdex::html::element_traits']]], + ['is_5flocalizable_21',['is_localizable',['../structstdex_1_1html_1_1element__traits.html#a86bfb9bb6b6fbfca0d1e9abef10c11ec',1,'stdex::html::element_traits']]], + ['is_5fphrase_22',['is_phrase',['../structstdex_1_1html_1_1element__traits.html#af6edbc4ce42e7c1c97c6165815800f7d',1,'stdex::html::element_traits']]], + ['is_5fpre_5fexclusion_23',['is_pre_exclusion',['../structstdex_1_1html_1_1element__traits.html#a97325ffcd684944b657a0a9534500a7b',1,'stdex::html::element_traits']]], + ['is_5fpreformatted_24',['is_preformatted',['../structstdex_1_1html_1_1element__traits.html#a84579168ef712dcc0370002df6169577',1,'stdex::html::element_traits']]], + ['is_5fspecial_25',['is_special',['../structstdex_1_1html_1_1element__traits.html#a8f5aaba431313aa40635183032be2393',1,'stdex::html::element_traits']]], + ['is_5furi_26',['is_uri',['../structstdex_1_1html_1_1element__traits.html#a792db042e15102a8269e2e15f591c7cc',1,'stdex::html::element_traits']]], + ['is_5fvalid_27',['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']]], + ['it_20into_20std_20c_28',['stdex - Random stuff that didn't made it into std C++',['../index.html',1,'']]] ]; diff --git a/search/all_9.js b/search/all_9.js index 2a92a280b..053f60983 100644 --- a/search/all_9.js +++ b/search/all_9.js @@ -3,6 +3,7 @@ var searchData= ['lazy_5fprogress_0',['lazy_progress',['../classstdex_1_1lazy__progress.html',1,'stdex::lazy_progress< T >'],['../classstdex_1_1lazy__progress.html#a90d8aaa2e2135537f7bb103bf795956a',1,'stdex::lazy_progress::lazy_progress()']]], ['length_1',['length',['../classstdex_1_1stream_1_1replicator_1_1worker.html#acdf8a4a4f07271bc7bd4f634640e7f5a',1,'stdex::stream::replicator::worker']]], ['limiter_2',['limiter',['../classstdex_1_1stream_1_1limiter.html',1,'stdex::stream']]], - ['load_3',['load',['../classstdex_1_1stream_1_1memory__file.html#a98f0a5ecb59b4e50d5990aa505b658c2',1,'stdex::stream::memory_file::load(const schar_t *filename, int mode)'],['../classstdex_1_1stream_1_1memory__file.html#a8df8b4e46c93ff6fef41bed803fe77a4',1,'stdex::stream::memory_file::load(const stdex::sstring &filename, int mode)']]], - ['lock_4',['lock',['../classstdex_1_1spinlock.html#a97a72eaa96c16661bb6e268f7d5f0788',1,'stdex::spinlock::lock()'],['../classstdex_1_1stream_1_1basic__file.html#a484ec74004fe0b4528c11675b91161e0',1,'stdex::stream::basic_file::lock()'],['../classstdex_1_1stream_1_1file__window.html#a820fea50931a0769161f617a524f72c6',1,'stdex::stream::file_window::lock()'],['../classstdex_1_1stream_1_1cache.html#ac1ca25b572574b35cd4895964e835204',1,'stdex::stream::cache::lock()'],['../classstdex_1_1stream_1_1file.html#a74fdb70cb8ce4d0ee73f6db9d7051d86',1,'stdex::stream::file::lock()'],['../classstdex_1_1stream_1_1diag__file.html#a5d4bcde718ef182590c742f0c600e54b',1,'stdex::stream::diag_file::lock()']]] + ['link_3',['link',['../classstdex_1_1html_1_1parser.html#a42daa02e62ec512605b29cf2dbf727b4',1,'stdex::html::parser']]], + ['load_4',['load',['../classstdex_1_1stream_1_1memory__file.html#a98f0a5ecb59b4e50d5990aa505b658c2',1,'stdex::stream::memory_file::load(const schar_t *filename, int mode)'],['../classstdex_1_1stream_1_1memory__file.html#a8df8b4e46c93ff6fef41bed803fe77a4',1,'stdex::stream::memory_file::load(const stdex::sstring &filename, int mode)']]], + ['lock_5',['lock',['../classstdex_1_1spinlock.html#a97a72eaa96c16661bb6e268f7d5f0788',1,'stdex::spinlock::lock()'],['../classstdex_1_1stream_1_1basic__file.html#a484ec74004fe0b4528c11675b91161e0',1,'stdex::stream::basic_file::lock()'],['../classstdex_1_1stream_1_1file__window.html#a820fea50931a0769161f617a524f72c6',1,'stdex::stream::file_window::lock()'],['../classstdex_1_1stream_1_1cache.html#ac1ca25b572574b35cd4895964e835204',1,'stdex::stream::cache::lock()'],['../classstdex_1_1stream_1_1file.html#a74fdb70cb8ce4d0ee73f6db9d7051d86',1,'stdex::stream::file::lock()'],['../classstdex_1_1stream_1_1diag__file.html#a5d4bcde718ef182590c742f0c600e54b',1,'stdex::stream::diag_file::lock()']]] ]; diff --git a/search/all_a.js b/search/all_a.js index c4ef63613..219d8520d 100644 --- a/search/all_a.js +++ b/search/all_a.js @@ -3,32 +3,51 @@ var searchData= ['m_5fallow_5fabsolute_0',['m_allow_absolute',['../classstdex_1_1parser_1_1basic__dns__name.html#abfe3327023b10cb9759c13ec987701ab',1,'stdex::parser::basic_dns_name']]], ['m_5fbuf_1',['m_buf',['../classstdex_1_1base64__enc.html#a567a2a3aeda13b50e31d48ba32236adf',1,'stdex::base64_enc::m_buf'],['../classstdex_1_1base64__dec.html#ab618ef5b21f33c5ed577669091c4b103',1,'stdex::base64_dec::m_buf']]], ['m_5fcallback_2',['m_callback',['../classstdex_1_1watchdog.html#af1d34b845b80a49997e82f50bb13f839',1,'stdex::watchdog']]], - ['m_5fcount_3',['m_count',['../classstdex_1_1vector__queue.html#a6070ca156773c17c6b75bacc5251c04c',1,'stdex::vector_queue']]], - ['m_5fdata_4',['m_data',['../classstdex_1_1stream_1_1memory__file.html#a4a2082f1017478d1ce940d8dcd6e234b',1,'stdex::stream::memory_file::m_data'],['../classstdex_1_1vector__queue.html#a289d86508a91fbe61e0425e318d735cf',1,'stdex::vector_queue::m_data']]], - ['m_5fel_5',['m_el',['../classstdex_1_1parser_1_1basic__iterations.html#a8a06638fea659f03fddc9d41dfc4efac',1,'stdex::parser::basic_iterations']]], - ['m_5fgreedy_6',['m_greedy',['../classstdex_1_1parser_1_1basic__iterations.html#a2523c18948003ca4726eaed098e6de12',1,'stdex::parser::basic_iterations']]], - ['m_5fhead_7',['m_head',['../classstdex_1_1vector__queue.html#abd8208a4a9e92ec5c38d3718f383e41e',1,'stdex::vector_queue']]], - ['m_5fmanage_8',['m_manage',['../classstdex_1_1stream_1_1memory__file.html#aca812d996b5b60660fa121787e4c0e68',1,'stdex::stream::memory_file']]], - ['m_5fmax_5fiterations_9',['m_max_iterations',['../classstdex_1_1parser_1_1basic__iterations.html#aca0b8e1f9522a5306db5fe173269e8b1',1,'stdex::parser::basic_iterations']]], - ['m_5fmin_5fiterations_10',['m_min_iterations',['../classstdex_1_1parser_1_1basic__iterations.html#aab86447331f306ff85c49764a5d0d646',1,'stdex::parser::basic_iterations']]], - ['m_5fnum_11',['m_num',['../classstdex_1_1base64__dec.html#a04ab92bcef2c304bc7a5d8d2a03c7905',1,'stdex::base64_dec::m_num'],['../classstdex_1_1base64__enc.html#a52f4cc4da6d7d7f4bad7c05a87ecd907',1,'stdex::base64_enc::m_num']]], - ['m_5fnum_5fblocks_12',['m_num_blocks',['../classstdex_1_1base64__writer.html#a2529c8798fa89be544b12690411e7125',1,'stdex::base64_writer']]], - ['m_5foffset_13',['m_offset',['../classstdex_1_1stream_1_1memory__file.html#a91ca49273fc49d70b98180fc828d5b5d',1,'stdex::stream::memory_file']]], - ['m_5fphase_14',['m_phase',['../classstdex_1_1watchdog.html#a301e35d22b11f6ea6ffbe94ffa22fc3e',1,'stdex::watchdog']]], - ['m_5fquit_15',['m_quit',['../classstdex_1_1watchdog.html#aaa7759c46dc8632b3f26d17291ca9483',1,'stdex::watchdog']]], - ['m_5freserved_16',['m_reserved',['../classstdex_1_1stream_1_1memory__file.html#a6aa8c2deeabc66f065c858ba399d911c',1,'stdex::stream::memory_file']]], - ['m_5fsize_17',['m_size',['../classstdex_1_1stream_1_1memory__file.html#a41121ff122745e109c1b9851632abce3',1,'stdex::stream::memory_file']]], - ['m_5fsize_5fmax_18',['m_size_max',['../classstdex_1_1vector__queue.html#a7192dc2991d690b04a2fb24dd6fdc325',1,'stdex::vector_queue']]], - ['m_5ftemp_19',['m_temp',['../classstdex_1_1base64__reader.html#ab92bc938edd01351e2639003f6679b99',1,'stdex::base64_reader']]], - ['m_5ftemp_5flen_20',['m_temp_len',['../classstdex_1_1base64__reader.html#ad631499f728824a166843effd7a5eedb',1,'stdex::base64_reader']]], - ['m_5ftemp_5foff_21',['m_temp_off',['../classstdex_1_1base64__reader.html#affd26a488ea1b5d8b23cc98be45b2535',1,'stdex::base64_reader']]], - ['m_5ftimeout_22',['m_timeout',['../classstdex_1_1watchdog.html#a816c03499d71d1fe73410d979744c817',1,'stdex::watchdog']]], - ['made_20it_20into_20std_20c_23',['stdex - Random stuff that didn't made it into std C++',['../index.html',1,'']]], - ['mapping_24',['mapping',['../structstdex_1_1mapping.html',1,'stdex::mapping< T >'],['../structstdex_1_1mapping.html#a9634b5ef182398e24b61c2ca78cc8e46',1,'stdex::mapping::mapping()'],['../structstdex_1_1mapping.html#a48069d4eb38c276e856d650075f6c3bd',1,'stdex::mapping::mapping(T x)'],['../structstdex_1_1mapping.html#ae72436dbc2b54e2062822cd7772de830',1,'stdex::mapping::mapping(T _from, T _to)']]], - ['md2_5ft_25',['md2_t',['../unionstdex_1_1md2__t.html',1,'stdex']]], - ['md5_5fhash_26',['md5_hash',['../classstdex_1_1md5__hash.html',1,'stdex']]], - ['memory_5ffile_27',['memory_file',['../classstdex_1_1stream_1_1memory__file.html#a6b4b9daa088fb20678a502e81553c745',1,'stdex::stream::memory_file::memory_file(size_t size, 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#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#a0bb7b9759667e810c91b3e58c1771d91',1,'stdex::stream::memory_file::memory_file(const schar_t *filename, int mode)'],['../classstdex_1_1stream_1_1memory__file.html#a7a134b82c4dd44bf5823e4cd25bbec29',1,'stdex::stream::memory_file::memory_file(const stdex::sstring &filename, int mode)'],['../classstdex_1_1stream_1_1memory__file.html',1,'stdex::stream::memory_file']]], - ['model_28',['model',['../classstdex_1_1parser_1_1basic__si__reference.html#a934cc4a41d64ca1aec35a58b8558bf2e',1,'stdex::parser::basic_si_reference']]], - ['mouth_29',['mouth',['../classstdex_1_1parser_1_1basic__emoticon.html#a43d0de6a54546e509807c7c888bb8dc8',1,'stdex::parser::basic_emoticon']]], - ['mtime_30',['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()']]] + ['m_5fcharset_3',['m_charset',['../classstdex_1_1html_1_1document.html#a2f29e08ebaf36b923ddf092384185ac1',1,'stdex::html::document']]], + ['m_5fcount_4',['m_count',['../classstdex_1_1vector__queue.html#a6070ca156773c17c6b75bacc5251c04c',1,'stdex::vector_queue']]], + ['m_5fdata_5',['m_data',['../classstdex_1_1stream_1_1memory__file.html#a4a2082f1017478d1ce940d8dcd6e234b',1,'stdex::stream::memory_file::m_data'],['../classstdex_1_1vector__queue.html#a289d86508a91fbe61e0425e318d735cf',1,'stdex::vector_queue::m_data']]], + ['m_5fdocument_6',['m_document',['../classstdex_1_1html_1_1parser.html#a6cae9cb66849c55e4c56dc3677a98c7e',1,'stdex::html::parser']]], + ['m_5fel_7',['m_el',['../classstdex_1_1parser_1_1basic__iterations.html#a8a06638fea659f03fddc9d41dfc4efac',1,'stdex::parser::basic_iterations']]], + ['m_5felement_5fstack_8',['m_element_stack',['../classstdex_1_1html_1_1document.html#a19e4abf1a36c12c6762e17471d83dd2b',1,'stdex::html::document']]], + ['m_5fentities_9',['m_entities',['../classstdex_1_1html_1_1document.html#a8e48388317e6c0a5b5119c4ce6a88dcb',1,'stdex::html::document']]], + ['m_5fgreedy_10',['m_greedy',['../classstdex_1_1parser_1_1basic__iterations.html#a2523c18948003ca4726eaed098e6de12',1,'stdex::parser::basic_iterations']]], + ['m_5fhead_11',['m_head',['../classstdex_1_1vector__queue.html#abd8208a4a9e92ec5c38d3718f383e41e',1,'stdex::vector_queue']]], + ['m_5fis_5fcdata_12',['m_is_cdata',['../classstdex_1_1html_1_1document.html#afa1e63e920558cb8058e713a7121057c',1,'stdex::html::document']]], + ['m_5fis_5frcdata_13',['m_is_rcdata',['../classstdex_1_1html_1_1document.html#a50e945a21d566661b8e139b26ccb52b8',1,'stdex::html::document']]], + ['m_5fis_5fspecial_5felement_14',['m_is_special_element',['../classstdex_1_1html_1_1document.html#a5f1863bab99619fc0bc4e71f9c9c026d',1,'stdex::html::document']]], + ['m_5fmanage_15',['m_manage',['../classstdex_1_1stream_1_1memory__file.html#aca812d996b5b60660fa121787e4c0e68',1,'stdex::stream::memory_file']]], + ['m_5fmax_5fiterations_16',['m_max_iterations',['../classstdex_1_1parser_1_1basic__iterations.html#aca0b8e1f9522a5306db5fe173269e8b1',1,'stdex::parser::basic_iterations']]], + ['m_5fmin_5fiterations_17',['m_min_iterations',['../classstdex_1_1parser_1_1basic__iterations.html#aab86447331f306ff85c49764a5d0d646',1,'stdex::parser::basic_iterations']]], + ['m_5fnum_18',['m_num',['../classstdex_1_1base64__enc.html#a52f4cc4da6d7d7f4bad7c05a87ecd907',1,'stdex::base64_enc::m_num'],['../classstdex_1_1base64__dec.html#a04ab92bcef2c304bc7a5d8d2a03c7905',1,'stdex::base64_dec::m_num']]], + ['m_5fnum_5fblocks_19',['m_num_blocks',['../classstdex_1_1base64__writer.html#a2529c8798fa89be544b12690411e7125',1,'stdex::base64_writer']]], + ['m_5fnum_5finvalid_5fconditions_20',['m_num_invalid_conditions',['../classstdex_1_1html_1_1document.html#a821db1267c62fbea66ea5bee6ef595cb',1,'stdex::html::document']]], + ['m_5fnum_5fparsed_21',['m_num_parsed',['../classstdex_1_1html_1_1document.html#af814056135de920c0f4acdcf8c928e72',1,'stdex::html::document']]], + ['m_5fnum_5fvalid_5fconditions_22',['m_num_valid_conditions',['../classstdex_1_1html_1_1document.html#addfef8cebec2ac619d1174084df730bd',1,'stdex::html::document']]], + ['m_5foffset_23',['m_offset',['../classstdex_1_1html_1_1parser.html#af62e1fa74b942d127a8076564cf0f6c6',1,'stdex::html::parser::m_offset'],['../classstdex_1_1stream_1_1memory__file.html#a91ca49273fc49d70b98180fc828d5b5d',1,'stdex::stream::memory_file::m_offset']]], + ['m_5fparse_5fframes_24',['m_parse_frames',['../classstdex_1_1html_1_1parser.html#ad8bb1f6a00d6a6d192d0d2e7265d120d',1,'stdex::html::parser']]], + ['m_5fphase_25',['m_phase',['../classstdex_1_1watchdog.html#a301e35d22b11f6ea6ffbe94ffa22fc3e',1,'stdex::watchdog']]], + ['m_5fprogress_26',['m_progress',['../classstdex_1_1html_1_1parser.html#a02f2429bdfe818247242cc0a475d26f9',1,'stdex::html::parser']]], + ['m_5fquit_27',['m_quit',['../classstdex_1_1watchdog.html#aaa7759c46dc8632b3f26d17291ca9483',1,'stdex::watchdog']]], + ['m_5freserved_28',['m_reserved',['../classstdex_1_1stream_1_1memory__file.html#a6aa8c2deeabc66f065c858ba399d911c',1,'stdex::stream::memory_file']]], + ['m_5fsequences_29',['m_sequences',['../classstdex_1_1html_1_1document.html#a7de5f3c6d8292e7d696f6817f4925f6d',1,'stdex::html::document']]], + ['m_5fsize_30',['m_size',['../classstdex_1_1stream_1_1memory__file.html#a41121ff122745e109c1b9851632abce3',1,'stdex::stream::memory_file']]], + ['m_5fsize_5fmax_31',['m_size_max',['../classstdex_1_1vector__queue.html#a7192dc2991d690b04a2fb24dd6fdc325',1,'stdex::vector_queue']]], + ['m_5fsource_32',['m_source',['../classstdex_1_1html_1_1document.html#aa026d9c57191dac5169a987963bb7d08',1,'stdex::html::document::m_source'],['../classstdex_1_1html_1_1parser.html#a4f1480c41cd6656042a9473528be62cb',1,'stdex::html::parser::m_source']]], + ['m_5ftemp_33',['m_temp',['../classstdex_1_1base64__reader.html#ab92bc938edd01351e2639003f6679b99',1,'stdex::base64_reader']]], + ['m_5ftemp_5flen_34',['m_temp_len',['../classstdex_1_1base64__reader.html#ad631499f728824a166843effd7a5eedb',1,'stdex::base64_reader']]], + ['m_5ftemp_5foff_35',['m_temp_off',['../classstdex_1_1base64__reader.html#affd26a488ea1b5d8b23cc98be45b2535',1,'stdex::base64_reader']]], + ['m_5ftimeout_36',['m_timeout',['../classstdex_1_1watchdog.html#a816c03499d71d1fe73410d979744c817',1,'stdex::watchdog']]], + ['m_5ftokens_37',['m_tokens',['../classstdex_1_1html_1_1parser.html#a5827d0faa87547c141a69a286fdc6b77',1,'stdex::html::parser']]], + ['m_5furl_38',['m_url',['../classstdex_1_1html_1_1parser.html#a7c40ad04981cca08398cd0d79853dc6a',1,'stdex::html::parser']]], + ['made_20it_20into_20std_20c_39',['stdex - Random stuff that didn't made it into std C++',['../index.html',1,'']]], + ['make_5fabsolute_5furl_40',['make_absolute_url',['../classstdex_1_1html_1_1parser.html#a6eac9b41ad9579e93b8c5f0f3b95c601',1,'stdex::html::parser']]], + ['mapping_41',['mapping',['../structstdex_1_1mapping.html',1,'stdex::mapping< T >'],['../classstdex_1_1html_1_1text__token.html#a45822e05f3df782f2abbdf5fa8ca4b8b',1,'stdex::html::text_token::mapping'],['../structstdex_1_1mapping.html#a9634b5ef182398e24b61c2ca78cc8e46',1,'stdex::mapping::mapping()'],['../structstdex_1_1mapping.html#a48069d4eb38c276e856d650075f6c3bd',1,'stdex::mapping::mapping(T x)'],['../structstdex_1_1mapping.html#ae72436dbc2b54e2062822cd7772de830',1,'stdex::mapping::mapping(T _from, T _to)']]], + ['may_5fcontain_42',['may_contain',['../structstdex_1_1html_1_1element__traits.html#afd1c22aa67f29d318cab7498dad159a8',1,'stdex::html::element_traits']]], + ['md2_5ft_43',['md2_t',['../unionstdex_1_1md2__t.html',1,'stdex']]], + ['md5_5fhash_44',['md5_hash',['../classstdex_1_1md5__hash.html',1,'stdex']]], + ['memory_5ffile_45',['memory_file',['../classstdex_1_1stream_1_1memory__file.html#a6b4b9daa088fb20678a502e81553c745',1,'stdex::stream::memory_file::memory_file(size_t size, 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#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#a0bb7b9759667e810c91b3e58c1771d91',1,'stdex::stream::memory_file::memory_file(const schar_t *filename, int mode)'],['../classstdex_1_1stream_1_1memory__file.html#a7a134b82c4dd44bf5823e4cd25bbec29',1,'stdex::stream::memory_file::memory_file(const stdex::sstring &filename, int mode)'],['../classstdex_1_1stream_1_1memory__file.html',1,'stdex::stream::memory_file']]], + ['merge_46',['merge',['../classstdex_1_1html_1_1parser.html#a1d5216106ac0112d536c450010f0562d',1,'stdex::html::parser']]], + ['model_47',['model',['../classstdex_1_1parser_1_1basic__si__reference.html#a934cc4a41d64ca1aec35a58b8558bf2e',1,'stdex::parser::basic_si_reference']]], + ['mouth_48',['mouth',['../classstdex_1_1parser_1_1basic__emoticon.html#a43d0de6a54546e509807c7c888bb8dc8',1,'stdex::parser::basic_emoticon']]], + ['mtime_49',['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_b.js b/search/all_b.js index 7efaf0cbb..bd3931bdc 100644 --- a/search/all_b.js +++ b/search/all_b.js @@ -1,8 +1,8 @@ var searchData= [ - ['name_0',['name',['../classstdex_1_1parser_1_1http__parameter.html#a565c731685b779b2c0a90e8c5b7dbd55',1,'stdex::parser::http_parameter::name'],['../classstdex_1_1parser_1_1http__cookie.html#aca58f2d8164c41be287a7fe16432ba48',1,'stdex::parser::http_cookie::name']]], + ['name_0',['name',['../classstdex_1_1html_1_1element.html#a0ac164c8f64a91166b90e8246661f85d',1,'stdex::html::element::name'],['../classstdex_1_1html_1_1element__end.html#a8a7a4be93f9833d35842a80b5e417982',1,'stdex::html::element_end::name'],['../classstdex_1_1html_1_1declaration.html#a16302e5ad26b58fff4b532ff63bca759',1,'stdex::html::declaration::name'],['../structstdex_1_1html_1_1entity.html#a468522aee95ce92b0ac5594748c67a2c',1,'stdex::html::entity::name'],['../classstdex_1_1html_1_1starting__token.html#adc35af70ba1e045d819ce44867a03b0c',1,'stdex::html::starting_token::name'],['../classstdex_1_1parser_1_1http__parameter.html#a565c731685b779b2c0a90e8c5b7dbd55',1,'stdex::parser::http_parameter::name'],['../classstdex_1_1parser_1_1http__cookie.html#aca58f2d8164c41be287a7fe16432ba48',1,'stdex::parser::http_cookie::name'],['../structstdex_1_1parser_1_1html__attribute.html#a4e42f1d2ff7d9983d2c5b3e0744a56df',1,'stdex::parser::html_attribute::name'],['../classstdex_1_1parser_1_1basic__html__tag.html#a8b65a3140494b250f504a4cc2d1e86cc',1,'stdex::parser::basic_html_tag::name']]], ['negative_5fexp_5fsign_1',['negative_exp_sign',['../classstdex_1_1parser_1_1basic__scientific__numeral.html#aaeec0779d7bd8f5429108be5b80ba95c',1,'stdex::parser::basic_scientific_numeral']]], - ['negative_5fsign_2',['negative_sign',['../classstdex_1_1parser_1_1basic__signed__numeral.html#a50271856db8a0e66bef91e4e05949bb3',1,'stdex::parser::basic_signed_numeral::negative_sign'],['../classstdex_1_1parser_1_1basic__mixed__numeral.html#a76a2ae3e988b901ae4745a5ba8c22d46',1,'stdex::parser::basic_mixed_numeral::negative_sign'],['../classstdex_1_1parser_1_1basic__scientific__numeral.html#a8e625f598299499379b3f9e067ad9384',1,'stdex::parser::basic_scientific_numeral::negative_sign'],['../classstdex_1_1parser_1_1basic__monetary__numeral.html#aef90350963cc64fb710674eedf260708',1,'stdex::parser::basic_monetary_numeral::negative_sign']]], + ['negative_5fsign_2',['negative_sign',['../classstdex_1_1parser_1_1basic__monetary__numeral.html#aef90350963cc64fb710674eedf260708',1,'stdex::parser::basic_monetary_numeral::negative_sign'],['../classstdex_1_1parser_1_1basic__signed__numeral.html#a50271856db8a0e66bef91e4e05949bb3',1,'stdex::parser::basic_signed_numeral::negative_sign'],['../classstdex_1_1parser_1_1basic__mixed__numeral.html#a76a2ae3e988b901ae4745a5ba8c22d46',1,'stdex::parser::basic_mixed_numeral::negative_sign'],['../classstdex_1_1parser_1_1basic__scientific__numeral.html#a8e625f598299499379b3f9e067ad9384',1,'stdex::parser::basic_scientific_numeral::negative_sign']]], ['no_5fdelete_3',['no_delete',['../structstdex_1_1no__delete.html',1,'stdex']]], ['no_5fdelete_3c_20t_5b_5d_3e_4',['no_delete< T[]>',['../structstdex_1_1no__delete_3_01_t_0f_0e_4.html',1,'stdex']]], ['node_5ft_5',['node_t',['../structstdex_1_1stream_1_1fifo_1_1node__t.html',1,'stdex::stream::fifo']]], diff --git a/search/all_d.js b/search/all_d.js index 8a485d3ed..8cb26a802 100644 --- a/search/all_d.js +++ b/search/all_d.js @@ -1,20 +1,25 @@ 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']]], - ['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']]], - ['pool_6',['pool',['../classstdex_1_1pool.html',1,'stdex']]], - ['pop_7',['pop',['../classstdex_1_1pool.html#a9731f8edc72b43f5a4c4622ce6a51aeb',1,'stdex::pool::pop()'],['../classstdex_1_1ring.html#a6360d8186fa2bda1ef4b4ddbcae93749',1,'stdex::ring::pop()']]], - ['pop_5fback_8',['pop_back',['../classstdex_1_1vector__queue.html#abd0fdb316392da76bac13bdd9d176eb6',1,'stdex::vector_queue']]], - ['pop_5ffront_9',['pop_front',['../classstdex_1_1vector__queue.html#adc05fb6cec951f736337dc340996271f',1,'stdex::vector_queue']]], - ['positive_5fexp_5fsign_10',['positive_exp_sign',['../classstdex_1_1parser_1_1basic__scientific__numeral.html#abb5d26d24a7bb58d244b7d51722b117a',1,'stdex::parser::basic_scientific_numeral']]], - ['positive_5fsign_11',['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']]], - ['progress_12',['progress',['../classstdex_1_1progress.html',1,'stdex']]], - ['progress_5fswitcher_13',['progress_switcher',['../classstdex_1_1progress__switcher.html',1,'stdex']]], - ['push_14',['push',['../classstdex_1_1pool.html#aa60ba8cd95b3d28977ae9a9e36005108',1,'stdex::pool::push()'],['../classstdex_1_1ring.html#ab8b671ab4a84c370bdf8d4d2df7c0d9d',1,'stdex::ring::push()']]], - ['push_5fback_15',['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_16',['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)']]] + ['parent_1',['parent',['../classstdex_1_1html_1_1sequence.html#a8eccbcd5829b97c67aa0fcc449292470',1,'stdex::html::sequence']]], + ['parse_2',['parse',['../classstdex_1_1html_1_1parser.html#a6917d950d42024601cf16926f9cbfeb1',1,'stdex::html::parser::parse()'],['../classstdex_1_1html_1_1parser.html#a4e76ce4fbffac17a8afd44841a4c8cfe',1,'stdex::html::parser::parse(const sequence_store::const_iterator &end, uint32_t text_type=0)']]], + ['parse_5fcss_3',['parse_css',['../classstdex_1_1html_1_1parser.html#a0c71841185d92896d6d9a1fe02bfc3d4',1,'stdex::html::parser']]], + ['parser_4',['parser',['../classstdex_1_1html_1_1parser.html',1,'stdex::html']]], + ['parser_5fcollection_5',['parser_collection',['../classstdex_1_1parser_1_1parser__collection.html',1,'stdex::parser']]], + ['part1_6',['part1',['../classstdex_1_1parser_1_1basic__si__reference.html#a6b62cf70186b22e2137d48b6eaf13ef8',1,'stdex::parser::basic_si_reference']]], + ['part2_7',['part2',['../classstdex_1_1parser_1_1basic__si__reference.html#ac55b905766e1021e5822e027c1906a5e',1,'stdex::parser::basic_si_reference']]], + ['part3_8',['part3',['../classstdex_1_1parser_1_1basic__si__reference.html#a214f6289c4587edc648115f0737b129a',1,'stdex::parser::basic_si_reference']]], + ['pointer_9',['pointer',['../classstdex_1_1vector__queue.html#abf6db5997ee272e03e8db1696a162148',1,'stdex::vector_queue']]], + ['pool_10',['pool',['../classstdex_1_1pool.html',1,'stdex']]], + ['pop_11',['pop',['../classstdex_1_1pool.html#a9731f8edc72b43f5a4c4622ce6a51aeb',1,'stdex::pool::pop()'],['../classstdex_1_1ring.html#a6360d8186fa2bda1ef4b4ddbcae93749',1,'stdex::ring::pop()']]], + ['pop_5fback_12',['pop_back',['../classstdex_1_1vector__queue.html#abd0fdb316392da76bac13bdd9d176eb6',1,'stdex::vector_queue']]], + ['pop_5ffront_13',['pop_front',['../classstdex_1_1vector__queue.html#adc05fb6cec951f736337dc340996271f',1,'stdex::vector_queue']]], + ['positive_5fexp_5fsign_14',['positive_exp_sign',['../classstdex_1_1parser_1_1basic__scientific__numeral.html#abb5d26d24a7bb58d244b7d51722b117a',1,'stdex::parser::basic_scientific_numeral']]], + ['positive_5fsign_15',['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_16',['progress',['../classstdex_1_1progress.html',1,'stdex']]], + ['progress_3c_20size_5ft_20_3e_17',['progress< size_t >',['../classstdex_1_1progress.html',1,'stdex']]], + ['progress_5fswitcher_18',['progress_switcher',['../classstdex_1_1progress__switcher.html',1,'stdex']]], + ['push_19',['push',['../classstdex_1_1pool.html#aa60ba8cd95b3d28977ae9a9e36005108',1,'stdex::pool::push()'],['../classstdex_1_1ring.html#ab8b671ab4a84c370bdf8d4d2df7c0d9d',1,'stdex::ring::push()']]], + ['push_5fback_20',['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_21',['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 bb98f75cc..0de36269c 100644 --- a/search/all_f.js +++ b/search/all_f.js @@ -16,10 +16,11 @@ var searchData= ['record_13',['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_14',['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']]], ['remove_15',['remove',['../classstdex_1_1stream_1_1replicator.html#a7916a391dfa9484df02b1202c0a03edf',1,'stdex::stream::replicator']]], - ['replicator_16',['replicator',['../classstdex_1_1stream_1_1replicator.html',1,'stdex::stream']]], - ['requirements_17',['Requirements',['../index.html#autotoc_md1',1,'']]], - ['reserve_18',['reserve',['../classstdex_1_1stream_1_1memory__file.html#a6b59e4dd13195dd91211ece4c680cb9b',1,'stdex::stream::memory_file']]], - ['reset_19',['reset',['../classstdex_1_1watchdog.html#ac9d5d1c1b17425f47f3892deec4d31db',1,'stdex::watchdog']]], - ['ring_20',['ring',['../classstdex_1_1ring.html',1,'stdex']]], - ['ring_3c_20uint8_5ft_2c_20default_5fasync_5flimit_20_3e_21',['ring< uint8_t, default_async_limit >',['../classstdex_1_1ring.html',1,'stdex']]] + ['replace_5fentities_16',['replace_entities',['../classstdex_1_1html_1_1document.html#ad51755eb57de670729adf07f32d5225d',1,'stdex::html::document']]], + ['replicator_17',['replicator',['../classstdex_1_1stream_1_1replicator.html',1,'stdex::stream']]], + ['requirements_18',['Requirements',['../index.html#autotoc_md1',1,'']]], + ['reserve_19',['reserve',['../classstdex_1_1stream_1_1memory__file.html#a6b59e4dd13195dd91211ece4c680cb9b',1,'stdex::stream::memory_file']]], + ['reset_20',['reset',['../classstdex_1_1watchdog.html#ac9d5d1c1b17425f47f3892deec4d31db',1,'stdex::watchdog']]], + ['ring_21',['ring',['../classstdex_1_1ring.html',1,'stdex']]], + ['ring_3c_20uint8_5ft_2c_20default_5fasync_5flimit_20_3e_22',['ring< uint8_t, default_async_limit >',['../classstdex_1_1ring.html',1,'stdex']]] ]; diff --git a/search/classes_1.js b/search/classes_1.js index f1179dd1f..bea9d7d54 100644 --- a/search/classes_1.js +++ b/search/classes_1.js @@ -7,75 +7,100 @@ var searchData= ['basic_4',['basic',['../classstdex_1_1stream_1_1basic.html',1,'stdex::stream']]], ['basic_5fangle_5',['basic_angle',['../classstdex_1_1parser_1_1basic__angle.html',1,'stdex::parser']]], ['basic_5fany_5fcu_6',['basic_any_cu',['../classstdex_1_1parser_1_1basic__any__cu.html',1,'stdex::parser']]], - ['basic_5fany_5fcu_3c_20char_20_3e_7',['basic_any_cu< char >',['../classstdex_1_1parser_1_1basic__any__cu.html',1,'stdex::parser']]], - ['basic_5fbol_8',['basic_bol',['../classstdex_1_1parser_1_1basic__bol.html',1,'stdex::parser']]], - ['basic_5fbranch_9',['basic_branch',['../classstdex_1_1parser_1_1basic__branch.html',1,'stdex::parser']]], - ['basic_5fchemical_5fformula_10',['basic_chemical_formula',['../classstdex_1_1parser_1_1basic__chemical__formula.html',1,'stdex::parser']]], - ['basic_5fcreditor_5freference_11',['basic_creditor_reference',['../classstdex_1_1parser_1_1basic__creditor__reference.html',1,'stdex::parser']]], - ['basic_5fcu_12',['basic_cu',['../classstdex_1_1parser_1_1basic__cu.html',1,'stdex::parser']]], - ['basic_5fcu_5fset_13',['basic_cu_set',['../classstdex_1_1parser_1_1basic__cu__set.html',1,'stdex::parser']]], - ['basic_5fdate_14',['basic_date',['../classstdex_1_1parser_1_1basic__date.html',1,'stdex::parser']]], - ['basic_5fdns_5fdomain_5fchar_15',['basic_dns_domain_char',['../classstdex_1_1parser_1_1basic__dns__domain__char.html',1,'stdex::parser']]], - ['basic_5fdns_5fdomain_5fchar_3c_20char_20_3e_16',['basic_dns_domain_char< char >',['../classstdex_1_1parser_1_1basic__dns__domain__char.html',1,'stdex::parser']]], - ['basic_5fdns_5fname_17',['basic_dns_name',['../classstdex_1_1parser_1_1basic__dns__name.html',1,'stdex::parser']]], - ['basic_5femail_5faddress_18',['basic_email_address',['../classstdex_1_1parser_1_1basic__email__address.html',1,'stdex::parser']]], - ['basic_5femoticon_19',['basic_emoticon',['../classstdex_1_1parser_1_1basic__emoticon.html',1,'stdex::parser']]], - ['basic_5feol_20',['basic_eol',['../classstdex_1_1parser_1_1basic__eol.html',1,'stdex::parser']]], - ['basic_5ffile_21',['basic_file',['../classstdex_1_1stream_1_1basic__file.html',1,'stdex::stream']]], - ['basic_5ffraction_22',['basic_fraction',['../classstdex_1_1parser_1_1basic__fraction.html',1,'stdex::parser']]], - ['basic_5fhash_23',['basic_hash',['../classstdex_1_1basic__hash.html',1,'stdex']]], - ['basic_5fhash_3c_20crc32_5ft_20_3e_24',['basic_hash< crc32_t >',['../classstdex_1_1basic__hash.html',1,'stdex']]], - ['basic_5fhash_3c_20md5_5ft_20_3e_25',['basic_hash< md5_t >',['../classstdex_1_1basic__hash.html',1,'stdex']]], - ['basic_5fhash_3c_20sha1_5ft_20_3e_26',['basic_hash< sha1_t >',['../classstdex_1_1basic__hash.html',1,'stdex']]], - ['basic_5fiban_27',['basic_iban',['../classstdex_1_1parser_1_1basic__iban.html',1,'stdex::parser']]], - ['basic_5finteger_28',['basic_integer',['../classstdex_1_1parser_1_1basic__integer.html',1,'stdex::parser']]], - ['basic_5finteger10_29',['basic_integer10',['../classstdex_1_1parser_1_1basic__integer10.html',1,'stdex::parser']]], - ['basic_5finteger10ts_30',['basic_integer10ts',['../classstdex_1_1parser_1_1basic__integer10ts.html',1,'stdex::parser']]], - ['basic_5finteger16_31',['basic_integer16',['../classstdex_1_1parser_1_1basic__integer16.html',1,'stdex::parser']]], - ['basic_5fipv4_5faddress_32',['basic_ipv4_address',['../classstdex_1_1parser_1_1basic__ipv4__address.html',1,'stdex::parser']]], - ['basic_5fipv6_5faddress_33',['basic_ipv6_address',['../classstdex_1_1parser_1_1basic__ipv6__address.html',1,'stdex::parser']]], - ['basic_5fipv6_5fscope_5fid_5fchar_34',['basic_ipv6_scope_id_char',['../classstdex_1_1parser_1_1basic__ipv6__scope__id__char.html',1,'stdex::parser']]], - ['basic_5fiterations_35',['basic_iterations',['../classstdex_1_1parser_1_1basic__iterations.html',1,'stdex::parser']]], - ['basic_5fjson_5fstring_36',['basic_json_string',['../classstdex_1_1parser_1_1basic__json__string.html',1,'stdex::parser']]], - ['basic_5fmixed_5fnumeral_37',['basic_mixed_numeral',['../classstdex_1_1parser_1_1basic__mixed__numeral.html',1,'stdex::parser']]], - ['basic_5fmonetary_5fnumeral_38',['basic_monetary_numeral',['../classstdex_1_1parser_1_1basic__monetary__numeral.html',1,'stdex::parser']]], - ['basic_5fnoop_39',['basic_noop',['../classstdex_1_1parser_1_1basic__noop.html',1,'stdex::parser']]], - ['basic_5fparser_40',['basic_parser',['../classstdex_1_1parser_1_1basic__parser.html',1,'stdex::parser']]], - ['basic_5fparser_3c_20char_20_3e_41',['basic_parser< char >',['../classstdex_1_1parser_1_1basic__parser.html',1,'stdex::parser']]], - ['basic_5fpermutation_42',['basic_permutation',['../classstdex_1_1parser_1_1basic__permutation.html',1,'stdex::parser']]], - ['basic_5fphone_5fnumber_43',['basic_phone_number',['../classstdex_1_1parser_1_1basic__phone__number.html',1,'stdex::parser']]], - ['basic_5fpunct_5fcu_44',['basic_punct_cu',['../classstdex_1_1parser_1_1basic__punct__cu.html',1,'stdex::parser']]], - ['basic_5fpunct_5fcu_3c_20char_20_3e_45',['basic_punct_cu< char >',['../classstdex_1_1parser_1_1basic__punct__cu.html',1,'stdex::parser']]], - ['basic_5froman_5fnumeral_46',['basic_roman_numeral',['../classstdex_1_1parser_1_1basic__roman__numeral.html',1,'stdex::parser']]], - ['basic_5fscientific_5fnumeral_47',['basic_scientific_numeral',['../classstdex_1_1parser_1_1basic__scientific__numeral.html',1,'stdex::parser']]], - ['basic_5fscore_48',['basic_score',['../classstdex_1_1parser_1_1basic__score.html',1,'stdex::parser']]], - ['basic_5fsequence_49',['basic_sequence',['../classstdex_1_1parser_1_1basic__sequence.html',1,'stdex::parser']]], - ['basic_5fset_50',['basic_set',['../classstdex_1_1parser_1_1basic__set.html',1,'stdex::parser']]], - ['basic_5fset_3c_20char_20_3e_51',['basic_set< char >',['../classstdex_1_1parser_1_1basic__set.html',1,'stdex::parser']]], - ['basic_5fsi_5freference_52',['basic_si_reference',['../classstdex_1_1parser_1_1basic__si__reference.html',1,'stdex::parser']]], - ['basic_5fsi_5freference_5fdelimiter_53',['basic_si_reference_delimiter',['../classstdex_1_1parser_1_1basic__si__reference__delimiter.html',1,'stdex::parser']]], - ['basic_5fsi_5freference_5fpart_54',['basic_si_reference_part',['../classstdex_1_1parser_1_1basic__si__reference__part.html',1,'stdex::parser']]], - ['basic_5fsigned_5fnumeral_55',['basic_signed_numeral',['../classstdex_1_1parser_1_1basic__signed__numeral.html',1,'stdex::parser']]], - ['basic_5fspace_5fcu_56',['basic_space_cu',['../classstdex_1_1parser_1_1basic__space__cu.html',1,'stdex::parser']]], - ['basic_5fspace_5fcu_3c_20char_20_3e_57',['basic_space_cu< char >',['../classstdex_1_1parser_1_1basic__space__cu.html',1,'stdex::parser']]], - ['basic_5fspace_5for_5fpunct_5fcu_58',['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_59',['basic_space_or_punct_cu< char >',['../classstdex_1_1parser_1_1basic__space__or__punct__cu.html',1,'stdex::parser']]], - ['basic_5fstring_60',['basic_string',['../classstdex_1_1parser_1_1basic__string.html',1,'stdex::parser']]], - ['basic_5fstring_5fbranch_61',['basic_string_branch',['../classstdex_1_1parser_1_1basic__string__branch.html',1,'stdex::parser']]], - ['basic_5fsys_62',['basic_sys',['../classstdex_1_1stream_1_1basic__sys.html',1,'stdex::stream']]], - ['basic_5ftime_63',['basic_time',['../classstdex_1_1parser_1_1basic__time.html',1,'stdex::parser']]], - ['basic_5furl_64',['basic_url',['../classstdex_1_1parser_1_1basic__url.html',1,'stdex::parser']]], - ['basic_5furl_5fpassword_5fchar_65',['basic_url_password_char',['../classstdex_1_1parser_1_1basic__url__password__char.html',1,'stdex::parser']]], - ['basic_5furl_5fpassword_5fchar_3c_20char_20_3e_66',['basic_url_password_char< char >',['../classstdex_1_1parser_1_1basic__url__password__char.html',1,'stdex::parser']]], - ['basic_5furl_5fpath_67',['basic_url_path',['../classstdex_1_1parser_1_1basic__url__path.html',1,'stdex::parser']]], - ['basic_5furl_5fpath_5fchar_68',['basic_url_path_char',['../classstdex_1_1parser_1_1basic__url__path__char.html',1,'stdex::parser']]], - ['basic_5furl_5fpath_5fchar_3c_20char_20_3e_69',['basic_url_path_char< char >',['../classstdex_1_1parser_1_1basic__url__path__char.html',1,'stdex::parser']]], - ['basic_5furl_5fusername_5fchar_70',['basic_url_username_char',['../classstdex_1_1parser_1_1basic__url__username__char.html',1,'stdex::parser']]], - ['basic_5furl_5fusername_5fchar_3c_20char_20_3e_71',['basic_url_username_char< char >',['../classstdex_1_1parser_1_1basic__url__username__char.html',1,'stdex::parser']]], - ['block_5fhash_72',['block_hash',['../classstdex_1_1block__hash.html',1,'stdex']]], - ['block_5fhash_3c_20md5_5ft_20_3e_73',['block_hash< md5_t >',['../classstdex_1_1block__hash.html',1,'stdex']]], - ['block_5fhash_3c_20sha1_5ft_20_3e_74',['block_hash< sha1_t >',['../classstdex_1_1block__hash.html',1,'stdex']]], - ['buffer_75',['buffer',['../classstdex_1_1stream_1_1buffer.html',1,'stdex::stream']]], - ['buffer_5ft_76',['buffer_t',['../structstdex_1_1stream_1_1buffer_1_1buffer__t.html',1,'stdex::stream::buffer']]], - ['buffered_5fsys_77',['buffered_sys',['../classstdex_1_1stream_1_1buffered__sys.html',1,'stdex::stream']]] + ['basic_5fany_5fcu_3c_20_5felem_20_3e_7',['basic_any_cu< _Elem >',['../classstdex_1_1parser_1_1basic__any__cu.html',1,'stdex::parser']]], + ['basic_5fany_5fcu_3c_20char_20_3e_8',['basic_any_cu< char >',['../classstdex_1_1parser_1_1basic__any__cu.html',1,'stdex::parser']]], + ['basic_5fbol_9',['basic_bol',['../classstdex_1_1parser_1_1basic__bol.html',1,'stdex::parser']]], + ['basic_5fbranch_10',['basic_branch',['../classstdex_1_1parser_1_1basic__branch.html',1,'stdex::parser']]], + ['basic_5fchemical_5fformula_11',['basic_chemical_formula',['../classstdex_1_1parser_1_1basic__chemical__formula.html',1,'stdex::parser']]], + ['basic_5fcreditor_5freference_12',['basic_creditor_reference',['../classstdex_1_1parser_1_1basic__creditor__reference.html',1,'stdex::parser']]], + ['basic_5fcss_5fcdc_13',['basic_css_cdc',['../classstdex_1_1parser_1_1basic__css__cdc.html',1,'stdex::parser']]], + ['basic_5fcss_5fcdc_3c_20_5felem_20_3e_14',['basic_css_cdc< _Elem >',['../classstdex_1_1parser_1_1basic__css__cdc.html',1,'stdex::parser']]], + ['basic_5fcss_5fcdo_15',['basic_css_cdo',['../classstdex_1_1parser_1_1basic__css__cdo.html',1,'stdex::parser']]], + ['basic_5fcss_5fcdo_3c_20_5felem_20_3e_16',['basic_css_cdo< _Elem >',['../classstdex_1_1parser_1_1basic__css__cdo.html',1,'stdex::parser']]], + ['basic_5fcss_5fcomment_17',['basic_css_comment',['../classstdex_1_1parser_1_1basic__css__comment.html',1,'stdex::parser']]], + ['basic_5fcss_5fcomment_3c_20_5felem_20_3e_18',['basic_css_comment< _Elem >',['../classstdex_1_1parser_1_1basic__css__comment.html',1,'stdex::parser']]], + ['basic_5fcss_5fimport_19',['basic_css_import',['../classstdex_1_1parser_1_1basic__css__import.html',1,'stdex::parser']]], + ['basic_5fcss_5fimport_3c_20_5felem_20_3e_20',['basic_css_import< _Elem >',['../classstdex_1_1parser_1_1basic__css__import.html',1,'stdex::parser']]], + ['basic_5fcss_5fstring_21',['basic_css_string',['../classstdex_1_1parser_1_1basic__css__string.html',1,'stdex::parser']]], + ['basic_5fcss_5fstring_3c_20_5felem_20_3e_22',['basic_css_string< _Elem >',['../classstdex_1_1parser_1_1basic__css__string.html',1,'stdex::parser']]], + ['basic_5fcss_5furi_23',['basic_css_uri',['../classstdex_1_1parser_1_1basic__css__uri.html',1,'stdex::parser']]], + ['basic_5fcss_5furi_3c_20_5felem_20_3e_24',['basic_css_uri< _Elem >',['../classstdex_1_1parser_1_1basic__css__uri.html',1,'stdex::parser']]], + ['basic_5fcu_25',['basic_cu',['../classstdex_1_1parser_1_1basic__cu.html',1,'stdex::parser']]], + ['basic_5fcu_5fset_26',['basic_cu_set',['../classstdex_1_1parser_1_1basic__cu__set.html',1,'stdex::parser']]], + ['basic_5fdate_27',['basic_date',['../classstdex_1_1parser_1_1basic__date.html',1,'stdex::parser']]], + ['basic_5fdns_5fdomain_5fchar_28',['basic_dns_domain_char',['../classstdex_1_1parser_1_1basic__dns__domain__char.html',1,'stdex::parser']]], + ['basic_5fdns_5fdomain_5fchar_3c_20char_20_3e_29',['basic_dns_domain_char< char >',['../classstdex_1_1parser_1_1basic__dns__domain__char.html',1,'stdex::parser']]], + ['basic_5fdns_5fname_30',['basic_dns_name',['../classstdex_1_1parser_1_1basic__dns__name.html',1,'stdex::parser']]], + ['basic_5femail_5faddress_31',['basic_email_address',['../classstdex_1_1parser_1_1basic__email__address.html',1,'stdex::parser']]], + ['basic_5femoticon_32',['basic_emoticon',['../classstdex_1_1parser_1_1basic__emoticon.html',1,'stdex::parser']]], + ['basic_5feol_33',['basic_eol',['../classstdex_1_1parser_1_1basic__eol.html',1,'stdex::parser']]], + ['basic_5ffile_34',['basic_file',['../classstdex_1_1stream_1_1basic__file.html',1,'stdex::stream']]], + ['basic_5ffraction_35',['basic_fraction',['../classstdex_1_1parser_1_1basic__fraction.html',1,'stdex::parser']]], + ['basic_5fhash_36',['basic_hash',['../classstdex_1_1basic__hash.html',1,'stdex']]], + ['basic_5fhash_3c_20crc32_5ft_20_3e_37',['basic_hash< crc32_t >',['../classstdex_1_1basic__hash.html',1,'stdex']]], + ['basic_5fhash_3c_20md5_5ft_20_3e_38',['basic_hash< md5_t >',['../classstdex_1_1basic__hash.html',1,'stdex']]], + ['basic_5fhash_3c_20sha1_5ft_20_3e_39',['basic_hash< sha1_t >',['../classstdex_1_1basic__hash.html',1,'stdex']]], + ['basic_5fhtml_5fdeclaration_5fcondition_5fend_40',['basic_html_declaration_condition_end',['../classstdex_1_1parser_1_1basic__html__declaration__condition__end.html',1,'stdex::parser']]], + ['basic_5fhtml_5fdeclaration_5fcondition_5fend_3c_20_5felem_20_3e_41',['basic_html_declaration_condition_end< _Elem >',['../classstdex_1_1parser_1_1basic__html__declaration__condition__end.html',1,'stdex::parser']]], + ['basic_5fhtml_5fdeclaration_5fcondition_5fstart_42',['basic_html_declaration_condition_start',['../classstdex_1_1parser_1_1basic__html__declaration__condition__start.html',1,'stdex::parser']]], + ['basic_5fhtml_5fdeclaration_5fcondition_5fstart_3c_20_5felem_20_3e_43',['basic_html_declaration_condition_start< _Elem >',['../classstdex_1_1parser_1_1basic__html__declaration__condition__start.html',1,'stdex::parser']]], + ['basic_5fhtml_5fident_44',['basic_html_ident',['../classstdex_1_1parser_1_1basic__html__ident.html',1,'stdex::parser']]], + ['basic_5fhtml_5fident_3c_20_5felem_20_3e_45',['basic_html_ident< _Elem >',['../classstdex_1_1parser_1_1basic__html__ident.html',1,'stdex::parser']]], + ['basic_5fhtml_5ftag_46',['basic_html_tag',['../classstdex_1_1parser_1_1basic__html__tag.html',1,'stdex::parser']]], + ['basic_5fhtml_5ftag_3c_20_5felem_20_3e_47',['basic_html_tag< _Elem >',['../classstdex_1_1parser_1_1basic__html__tag.html',1,'stdex::parser']]], + ['basic_5fhtml_5fvalue_48',['basic_html_value',['../classstdex_1_1parser_1_1basic__html__value.html',1,'stdex::parser']]], + ['basic_5fhtml_5fvalue_3c_20_5felem_20_3e_49',['basic_html_value< _Elem >',['../classstdex_1_1parser_1_1basic__html__value.html',1,'stdex::parser']]], + ['basic_5fiban_50',['basic_iban',['../classstdex_1_1parser_1_1basic__iban.html',1,'stdex::parser']]], + ['basic_5finteger_51',['basic_integer',['../classstdex_1_1parser_1_1basic__integer.html',1,'stdex::parser']]], + ['basic_5finteger10_52',['basic_integer10',['../classstdex_1_1parser_1_1basic__integer10.html',1,'stdex::parser']]], + ['basic_5finteger10ts_53',['basic_integer10ts',['../classstdex_1_1parser_1_1basic__integer10ts.html',1,'stdex::parser']]], + ['basic_5finteger16_54',['basic_integer16',['../classstdex_1_1parser_1_1basic__integer16.html',1,'stdex::parser']]], + ['basic_5fipv4_5faddress_55',['basic_ipv4_address',['../classstdex_1_1parser_1_1basic__ipv4__address.html',1,'stdex::parser']]], + ['basic_5fipv6_5faddress_56',['basic_ipv6_address',['../classstdex_1_1parser_1_1basic__ipv6__address.html',1,'stdex::parser']]], + ['basic_5fipv6_5fscope_5fid_5fchar_57',['basic_ipv6_scope_id_char',['../classstdex_1_1parser_1_1basic__ipv6__scope__id__char.html',1,'stdex::parser']]], + ['basic_5fiterations_58',['basic_iterations',['../classstdex_1_1parser_1_1basic__iterations.html',1,'stdex::parser']]], + ['basic_5fjson_5fstring_59',['basic_json_string',['../classstdex_1_1parser_1_1basic__json__string.html',1,'stdex::parser']]], + ['basic_5fmime_5ftype_60',['basic_mime_type',['../classstdex_1_1parser_1_1basic__mime__type.html',1,'stdex::parser']]], + ['basic_5fmixed_5fnumeral_61',['basic_mixed_numeral',['../classstdex_1_1parser_1_1basic__mixed__numeral.html',1,'stdex::parser']]], + ['basic_5fmonetary_5fnumeral_62',['basic_monetary_numeral',['../classstdex_1_1parser_1_1basic__monetary__numeral.html',1,'stdex::parser']]], + ['basic_5fnoop_63',['basic_noop',['../classstdex_1_1parser_1_1basic__noop.html',1,'stdex::parser']]], + ['basic_5fparser_64',['basic_parser',['../classstdex_1_1parser_1_1basic__parser.html',1,'stdex::parser']]], + ['basic_5fparser_3c_20_5felem_20_3e_65',['basic_parser< _Elem >',['../classstdex_1_1parser_1_1basic__parser.html',1,'stdex::parser']]], + ['basic_5fparser_3c_20char_20_3e_66',['basic_parser< char >',['../classstdex_1_1parser_1_1basic__parser.html',1,'stdex::parser']]], + ['basic_5fpermutation_67',['basic_permutation',['../classstdex_1_1parser_1_1basic__permutation.html',1,'stdex::parser']]], + ['basic_5fphone_5fnumber_68',['basic_phone_number',['../classstdex_1_1parser_1_1basic__phone__number.html',1,'stdex::parser']]], + ['basic_5fpunct_5fcu_69',['basic_punct_cu',['../classstdex_1_1parser_1_1basic__punct__cu.html',1,'stdex::parser']]], + ['basic_5fpunct_5fcu_3c_20char_20_3e_70',['basic_punct_cu< char >',['../classstdex_1_1parser_1_1basic__punct__cu.html',1,'stdex::parser']]], + ['basic_5froman_5fnumeral_71',['basic_roman_numeral',['../classstdex_1_1parser_1_1basic__roman__numeral.html',1,'stdex::parser']]], + ['basic_5fscientific_5fnumeral_72',['basic_scientific_numeral',['../classstdex_1_1parser_1_1basic__scientific__numeral.html',1,'stdex::parser']]], + ['basic_5fscore_73',['basic_score',['../classstdex_1_1parser_1_1basic__score.html',1,'stdex::parser']]], + ['basic_5fsequence_74',['basic_sequence',['../classstdex_1_1parser_1_1basic__sequence.html',1,'stdex::parser']]], + ['basic_5fset_75',['basic_set',['../classstdex_1_1parser_1_1basic__set.html',1,'stdex::parser']]], + ['basic_5fset_3c_20char_20_3e_76',['basic_set< char >',['../classstdex_1_1parser_1_1basic__set.html',1,'stdex::parser']]], + ['basic_5fsi_5freference_77',['basic_si_reference',['../classstdex_1_1parser_1_1basic__si__reference.html',1,'stdex::parser']]], + ['basic_5fsi_5freference_5fdelimiter_78',['basic_si_reference_delimiter',['../classstdex_1_1parser_1_1basic__si__reference__delimiter.html',1,'stdex::parser']]], + ['basic_5fsi_5freference_5fpart_79',['basic_si_reference_part',['../classstdex_1_1parser_1_1basic__si__reference__part.html',1,'stdex::parser']]], + ['basic_5fsigned_5fnumeral_80',['basic_signed_numeral',['../classstdex_1_1parser_1_1basic__signed__numeral.html',1,'stdex::parser']]], + ['basic_5fspace_5fcu_81',['basic_space_cu',['../classstdex_1_1parser_1_1basic__space__cu.html',1,'stdex::parser']]], + ['basic_5fspace_5fcu_3c_20char_20_3e_82',['basic_space_cu< char >',['../classstdex_1_1parser_1_1basic__space__cu.html',1,'stdex::parser']]], + ['basic_5fspace_5for_5fpunct_5fcu_83',['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_84',['basic_space_or_punct_cu< char >',['../classstdex_1_1parser_1_1basic__space__or__punct__cu.html',1,'stdex::parser']]], + ['basic_5fstring_85',['basic_string',['../classstdex_1_1parser_1_1basic__string.html',1,'stdex::parser']]], + ['basic_5fstring_5fbranch_86',['basic_string_branch',['../classstdex_1_1parser_1_1basic__string__branch.html',1,'stdex::parser']]], + ['basic_5fsys_87',['basic_sys',['../classstdex_1_1stream_1_1basic__sys.html',1,'stdex::stream']]], + ['basic_5ftime_88',['basic_time',['../classstdex_1_1parser_1_1basic__time.html',1,'stdex::parser']]], + ['basic_5furl_89',['basic_url',['../classstdex_1_1parser_1_1basic__url.html',1,'stdex::parser']]], + ['basic_5furl_5fpassword_5fchar_90',['basic_url_password_char',['../classstdex_1_1parser_1_1basic__url__password__char.html',1,'stdex::parser']]], + ['basic_5furl_5fpassword_5fchar_3c_20char_20_3e_91',['basic_url_password_char< char >',['../classstdex_1_1parser_1_1basic__url__password__char.html',1,'stdex::parser']]], + ['basic_5furl_5fpath_92',['basic_url_path',['../classstdex_1_1parser_1_1basic__url__path.html',1,'stdex::parser']]], + ['basic_5furl_5fpath_5fchar_93',['basic_url_path_char',['../classstdex_1_1parser_1_1basic__url__path__char.html',1,'stdex::parser']]], + ['basic_5furl_5fpath_5fchar_3c_20char_20_3e_94',['basic_url_path_char< char >',['../classstdex_1_1parser_1_1basic__url__path__char.html',1,'stdex::parser']]], + ['basic_5furl_5fusername_5fchar_95',['basic_url_username_char',['../classstdex_1_1parser_1_1basic__url__username__char.html',1,'stdex::parser']]], + ['basic_5furl_5fusername_5fchar_3c_20char_20_3e_96',['basic_url_username_char< char >',['../classstdex_1_1parser_1_1basic__url__username__char.html',1,'stdex::parser']]], + ['block_5fhash_97',['block_hash',['../classstdex_1_1block__hash.html',1,'stdex']]], + ['block_5fhash_3c_20md5_5ft_20_3e_98',['block_hash< md5_t >',['../classstdex_1_1block__hash.html',1,'stdex']]], + ['block_5fhash_3c_20sha1_5ft_20_3e_99',['block_hash< sha1_t >',['../classstdex_1_1block__hash.html',1,'stdex']]], + ['buffer_100',['buffer',['../classstdex_1_1stream_1_1buffer.html',1,'stdex::stream']]], + ['buffer_5ft_101',['buffer_t',['../structstdex_1_1stream_1_1buffer_1_1buffer__t.html',1,'stdex::stream::buffer']]], + ['buffered_5fsys_102',['buffered_sys',['../classstdex_1_1stream_1_1buffered__sys.html',1,'stdex::stream']]] ]; diff --git a/search/classes_10.js b/search/classes_10.js index e9462335b..f6afe5499 100644 --- a/search/classes_10.js +++ b/search/classes_10.js @@ -1,6 +1,5 @@ var searchData= [ - ['watchdog_0',['watchdog',['../classstdex_1_1watchdog.html',1,'stdex']]], - ['window_1',['window',['../classstdex_1_1stream_1_1window.html',1,'stdex::stream']]], - ['worker_2',['worker',['../classstdex_1_1stream_1_1replicator_1_1worker.html',1,'stdex::stream::replicator']]] + ['url_5ftoken_0',['url_token',['../classstdex_1_1html_1_1url__token.html',1,'stdex::html']]], + ['user_5fcancelled_1',['user_cancelled',['../classstdex_1_1user__cancelled.html',1,'stdex']]] ]; diff --git a/search/classes_11.js b/search/classes_11.js new file mode 100644 index 000000000..3c6b76703 --- /dev/null +++ b/search/classes_11.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['vector_5fqueue_0',['vector_queue',['../classstdex_1_1vector__queue.html',1,'stdex']]] +]; diff --git a/search/classes_12.js b/search/classes_12.js new file mode 100644 index 000000000..e9462335b --- /dev/null +++ b/search/classes_12.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['watchdog_0',['watchdog',['../classstdex_1_1watchdog.html',1,'stdex']]], + ['window_1',['window',['../classstdex_1_1stream_1_1window.html',1,'stdex::stream']]], + ['worker_2',['worker',['../classstdex_1_1stream_1_1replicator_1_1worker.html',1,'stdex::stream::replicator']]] +]; diff --git a/search/classes_2.js b/search/classes_2.js index 9c677ef70..4999c0b7c 100644 --- a/search/classes_2.js +++ b/search/classes_2.js @@ -3,6 +3,7 @@ var searchData= ['cache_0',['cache',['../classstdex_1_1stream_1_1cache.html',1,'stdex::stream']]], ['cached_5ffile_1',['cached_file',['../classstdex_1_1stream_1_1cached__file.html',1,'stdex::stream']]], ['charset_5fencoder_2',['charset_encoder',['../classstdex_1_1charset__encoder.html',1,'stdex']]], - ['converter_3',['converter',['../classstdex_1_1stream_1_1converter.html',1,'stdex::stream']]], - ['crc32_5fhash_4',['crc32_hash',['../classstdex_1_1crc32__hash.html',1,'stdex']]] + ['comment_3',['comment',['../classstdex_1_1html_1_1comment.html',1,'stdex::html']]], + ['converter_4',['converter',['../classstdex_1_1stream_1_1converter.html',1,'stdex::stream']]], + ['crc32_5fhash_5',['crc32_hash',['../classstdex_1_1crc32__hash.html',1,'stdex']]] ]; diff --git a/search/classes_3.js b/search/classes_3.js index 12e5c0ffc..30b702d62 100644 --- a/search/classes_3.js +++ b/search/classes_3.js @@ -1,4 +1,7 @@ var searchData= [ - ['diag_5ffile_0',['diag_file',['../classstdex_1_1stream_1_1diag__file.html',1,'stdex::stream']]] + ['declaration_0',['declaration',['../classstdex_1_1html_1_1declaration.html',1,'stdex::html']]], + ['diag_5ffile_1',['diag_file',['../classstdex_1_1stream_1_1diag__file.html',1,'stdex::stream']]], + ['document_2',['document',['../classstdex_1_1html_1_1document.html',1,'stdex::html']]], + ['document_3c_20_5felem_2c_20_5ftraits_2c_20_5falloc_20_3e_3',['document< _Elem, _Traits, _Alloc >',['../classstdex_1_1html_1_1document.html',1,'stdex::html']]] ]; diff --git a/search/classes_4.js b/search/classes_4.js index afe013781..43bf036b1 100644 --- a/search/classes_4.js +++ b/search/classes_4.js @@ -1,7 +1,8 @@ var searchData= [ - ['fifo_0',['fifo',['../classstdex_1_1stream_1_1fifo.html',1,'stdex::stream']]], - ['file_1',['file',['../classstdex_1_1stream_1_1file.html',1,'stdex::stream']]], - ['file_5fwindow_2',['file_window',['../classstdex_1_1stream_1_1file__window.html',1,'stdex::stream']]], - ['free_5flocale_5fdelete_3',['free_locale_delete',['../structstdex_1_1free__locale__delete.html',1,'stdex']]] + ['element_0',['element',['../classstdex_1_1html_1_1element.html',1,'stdex::html']]], + ['element_5fend_1',['element_end',['../classstdex_1_1html_1_1element__end.html',1,'stdex::html']]], + ['element_5fstart_2',['element_start',['../classstdex_1_1html_1_1element__start.html',1,'stdex::html']]], + ['element_5ftraits_3',['element_traits',['../structstdex_1_1html_1_1element__traits.html',1,'stdex::html']]], + ['entity_4',['entity',['../structstdex_1_1html_1_1entity.html',1,'stdex::html']]] ]; diff --git a/search/classes_5.js b/search/classes_5.js index 27d47497a..afe013781 100644 --- a/search/classes_5.js +++ b/search/classes_5.js @@ -1,4 +1,7 @@ var searchData= [ - ['global_5fprogress_0',['global_progress',['../classstdex_1_1global__progress.html',1,'stdex']]] + ['fifo_0',['fifo',['../classstdex_1_1stream_1_1fifo.html',1,'stdex::stream']]], + ['file_1',['file',['../classstdex_1_1stream_1_1file.html',1,'stdex::stream']]], + ['file_5fwindow_2',['file_window',['../classstdex_1_1stream_1_1file__window.html',1,'stdex::stream']]], + ['free_5flocale_5fdelete_3',['free_locale_delete',['../structstdex_1_1free__locale__delete.html',1,'stdex']]] ]; diff --git a/search/classes_6.js b/search/classes_6.js index 18a83bcf2..27d47497a 100644 --- a/search/classes_6.js +++ b/search/classes_6.js @@ -1,33 +1,4 @@ var searchData= [ - ['hex_5fdec_0',['hex_dec',['../classstdex_1_1hex__dec.html',1,'stdex']]], - ['hex_5fenc_1',['hex_enc',['../classstdex_1_1hex__enc.html',1,'stdex']]], - ['http_5fagent_2',['http_agent',['../classstdex_1_1parser_1_1http__agent.html',1,'stdex::parser']]], - ['http_5fany_5ftype_3',['http_any_type',['../classstdex_1_1parser_1_1http__any__type.html',1,'stdex::parser']]], - ['http_5fasterisk_4',['http_asterisk',['../classstdex_1_1parser_1_1http__asterisk.html',1,'stdex::parser']]], - ['http_5fcookie_5',['http_cookie',['../classstdex_1_1parser_1_1http__cookie.html',1,'stdex::parser']]], - ['http_5fcookie_5fparameter_6',['http_cookie_parameter',['../classstdex_1_1parser_1_1http__cookie__parameter.html',1,'stdex::parser']]], - ['http_5ffactor_5fmore_7',['http_factor_more',['../structstdex_1_1parser_1_1http__factor__more.html',1,'stdex::parser']]], - ['http_5fheader_8',['http_header',['../classstdex_1_1parser_1_1http__header.html',1,'stdex::parser']]], - ['http_5flanguage_9',['http_language',['../classstdex_1_1parser_1_1http__language.html',1,'stdex::parser']]], - ['http_5fline_5fbreak_10',['http_line_break',['../classstdex_1_1parser_1_1http__line__break.html',1,'stdex::parser']]], - ['http_5fmedia_5frange_11',['http_media_range',['../classstdex_1_1parser_1_1http__media__range.html',1,'stdex::parser']]], - ['http_5fmedia_5ftype_12',['http_media_type',['../classstdex_1_1parser_1_1http__media__type.html',1,'stdex::parser']]], - ['http_5fparameter_13',['http_parameter',['../classstdex_1_1parser_1_1http__parameter.html',1,'stdex::parser']]], - ['http_5fprotocol_14',['http_protocol',['../classstdex_1_1parser_1_1http__protocol.html',1,'stdex::parser']]], - ['http_5fquoted_5fstring_15',['http_quoted_string',['../classstdex_1_1parser_1_1http__quoted__string.html',1,'stdex::parser']]], - ['http_5frequest_16',['http_request',['../classstdex_1_1parser_1_1http__request.html',1,'stdex::parser']]], - ['http_5fspace_17',['http_space',['../classstdex_1_1parser_1_1http__space.html',1,'stdex::parser']]], - ['http_5ftext_5fchar_18',['http_text_char',['../classstdex_1_1parser_1_1http__text__char.html',1,'stdex::parser']]], - ['http_5ftoken_19',['http_token',['../classstdex_1_1parser_1_1http__token.html',1,'stdex::parser']]], - ['http_5furl_20',['http_url',['../classstdex_1_1parser_1_1http__url.html',1,'stdex::parser']]], - ['http_5furl_5fparameter_21',['http_url_parameter',['../classstdex_1_1parser_1_1http__url__parameter.html',1,'stdex::parser']]], - ['http_5furl_5fpath_22',['http_url_path',['../classstdex_1_1parser_1_1http__url__path.html',1,'stdex::parser']]], - ['http_5furl_5fpath_5fsegment_23',['http_url_path_segment',['../classstdex_1_1parser_1_1http__url__path__segment.html',1,'stdex::parser']]], - ['http_5furl_5fport_24',['http_url_port',['../classstdex_1_1parser_1_1http__url__port.html',1,'stdex::parser']]], - ['http_5furl_5fserver_25',['http_url_server',['../classstdex_1_1parser_1_1http__url__server.html',1,'stdex::parser']]], - ['http_5fvalue_26',['http_value',['../classstdex_1_1parser_1_1http__value.html',1,'stdex::parser']]], - ['http_5fvalue_5fcollection_27',['http_value_collection',['../classstdex_1_1parser_1_1http__value__collection.html',1,'stdex::parser']]], - ['http_5fweight_28',['http_weight',['../classstdex_1_1parser_1_1http__weight.html',1,'stdex::parser']]], - ['http_5fweighted_5fvalue_29',['http_weighted_value',['../classstdex_1_1parser_1_1http__weighted__value.html',1,'stdex::parser']]] + ['global_5fprogress_0',['global_progress',['../classstdex_1_1global__progress.html',1,'stdex']]] ]; diff --git a/search/classes_7.js b/search/classes_7.js index 33252d03c..3e22df1db 100644 --- a/search/classes_7.js +++ b/search/classes_7.js @@ -1,6 +1,34 @@ var searchData= [ - ['interval_0',['interval',['../structstdex_1_1interval.html',1,'stdex']]], - ['interval_3c_20fpos_5ft_20_3e_1',['interval< fpos_t >',['../structstdex_1_1interval.html',1,'stdex']]], - ['interval_3c_20size_5ft_20_3e_2',['interval< size_t >',['../structstdex_1_1interval.html',1,'stdex']]] + ['hex_5fdec_0',['hex_dec',['../classstdex_1_1hex__dec.html',1,'stdex']]], + ['hex_5fenc_1',['hex_enc',['../classstdex_1_1hex__enc.html',1,'stdex']]], + ['html_5fattribute_2',['html_attribute',['../structstdex_1_1parser_1_1html__attribute.html',1,'stdex::parser']]], + ['http_5fagent_3',['http_agent',['../classstdex_1_1parser_1_1http__agent.html',1,'stdex::parser']]], + ['http_5fany_5ftype_4',['http_any_type',['../classstdex_1_1parser_1_1http__any__type.html',1,'stdex::parser']]], + ['http_5fasterisk_5',['http_asterisk',['../classstdex_1_1parser_1_1http__asterisk.html',1,'stdex::parser']]], + ['http_5fcookie_6',['http_cookie',['../classstdex_1_1parser_1_1http__cookie.html',1,'stdex::parser']]], + ['http_5fcookie_5fparameter_7',['http_cookie_parameter',['../classstdex_1_1parser_1_1http__cookie__parameter.html',1,'stdex::parser']]], + ['http_5ffactor_5fmore_8',['http_factor_more',['../structstdex_1_1parser_1_1http__factor__more.html',1,'stdex::parser']]], + ['http_5fheader_9',['http_header',['../classstdex_1_1parser_1_1http__header.html',1,'stdex::parser']]], + ['http_5flanguage_10',['http_language',['../classstdex_1_1parser_1_1http__language.html',1,'stdex::parser']]], + ['http_5fline_5fbreak_11',['http_line_break',['../classstdex_1_1parser_1_1http__line__break.html',1,'stdex::parser']]], + ['http_5fmedia_5frange_12',['http_media_range',['../classstdex_1_1parser_1_1http__media__range.html',1,'stdex::parser']]], + ['http_5fmedia_5ftype_13',['http_media_type',['../classstdex_1_1parser_1_1http__media__type.html',1,'stdex::parser']]], + ['http_5fparameter_14',['http_parameter',['../classstdex_1_1parser_1_1http__parameter.html',1,'stdex::parser']]], + ['http_5fprotocol_15',['http_protocol',['../classstdex_1_1parser_1_1http__protocol.html',1,'stdex::parser']]], + ['http_5fquoted_5fstring_16',['http_quoted_string',['../classstdex_1_1parser_1_1http__quoted__string.html',1,'stdex::parser']]], + ['http_5frequest_17',['http_request',['../classstdex_1_1parser_1_1http__request.html',1,'stdex::parser']]], + ['http_5fspace_18',['http_space',['../classstdex_1_1parser_1_1http__space.html',1,'stdex::parser']]], + ['http_5ftext_5fchar_19',['http_text_char',['../classstdex_1_1parser_1_1http__text__char.html',1,'stdex::parser']]], + ['http_5ftoken_20',['http_token',['../classstdex_1_1parser_1_1http__token.html',1,'stdex::parser']]], + ['http_5furl_21',['http_url',['../classstdex_1_1parser_1_1http__url.html',1,'stdex::parser']]], + ['http_5furl_5fparameter_22',['http_url_parameter',['../classstdex_1_1parser_1_1http__url__parameter.html',1,'stdex::parser']]], + ['http_5furl_5fpath_23',['http_url_path',['../classstdex_1_1parser_1_1http__url__path.html',1,'stdex::parser']]], + ['http_5furl_5fpath_5fsegment_24',['http_url_path_segment',['../classstdex_1_1parser_1_1http__url__path__segment.html',1,'stdex::parser']]], + ['http_5furl_5fport_25',['http_url_port',['../classstdex_1_1parser_1_1http__url__port.html',1,'stdex::parser']]], + ['http_5furl_5fserver_26',['http_url_server',['../classstdex_1_1parser_1_1http__url__server.html',1,'stdex::parser']]], + ['http_5fvalue_27',['http_value',['../classstdex_1_1parser_1_1http__value.html',1,'stdex::parser']]], + ['http_5fvalue_5fcollection_28',['http_value_collection',['../classstdex_1_1parser_1_1http__value__collection.html',1,'stdex::parser']]], + ['http_5fweight_29',['http_weight',['../classstdex_1_1parser_1_1http__weight.html',1,'stdex::parser']]], + ['http_5fweighted_5fvalue_30',['http_weighted_value',['../classstdex_1_1parser_1_1http__weighted__value.html',1,'stdex::parser']]] ]; diff --git a/search/classes_8.js b/search/classes_8.js index f81f87d94..1ba125ab9 100644 --- a/search/classes_8.js +++ b/search/classes_8.js @@ -1,5 +1,8 @@ var searchData= [ - ['lazy_5fprogress_0',['lazy_progress',['../classstdex_1_1lazy__progress.html',1,'stdex']]], - ['limiter_1',['limiter',['../classstdex_1_1stream_1_1limiter.html',1,'stdex::stream']]] + ['inserted_5ftoken_0',['inserted_token',['../structstdex_1_1html_1_1inserted__token.html',1,'stdex::html']]], + ['instruction_1',['instruction',['../classstdex_1_1html_1_1instruction.html',1,'stdex::html']]], + ['interval_2',['interval',['../structstdex_1_1interval.html',1,'stdex']]], + ['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']]] ]; diff --git a/search/classes_9.js b/search/classes_9.js index 01250d054..f81f87d94 100644 --- a/search/classes_9.js +++ b/search/classes_9.js @@ -1,7 +1,5 @@ var searchData= [ - ['mapping_0',['mapping',['../structstdex_1_1mapping.html',1,'stdex']]], - ['md2_5ft_1',['md2_t',['../unionstdex_1_1md2__t.html',1,'stdex']]], - ['md5_5fhash_2',['md5_hash',['../classstdex_1_1md5__hash.html',1,'stdex']]], - ['memory_5ffile_3',['memory_file',['../classstdex_1_1stream_1_1memory__file.html',1,'stdex::stream']]] + ['lazy_5fprogress_0',['lazy_progress',['../classstdex_1_1lazy__progress.html',1,'stdex']]], + ['limiter_1',['limiter',['../classstdex_1_1stream_1_1limiter.html',1,'stdex::stream']]] ]; diff --git a/search/classes_a.js b/search/classes_a.js index 6869127a6..01250d054 100644 --- a/search/classes_a.js +++ b/search/classes_a.js @@ -1,6 +1,7 @@ var searchData= [ - ['no_5fdelete_0',['no_delete',['../structstdex_1_1no__delete.html',1,'stdex']]], - ['no_5fdelete_3c_20t_5b_5d_3e_1',['no_delete< T[]>',['../structstdex_1_1no__delete_3_01_t_0f_0e_4.html',1,'stdex']]], - ['node_5ft_2',['node_t',['../structstdex_1_1stream_1_1fifo_1_1node__t.html',1,'stdex::stream::fifo']]] + ['mapping_0',['mapping',['../structstdex_1_1mapping.html',1,'stdex']]], + ['md2_5ft_1',['md2_t',['../unionstdex_1_1md2__t.html',1,'stdex']]], + ['md5_5fhash_2',['md5_hash',['../classstdex_1_1md5__hash.html',1,'stdex']]], + ['memory_5ffile_3',['memory_file',['../classstdex_1_1stream_1_1memory__file.html',1,'stdex::stream']]] ]; diff --git a/search/classes_b.js b/search/classes_b.js index d829efd6d..6869127a6 100644 --- a/search/classes_b.js +++ b/search/classes_b.js @@ -1,7 +1,6 @@ var searchData= [ - ['parser_5fcollection_0',['parser_collection',['../classstdex_1_1parser_1_1parser__collection.html',1,'stdex::parser']]], - ['pool_1',['pool',['../classstdex_1_1pool.html',1,'stdex']]], - ['progress_2',['progress',['../classstdex_1_1progress.html',1,'stdex']]], - ['progress_5fswitcher_3',['progress_switcher',['../classstdex_1_1progress__switcher.html',1,'stdex']]] + ['no_5fdelete_0',['no_delete',['../structstdex_1_1no__delete.html',1,'stdex']]], + ['no_5fdelete_3c_20t_5b_5d_3e_1',['no_delete< T[]>',['../structstdex_1_1no__delete_3_01_t_0f_0e_4.html',1,'stdex']]], + ['node_5ft_2',['node_t',['../structstdex_1_1stream_1_1fifo_1_1node__t.html',1,'stdex::stream::fifo']]] ]; diff --git a/search/classes_c.js b/search/classes_c.js index 9381891ab..f7eb0c774 100644 --- a/search/classes_c.js +++ b/search/classes_c.js @@ -1,7 +1,9 @@ var searchData= [ - ['record_0',['record',['../classstdex_1_1idrec_1_1record.html',1,'stdex::idrec']]], - ['replicator_1',['replicator',['../classstdex_1_1stream_1_1replicator.html',1,'stdex::stream']]], - ['ring_2',['ring',['../classstdex_1_1ring.html',1,'stdex']]], - ['ring_3c_20uint8_5ft_2c_20default_5fasync_5flimit_20_3e_3',['ring< uint8_t, default_async_limit >',['../classstdex_1_1ring.html',1,'stdex']]] + ['parser_0',['parser',['../classstdex_1_1html_1_1parser.html',1,'stdex::html']]], + ['parser_5fcollection_1',['parser_collection',['../classstdex_1_1parser_1_1parser__collection.html',1,'stdex::parser']]], + ['pool_2',['pool',['../classstdex_1_1pool.html',1,'stdex']]], + ['progress_3',['progress',['../classstdex_1_1progress.html',1,'stdex']]], + ['progress_3c_20size_5ft_20_3e_4',['progress< size_t >',['../classstdex_1_1progress.html',1,'stdex']]], + ['progress_5fswitcher_5',['progress_switcher',['../classstdex_1_1progress__switcher.html',1,'stdex']]] ]; diff --git a/search/classes_d.js b/search/classes_d.js index 43761e42b..9381891ab 100644 --- a/search/classes_d.js +++ b/search/classes_d.js @@ -1,23 +1,7 @@ var searchData= [ - ['sgml_5fany_5fcp_0',['sgml_any_cp',['../classstdex_1_1parser_1_1sgml__any__cp.html',1,'stdex::parser']]], - ['sgml_5fcp_1',['sgml_cp',['../classstdex_1_1parser_1_1sgml__cp.html',1,'stdex::parser']]], - ['sgml_5fcp_5fset_2',['sgml_cp_set',['../classstdex_1_1parser_1_1sgml__cp__set.html',1,'stdex::parser']]], - ['sgml_5fdns_5fdomain_5fchar_3',['sgml_dns_domain_char',['../classstdex_1_1parser_1_1sgml__dns__domain__char.html',1,'stdex::parser']]], - ['sgml_5fipv6_5fscope_5fid_5fchar_4',['sgml_ipv6_scope_id_char',['../classstdex_1_1parser_1_1sgml__ipv6__scope__id__char.html',1,'stdex::parser']]], - ['sgml_5fpunct_5fcp_5',['sgml_punct_cp',['../classstdex_1_1parser_1_1sgml__punct__cp.html',1,'stdex::parser']]], - ['sgml_5fspace_5fcp_6',['sgml_space_cp',['../classstdex_1_1parser_1_1sgml__space__cp.html',1,'stdex::parser']]], - ['sgml_5fspace_5for_5fpunct_5fcp_7',['sgml_space_or_punct_cp',['../classstdex_1_1parser_1_1sgml__space__or__punct__cp.html',1,'stdex::parser']]], - ['sgml_5fstring_8',['sgml_string',['../classstdex_1_1parser_1_1sgml__string.html',1,'stdex::parser']]], - ['sgml_5furl_5fpassword_5fchar_9',['sgml_url_password_char',['../classstdex_1_1parser_1_1sgml__url__password__char.html',1,'stdex::parser']]], - ['sgml_5furl_5fpath_5fchar_10',['sgml_url_path_char',['../classstdex_1_1parser_1_1sgml__url__path__char.html',1,'stdex::parser']]], - ['sgml_5furl_5fusername_5fchar_11',['sgml_url_username_char',['../classstdex_1_1parser_1_1sgml__url__username__char.html',1,'stdex::parser']]], - ['sha1_5fhash_12',['sha1_hash',['../classstdex_1_1sha1__hash.html',1,'stdex']]], - ['sha256_5ft_13',['sha256_t',['../unionstdex_1_1sha256__t.html',1,'stdex']]], - ['sha_5ft_14',['sha_t',['../unionstdex_1_1sha__t.html',1,'stdex']]], - ['socket_15',['socket',['../classstdex_1_1stream_1_1socket.html',1,'stdex::stream']]], - ['spinlock_16',['spinlock',['../classstdex_1_1spinlock.html',1,'stdex']]], - ['stream_5fhasher_17',['stream_hasher',['../classstdex_1_1stream__hasher.html',1,'stdex']]], - ['sys_5finfo_5ft_18',['sys_info_t',['../structstdex_1_1sys__info__t.html',1,'stdex']]], - ['sys_5fobject_19',['sys_object',['../classstdex_1_1sys__object.html',1,'stdex']]] + ['record_0',['record',['../classstdex_1_1idrec_1_1record.html',1,'stdex::idrec']]], + ['replicator_1',['replicator',['../classstdex_1_1stream_1_1replicator.html',1,'stdex::stream']]], + ['ring_2',['ring',['../classstdex_1_1ring.html',1,'stdex']]], + ['ring_3c_20uint8_5ft_2c_20default_5fasync_5flimit_20_3e_3',['ring< uint8_t, default_async_limit >',['../classstdex_1_1ring.html',1,'stdex']]] ]; diff --git a/search/classes_e.js b/search/classes_e.js index a27d9a257..8bf10d972 100644 --- a/search/classes_e.js +++ b/search/classes_e.js @@ -1,4 +1,25 @@ var searchData= [ - ['user_5fcancelled_0',['user_cancelled',['../classstdex_1_1user__cancelled.html',1,'stdex']]] + ['sequence_0',['sequence',['../classstdex_1_1html_1_1sequence.html',1,'stdex::html']]], + ['sgml_5fany_5fcp_1',['sgml_any_cp',['../classstdex_1_1parser_1_1sgml__any__cp.html',1,'stdex::parser']]], + ['sgml_5fcp_2',['sgml_cp',['../classstdex_1_1parser_1_1sgml__cp.html',1,'stdex::parser']]], + ['sgml_5fcp_5fset_3',['sgml_cp_set',['../classstdex_1_1parser_1_1sgml__cp__set.html',1,'stdex::parser']]], + ['sgml_5fdns_5fdomain_5fchar_4',['sgml_dns_domain_char',['../classstdex_1_1parser_1_1sgml__dns__domain__char.html',1,'stdex::parser']]], + ['sgml_5fipv6_5fscope_5fid_5fchar_5',['sgml_ipv6_scope_id_char',['../classstdex_1_1parser_1_1sgml__ipv6__scope__id__char.html',1,'stdex::parser']]], + ['sgml_5fpunct_5fcp_6',['sgml_punct_cp',['../classstdex_1_1parser_1_1sgml__punct__cp.html',1,'stdex::parser']]], + ['sgml_5fspace_5fcp_7',['sgml_space_cp',['../classstdex_1_1parser_1_1sgml__space__cp.html',1,'stdex::parser']]], + ['sgml_5fspace_5for_5fpunct_5fcp_8',['sgml_space_or_punct_cp',['../classstdex_1_1parser_1_1sgml__space__or__punct__cp.html',1,'stdex::parser']]], + ['sgml_5fstring_9',['sgml_string',['../classstdex_1_1parser_1_1sgml__string.html',1,'stdex::parser']]], + ['sgml_5furl_5fpassword_5fchar_10',['sgml_url_password_char',['../classstdex_1_1parser_1_1sgml__url__password__char.html',1,'stdex::parser']]], + ['sgml_5furl_5fpath_5fchar_11',['sgml_url_path_char',['../classstdex_1_1parser_1_1sgml__url__path__char.html',1,'stdex::parser']]], + ['sgml_5furl_5fusername_5fchar_12',['sgml_url_username_char',['../classstdex_1_1parser_1_1sgml__url__username__char.html',1,'stdex::parser']]], + ['sha1_5fhash_13',['sha1_hash',['../classstdex_1_1sha1__hash.html',1,'stdex']]], + ['sha256_5ft_14',['sha256_t',['../unionstdex_1_1sha256__t.html',1,'stdex']]], + ['sha_5ft_15',['sha_t',['../unionstdex_1_1sha__t.html',1,'stdex']]], + ['socket_16',['socket',['../classstdex_1_1stream_1_1socket.html',1,'stdex::stream']]], + ['spinlock_17',['spinlock',['../classstdex_1_1spinlock.html',1,'stdex']]], + ['starting_5ftoken_18',['starting_token',['../classstdex_1_1html_1_1starting__token.html',1,'stdex::html']]], + ['stream_5fhasher_19',['stream_hasher',['../classstdex_1_1stream__hasher.html',1,'stdex']]], + ['sys_5finfo_5ft_20',['sys_info_t',['../structstdex_1_1sys__info__t.html',1,'stdex']]], + ['sys_5fobject_21',['sys_object',['../classstdex_1_1sys__object.html',1,'stdex']]] ]; diff --git a/search/classes_f.js b/search/classes_f.js index 3c6b76703..724fcaa2b 100644 --- a/search/classes_f.js +++ b/search/classes_f.js @@ -1,4 +1,6 @@ var searchData= [ - ['vector_5fqueue_0',['vector_queue',['../classstdex_1_1vector__queue.html',1,'stdex']]] + ['text_5ftoken_0',['text_token',['../classstdex_1_1html_1_1text__token.html',1,'stdex::html']]], + ['text_5ftoken_3c_20_5felem_2c_20std_3a_3achar_5ftraits_3c_20_5felem_20_3e_2c_20std_3a_3aallocator_3c_20_5felem_20_3e_20_3e_1',['text_token< _Elem, std::char_traits< _Elem >, std::allocator< _Elem > >',['../classstdex_1_1html_1_1text__token.html',1,'stdex::html']]], + ['token_2',['token',['../classstdex_1_1html_1_1token.html',1,'stdex::html']]] ]; diff --git a/search/functions_0.js b/search/functions_0.js index 0864cd382..841dda4b3 100644 --- a/search/functions_0.js +++ b/search/functions_0.js @@ -1,8 +1,14 @@ var searchData= [ ['abs_0',['abs',['../classstdex_1_1vector__queue.html#ae31dd1a45546dc1ff91eaa82b97c0e1b',1,'stdex::vector_queue']]], - ['at_1',['at',['../classstdex_1_1vector__queue.html#ae135f77af0deabaa5f2cfe5ca25b9f09',1,'stdex::vector_queue::at(size_type pos)'],['../classstdex_1_1vector__queue.html#ac2b559184798a59ee5fed26f27d92e3c',1,'stdex::vector_queue::at(size_type pos) const']]], - ['at_5fabs_2',['at_abs',['../classstdex_1_1vector__queue.html#a881da485c13dcee1d35245570420877a',1,'stdex::vector_queue::at_abs(size_type pos)'],['../classstdex_1_1vector__queue.html#afee762c3280d33544ce8dd8ad20af40b',1,'stdex::vector_queue::at_abs(size_type pos) const']]], - ['atime_3',['atime',['../classstdex_1_1stream_1_1basic__file.html#a84936e230100934793aad8a516efa826',1,'stdex::stream::basic_file::atime()'],['../classstdex_1_1stream_1_1cache.html#a5fd8962b5a49d549a36d96f3e8919cd7',1,'stdex::stream::cache::atime()'],['../classstdex_1_1stream_1_1file.html#a4b5cdfe6c9dccd20726df867e34f4af3',1,'stdex::stream::file::atime()']]], - ['attach_4',['attach',['../classstdex_1_1global__progress.html#aec91532fde2500a5458a397f91c88769',1,'stdex::global_progress']]] + ['active_5felement_1',['active_element',['../classstdex_1_1html_1_1document.html#ac8d974ade6e33245a9354b0fa0c2a762',1,'stdex::html::document']]], + ['append_2',['append',['../classstdex_1_1html_1_1document.html#a79585dbbf1916073dfa9ce8343f3137b',1,'stdex::html::document']]], + ['append_5finserted_5ftokens_3',['append_inserted_tokens',['../classstdex_1_1html_1_1parser.html#aee0d308698b67b5abb21442f14bd19d3',1,'stdex::html::parser']]], + ['append_5ftag_4',['append_tag',['../classstdex_1_1html_1_1token.html#a6f486618bd17716e68e8c51aeb8b39e0',1,'stdex::html::token::append_tag(std::basic_string< char, _Traits, _Alloc > &str) const'],['../classstdex_1_1html_1_1token.html#ae0dd3526834ebda56c0e0cc4639f979e',1,'stdex::html::token::append_tag(std::basic_string< wchar_t, _Traits, _Alloc > &str) const']]], + ['append_5ftoken_5',['append_token',['../classstdex_1_1html_1_1parser.html#aeb7c3071e98511d3215c4fa8c643d1f6',1,'stdex::html::parser::append_token(std::unique_ptr< T > &&token)'],['../classstdex_1_1html_1_1parser.html#a6fe16b4065b1ce300443794aa6d49044',1,'stdex::html::parser::append_token(std::unique_ptr< T > &&token, std::basic_string< _Elem, _Traits, _Alloc > &source)']]], + ['assign_6',['assign',['../classstdex_1_1html_1_1document.html#a85458aea6b21a1154c20e5d6183aa285',1,'stdex::html::document']]], + ['at_7',['at',['../classstdex_1_1vector__queue.html#ae135f77af0deabaa5f2cfe5ca25b9f09',1,'stdex::vector_queue::at(size_type pos)'],['../classstdex_1_1vector__queue.html#ac2b559184798a59ee5fed26f27d92e3c',1,'stdex::vector_queue::at(size_type pos) const']]], + ['at_5fabs_8',['at_abs',['../classstdex_1_1vector__queue.html#a881da485c13dcee1d35245570420877a',1,'stdex::vector_queue::at_abs(size_type pos)'],['../classstdex_1_1vector__queue.html#afee762c3280d33544ce8dd8ad20af40b',1,'stdex::vector_queue::at_abs(size_type pos) const']]], + ['atime_9',['atime',['../classstdex_1_1stream_1_1basic__file.html#a84936e230100934793aad8a516efa826',1,'stdex::stream::basic_file::atime()'],['../classstdex_1_1stream_1_1cache.html#a5fd8962b5a49d549a36d96f3e8919cd7',1,'stdex::stream::cache::atime()'],['../classstdex_1_1stream_1_1file.html#a4b5cdfe6c9dccd20726df867e34f4af3',1,'stdex::stream::file::atime()']]], + ['attach_10',['attach',['../classstdex_1_1global__progress.html#aec91532fde2500a5458a397f91c88769',1,'stdex::global_progress']]] ]; diff --git a/search/functions_10.js b/search/functions_10.js index d0a4fa626..312b1c70b 100644 --- a/search/functions_10.js +++ b/search/functions_10.js @@ -5,20 +5,23 @@ var searchData= ['seekbeg_2',['seekbeg',['../classstdex_1_1stream_1_1basic__file.html#a6a8da9a1b0a3926b9bc453bf0209ee5e',1,'stdex::stream::basic_file']]], ['seekcur_3',['seekcur',['../classstdex_1_1stream_1_1basic__file.html#a8158cb89ef54a737b7bcfed635c215d6',1,'stdex::stream::basic_file']]], ['seekend_4',['seekend',['../classstdex_1_1stream_1_1basic__file.html#ae13b5941415b3dbb9883c1da9bcd39c7',1,'stdex::stream::basic_file']]], - ['set_5',['set',['../classstdex_1_1stream_1_1memory__file.html#a8ccb02a23999882255d5c16c83f91571',1,'stdex::stream::memory_file::set()'],['../classstdex_1_1global__progress.html#a76e66104444c77b89b687b4ad4945e8e',1,'stdex::global_progress::set()'],['../classstdex_1_1lazy__progress.html#a4e3e7a80da8cce7ccec69c78fcaaabae',1,'stdex::lazy_progress::set()'],['../classstdex_1_1progress.html#acf3a29daf22709bf7e94e864c8be95a1',1,'stdex::progress::set()']]], - ['set_5fatime_6',['set_atime',['../classstdex_1_1stream_1_1basic__file.html#ae76436514ac66d88bbd584ea07d879d0',1,'stdex::stream::basic_file::set_atime()'],['../classstdex_1_1stream_1_1cache.html#af026881969ee78e2aef1bf02922aea93',1,'stdex::stream::cache::set_atime()'],['../classstdex_1_1stream_1_1file.html#a64ded627a8843c155ea3a59b94c225f6',1,'stdex::stream::file::set_atime()']]], + ['set_5',['set',['../classstdex_1_1progress.html#acf3a29daf22709bf7e94e864c8be95a1',1,'stdex::progress::set()'],['../classstdex_1_1lazy__progress.html#a4e3e7a80da8cce7ccec69c78fcaaabae',1,'stdex::lazy_progress::set()'],['../classstdex_1_1global__progress.html#a76e66104444c77b89b687b4ad4945e8e',1,'stdex::global_progress::set()'],['../classstdex_1_1stream_1_1memory__file.html#a8ccb02a23999882255d5c16c83f91571',1,'stdex::stream::memory_file::set()']]], + ['set_5fatime_6',['set_atime',['../classstdex_1_1stream_1_1cache.html#af026881969ee78e2aef1bf02922aea93',1,'stdex::stream::cache::set_atime()'],['../classstdex_1_1stream_1_1file.html#a64ded627a8843c155ea3a59b94c225f6',1,'stdex::stream::file::set_atime()'],['../classstdex_1_1stream_1_1basic__file.html#ae76436514ac66d88bbd584ea07d879d0',1,'stdex::stream::basic_file::set_atime(time_point date)']]], ['set_5fctime_7',['set_ctime',['../classstdex_1_1stream_1_1basic__file.html#aba668e53fc4709cd545f12a49521ed56',1,'stdex::stream::basic_file::set_ctime()'],['../classstdex_1_1stream_1_1cache.html#ae62a75156ff79910e1b9afc506e38e44',1,'stdex::stream::cache::set_ctime()'],['../classstdex_1_1stream_1_1file.html#a337a27cd63975e155b6ba29a18ed9a23',1,'stdex::stream::file::set_ctime()']]], ['set_5fglobal_5frange_8',['set_global_range',['../classstdex_1_1global__progress.html#ac68b491c62861fae1b16abb3477cb9c1',1,'stdex::global_progress']]], ['set_5fmtime_9',['set_mtime',['../classstdex_1_1stream_1_1basic__file.html#a814a080cb6da2041013749cc125bfd2b',1,'stdex::stream::basic_file::set_mtime()'],['../classstdex_1_1stream_1_1cache.html#aafad7bfb4c03d0d56854b4c148ae0ee1',1,'stdex::stream::cache::set_mtime()'],['../classstdex_1_1stream_1_1file.html#a567620d1eb84032e460f3e173f9bd762',1,'stdex::stream::file::set_mtime()']]], - ['set_5frange_10',['set_range',['../classstdex_1_1global__progress.html#afb204b820637c19b494976af4a284704',1,'stdex::global_progress::set_range()'],['../classstdex_1_1progress.html#afbb1513bdb20340ebb21bd988f4e424a',1,'stdex::progress::set_range()'],['../classstdex_1_1lazy__progress.html#ada3a0d4f0086823558115a8064ffffb6',1,'stdex::lazy_progress::set_range()']]], + ['set_5frange_10',['set_range',['../classstdex_1_1progress.html#afbb1513bdb20340ebb21bd988f4e424a',1,'stdex::progress::set_range()'],['../classstdex_1_1lazy__progress.html#ada3a0d4f0086823558115a8064ffffb6',1,'stdex::lazy_progress::set_range()'],['../classstdex_1_1global__progress.html#afb204b820637c19b494976af4a284704',1,'stdex::global_progress::set_range(T start, T end)']]], ['set_5fsection_5frange_11',['set_section_range',['../classstdex_1_1global__progress.html#a242009bce7ac595975bbfd703ec58c3b',1,'stdex::global_progress']]], ['set_5ftext_12',['set_text',['../classstdex_1_1progress.html#a2cab8b5ac137d16fced31ee205264b01',1,'stdex::progress::set_text()'],['../classstdex_1_1global__progress.html#a89b7116003ab3b6344d90f130c14933e',1,'stdex::global_progress::set_text()']]], ['show_13',['show',['../classstdex_1_1progress.html#ab6e57aed9e7a18a501e8a63cef199d8e',1,'stdex::progress::show()'],['../classstdex_1_1global__progress.html#a32350e02d5904867402187e81a3c4a26',1,'stdex::global_progress::show()']]], - ['size_14',['size',['../classstdex_1_1stream_1_1fifo.html#a3272bc89573fe75fe0e6de2600967c10',1,'stdex::stream::fifo::size()'],['../classstdex_1_1vector__queue.html#ad704df8c3664a6d3f3e0977d87162114',1,'stdex::vector_queue::size()'],['../classstdex_1_1stream_1_1diag__file.html#a0797e4eba9f702022e1c467694302871',1,'stdex::stream::diag_file::size()'],['../classstdex_1_1stream_1_1memory__file.html#a99b32855f1f85ccc7c08d71786c17a1c',1,'stdex::stream::memory_file::size()'],['../classstdex_1_1stream_1_1file.html#acc591c2378e51340b7af7fbf12d1a98f',1,'stdex::stream::file::size()'],['../classstdex_1_1stream_1_1file__window.html#a70d596dd863a5265303aab11db59768e',1,'stdex::stream::file_window::size()'],['../classstdex_1_1stream_1_1basic__file.html#ad868d7c25aa45cefc95dd54a24febf2f',1,'stdex::stream::basic_file::size()'],['../structstdex_1_1interval.html#a8c5222bc73fc66ba78bfabc1b985c864',1,'stdex::interval::size()'],['../classstdex_1_1basic__hash.html#a9b8b5f91873e5d2cfe93533832318b5a',1,'stdex::basic_hash::size()'],['../classstdex_1_1stream_1_1cache.html#a769034b8641a17210a916091b112af2d',1,'stdex::stream::cache::size()']]], - ['skip_15',['skip',['../classstdex_1_1stream_1_1basic.html#a52ce3bdf28a9a7fc5a881616c8db2da4',1,'stdex::stream::basic::skip()'],['../classstdex_1_1stream_1_1basic__file.html#a15a1e6a778adefea421f32d14c8178dd',1,'stdex::stream::basic_file::skip()'],['../classstdex_1_1stream_1_1file__window.html#a4202fcc2b9e69e40bf15aaa3b5f50dda',1,'stdex::stream::file_window::skip()']]], + ['size_14',['size',['../classstdex_1_1basic__hash.html#a9b8b5f91873e5d2cfe93533832318b5a',1,'stdex::basic_hash::size()'],['../structstdex_1_1interval.html#a8c5222bc73fc66ba78bfabc1b985c864',1,'stdex::interval::size()'],['../classstdex_1_1stream_1_1basic__file.html#ad868d7c25aa45cefc95dd54a24febf2f',1,'stdex::stream::basic_file::size()'],['../classstdex_1_1stream_1_1file__window.html#a70d596dd863a5265303aab11db59768e',1,'stdex::stream::file_window::size()'],['../classstdex_1_1stream_1_1cache.html#a769034b8641a17210a916091b112af2d',1,'stdex::stream::cache::size()'],['../classstdex_1_1stream_1_1file.html#acc591c2378e51340b7af7fbf12d1a98f',1,'stdex::stream::file::size()'],['../classstdex_1_1stream_1_1memory__file.html#a99b32855f1f85ccc7c08d71786c17a1c',1,'stdex::stream::memory_file::size()'],['../classstdex_1_1stream_1_1fifo.html#a3272bc89573fe75fe0e6de2600967c10',1,'stdex::stream::fifo::size()'],['../classstdex_1_1stream_1_1diag__file.html#a0797e4eba9f702022e1c467694302871',1,'stdex::stream::diag_file::size()'],['../classstdex_1_1vector__queue.html#ad704df8c3664a6d3f3e0977d87162114',1,'stdex::vector_queue::size()']]], + ['skip_15',['skip',['../classstdex_1_1stream_1_1basic__file.html#a15a1e6a778adefea421f32d14c8178dd',1,'stdex::stream::basic_file::skip()'],['../classstdex_1_1stream_1_1file__window.html#a4202fcc2b9e69e40bf15aaa3b5f50dda',1,'stdex::stream::file_window::skip()'],['../classstdex_1_1stream_1_1basic.html#a52ce3bdf28a9a7fc5a881616c8db2da4',1,'stdex::stream::basic::skip()']]], ['socket_16',['socket',['../classstdex_1_1stream_1_1socket.html#aae9f08b885315a555d46faee399196c9',1,'stdex::stream::socket']]], - ['state_17',['state',['../classstdex_1_1stream_1_1basic.html#a2aa36b007017c2052a0118c1df4910d0',1,'stdex::stream::basic']]], - ['strcat_18',['strcat',['../classstdex_1_1charset__encoder.html#aa1561af3ad0711c80a25eda924959504',1,'stdex::charset_encoder::strcat(std::basic_string< T_to, _Traits_to, _Alloc_to > &dst, _In_reads_or_z_opt_(count_src) const T_from *src, size_t count_src)'],['../classstdex_1_1charset__encoder.html#ac8103624858c3d2bca02ab8a66300109',1,'stdex::charset_encoder::strcat(std::basic_string< T_to, _Traits_to, _Alloc_to > &dst, const T_from *src)'],['../classstdex_1_1charset__encoder.html#a8c8560680049e7558bd536e604532a7b',1,'stdex::charset_encoder::strcat(std::basic_string< T_to, _Traits_to, _Alloc_to > &dst, const std::basic_string< T_from, _Traits_from, _Alloc_from > &src)']]], - ['strcpy_19',['strcpy',['../classstdex_1_1charset__encoder.html#ad0cf9cb04b8c9f2996aeeeb493c4b646',1,'stdex::charset_encoder::strcpy(std::basic_string< T_to, _Traits_to, _Alloc_to > &dst, _In_reads_or_z_opt_(count_src) const T_from *src, size_t count_src)'],['../classstdex_1_1charset__encoder.html#a98b5679c20673dc97d33d545301d46ea',1,'stdex::charset_encoder::strcpy(std::basic_string< T_to, _Traits_to, _Alloc_to > &dst, const T_from *src)'],['../classstdex_1_1charset__encoder.html#a32763d70094c350868a1acb3e51a9e01',1,'stdex::charset_encoder::strcpy(std::basic_string< T_to, _Traits_to, _Alloc_to > &dst, const std::basic_string< T_from, _Traits_from, _Alloc_from > &src)']]], - ['sync_20',['sync',['../classstdex_1_1ring.html#a68e471c5801c9c8232464005a3225eb3',1,'stdex::ring']]] + ['source_17',['source',['../classstdex_1_1html_1_1document.html#adf28cd75b7cfcf892a77bc25d921f673',1,'stdex::html::document']]], + ['span_18',['span',['../structstdex_1_1html_1_1element__traits.html#afd49ebff449f313eecb1f8fb70716968',1,'stdex::html::element_traits']]], + ['start_5ftokens_19',['start_tokens',['../classstdex_1_1html_1_1parser.html#ae4b213dd9b196120c05a062229688172',1,'stdex::html::parser']]], + ['state_20',['state',['../classstdex_1_1stream_1_1basic.html#a2aa36b007017c2052a0118c1df4910d0',1,'stdex::stream::basic']]], + ['strcat_21',['strcat',['../classstdex_1_1charset__encoder.html#aa1561af3ad0711c80a25eda924959504',1,'stdex::charset_encoder::strcat(std::basic_string< T_to, _Traits_to, _Alloc_to > &dst, _In_reads_or_z_opt_(count_src) const T_from *src, size_t count_src)'],['../classstdex_1_1charset__encoder.html#ac8103624858c3d2bca02ab8a66300109',1,'stdex::charset_encoder::strcat(std::basic_string< T_to, _Traits_to, _Alloc_to > &dst, const T_from *src)'],['../classstdex_1_1charset__encoder.html#a8c8560680049e7558bd536e604532a7b',1,'stdex::charset_encoder::strcat(std::basic_string< T_to, _Traits_to, _Alloc_to > &dst, const std::basic_string< T_from, _Traits_from, _Alloc_from > &src)']]], + ['strcpy_22',['strcpy',['../classstdex_1_1charset__encoder.html#ad0cf9cb04b8c9f2996aeeeb493c4b646',1,'stdex::charset_encoder::strcpy(std::basic_string< T_to, _Traits_to, _Alloc_to > &dst, _In_reads_or_z_opt_(count_src) const T_from *src, size_t count_src)'],['../classstdex_1_1charset__encoder.html#a98b5679c20673dc97d33d545301d46ea',1,'stdex::charset_encoder::strcpy(std::basic_string< T_to, _Traits_to, _Alloc_to > &dst, const T_from *src)'],['../classstdex_1_1charset__encoder.html#a32763d70094c350868a1acb3e51a9e01',1,'stdex::charset_encoder::strcpy(std::basic_string< T_to, _Traits_to, _Alloc_to > &dst, const std::basic_string< T_from, _Traits_from, _Alloc_from > &src)']]], + ['sync_23',['sync',['../classstdex_1_1ring.html#a68e471c5801c9c8232464005a3225eb3',1,'stdex::ring']]] ]; diff --git a/search/functions_11.js b/search/functions_11.js index e3b24ee0a..20c75845d 100644 --- a/search/functions_11.js +++ b/search/functions_11.js @@ -3,8 +3,9 @@ var searchData= ['tail_0',['tail',['../classstdex_1_1vector__queue.html#a1b87831a03da17b15d8c330a47708d00',1,'stdex::vector_queue']]], ['tell_1',['tell',['../classstdex_1_1stream_1_1basic__file.html#ae072990f9c42b372048045717de438c3',1,'stdex::stream::basic_file::tell()'],['../classstdex_1_1stream_1_1file__window.html#ac5977ca09563126e2976abb356cb3b36',1,'stdex::stream::file_window::tell()'],['../classstdex_1_1stream_1_1cache.html#ae790c5f526771cfe2cb3b28d38a11dd9',1,'stdex::stream::cache::tell()'],['../classstdex_1_1stream_1_1file.html#aead21702bfdb09193a202afbce35421b',1,'stdex::stream::file::tell()'],['../classstdex_1_1stream_1_1memory__file.html#a665d78bdb906762139530035ba6013fa',1,'stdex::stream::memory_file::tell()'],['../classstdex_1_1stream_1_1diag__file.html#aa4ea6e5ca1ff91a6f5c9726f4251f3ce',1,'stdex::stream::diag_file::tell()']]], ['to_5fdate_2',['to_date',['../structstdex_1_1chrono_1_1aosn__timestamp.html#a805c2ab1855a554a0fc2be56fa234489',1,'stdex::chrono::aosn_timestamp']]], - ['to_5fdmy_3',['to_dmy',['../structstdex_1_1chrono_1_1aosn__timestamp.html#ae20e512af8ec094253b5af13f1d2e9ad',1,'stdex::chrono::aosn_timestamp::to_dmy()'],['../structstdex_1_1chrono_1_1aosn__date.html#a1d7511309210a6766b8a7d5d792dbc62',1,'stdex::chrono::aosn_date::to_dmy(const time_point tp, uint8_t *day, uint8_t *month, int32_t *year) noexcept']]], + ['to_5fdmy_3',['to_dmy',['../structstdex_1_1chrono_1_1aosn__date.html#a1d7511309210a6766b8a7d5d792dbc62',1,'stdex::chrono::aosn_date::to_dmy()'],['../structstdex_1_1chrono_1_1aosn__timestamp.html#ae20e512af8ec094253b5af13f1d2e9ad',1,'stdex::chrono::aosn_timestamp::to_dmy()']]], ['to_5ftime_5ft_4',['to_time_t',['../structstdex_1_1chrono_1_1aosn__date.html#a75edba9ce0fff5c322209ce7ce6617b9',1,'stdex::chrono::aosn_date::to_time_t()'],['../structstdex_1_1chrono_1_1aosn__timestamp.html#a7e6d02fbb9bccc438528aaec62babbd8',1,'stdex::chrono::aosn_timestamp::to_time_t()']]], - ['truncate_5',['truncate',['../classstdex_1_1stream_1_1basic__file.html#a522305da60cc442ca3cd6b7aa2214d6e',1,'stdex::stream::basic_file::truncate()'],['../classstdex_1_1stream_1_1file__window.html#a10f67434e8f3784933e3f7fddd20ce54',1,'stdex::stream::file_window::truncate()'],['../classstdex_1_1stream_1_1cache.html#a2e19026e55cda14db786948b66d63aba',1,'stdex::stream::cache::truncate()'],['../classstdex_1_1stream_1_1file.html#aa1c4de0bca72ddc02db4e8328cefcf17',1,'stdex::stream::file::truncate()'],['../classstdex_1_1stream_1_1memory__file.html#aa35db1681e5c56046eaf0c70068b0d42',1,'stdex::stream::memory_file::truncate()'],['../classstdex_1_1stream_1_1diag__file.html#a1d0824a191f261a1c552b71a92584745',1,'stdex::stream::diag_file::truncate()']]], - ['try_5flock_6',['try_lock',['../classstdex_1_1spinlock.html#a47aca0d4a40922892035d7f18dee8f32',1,'stdex::spinlock']]] + ['tokens_5',['tokens',['../classstdex_1_1html_1_1parser.html#a759bd73194ebb69a0d1bebb289023816',1,'stdex::html::parser']]], + ['truncate_6',['truncate',['../classstdex_1_1stream_1_1basic__file.html#a522305da60cc442ca3cd6b7aa2214d6e',1,'stdex::stream::basic_file::truncate()'],['../classstdex_1_1stream_1_1file__window.html#a10f67434e8f3784933e3f7fddd20ce54',1,'stdex::stream::file_window::truncate()'],['../classstdex_1_1stream_1_1cache.html#a2e19026e55cda14db786948b66d63aba',1,'stdex::stream::cache::truncate()'],['../classstdex_1_1stream_1_1file.html#aa1c4de0bca72ddc02db4e8328cefcf17',1,'stdex::stream::file::truncate()'],['../classstdex_1_1stream_1_1memory__file.html#aa35db1681e5c56046eaf0c70068b0d42',1,'stdex::stream::memory_file::truncate()'],['../classstdex_1_1stream_1_1diag__file.html#a1d0824a191f261a1c552b71a92584745',1,'stdex::stream::diag_file::truncate()']]], + ['try_5flock_7',['try_lock',['../classstdex_1_1spinlock.html#a47aca0d4a40922892035d7f18dee8f32',1,'stdex::spinlock']]] ]; diff --git a/search/functions_2.js b/search/functions_2.js index 3aa2d1828..7a6668cda 100644 --- a/search/functions_2.js +++ b/search/functions_2.js @@ -3,7 +3,7 @@ var searchData= ['cached_5ffile_0',['cached_file',['../classstdex_1_1stream_1_1cached__file.html#a2f88fcb00079a2303040a63dbfda09ff',1,'stdex::stream::cached_file::cached_file(const stdex::sstring &filename, int mode, size_t cache_size=default_cache_size)'],['../classstdex_1_1stream_1_1cached__file.html#aa53149a79b463450f64223f45285dc02',1,'stdex::stream::cached_file::cached_file(const schar_t *filename, int mode, size_t cache_size=default_cache_size)']]], ['cancel_1',['cancel',['../classstdex_1_1progress.html#a03380c822297092b3bb9867deee26202',1,'stdex::progress::cancel()'],['../classstdex_1_1global__progress.html#a74a5ea9089ff7b7015ea4a2071f3113e',1,'stdex::global_progress::cancel()']]], ['capacity_2',['capacity',['../classstdex_1_1vector__queue.html#add3d6ed93d3c1471b80351c56639bab7',1,'stdex::vector_queue']]], - ['clear_3',['clear',['../classstdex_1_1md5__hash.html#a0952042043c10e184d9ee8a79421cc0f',1,'stdex::md5_hash::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_1sha1__hash.html#a36f38887f8e90f88df0a420f0011b9b3',1,'stdex::sha1_hash::clear()'],['../classstdex_1_1crc32__hash.html#addf745566fe5a1ba3f947a70603ea235',1,'stdex::crc32_hash::clear()'],['../classstdex_1_1block__hash.html#a8750f9c24cd22bd879dc638256534aec',1,'stdex::block_hash::clear()'],['../classstdex_1_1basic__hash.html#af5e2ff7b83da5a663fa3c9766734b771',1,'stdex::basic_hash::clear()'],['../classstdex_1_1base64__dec.html#a94738b63789489022e0c16063b732305',1,'stdex::base64_dec::clear()'],['../classstdex_1_1base64__enc.html#afb6a85176589d9ce1f65ce6355592fe7',1,'stdex::base64_enc::clear()']]], + ['clear_3',['clear',['../classstdex_1_1sha1__hash.html#a36f38887f8e90f88df0a420f0011b9b3',1,'stdex::sha1_hash::clear()'],['../classstdex_1_1vector__queue.html#a93259be5f471580d2f8d7bee41032f9b',1,'stdex::vector_queue::clear()'],['../classstdex_1_1html_1_1document.html#adb0c50a68ad6ef3cbc3a78e3361932b7',1,'stdex::html::document::clear()'],['../classstdex_1_1hex__dec.html#a282bf5db0d16b29b12c71b73d3a33cc4',1,'stdex::hex_dec::clear()'],['../classstdex_1_1md5__hash.html#a0952042043c10e184d9ee8a79421cc0f',1,'stdex::md5_hash::clear()'],['../classstdex_1_1crc32__hash.html#addf745566fe5a1ba3f947a70603ea235',1,'stdex::crc32_hash::clear()'],['../classstdex_1_1block__hash.html#a8750f9c24cd22bd879dc638256534aec',1,'stdex::block_hash::clear()'],['../classstdex_1_1basic__hash.html#af5e2ff7b83da5a663fa3c9766734b771',1,'stdex::basic_hash::clear()'],['../classstdex_1_1base64__dec.html#a94738b63789489022e0c16063b732305',1,'stdex::base64_dec::clear()'],['../classstdex_1_1base64__enc.html#afb6a85176589d9ce1f65ce6355592fe7',1,'stdex::base64_enc::clear()']]], ['close_4',['close',['../classstdex_1_1stream_1_1converter.html#a96c368204acf32239318a026762cd22c',1,'stdex::stream::converter::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_1socket.html#a74e2f261c117cf8f20866632fb79b3c5',1,'stdex::stream::socket::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_1file__window.html#acace60a7ba95a139852f85aa4232bb14',1,'stdex::stream::file_window::close()'],['../classstdex_1_1stream_1_1replicator.html#afa3e2cec6e254e7bb53cc5e1b1ea0f90',1,'stdex::stream::replicator::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)']]], ['contains_5',['contains',['../structstdex_1_1interval.html#a1624ca77e8c9cb45cef61f7f8b532222',1,'stdex::interval']]], ['convert_6',['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)']]], diff --git a/search/functions_4.js b/search/functions_4.js index 03d968ab0..4ca496b47 100644 --- a/search/functions_4.js +++ b/search/functions_4.js @@ -3,5 +3,6 @@ var searchData= ['empty_0',['empty',['../structstdex_1_1interval.html#a1fa5153f1f7707e21dc41c31197659a4',1,'stdex::interval::empty()'],['../classstdex_1_1vector__queue.html#a1502ae16a184fac7b1be9e1709dd1b5d',1,'stdex::vector_queue::empty()']]], ['enc_5fsize_1',['enc_size',['../classstdex_1_1base64__enc.html#afbae8f49a0948ea7bb23d0faa8f67f21',1,'stdex::base64_enc::enc_size()'],['../classstdex_1_1hex__enc.html#a47db116dcc51daa878d3ecc4c1ab4d8f',1,'stdex::hex_enc::enc_size()']]], ['encode_2',['encode',['../classstdex_1_1base64__enc.html#a0ee96b5ec63fecc20c44afe1f1df6f04',1,'stdex::base64_enc::encode(std::basic_string< _Elem, _Traits, _Ax > &out, const void *data, size_t size, bool is_last=true)'],['../classstdex_1_1base64__enc.html#a506985ccd54fd95dbc021457881d77c2',1,'stdex::base64_enc::encode(std::basic_string< _Elem, _Traits, _Ax > &out)'],['../classstdex_1_1base64__enc.html#a709172f7120284fcea1d7856d8ff550d',1,'stdex::base64_enc::encode(std::basic_string< _Elem, _Traits, _Ax > &out, size_t size)'],['../classstdex_1_1base64__writer.html#a54f0c38bb19f7757e42f5f76695c3a17',1,'stdex::base64_writer::encode()'],['../classstdex_1_1base64__writer.html#a60b74be588c41f28c88ca0d49deb53af',1,'stdex::base64_writer::encode(size_t size)'],['../classstdex_1_1hex__enc.html#a51554940e79b6192f10a7860ca407191',1,'stdex::hex_enc::encode()']]], - ['exists_3',['exists',['../classstdex_1_1stream_1_1file.html#afb21712a5d43ecfe18dbe6aea2785e7f',1,'stdex::stream::file::exists(const stdex::schar_t *filename)'],['../classstdex_1_1stream_1_1file.html#a4b483f3051aa3d9f47da64ea0eb981d3',1,'stdex::stream::file::exists(const stdex::sstring &filename)']]] + ['end_5ftokens_3',['end_tokens',['../classstdex_1_1html_1_1parser.html#a290412efc03679f0408120b390ee3028',1,'stdex::html::parser']]], + ['exists_4',['exists',['../classstdex_1_1stream_1_1file.html#afb21712a5d43ecfe18dbe6aea2785e7f',1,'stdex::stream::file::exists(const stdex::schar_t *filename)'],['../classstdex_1_1stream_1_1file.html#a4b483f3051aa3d9f47da64ea0eb981d3',1,'stdex::stream::file::exists(const stdex::sstring &filename)']]] ]; diff --git a/search/functions_5.js b/search/functions_5.js index 4e29bedea..768aebb73 100644 --- a/search/functions_5.js +++ b/search/functions_5.js @@ -1,7 +1,7 @@ var searchData= [ ['file_0',['file',['../classstdex_1_1stream_1_1file.html#a0b923e8b3d01987973d4e2a9ea05a1e1',1,'stdex::stream::file::file(const stdex::sstring &filename, int mode)'],['../classstdex_1_1stream_1_1file.html#a31e46e58ec40db989b36c3553b09084f',1,'stdex::stream::file::file(const schar_t *filename, int mode)']]], - ['finalize_1',['finalize',['../classstdex_1_1basic__hash.html#ab2f4729c60bbb2ce12d5100be26108cf',1,'stdex::basic_hash::finalize()'],['../classstdex_1_1crc32__hash.html#a04aeb2009f5e615481752757b9ec0731',1,'stdex::crc32_hash::finalize()'],['../classstdex_1_1md5__hash.html#ab72e50dfa280696db29143b063fccbcb',1,'stdex::md5_hash::finalize()'],['../classstdex_1_1sha1__hash.html#aaf5f58e8b62d19d1fcc80b4f73f9ca8d',1,'stdex::sha1_hash::finalize()']]], + ['finalize_1',['finalize',['../classstdex_1_1basic__hash.html#ab2f4729c60bbb2ce12d5100be26108cf',1,'stdex::basic_hash::finalize()'],['../classstdex_1_1crc32__hash.html#a04aeb2009f5e615481752757b9ec0731',1,'stdex::crc32_hash::finalize()'],['../classstdex_1_1md5__hash.html#ab72e50dfa280696db29143b063fccbcb',1,'stdex::md5_hash::finalize()'],['../classstdex_1_1sha1__hash.html#aaf5f58e8b62d19d1fcc80b4f73f9ca8d',1,'stdex::sha1_hash::finalize()'],['../classstdex_1_1html_1_1document.html#a25a46afab4d3c523ef3734f6b7584098',1,'stdex::html::document::finalize()']]], ['find_2',['find',['../classstdex_1_1idrec_1_1record.html#a19523040d07119055884a7a2f8ef25fd',1,'stdex::idrec::record::find(std::istream &stream, std::streamoff end=(std::streamoff) -1)'],['../classstdex_1_1idrec_1_1record.html#a6566678aa326da5b2d84c38b76d1c195',1,'stdex::idrec::record::find(stdex::stream::basic_file &stream, stdex::stream::foff_t end=stdex::stream::foff_max)']]], ['flush_3',['flush',['../classstdex_1_1stream_1_1file__window.html#a2a2b88934b073b456da579ca3e3b43ff',1,'stdex::stream::file_window::flush()'],['../classstdex_1_1stream_1_1diag__file.html#aadb3e9de2c84e317bf454ae764d8fcdf',1,'stdex::stream::diag_file::flush()'],['../classstdex_1_1stream_1_1basic__sys.html#a6eae9769feea69fa9ce8b127ca2f7891',1,'stdex::stream::basic_sys::flush()'],['../classstdex_1_1stream_1_1cache.html#ac33e763d8103ad8e910b75085a4cf3ac',1,'stdex::stream::cache::flush()'],['../classstdex_1_1stream_1_1buffer.html#a18f9edc9af41f3a71d84f7eb4e7d5332',1,'stdex::stream::buffer::flush()'],['../classstdex_1_1stream_1_1async__writer.html#a25c72d3b2edaba300eb158d06dfd03d2',1,'stdex::stream::async_writer::flush()'],['../classstdex_1_1stream_1_1replicator.html#a77d2ddda29ef5dfb835453ff1dd90f2e',1,'stdex::stream::replicator::flush()'],['../classstdex_1_1stream_1_1converter.html#a0d6af4c223625bc8ab677978b225d06e',1,'stdex::stream::converter::flush()'],['../classstdex_1_1stream_1_1basic.html#a46c70519f3e4b1f3436e85a6623555dc',1,'stdex::stream::basic::flush()']]], ['from_5fdate_4',['from_date',['../structstdex_1_1chrono_1_1aosn__timestamp.html#a47f38a2cdf1525e44ac800311d9ab825',1,'stdex::chrono::aosn_timestamp']]], diff --git a/search/functions_8.js b/search/functions_8.js index eb09a033e..c22618836 100644 --- a/search/functions_8.js +++ b/search/functions_8.js @@ -2,5 +2,22 @@ var searchData= [ ['id_0',['id',['../classstdex_1_1idrec_1_1record.html#a24e54541a476b01e332290c57a495926',1,'stdex::idrec::record']]], ['interval_1',['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']]], - ['invalidate_2',['invalidate',['../structstdex_1_1interval.html#aa8113c9f2e3781fb25e30cb3d139e119',1,'stdex::interval']]] + ['invalidate_2',['invalidate',['../structstdex_1_1interval.html#aa8113c9f2e3781fb25e30cb3d139e119',1,'stdex::interval']]], + ['is_5fblock_3',['is_block',['../structstdex_1_1html_1_1element__traits.html#a535a7dfdab50ca65c87bedbb40845a5a',1,'stdex::html::element_traits']]], + ['is_5fflow_4',['is_flow',['../structstdex_1_1html_1_1element__traits.html#a3267ea7859bf8772b12eb1d34e2d98fc',1,'stdex::html::element_traits']]], + ['is_5ffontstyle_5',['is_fontstyle',['../structstdex_1_1html_1_1element__traits.html#a443a7603256f8194feb8f8ba2d647288',1,'stdex::html::element_traits']]], + ['is_5fformctrl_6',['is_formctrl',['../structstdex_1_1html_1_1element__traits.html#ae0fbdb91f2d7600f5905eeae8b238592',1,'stdex::html::element_traits']]], + ['is_5fgroup_7',['is_group',['../structstdex_1_1html_1_1element__traits.html#a2f59281031452c11e098abc96797d283',1,'stdex::html::element_traits']]], + ['is_5fhead_5fcontent_8',['is_head_content',['../structstdex_1_1html_1_1element__traits.html#a3f4e600128d269a147c5a61cb854b35e',1,'stdex::html::element_traits']]], + ['is_5fhead_5fmisc_9',['is_head_misc',['../structstdex_1_1html_1_1element__traits.html#a676dac27de161ca0970cf578105eda11',1,'stdex::html::element_traits']]], + ['is_5fheading_10',['is_heading',['../structstdex_1_1html_1_1element__traits.html#a3f477f87a086ae873df5fd98642a0301',1,'stdex::html::element_traits']]], + ['is_5fhtml_5fcontent_11',['is_html_content',['../structstdex_1_1html_1_1element__traits.html#aa8c58c5e074675f163b9e3b66df1b7bb',1,'stdex::html::element_traits']]], + ['is_5finline_12',['is_inline',['../structstdex_1_1html_1_1element__traits.html#aa2ccd7c62763e56155885b396a610962',1,'stdex::html::element_traits']]], + ['is_5flist_13',['is_list',['../structstdex_1_1html_1_1element__traits.html#a6e1a6e9b19b1ec43aa560dd8bc500cc7',1,'stdex::html::element_traits']]], + ['is_5flocalizable_14',['is_localizable',['../structstdex_1_1html_1_1element__traits.html#a86bfb9bb6b6fbfca0d1e9abef10c11ec',1,'stdex::html::element_traits']]], + ['is_5fphrase_15',['is_phrase',['../structstdex_1_1html_1_1element__traits.html#af6edbc4ce42e7c1c97c6165815800f7d',1,'stdex::html::element_traits']]], + ['is_5fpre_5fexclusion_16',['is_pre_exclusion',['../structstdex_1_1html_1_1element__traits.html#a97325ffcd684944b657a0a9534500a7b',1,'stdex::html::element_traits']]], + ['is_5fpreformatted_17',['is_preformatted',['../structstdex_1_1html_1_1element__traits.html#a84579168ef712dcc0370002df6169577',1,'stdex::html::element_traits']]], + ['is_5fspecial_18',['is_special',['../structstdex_1_1html_1_1element__traits.html#a8f5aaba431313aa40635183032be2393',1,'stdex::html::element_traits']]], + ['is_5furi_19',['is_uri',['../structstdex_1_1html_1_1element__traits.html#a792db042e15102a8269e2e15f591c7cc',1,'stdex::html::element_traits']]] ]; diff --git a/search/functions_9.js b/search/functions_9.js index 5a31b9b39..971882337 100644 --- a/search/functions_9.js +++ b/search/functions_9.js @@ -1,6 +1,7 @@ var searchData= [ ['lazy_5fprogress_0',['lazy_progress',['../classstdex_1_1lazy__progress.html#a90d8aaa2e2135537f7bb103bf795956a',1,'stdex::lazy_progress']]], - ['load_1',['load',['../classstdex_1_1stream_1_1memory__file.html#a98f0a5ecb59b4e50d5990aa505b658c2',1,'stdex::stream::memory_file::load(const schar_t *filename, int mode)'],['../classstdex_1_1stream_1_1memory__file.html#a8df8b4e46c93ff6fef41bed803fe77a4',1,'stdex::stream::memory_file::load(const stdex::sstring &filename, int mode)']]], - ['lock_2',['lock',['../classstdex_1_1spinlock.html#a97a72eaa96c16661bb6e268f7d5f0788',1,'stdex::spinlock::lock()'],['../classstdex_1_1stream_1_1basic__file.html#a484ec74004fe0b4528c11675b91161e0',1,'stdex::stream::basic_file::lock()'],['../classstdex_1_1stream_1_1file__window.html#a820fea50931a0769161f617a524f72c6',1,'stdex::stream::file_window::lock()'],['../classstdex_1_1stream_1_1cache.html#ac1ca25b572574b35cd4895964e835204',1,'stdex::stream::cache::lock()'],['../classstdex_1_1stream_1_1file.html#a74fdb70cb8ce4d0ee73f6db9d7051d86',1,'stdex::stream::file::lock()'],['../classstdex_1_1stream_1_1diag__file.html#a5d4bcde718ef182590c742f0c600e54b',1,'stdex::stream::diag_file::lock()']]] + ['link_1',['link',['../classstdex_1_1html_1_1parser.html#a42daa02e62ec512605b29cf2dbf727b4',1,'stdex::html::parser']]], + ['load_2',['load',['../classstdex_1_1stream_1_1memory__file.html#a98f0a5ecb59b4e50d5990aa505b658c2',1,'stdex::stream::memory_file::load(const schar_t *filename, int mode)'],['../classstdex_1_1stream_1_1memory__file.html#a8df8b4e46c93ff6fef41bed803fe77a4',1,'stdex::stream::memory_file::load(const stdex::sstring &filename, int mode)']]], + ['lock_3',['lock',['../classstdex_1_1spinlock.html#a97a72eaa96c16661bb6e268f7d5f0788',1,'stdex::spinlock::lock()'],['../classstdex_1_1stream_1_1basic__file.html#a484ec74004fe0b4528c11675b91161e0',1,'stdex::stream::basic_file::lock()'],['../classstdex_1_1stream_1_1file__window.html#a820fea50931a0769161f617a524f72c6',1,'stdex::stream::file_window::lock()'],['../classstdex_1_1stream_1_1cache.html#ac1ca25b572574b35cd4895964e835204',1,'stdex::stream::cache::lock()'],['../classstdex_1_1stream_1_1file.html#a74fdb70cb8ce4d0ee73f6db9d7051d86',1,'stdex::stream::file::lock()'],['../classstdex_1_1stream_1_1diag__file.html#a5d4bcde718ef182590c742f0c600e54b',1,'stdex::stream::diag_file::lock()']]] ]; diff --git a/search/functions_a.js b/search/functions_a.js index 560dc06da..ccf595b1c 100644 --- a/search/functions_a.js +++ b/search/functions_a.js @@ -1,6 +1,9 @@ var searchData= [ - ['mapping_0',['mapping',['../structstdex_1_1mapping.html#a9634b5ef182398e24b61c2ca78cc8e46',1,'stdex::mapping::mapping()'],['../structstdex_1_1mapping.html#a48069d4eb38c276e856d650075f6c3bd',1,'stdex::mapping::mapping(T x)'],['../structstdex_1_1mapping.html#ae72436dbc2b54e2062822cd7772de830',1,'stdex::mapping::mapping(T _from, T _to)']]], - ['memory_5ffile_1',['memory_file',['../classstdex_1_1stream_1_1memory__file.html#a6b4b9daa088fb20678a502e81553c745',1,'stdex::stream::memory_file::memory_file(size_t size, 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#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#a0bb7b9759667e810c91b3e58c1771d91',1,'stdex::stream::memory_file::memory_file(const schar_t *filename, int mode)'],['../classstdex_1_1stream_1_1memory__file.html#a7a134b82c4dd44bf5823e4cd25bbec29',1,'stdex::stream::memory_file::memory_file(const stdex::sstring &filename, int mode)']]], - ['mtime_2',['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()']]] + ['make_5fabsolute_5furl_0',['make_absolute_url',['../classstdex_1_1html_1_1parser.html#a6eac9b41ad9579e93b8c5f0f3b95c601',1,'stdex::html::parser']]], + ['mapping_1',['mapping',['../structstdex_1_1mapping.html#a9634b5ef182398e24b61c2ca78cc8e46',1,'stdex::mapping::mapping()'],['../structstdex_1_1mapping.html#a48069d4eb38c276e856d650075f6c3bd',1,'stdex::mapping::mapping(T x)'],['../structstdex_1_1mapping.html#ae72436dbc2b54e2062822cd7772de830',1,'stdex::mapping::mapping(T _from, T _to)']]], + ['may_5fcontain_2',['may_contain',['../structstdex_1_1html_1_1element__traits.html#afd1c22aa67f29d318cab7498dad159a8',1,'stdex::html::element_traits']]], + ['memory_5ffile_3',['memory_file',['../classstdex_1_1stream_1_1memory__file.html#a6b4b9daa088fb20678a502e81553c745',1,'stdex::stream::memory_file::memory_file(size_t size, 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#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#a0bb7b9759667e810c91b3e58c1771d91',1,'stdex::stream::memory_file::memory_file(const schar_t *filename, int mode)'],['../classstdex_1_1stream_1_1memory__file.html#a7a134b82c4dd44bf5823e4cd25bbec29',1,'stdex::stream::memory_file::memory_file(const stdex::sstring &filename, int mode)']]], + ['merge_4',['merge',['../classstdex_1_1html_1_1parser.html#a1d5216106ac0112d536c450010f0562d',1,'stdex::html::parser']]], + ['mtime_5',['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/functions_d.js b/search/functions_d.js index dd1e60233..0942898a9 100644 --- a/search/functions_d.js +++ b/search/functions_d.js @@ -1,9 +1,11 @@ var searchData= [ - ['pop_0',['pop',['../classstdex_1_1pool.html#a9731f8edc72b43f5a4c4622ce6a51aeb',1,'stdex::pool::pop()'],['../classstdex_1_1ring.html#a6360d8186fa2bda1ef4b4ddbcae93749',1,'stdex::ring::pop()']]], - ['pop_5fback_1',['pop_back',['../classstdex_1_1vector__queue.html#abd0fdb316392da76bac13bdd9d176eb6',1,'stdex::vector_queue']]], - ['pop_5ffront_2',['pop_front',['../classstdex_1_1vector__queue.html#adc05fb6cec951f736337dc340996271f',1,'stdex::vector_queue']]], - ['push_3',['push',['../classstdex_1_1pool.html#aa60ba8cd95b3d28977ae9a9e36005108',1,'stdex::pool::push()'],['../classstdex_1_1ring.html#ab8b671ab4a84c370bdf8d4d2df7c0d9d',1,'stdex::ring::push()']]], - ['push_5fback_4',['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_5',['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)']]] + ['parse_0',['parse',['../classstdex_1_1html_1_1parser.html#a6917d950d42024601cf16926f9cbfeb1',1,'stdex::html::parser::parse()'],['../classstdex_1_1html_1_1parser.html#a4e76ce4fbffac17a8afd44841a4c8cfe',1,'stdex::html::parser::parse(const sequence_store::const_iterator &end, uint32_t text_type=0)']]], + ['parse_5fcss_1',['parse_css',['../classstdex_1_1html_1_1parser.html#a0c71841185d92896d6d9a1fe02bfc3d4',1,'stdex::html::parser']]], + ['pop_2',['pop',['../classstdex_1_1pool.html#a9731f8edc72b43f5a4c4622ce6a51aeb',1,'stdex::pool::pop()'],['../classstdex_1_1ring.html#a6360d8186fa2bda1ef4b4ddbcae93749',1,'stdex::ring::pop()']]], + ['pop_5fback_3',['pop_back',['../classstdex_1_1vector__queue.html#abd0fdb316392da76bac13bdd9d176eb6',1,'stdex::vector_queue']]], + ['pop_5ffront_4',['pop_front',['../classstdex_1_1vector__queue.html#adc05fb6cec951f736337dc340996271f',1,'stdex::vector_queue']]], + ['push_5',['push',['../classstdex_1_1pool.html#aa60ba8cd95b3d28977ae9a9e36005108',1,'stdex::pool::push()'],['../classstdex_1_1ring.html#ab8b671ab4a84c370bdf8d4d2df7c0d9d',1,'stdex::ring::push()']]], + ['push_5fback_6',['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_7',['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/functions_f.js b/search/functions_f.js index edc9a91f1..e809cedf7 100644 --- a/search/functions_f.js +++ b/search/functions_f.js @@ -8,10 +8,11 @@ var searchData= ['read_5fremainder_5',['read_remainder',['../classstdex_1_1stream_1_1basic.html#a6148810b1d873b9f5a3496b06b1aa90b',1,'stdex::stream::basic::read_remainder()'],['../classstdex_1_1stream_1_1basic__file.html#a72aa16169eea2156e83053ba9bd91cd8',1,'stdex::stream::basic_file::read_remainder()']]], ['read_5fstr_6',['read_str',['../classstdex_1_1stream_1_1basic.html#a2fece103fa6ca15dfe093fe90ceae65e',1,'stdex::stream::basic::read_str()'],['../classstdex_1_1stream_1_1memory__file.html#a7a8abbdd7f86e10ffb711621015645f6',1,'stdex::stream::memory_file::read_str()']]], ['readln_7',['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#af638f940d1b33788a77cae0336106295',1,'stdex::stream::basic::readln(std::basic_string< T_to, _Traits, _Ax > &wstr, charset_encoder< T_from, T_to > &encoder)']]], - ['readln_5fand_5fattach_8',['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#ad0fe3b79743c45e7e0ff426f04cfee08',1,'stdex::stream::basic::readln_and_attach(std::basic_string< T_to, _Traits, _Ax > &wstr, charset_encoder< T_from, T_to > &encoder)']]], + ['readln_5fand_5fattach_8',['readln_and_attach',['../classstdex_1_1stream_1_1basic.html#ad0fe3b79743c45e7e0ff426f04cfee08',1,'stdex::stream::basic::readln_and_attach(std::basic_string< T_to, _Traits, _Ax > &wstr, charset_encoder< T_from, T_to > &encoder)'],['../classstdex_1_1stream_1_1basic.html#a6e67bf06f20bc1743cd75622c4b83892',1,'stdex::stream::basic::readln_and_attach(std::basic_string< _Elem, _Traits, _Ax > &str)']]], ['readonly_9',['readonly',['../classstdex_1_1stream_1_1file.html#a40e59814b5a52d659cc568285b9b39b3',1,'stdex::stream::file::readonly(const stdex::schar_t *filename)'],['../classstdex_1_1stream_1_1file.html#a1b4cdda97e50c9590ac85acba6f49467',1,'stdex::stream::file::readonly(const stdex::sstring &filename)']]], ['record_10',['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)']]], ['remove_11',['remove',['../classstdex_1_1stream_1_1replicator.html#a7916a391dfa9484df02b1202c0a03edf',1,'stdex::stream::replicator']]], - ['reserve_12',['reserve',['../classstdex_1_1stream_1_1memory__file.html#a6b59e4dd13195dd91211ece4c680cb9b',1,'stdex::stream::memory_file']]], - ['reset_13',['reset',['../classstdex_1_1watchdog.html#ac9d5d1c1b17425f47f3892deec4d31db',1,'stdex::watchdog']]] + ['replace_5fentities_12',['replace_entities',['../classstdex_1_1html_1_1document.html#ad51755eb57de670729adf07f32d5225d',1,'stdex::html::document']]], + ['reserve_13',['reserve',['../classstdex_1_1stream_1_1memory__file.html#a6b59e4dd13195dd91211ece4c680cb9b',1,'stdex::stream::memory_file']]], + ['reset_14',['reset',['../classstdex_1_1watchdog.html#ac9d5d1c1b17425f47f3892deec4d31db',1,'stdex::watchdog']]] ]; diff --git a/search/searchdata.js b/search/searchdata.js index b09003d91..d0c34f006 100644 --- a/search/searchdata.js +++ b/search/searchdata.js @@ -1,9 +1,9 @@ var indexSectionsWithContent = { 0: "abcdefghilmnopqrstuvw~", - 1: "abcdfghilmnprsuvw", + 1: "abcdefghilmnprstuvw", 2: "abcdefghilmnopqrstuvw~", - 3: "abcdefhilmnoprstvw", + 3: "abcdefhilmnoprstuvw", 4: "cprsv", 5: "o", 6: "cdimrst" diff --git a/search/variables_0.js b/search/variables_0.js index 2c93b7bae..4e4b79ddc 100644 --- a/search/variables_0.js +++ b/search/variables_0.js @@ -1,6 +1,9 @@ var searchData= [ - ['admin_0',['admin',['../structstdex_1_1sys__info__t.html#a31d755b61ee96cc3f1174a7c6cbd509c',1,'stdex::sys_info_t']]], - ['allow_5fon_5fedge_1',['allow_on_edge',['../classstdex_1_1parser_1_1basic__dns__domain__char.html#a3307235d495a97c98f9efd1464e8a8a7',1,'stdex::parser::basic_dns_domain_char']]], - ['apex_2',['apex',['../classstdex_1_1parser_1_1basic__emoticon.html#a1b6b7a024dea373b890c1c4516f5e9a4',1,'stdex::parser::basic_emoticon']]] + ['active_5ftokens_0',['active_tokens',['../structstdex_1_1html_1_1inserted__token.html#ab1c682b7bd0b4d6b0d0d316af20a4fc9',1,'stdex::html::inserted_token']]], + ['admin_1',['admin',['../structstdex_1_1sys__info__t.html#a31d755b61ee96cc3f1174a7c6cbd509c',1,'stdex::sys_info_t']]], + ['after_5fword_2',['after_word',['../structstdex_1_1html_1_1inserted__token.html#a741265f0cf369113853daae0f01cf775',1,'stdex::html::inserted_token']]], + ['allow_5fon_5fedge_3',['allow_on_edge',['../classstdex_1_1parser_1_1basic__dns__domain__char.html#a3307235d495a97c98f9efd1464e8a8a7',1,'stdex::parser::basic_dns_domain_char']]], + ['apex_4',['apex',['../classstdex_1_1parser_1_1basic__emoticon.html#a1b6b7a024dea373b890c1c4516f5e9a4',1,'stdex::parser::basic_emoticon']]], + ['attributes_5',['attributes',['../classstdex_1_1html_1_1element.html#a7c087846ffc38135f3ff7665aec32364',1,'stdex::html::element::attributes'],['../classstdex_1_1html_1_1declaration.html#a46a0e7db45a103885963629b5b7cba04',1,'stdex::html::declaration::attributes'],['../classstdex_1_1parser_1_1basic__html__tag.html#a02dfb47e560d0b0243b73d09851c4412',1,'stdex::parser::basic_html_tag::attributes']]] ]; diff --git a/search/variables_1.js b/search/variables_1.js index 870ec793c..57f2e9c21 100644 --- a/search/variables_1.js +++ b/search/variables_1.js @@ -1,5 +1,6 @@ var searchData= [ - ['bban_0',['bban',['../classstdex_1_1parser_1_1basic__iban.html#a527b724e495e34938d8e57179e5dbd71',1,'stdex::parser::basic_iban']]], - ['buf_1',['buf',['../classstdex_1_1hex__dec.html#a47a6b05d03e3cd075fe74505675b5126',1,'stdex::hex_dec']]] + ['base_5ftype_0',['base_type',['../classstdex_1_1parser_1_1basic__mime__type.html#a3d5b3fb07dab74031bbf0c4676579b89',1,'stdex::parser::basic_mime_type']]], + ['bban_1',['bban',['../classstdex_1_1parser_1_1basic__iban.html#a527b724e495e34938d8e57179e5dbd71',1,'stdex::parser::basic_iban']]], + ['buf_2',['buf',['../classstdex_1_1hex__dec.html#a47a6b05d03e3cd075fe74505675b5126',1,'stdex::hex_dec']]] ]; diff --git a/search/variables_10.js b/search/variables_10.js index 8b18e2efd..cadf361b1 100644 --- a/search/variables_10.js +++ b/search/variables_10.js @@ -1,5 +1,4 @@ var searchData= [ - ['value_0',['value',['../classstdex_1_1parser_1_1basic__integer.html#ac42a57e08e8189c89817bfde6e507c95',1,'stdex::parser::basic_integer::value'],['../classstdex_1_1parser_1_1basic__scientific__numeral.html#a9aa6f1cbde1efccf75fd0df385f03477',1,'stdex::parser::basic_scientific_numeral::value'],['../classstdex_1_1parser_1_1basic__ipv4__address.html#ad50e8e52cf16226e57fa25e48bf17deb',1,'stdex::parser::basic_ipv4_address::value'],['../classstdex_1_1parser_1_1basic__ipv6__address.html#aee9fca8501ba3cd5e5c875ecdb419376',1,'stdex::parser::basic_ipv6_address::value'],['../classstdex_1_1parser_1_1basic__phone__number.html#aa0650f9f19dfe2d50bcdd79884dd6475',1,'stdex::parser::basic_phone_number::value'],['../classstdex_1_1parser_1_1http__parameter.html#a616b1cd7f872c3ff453c8d854a7db638',1,'stdex::parser::http_parameter::value'],['../classstdex_1_1parser_1_1http__weight.html#ac889015ae4b2640eaf067b343f7c05ff',1,'stdex::parser::http_weight::value'],['../classstdex_1_1parser_1_1http__cookie.html#add653aef947c19d25730adc728089a9f',1,'stdex::parser::http_cookie::value']]], - ['version_1',['version',['../classstdex_1_1parser_1_1http__protocol.html#a49afaa7910baf6092f5042eca86824c7',1,'stdex::parser::http_protocol']]] + ['url_0',['url',['../classstdex_1_1html_1_1url__token.html#a8ff40042e9c2e25b97c72a9f47220ac2',1,'stdex::html::url_token']]] ]; diff --git a/search/variables_11.js b/search/variables_11.js index 0539a4ca9..9c72ee68a 100644 --- a/search/variables_11.js +++ b/search/variables_11.js @@ -1,5 +1,5 @@ var searchData= [ - ['write_5flimit_0',['write_limit',['../classstdex_1_1stream_1_1limiter.html#af3d8db598efea694c0274b5420787873',1,'stdex::stream::limiter']]], - ['write_5foffset_1',['write_offset',['../classstdex_1_1stream_1_1window.html#a01d191d653be7a6d218c7feffa1b0ec3',1,'stdex::stream::window']]] + ['value_0',['value',['../structstdex_1_1html_1_1entity.html#ada811e70c54ad26fd971698121a7acaf',1,'stdex::html::entity::value'],['../classstdex_1_1parser_1_1basic__integer.html#ac42a57e08e8189c89817bfde6e507c95',1,'stdex::parser::basic_integer::value'],['../classstdex_1_1parser_1_1basic__scientific__numeral.html#a9aa6f1cbde1efccf75fd0df385f03477',1,'stdex::parser::basic_scientific_numeral::value'],['../classstdex_1_1parser_1_1basic__ipv4__address.html#ad50e8e52cf16226e57fa25e48bf17deb',1,'stdex::parser::basic_ipv4_address::value'],['../classstdex_1_1parser_1_1basic__ipv6__address.html#aee9fca8501ba3cd5e5c875ecdb419376',1,'stdex::parser::basic_ipv6_address::value'],['../classstdex_1_1parser_1_1basic__phone__number.html#aa0650f9f19dfe2d50bcdd79884dd6475',1,'stdex::parser::basic_phone_number::value'],['../classstdex_1_1parser_1_1http__parameter.html#a616b1cd7f872c3ff453c8d854a7db638',1,'stdex::parser::http_parameter::value'],['../classstdex_1_1parser_1_1http__weight.html#ac889015ae4b2640eaf067b343f7c05ff',1,'stdex::parser::http_weight::value'],['../classstdex_1_1parser_1_1http__cookie.html#add653aef947c19d25730adc728089a9f',1,'stdex::parser::http_cookie::value'],['../structstdex_1_1parser_1_1html__attribute.html#afbec76aaeed004cabcc647afe4ce9001',1,'stdex::parser::html_attribute::value']]], + ['version_1',['version',['../classstdex_1_1parser_1_1http__protocol.html#a49afaa7910baf6092f5042eca86824c7',1,'stdex::parser::http_protocol']]] ]; diff --git a/search/variables_12.js b/search/variables_12.js new file mode 100644 index 000000000..96ba7696f --- /dev/null +++ b/search/variables_12.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['word_5findex_0',['word_index',['../structstdex_1_1html_1_1inserted__token.html#ada63f25062c74259e834a4ee0390d9a2',1,'stdex::html::inserted_token']]], + ['write_5flimit_1',['write_limit',['../classstdex_1_1stream_1_1limiter.html#af3d8db598efea694c0274b5420787873',1,'stdex::stream::limiter']]], + ['write_5foffset_2',['write_offset',['../classstdex_1_1stream_1_1window.html#a01d191d653be7a6d218c7feffa1b0ec3',1,'stdex::stream::window']]] +]; diff --git a/search/variables_2.js b/search/variables_2.js index ee135351c..0e842ab5f 100644 --- a/search/variables_2.js +++ b/search/variables_2.js @@ -1,8 +1,10 @@ var searchData= [ - ['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']]] + ['charset_0',['charset',['../classstdex_1_1parser_1_1basic__mime__type.html#ae6906c756cc427d662bac8fd392e2f70',1,'stdex::parser::basic_mime_type']]], + ['check_5fdigits_1',['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']]], + ['code_2',['code',['../classstdex_1_1html_1_1element.html#acad269ffc367d3a7df7cb42fed0ed486',1,'stdex::html::element::code'],['../classstdex_1_1html_1_1element__end.html#ae84212100b568b2ba305592b93219f5a',1,'stdex::html::element_end::code']]], + ['components_3',['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_4',['content',['../classstdex_1_1html_1_1instruction.html#a43dc8f8be5cc4de98bd272d3479412e3',1,'stdex::html::instruction::content'],['../classstdex_1_1parser_1_1basic__html__value.html#a0f082125e7cfe97e9f1c3682a23a6d97',1,'stdex::parser::basic_html_value::content'],['../classstdex_1_1parser_1_1basic__css__import.html#a78961a2a1a4354f019b83ac9f1debb3d',1,'stdex::parser::basic_css_import::content'],['../classstdex_1_1parser_1_1basic__css__uri.html#a6dffc08c3df290e8ce650f081f540d31',1,'stdex::parser::basic_css_uri::content'],['../classstdex_1_1parser_1_1basic__css__string.html#ad517fcde901d706866439378b1f4a4b8',1,'stdex::parser::basic_css_string::content'],['../classstdex_1_1parser_1_1basic__css__comment.html#affbd26e06808a2decb4832250b6efed3',1,'stdex::parser::basic_css_comment::content'],['../classstdex_1_1parser_1_1http__quoted__string.html#ab6e413ccf79e9f3dddd35c2a607381dd',1,'stdex::parser::http_quoted_string::content'],['../classstdex_1_1html_1_1comment.html#a12d9a22d5b67fbed22fc033b5e5c932f',1,'stdex::html::comment::content']]], + ['country_5',['country',['../classstdex_1_1parser_1_1basic__iban.html#a558e20a09ecb7796ce1cb02c638aec0a',1,'stdex::parser::basic_iban']]], + ['currency_6',['currency',['../classstdex_1_1parser_1_1basic__monetary__numeral.html#a62545d1c49178d4412da46d3cb2eba25',1,'stdex::parser::basic_monetary_numeral']]] ]; diff --git a/search/variables_3.js b/search/variables_3.js index 615425f78..3102983eb 100644 --- a/search/variables_3.js +++ b/search/variables_3.js @@ -1,6 +1,6 @@ var searchData= [ - ['data_0',['data',['../classstdex_1_1idrec_1_1record.html#a1ab09fae53142836c958a63137fb37cb',1,'stdex::idrec::record::data'],['../classstdex_1_1stream_1_1replicator_1_1worker.html#af37e1df8c6e0189e856a2bb38dd603bf',1,'stdex::stream::replicator::worker::data']]], + ['data_0',['data',['../classstdex_1_1html_1_1token.html#ab9a44b08a117fe7c3f19982ec3c1edab',1,'stdex::html::token::data'],['../classstdex_1_1idrec_1_1record.html#a1ab09fae53142836c958a63137fb37cb',1,'stdex::idrec::record::data'],['../classstdex_1_1stream_1_1replicator_1_1worker.html#af37e1df8c6e0189e856a2bb38dd603bf',1,'stdex::stream::replicator::worker::data']]], ['decimal_1',['decimal',['../classstdex_1_1parser_1_1basic__scientific__numeral.html#ab002d811ce7c7590863492bbc4ac355f',1,'stdex::parser::basic_scientific_numeral::decimal'],['../classstdex_1_1parser_1_1basic__monetary__numeral.html#ac1442f0871a1b43db2d4cd45e05803ac',1,'stdex::parser::basic_monetary_numeral::decimal']]], ['decimal_5fseparator_2',['decimal_separator',['../classstdex_1_1parser_1_1basic__scientific__numeral.html#ae09233c93964704acf2bbd762fc14372',1,'stdex::parser::basic_scientific_numeral::decimal_separator'],['../classstdex_1_1parser_1_1basic__monetary__numeral.html#a5393628850b747e190a4e0d50eb97144',1,'stdex::parser::basic_monetary_numeral::decimal_separator']]], ['digit_5fcount_3',['digit_count',['../classstdex_1_1parser_1_1basic__integer10ts.html#a3c400d7c6e0edf695e7cf5e9f43ae388',1,'stdex::parser::basic_integer10ts']]] diff --git a/search/variables_4.js b/search/variables_4.js index 576133fe0..0cd19a5c0 100644 --- a/search/variables_4.js +++ b/search/variables_4.js @@ -2,8 +2,10 @@ var searchData= [ ['elevated_0',['elevated',['../structstdex_1_1sys__info__t.html#a5ab4199ac9092bd900eabd5a1361b0f7',1,'stdex::sys_info_t']]], ['emoticon_1',['emoticon',['../classstdex_1_1parser_1_1basic__emoticon.html#ab746ed27e68939dd9e544b6e70476650',1,'stdex::parser::basic_emoticon']]], - ['end_2',['end',['../structstdex_1_1interval.html#a9b92e2b20290d8ac5a9b00209f25e27a',1,'stdex::interval']]], - ['exponent_3',['exponent',['../classstdex_1_1parser_1_1basic__scientific__numeral.html#ac3b886b3334d64811d82d1d47fbafe66',1,'stdex::parser::basic_scientific_numeral']]], - ['exponent_5fsymbol_4',['exponent_symbol',['../classstdex_1_1parser_1_1basic__scientific__numeral.html#a66134e1cb72bdfb75f2ac634fee02ee3',1,'stdex::parser::basic_scientific_numeral']]], - ['eyes_5',['eyes',['../classstdex_1_1parser_1_1basic__emoticon.html#a2700be6652350445e571cf95940fd32a',1,'stdex::parser::basic_emoticon']]] + ['encoding_2',['encoding',['../classstdex_1_1html_1_1url__token.html#a2c3f829a7162f678bc2cd1f080747a66',1,'stdex::html::url_token']]], + ['end_3',['end',['../classstdex_1_1html_1_1element__start.html#a8527b1a5398d4f6702c97824a44479cc',1,'stdex::html::element_start::end'],['../structstdex_1_1interval.html#a9b92e2b20290d8ac5a9b00209f25e27a',1,'stdex::interval::end']]], + ['end_5fsequence_4',['end_sequence',['../classstdex_1_1html_1_1starting__token.html#a314307ae87aead197750b2457e1df21d',1,'stdex::html::starting_token']]], + ['exponent_5',['exponent',['../classstdex_1_1parser_1_1basic__scientific__numeral.html#ac3b886b3334d64811d82d1d47fbafe66',1,'stdex::parser::basic_scientific_numeral']]], + ['exponent_5fsymbol_6',['exponent_symbol',['../classstdex_1_1parser_1_1basic__scientific__numeral.html#a66134e1cb72bdfb75f2ac634fee02ee3',1,'stdex::parser::basic_scientific_numeral']]], + ['eyes_7',['eyes',['../classstdex_1_1parser_1_1basic__emoticon.html#a2700be6652350445e571cf95940fd32a',1,'stdex::parser::basic_emoticon']]] ]; diff --git a/search/variables_7.js b/search/variables_7.js index 2afb54862..15a65e0cf 100644 --- a/search/variables_7.js +++ b/search/variables_7.js @@ -2,6 +2,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']]], ['interactive_5fprocess_1',['interactive_process',['../structstdex_1_1sys__info__t.html#ae2a466655022e5df25ddbe56eec8b54f',1,'stdex::sys_info_t']]], - ['interval_2',['interval',['../classstdex_1_1parser_1_1basic__parser.html#a5e9bd1c618c97e206f943c6eacd1b3aa',1,'stdex::parser::basic_parser']]], + ['interval_2',['interval',['../classstdex_1_1html_1_1sequence.html#a20b20431f4799454543b962d482a6ed7',1,'stdex::html::sequence::interval'],['../classstdex_1_1parser_1_1basic__parser.html#a5e9bd1c618c97e206f943c6eacd1b3aa',1,'stdex::parser::basic_parser::interval']]], ['is_5fvalid_3',['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 b428636c7..b9227edd9 100644 --- a/search/variables_9.js +++ b/search/variables_9.js @@ -3,26 +3,43 @@ var searchData= ['m_5fallow_5fabsolute_0',['m_allow_absolute',['../classstdex_1_1parser_1_1basic__dns__name.html#abfe3327023b10cb9759c13ec987701ab',1,'stdex::parser::basic_dns_name']]], ['m_5fbuf_1',['m_buf',['../classstdex_1_1base64__enc.html#a567a2a3aeda13b50e31d48ba32236adf',1,'stdex::base64_enc::m_buf'],['../classstdex_1_1base64__dec.html#ab618ef5b21f33c5ed577669091c4b103',1,'stdex::base64_dec::m_buf']]], ['m_5fcallback_2',['m_callback',['../classstdex_1_1watchdog.html#af1d34b845b80a49997e82f50bb13f839',1,'stdex::watchdog']]], - ['m_5fcount_3',['m_count',['../classstdex_1_1vector__queue.html#a6070ca156773c17c6b75bacc5251c04c',1,'stdex::vector_queue']]], - ['m_5fdata_4',['m_data',['../classstdex_1_1stream_1_1memory__file.html#a4a2082f1017478d1ce940d8dcd6e234b',1,'stdex::stream::memory_file::m_data'],['../classstdex_1_1vector__queue.html#a289d86508a91fbe61e0425e318d735cf',1,'stdex::vector_queue::m_data']]], - ['m_5fel_5',['m_el',['../classstdex_1_1parser_1_1basic__iterations.html#a8a06638fea659f03fddc9d41dfc4efac',1,'stdex::parser::basic_iterations']]], - ['m_5fgreedy_6',['m_greedy',['../classstdex_1_1parser_1_1basic__iterations.html#a2523c18948003ca4726eaed098e6de12',1,'stdex::parser::basic_iterations']]], - ['m_5fhead_7',['m_head',['../classstdex_1_1vector__queue.html#abd8208a4a9e92ec5c38d3718f383e41e',1,'stdex::vector_queue']]], - ['m_5fmanage_8',['m_manage',['../classstdex_1_1stream_1_1memory__file.html#aca812d996b5b60660fa121787e4c0e68',1,'stdex::stream::memory_file']]], - ['m_5fmax_5fiterations_9',['m_max_iterations',['../classstdex_1_1parser_1_1basic__iterations.html#aca0b8e1f9522a5306db5fe173269e8b1',1,'stdex::parser::basic_iterations']]], - ['m_5fmin_5fiterations_10',['m_min_iterations',['../classstdex_1_1parser_1_1basic__iterations.html#aab86447331f306ff85c49764a5d0d646',1,'stdex::parser::basic_iterations']]], - ['m_5fnum_11',['m_num',['../classstdex_1_1base64__dec.html#a04ab92bcef2c304bc7a5d8d2a03c7905',1,'stdex::base64_dec::m_num'],['../classstdex_1_1base64__enc.html#a52f4cc4da6d7d7f4bad7c05a87ecd907',1,'stdex::base64_enc::m_num']]], - ['m_5fnum_5fblocks_12',['m_num_blocks',['../classstdex_1_1base64__writer.html#a2529c8798fa89be544b12690411e7125',1,'stdex::base64_writer']]], - ['m_5foffset_13',['m_offset',['../classstdex_1_1stream_1_1memory__file.html#a91ca49273fc49d70b98180fc828d5b5d',1,'stdex::stream::memory_file']]], - ['m_5fphase_14',['m_phase',['../classstdex_1_1watchdog.html#a301e35d22b11f6ea6ffbe94ffa22fc3e',1,'stdex::watchdog']]], - ['m_5fquit_15',['m_quit',['../classstdex_1_1watchdog.html#aaa7759c46dc8632b3f26d17291ca9483',1,'stdex::watchdog']]], - ['m_5freserved_16',['m_reserved',['../classstdex_1_1stream_1_1memory__file.html#a6aa8c2deeabc66f065c858ba399d911c',1,'stdex::stream::memory_file']]], - ['m_5fsize_17',['m_size',['../classstdex_1_1stream_1_1memory__file.html#a41121ff122745e109c1b9851632abce3',1,'stdex::stream::memory_file']]], - ['m_5fsize_5fmax_18',['m_size_max',['../classstdex_1_1vector__queue.html#a7192dc2991d690b04a2fb24dd6fdc325',1,'stdex::vector_queue']]], - ['m_5ftemp_19',['m_temp',['../classstdex_1_1base64__reader.html#ab92bc938edd01351e2639003f6679b99',1,'stdex::base64_reader']]], - ['m_5ftemp_5flen_20',['m_temp_len',['../classstdex_1_1base64__reader.html#ad631499f728824a166843effd7a5eedb',1,'stdex::base64_reader']]], - ['m_5ftemp_5foff_21',['m_temp_off',['../classstdex_1_1base64__reader.html#affd26a488ea1b5d8b23cc98be45b2535',1,'stdex::base64_reader']]], - ['m_5ftimeout_22',['m_timeout',['../classstdex_1_1watchdog.html#a816c03499d71d1fe73410d979744c817',1,'stdex::watchdog']]], - ['model_23',['model',['../classstdex_1_1parser_1_1basic__si__reference.html#a934cc4a41d64ca1aec35a58b8558bf2e',1,'stdex::parser::basic_si_reference']]], - ['mouth_24',['mouth',['../classstdex_1_1parser_1_1basic__emoticon.html#a43d0de6a54546e509807c7c888bb8dc8',1,'stdex::parser::basic_emoticon']]] + ['m_5fcharset_3',['m_charset',['../classstdex_1_1html_1_1document.html#a2f29e08ebaf36b923ddf092384185ac1',1,'stdex::html::document']]], + ['m_5fcount_4',['m_count',['../classstdex_1_1vector__queue.html#a6070ca156773c17c6b75bacc5251c04c',1,'stdex::vector_queue']]], + ['m_5fdata_5',['m_data',['../classstdex_1_1stream_1_1memory__file.html#a4a2082f1017478d1ce940d8dcd6e234b',1,'stdex::stream::memory_file::m_data'],['../classstdex_1_1vector__queue.html#a289d86508a91fbe61e0425e318d735cf',1,'stdex::vector_queue::m_data']]], + ['m_5fdocument_6',['m_document',['../classstdex_1_1html_1_1parser.html#a6cae9cb66849c55e4c56dc3677a98c7e',1,'stdex::html::parser']]], + ['m_5fel_7',['m_el',['../classstdex_1_1parser_1_1basic__iterations.html#a8a06638fea659f03fddc9d41dfc4efac',1,'stdex::parser::basic_iterations']]], + ['m_5felement_5fstack_8',['m_element_stack',['../classstdex_1_1html_1_1document.html#a19e4abf1a36c12c6762e17471d83dd2b',1,'stdex::html::document']]], + ['m_5fentities_9',['m_entities',['../classstdex_1_1html_1_1document.html#a8e48388317e6c0a5b5119c4ce6a88dcb',1,'stdex::html::document']]], + ['m_5fgreedy_10',['m_greedy',['../classstdex_1_1parser_1_1basic__iterations.html#a2523c18948003ca4726eaed098e6de12',1,'stdex::parser::basic_iterations']]], + ['m_5fhead_11',['m_head',['../classstdex_1_1vector__queue.html#abd8208a4a9e92ec5c38d3718f383e41e',1,'stdex::vector_queue']]], + ['m_5fis_5fcdata_12',['m_is_cdata',['../classstdex_1_1html_1_1document.html#afa1e63e920558cb8058e713a7121057c',1,'stdex::html::document']]], + ['m_5fis_5frcdata_13',['m_is_rcdata',['../classstdex_1_1html_1_1document.html#a50e945a21d566661b8e139b26ccb52b8',1,'stdex::html::document']]], + ['m_5fis_5fspecial_5felement_14',['m_is_special_element',['../classstdex_1_1html_1_1document.html#a5f1863bab99619fc0bc4e71f9c9c026d',1,'stdex::html::document']]], + ['m_5fmanage_15',['m_manage',['../classstdex_1_1stream_1_1memory__file.html#aca812d996b5b60660fa121787e4c0e68',1,'stdex::stream::memory_file']]], + ['m_5fmax_5fiterations_16',['m_max_iterations',['../classstdex_1_1parser_1_1basic__iterations.html#aca0b8e1f9522a5306db5fe173269e8b1',1,'stdex::parser::basic_iterations']]], + ['m_5fmin_5fiterations_17',['m_min_iterations',['../classstdex_1_1parser_1_1basic__iterations.html#aab86447331f306ff85c49764a5d0d646',1,'stdex::parser::basic_iterations']]], + ['m_5fnum_18',['m_num',['../classstdex_1_1base64__enc.html#a52f4cc4da6d7d7f4bad7c05a87ecd907',1,'stdex::base64_enc::m_num'],['../classstdex_1_1base64__dec.html#a04ab92bcef2c304bc7a5d8d2a03c7905',1,'stdex::base64_dec::m_num']]], + ['m_5fnum_5fblocks_19',['m_num_blocks',['../classstdex_1_1base64__writer.html#a2529c8798fa89be544b12690411e7125',1,'stdex::base64_writer']]], + ['m_5fnum_5finvalid_5fconditions_20',['m_num_invalid_conditions',['../classstdex_1_1html_1_1document.html#a821db1267c62fbea66ea5bee6ef595cb',1,'stdex::html::document']]], + ['m_5fnum_5fparsed_21',['m_num_parsed',['../classstdex_1_1html_1_1document.html#af814056135de920c0f4acdcf8c928e72',1,'stdex::html::document']]], + ['m_5fnum_5fvalid_5fconditions_22',['m_num_valid_conditions',['../classstdex_1_1html_1_1document.html#addfef8cebec2ac619d1174084df730bd',1,'stdex::html::document']]], + ['m_5foffset_23',['m_offset',['../classstdex_1_1html_1_1parser.html#af62e1fa74b942d127a8076564cf0f6c6',1,'stdex::html::parser::m_offset'],['../classstdex_1_1stream_1_1memory__file.html#a91ca49273fc49d70b98180fc828d5b5d',1,'stdex::stream::memory_file::m_offset']]], + ['m_5fparse_5fframes_24',['m_parse_frames',['../classstdex_1_1html_1_1parser.html#ad8bb1f6a00d6a6d192d0d2e7265d120d',1,'stdex::html::parser']]], + ['m_5fphase_25',['m_phase',['../classstdex_1_1watchdog.html#a301e35d22b11f6ea6ffbe94ffa22fc3e',1,'stdex::watchdog']]], + ['m_5fprogress_26',['m_progress',['../classstdex_1_1html_1_1parser.html#a02f2429bdfe818247242cc0a475d26f9',1,'stdex::html::parser']]], + ['m_5fquit_27',['m_quit',['../classstdex_1_1watchdog.html#aaa7759c46dc8632b3f26d17291ca9483',1,'stdex::watchdog']]], + ['m_5freserved_28',['m_reserved',['../classstdex_1_1stream_1_1memory__file.html#a6aa8c2deeabc66f065c858ba399d911c',1,'stdex::stream::memory_file']]], + ['m_5fsequences_29',['m_sequences',['../classstdex_1_1html_1_1document.html#a7de5f3c6d8292e7d696f6817f4925f6d',1,'stdex::html::document']]], + ['m_5fsize_30',['m_size',['../classstdex_1_1stream_1_1memory__file.html#a41121ff122745e109c1b9851632abce3',1,'stdex::stream::memory_file']]], + ['m_5fsize_5fmax_31',['m_size_max',['../classstdex_1_1vector__queue.html#a7192dc2991d690b04a2fb24dd6fdc325',1,'stdex::vector_queue']]], + ['m_5fsource_32',['m_source',['../classstdex_1_1html_1_1document.html#aa026d9c57191dac5169a987963bb7d08',1,'stdex::html::document::m_source'],['../classstdex_1_1html_1_1parser.html#a4f1480c41cd6656042a9473528be62cb',1,'stdex::html::parser::m_source']]], + ['m_5ftemp_33',['m_temp',['../classstdex_1_1base64__reader.html#ab92bc938edd01351e2639003f6679b99',1,'stdex::base64_reader']]], + ['m_5ftemp_5flen_34',['m_temp_len',['../classstdex_1_1base64__reader.html#ad631499f728824a166843effd7a5eedb',1,'stdex::base64_reader']]], + ['m_5ftemp_5foff_35',['m_temp_off',['../classstdex_1_1base64__reader.html#affd26a488ea1b5d8b23cc98be45b2535',1,'stdex::base64_reader']]], + ['m_5ftimeout_36',['m_timeout',['../classstdex_1_1watchdog.html#a816c03499d71d1fe73410d979744c817',1,'stdex::watchdog']]], + ['m_5ftokens_37',['m_tokens',['../classstdex_1_1html_1_1parser.html#a5827d0faa87547c141a69a286fdc6b77',1,'stdex::html::parser']]], + ['m_5furl_38',['m_url',['../classstdex_1_1html_1_1parser.html#a7c40ad04981cca08398cd0d79853dc6a',1,'stdex::html::parser']]], + ['mapping_39',['mapping',['../classstdex_1_1html_1_1text__token.html#a45822e05f3df782f2abbdf5fa8ca4b8b',1,'stdex::html::text_token']]], + ['model_40',['model',['../classstdex_1_1parser_1_1basic__si__reference.html#a934cc4a41d64ca1aec35a58b8558bf2e',1,'stdex::parser::basic_si_reference']]], + ['mouth_41',['mouth',['../classstdex_1_1parser_1_1basic__emoticon.html#a43d0de6a54546e509807c7c888bb8dc8',1,'stdex::parser::basic_emoticon']]] ]; diff --git a/search/variables_a.js b/search/variables_a.js index bd6a7c6ff..3923ec72e 100644 --- a/search/variables_a.js +++ b/search/variables_a.js @@ -1,6 +1,6 @@ var searchData= [ - ['name_0',['name',['../classstdex_1_1parser_1_1http__parameter.html#a565c731685b779b2c0a90e8c5b7dbd55',1,'stdex::parser::http_parameter::name'],['../classstdex_1_1parser_1_1http__cookie.html#aca58f2d8164c41be287a7fe16432ba48',1,'stdex::parser::http_cookie::name']]], + ['name_0',['name',['../classstdex_1_1html_1_1element__end.html#a8a7a4be93f9833d35842a80b5e417982',1,'stdex::html::element_end::name'],['../classstdex_1_1html_1_1declaration.html#a16302e5ad26b58fff4b532ff63bca759',1,'stdex::html::declaration::name'],['../structstdex_1_1html_1_1entity.html#a468522aee95ce92b0ac5594748c67a2c',1,'stdex::html::entity::name'],['../classstdex_1_1html_1_1starting__token.html#adc35af70ba1e045d819ce44867a03b0c',1,'stdex::html::starting_token::name'],['../classstdex_1_1parser_1_1http__parameter.html#a565c731685b779b2c0a90e8c5b7dbd55',1,'stdex::parser::http_parameter::name'],['../classstdex_1_1parser_1_1http__cookie.html#aca58f2d8164c41be287a7fe16432ba48',1,'stdex::parser::http_cookie::name'],['../structstdex_1_1parser_1_1html__attribute.html#a4e42f1d2ff7d9983d2c5b3e0744a56df',1,'stdex::parser::html_attribute::name'],['../classstdex_1_1parser_1_1basic__html__tag.html#a8b65a3140494b250f504a4cc2d1e86cc',1,'stdex::parser::basic_html_tag::name'],['../classstdex_1_1html_1_1element.html#a0ac164c8f64a91166b90e8246661f85d',1,'stdex::html::element::name']]], ['negative_5fexp_5fsign_1',['negative_exp_sign',['../classstdex_1_1parser_1_1basic__scientific__numeral.html#aaeec0779d7bd8f5429108be5b80ba95c',1,'stdex::parser::basic_scientific_numeral']]], ['negative_5fsign_2',['negative_sign',['../classstdex_1_1parser_1_1basic__signed__numeral.html#a50271856db8a0e66bef91e4e05949bb3',1,'stdex::parser::basic_signed_numeral::negative_sign'],['../classstdex_1_1parser_1_1basic__mixed__numeral.html#a76a2ae3e988b901ae4745a5ba8c22d46',1,'stdex::parser::basic_mixed_numeral::negative_sign'],['../classstdex_1_1parser_1_1basic__scientific__numeral.html#a8e625f598299499379b3f9e067ad9384',1,'stdex::parser::basic_scientific_numeral::negative_sign'],['../classstdex_1_1parser_1_1basic__monetary__numeral.html#aef90350963cc64fb710674eedf260708',1,'stdex::parser::basic_monetary_numeral::negative_sign']]], ['nose_3',['nose',['../classstdex_1_1parser_1_1basic__emoticon.html#a865f28a87ef1561bca53445e2d1ae253',1,'stdex::parser::basic_emoticon']]], diff --git a/search/variables_c.js b/search/variables_c.js index f7b73d4d3..b26ca369d 100644 --- a/search/variables_c.js +++ b/search/variables_c.js @@ -1,9 +1,10 @@ var searchData= [ ['params_0',['params',['../classstdex_1_1parser_1_1http__cookie.html#aa3d227ae38c1f63b445097ca07091616',1,'stdex::parser::http_cookie']]], - ['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']]] + ['parent_1',['parent',['../classstdex_1_1html_1_1sequence.html#a8eccbcd5829b97c67aa0fcc449292470',1,'stdex::html::sequence']]], + ['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']]], + ['positive_5fexp_5fsign_5',['positive_exp_sign',['../classstdex_1_1parser_1_1basic__scientific__numeral.html#abb5d26d24a7bb58d244b7d51722b117a',1,'stdex::parser::basic_scientific_numeral']]], + ['positive_5fsign_6',['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_e.js b/search/variables_e.js index 103b1da1c..b4ea08723 100644 --- a/search/variables_e.js +++ b/search/variables_e.js @@ -2,7 +2,9 @@ var searchData= [ ['scope_5fid_0',['scope_id',['../classstdex_1_1parser_1_1basic__ipv6__address.html#a67486e83888f48afc62b031f745012c0',1,'stdex::parser::basic_ipv6_address']]], ['segments_1',['segments',['../classstdex_1_1parser_1_1http__url__path.html#a9a5f4002c55cb4500ce43536512b02b9',1,'stdex::parser::http_url_path']]], - ['special_5fsign_2',['special_sign',['../classstdex_1_1parser_1_1basic__signed__numeral.html#a38b8207e2b384ed5ffb3f2bfb3e8755f',1,'stdex::parser::basic_signed_numeral::special_sign'],['../classstdex_1_1parser_1_1basic__mixed__numeral.html#a46c6721810cc8f90218aee66a4c27132',1,'stdex::parser::basic_mixed_numeral::special_sign'],['../classstdex_1_1parser_1_1basic__scientific__numeral.html#a5ce9abfbcdc1247e8f504ae13492e7ea',1,'stdex::parser::basic_scientific_numeral::special_sign'],['../classstdex_1_1parser_1_1basic__monetary__numeral.html#af0190fa4b0de5e894a14c05550e78365',1,'stdex::parser::basic_monetary_numeral::special_sign']]], - ['start_3',['start',['../structstdex_1_1interval.html#ab6a104de0f15b29bea77fe181b49c40b',1,'stdex::interval']]], - ['string_4',['string',['../classstdex_1_1parser_1_1http__value.html#a808ed411ff6816162a54b99fb7307315',1,'stdex::parser::http_value']]] + ['sequence_2',['sequence',['../classstdex_1_1html_1_1token.html#a20890ed953b05911dd66fc23a81fd362',1,'stdex::html::token']]], + ['special_5fsign_3',['special_sign',['../classstdex_1_1parser_1_1basic__signed__numeral.html#a38b8207e2b384ed5ffb3f2bfb3e8755f',1,'stdex::parser::basic_signed_numeral::special_sign'],['../classstdex_1_1parser_1_1basic__mixed__numeral.html#a46c6721810cc8f90218aee66a4c27132',1,'stdex::parser::basic_mixed_numeral::special_sign'],['../classstdex_1_1parser_1_1basic__scientific__numeral.html#a5ce9abfbcdc1247e8f504ae13492e7ea',1,'stdex::parser::basic_scientific_numeral::special_sign'],['../classstdex_1_1parser_1_1basic__monetary__numeral.html#af0190fa4b0de5e894a14c05550e78365',1,'stdex::parser::basic_monetary_numeral::special_sign']]], + ['start_4',['start',['../classstdex_1_1html_1_1element__end.html#ab261fd8fa4c08c10e81b2e50b94d1cc0',1,'stdex::html::element_end::start'],['../structstdex_1_1interval.html#ab6a104de0f15b29bea77fe181b49c40b',1,'stdex::interval::start']]], + ['string_5',['string',['../classstdex_1_1parser_1_1http__value.html#a808ed411ff6816162a54b99fb7307315',1,'stdex::parser::http_value']]], + ['sub_5ftype_6',['sub_type',['../classstdex_1_1parser_1_1basic__mime__type.html#a6f0543705511623958d99bf04194a96a',1,'stdex::parser::basic_mime_type']]] ]; diff --git a/search/variables_f.js b/search/variables_f.js index 86dea09c5..35280d85b 100644 --- a/search/variables_f.js +++ b/search/variables_f.js @@ -1,4 +1,7 @@ var searchData= [ - ['token_0',['token',['../classstdex_1_1parser_1_1http__value.html#aecdecacd265379c1d6e12a75424c5573',1,'stdex::parser::http_value']]] + ['text_0',['text',['../classstdex_1_1html_1_1text__token.html#a5115eb3a7c3261d69127b3996941ccd7',1,'stdex::html::text_token']]], + ['text_5ftype_1',['text_type',['../classstdex_1_1html_1_1text__token.html#aa8021e395a161d2b928d6e16efbcbb53',1,'stdex::html::text_token']]], + ['token_2',['token',['../structstdex_1_1html_1_1inserted__token.html#ae7e37c09d69501cc5b33e057b277b2e8',1,'stdex::html::inserted_token::token'],['../classstdex_1_1parser_1_1http__value.html#aecdecacd265379c1d6e12a75424c5573',1,'stdex::parser::http_value::token']]], + ['type_3',['type',['../classstdex_1_1html_1_1sequence.html#a49c618139178a5fcbefaf13c08a98969',1,'stdex::html::sequence::type'],['../classstdex_1_1html_1_1token.html#acd884397cc90fb8673de7958896954dc',1,'stdex::html::token::type'],['../classstdex_1_1parser_1_1basic__html__tag.html#a0b65b7b5d42aa4e113eef7aae334e989',1,'stdex::parser::basic_html_tag::type']]] ]; diff --git a/sgml_8cpp_source.html b/sgml_8cpp_source.html index 54564ae97..f730282dc 100644 --- a/sgml_8cpp_source.html +++ b/sgml_8cpp_source.html @@ -99,19 +99,19 @@ $(document).ready(function() { init_codefold(0); });
              15 TEST_CLASS(sgml)
              16 {
              17 public:
              -
              18 TEST_METHOD(sgml2wstr)
              +
              18 TEST_METHOD(sgml2str)
              19 {
              -
              20 Assert::AreEqual(L"This is a test.", stdex::sgml2wstr("This is a test.", (size_t)-1).c_str());
              -
              21 Assert::AreEqual(L"Th\u00ed\u0161 i\u22c5 a te\u0073\u0304t.&unknown;😀😅", stdex::sgml2wstr("Th&iacute;&scaron; i&sdot; &#97; te&smacr;t.&unknown;&#x1F600;&#X1f605;", (size_t)-1).c_str());
              -
              22 Assert::AreEqual(L"This", stdex::sgml2wstr("This is a test.", 4).c_str());
              -
              23 Assert::AreEqual(L"T\u0068\u0301", stdex::sgml2wstr("T&hacute;is is a test.", 9).c_str());
              -
              24 Assert::AreEqual(L"T&hac", stdex::sgml2wstr("T&hacute;is is a test.", 5).c_str());
              -
              25 Assert::AreEqual(L"The &quot;quoted&quot; &amp; text.", stdex::sgml2wstr("The &quot;quoted&quot; &amp; text.", (size_t)-1, stdex::sgml_c).c_str());
              +
              20 Assert::AreEqual(L"This is a test.", stdex::sgml2str("This is a test.", (size_t)-1).c_str());
              +
              21 Assert::AreEqual(L"Th\u00ed\u0161 i\u22c5 a te\u0073\u0304t.&unknown;😀😅", stdex::sgml2str("Th&iacute;&scaron; i&sdot; &#97; te&smacr;t.&unknown;&#x1F600;&#X1f605;", (size_t)-1).c_str());
              +
              22 Assert::AreEqual(L"This", stdex::sgml2str("This is a test.", 4).c_str());
              +
              23 Assert::AreEqual(L"T\u0068\u0301", stdex::sgml2str("T&hacute;is is a test.", 9).c_str());
              +
              24 Assert::AreEqual(L"T&hac", stdex::sgml2str("T&hacute;is is a test.", 5).c_str());
              +
              25 Assert::AreEqual(L"The &quot;quoted&quot; &amp; text.", stdex::sgml2str("The &quot;quoted&quot; &amp; text.", (size_t)-1, stdex::sgml_c).c_str());
              26
              27 stdex::mapping_vector<size_t> map;
              28 constexpr size_t i = 0;
              29 constexpr size_t j = 0;
              -
              30 stdex::sgml2wstr("Th&iacute;&scaron; i&sdot; &#97; te&smacr;t.&unknown;&#x1F600;&#X1f605;", (size_t)-1, 0, stdex::mapping<size_t>(i, j), &map);
              +
              30 stdex::sgml2str("Th&iacute;&scaron; i&sdot; &#97; te&smacr;t.&unknown;&#x1F600;&#X1f605;", (size_t)-1, 0, stdex::mapping<size_t>(i, j), &map);
              31 Assert::IsTrue(stdex::mapping_vector<size_t>{
              32 { i + 2, j + 2 },
              33 { i + 10, j + 3 },
              @@ -136,16 +136,16 @@ $(document).ready(function() { init_codefold(0); });
              52 } == map);
              53 }
              54
              -
              55 TEST_METHOD(wstr2sgml)
              +
              55 TEST_METHOD(str2sgml)
              56 {
              -
              57 Assert::AreEqual("This is a test.", stdex::wstr2sgml(L"This is a test.", (size_t)-1).c_str());
              -
              58 Assert::AreEqual("Th&iacute;&scaron; i&sdot; a te&smacr;t.&amp;unknown;&#x1f600;&#x1f605;", stdex::wstr2sgml(L"Th\u00ed\u0161 i\u22c5 a te\u0073\u0304t.&unknown;😀😅", (size_t)-1).c_str());
              -
              59 Assert::AreEqual("This", stdex::wstr2sgml(L"This is a test.", 4).c_str());
              -
              60 Assert::AreEqual("te&smacr;", stdex::wstr2sgml(L"te\u0073\u0304t", 4).c_str());
              -
              61 Assert::AreEqual("tes", stdex::wstr2sgml(L"te\u0073\u0304t", 3).c_str());
              -
              62 Assert::AreEqual("&#x2318;&permil;&#x362;", stdex::wstr2sgml(L"⌘‰͢", (size_t)-1).c_str());
              -
              63 Assert::AreEqual("$\"<>&amp;", stdex::wstr2sgml(L"$\"<>&", (size_t)-1).c_str());
              -
              64 Assert::AreEqual("$&quot;<>&amp;", stdex::wstr2sgml(L"$\"<>&", (size_t)-1, stdex::sgml_c).c_str());
              +
              57 Assert::AreEqual("This is a test.", stdex::str2sgml(L"This is a test.", (size_t)-1).c_str());
              +
              58 Assert::AreEqual("Th&iacute;&scaron; i&sdot; a te&smacr;t.&amp;unknown;&#x1f600;&#x1f605;", stdex::str2sgml(L"Th\u00ed\u0161 i\u22c5 a te\u0073\u0304t.&unknown;😀😅", (size_t)-1).c_str());
              +
              59 Assert::AreEqual("This", stdex::str2sgml(L"This is a test.", 4).c_str());
              +
              60 Assert::AreEqual("te&smacr;", stdex::str2sgml(L"te\u0073\u0304t", 4).c_str());
              +
              61 Assert::AreEqual("tes", stdex::str2sgml(L"te\u0073\u0304t", 3).c_str());
              +
              62 Assert::AreEqual("&#x2318;&permil;&#x362;", stdex::str2sgml(L"⌘‰͢", (size_t)-1).c_str());
              +
              63 Assert::AreEqual("$\"<>&amp;", stdex::str2sgml(L"$\"<>&", (size_t)-1).c_str());
              +
              64 Assert::AreEqual("$&quot;<>&amp;", stdex::str2sgml(L"$\"<>&", (size_t)-1, stdex::sgml_c).c_str());
              65 }
              66 };
              67}
              @@ -153,7 +153,7 @@ $(document).ready(function() { init_codefold(0); });
              diff --git a/sgml_8hpp_source.html b/sgml_8hpp_source.html index 29ed044c5..fc6097410 100644 --- a/sgml_8hpp_source.html +++ b/sgml_8hpp_source.html @@ -162,7 +162,7 @@ $(document).ready(function() { init_codefold(0); });
              80 // constexpr int sgml_kolos = sgml_amp | sgml_quot | sgml_dollar | sgml_percnt | sgml_lt_gt | sgml_bsol/* | sgml_commat | sgml_num*/ | sgml_lpar_rpar | sgml_lcub_rcub | sgml_lsqb_rsqb;
              81
              92 template <class T>
              -
              93 inline void sgml2wstrcat(
              +
              93 inline void sgml2strcat(
              94 _Inout_ std::wstring& dst,
              95 _In_reads_or_z_opt_(count_src) const T* src, _In_ size_t count_src,
              96 _In_ int skip = 0,
              @@ -244,536 +244,473 @@ $(document).ready(function() { init_codefold(0); });
              172 }
              173 }
              174
              -
              175 template <class T>
              -
              176 _Deprecated_("Use stdex::sgml2wstrcat")
              -
              177 inline void sgml2wstr(
              -
              178 _Inout_ std::wstring& dst,
              -
              179 _In_reads_or_z_opt_(count_src) const T* src, _In_ size_t count_src,
              -
              180 _In_ int skip = 0,
              -
              181 _In_ const mapping<size_t>& offset = mapping<size_t>(0, 0),
              -
              182 _Inout_opt_ mapping_vector<size_t>* map = nullptr)
              -
              183 {
              -
              184 sgml2wstrcat(dst, src, count_src, skip, offset, map);
              -
              185 }
              -
              186
              -
              196 template <class T>
              -
              197 inline void sgml2wstrcat(
              -
              198 _Inout_ std::wstring& dst,
              -
              199 _In_ const std::basic_string<T>& src,
              -
              200 _In_ int skip = 0,
              -
              201 _In_ const mapping<size_t>& offset = mapping<size_t>(0, 0),
              -
              202 _Inout_opt_ mapping_vector<size_t>* map = nullptr)
              -
              203 {
              -
              204 sgml2wstrcat(dst, src.data(), src.size(), skip, offset, map);
              -
              205 }
              -
              206
              -
              207 template <class T>
              -
              208 _Deprecated_("Use stdex::sgml2wstrcat")
              -
              209 inline void sgml2wstr(
              -
              210 _Inout_ std::wstring& dst,
              -
              211 _In_ const std::basic_string<T>& src,
              +
              184 template <class T>
              +
              185 inline void sgml2strcat(
              +
              186 _Inout_ std::wstring& dst,
              +
              187 _In_ const std::basic_string<T>& src,
              +
              188 _In_ int skip = 0,
              +
              189 _In_ const mapping<size_t>& offset = mapping<size_t>(0, 0),
              +
              190 _Inout_opt_ mapping_vector<size_t>* map = nullptr)
              +
              191 {
              +
              192 sgml2strcat(dst, src.data(), src.size(), skip, offset, map);
              +
              193 }
              +
              194
              +
              208 template <class T>
              +
              209 inline size_t sgml2strcat(
              +
              210 _Inout_cap_(count_dst) wchar_t* dst, _In_ size_t count_dst,
              +
              211 _In_reads_or_z_opt_(count_src) const T* src, _In_ size_t count_src,
              212 _In_ int skip = 0,
              -
              213 _In_ const mapping<size_t>& offset = mapping<size_t>(0, 0),
              -
              214 _Inout_opt_ mapping_vector<size_t>* map = nullptr)
              +
              213 _In_ const mapping<size_t>& offset = mapping<size_t>(0, 0),
              +
              214 _Inout_opt_ mapping_vector<size_t>* map = nullptr)
              215 {
              -
              216 sgml2wstrcat(dst, src, skip, offset, map);
              -
              217 }
              +
              216 _Assume_(dst || !count_dst);
              +
              217 _Assume_(src || !count_src);
              218
              -
              232 template <class T>
              -
              233 inline size_t sgml2wstrcat(
              -
              234 _Inout_cap_(count_dst) wchar_t* dst, _In_ size_t count_dst,
              -
              235 _In_reads_or_z_opt_(count_src) const T* src, _In_ size_t count_src,
              -
              236 _In_ int skip = 0,
              -
              237 _In_ const mapping<size_t>& offset = mapping<size_t>(0, 0),
              -
              238 _Inout_opt_ mapping_vector<size_t>* map = nullptr)
              -
              239 {
              -
              240 _Assume_(dst || !count_dst);
              -
              241 _Assume_(src || !count_src);
              -
              242
              -
              243 static const std::invalid_argument buffer_overrun("buffer overrun");
              -
              244 const bool
              -
              245 skip_quot = (skip & sgml_quot) == 0,
              -
              246 skip_apos = (skip & sgml_apos) == 0,
              -
              247 skip_amp = (skip & sgml_amp) == 0,
              -
              248 skip_lt_gt = (skip & sgml_lt_gt) == 0,
              -
              249 skip_bsol = (skip & sgml_bsol) == 0,
              -
              250 skip_dollar = (skip & sgml_dollar) == 0,
              -
              251 skip_percnt = (skip & sgml_percnt) == 0,
              -
              252 skip_commat = (skip & sgml_commat) == 0,
              -
              253 skip_num = (skip & sgml_num) == 0,
              -
              254 skip_lpar_rpar = (skip & sgml_lpar_rpar) == 0,
              -
              255 skip_lcub_rcub = (skip & sgml_lcub_rcub) == 0,
              -
              256 skip_lsqb_rsqb = (skip & sgml_lsqb_rsqb) == 0;
              -
              257
              -
              258 size_t j = wcsnlen(dst, count_dst);
              -
              259 count_src = strnlen(src, count_src);
              -
              260 for (size_t i = 0; i < count_src;) {
              -
              261 if (src[i] == '&') {
              -
              262 auto end = sgmlend(src + i + 1, count_src - i - 1);
              -
              263 if (end) {
              -
              264 const wchar_t* entity_w;
              -
              265 wchar_t chr[3];
              -
              266 size_t n = end - src - i - 1;
              -
              267 if (n >= 2 && src[i + 1] == '#') {
              -
              268 uint32_t unicode;
              -
              269 if (src[i + 2] == 'x' || src[i + 2] == 'X')
              -
              270 unicode = strtou32(src + i + 3, n - 2, nullptr, 16);
              -
              271 else
              -
              272 unicode = strtou32(src + i + 2, n - 1, nullptr, 10);
              -
              273#ifdef _WIN32
              -
              274 if (unicode < 0x10000) {
              -
              275 chr[0] = (wchar_t)unicode;
              -
              276 chr[1] = 0;
              -
              277 }
              -
              278 else {
              -
              279 ucs4_to_surrogate_pair(chr, unicode);
              -
              280 chr[2] = 0;
              -
              281 }
              -
              282#else
              -
              283 chr[0] = (wchar_t)unicode;
              -
              284 chr[1] = 0;
              -
              285#endif
              -
              286 entity_w = chr;
              -
              287 }
              -
              288 else
              -
              289 entity_w = sgml2uni(src + i + 1, n);
              -
              290
              -
              291 if (entity_w &&
              -
              292 (skip_quot || (entity_w[0] != L'"')) &&
              -
              293 (skip_apos || (entity_w[0] != L'\'')) &&
              -
              294 (skip_amp || (entity_w[0] != L'&')) &&
              -
              295 (skip_lt_gt || (entity_w[0] != L'<' && entity_w[0] != L'>')) &&
              -
              296 (skip_bsol || (entity_w[0] != L'\\')) &&
              -
              297 (skip_dollar || (entity_w[0] != L'$')) &&
              -
              298 (skip_percnt || (entity_w[0] != L'%')) &&
              -
              299 (skip_commat || (entity_w[0] != L'@')) &&
              -
              300 (skip_num || (entity_w[0] != L'#')) &&
              -
              301 (skip_lpar_rpar || (entity_w[0] != L'(' && entity_w[0] != L')')) &&
              -
              302 (skip_lcub_rcub || (entity_w[0] != L'{' && entity_w[0] != L'}')) &&
              -
              303 (skip_lsqb_rsqb || (entity_w[0] != L'[' && entity_w[0] != L']')))
              -
              304 {
              -
              305 if (map) map->push_back(mapping<size_t>(offset.from + i, offset.to + j));
              -
              306 size_t m = wcslen(entity_w);
              -
              307 if (j + m >= count_dst)
              -
              308 throw buffer_overrun;
              -
              309 memcpy(dst + j, entity_w, m * sizeof(wchar_t)); j += m;
              -
              310 i = end - src + 1;
              -
              311 if (map) map->push_back(mapping<size_t>(offset.from + i, offset.to + j));
              -
              312 continue;
              -
              313 }
              -
              314 }
              -
              315 }
              -
              316 if (j + 1 >= count_dst)
              -
              317 throw buffer_overrun;
              -
              318 dst[j++] = src[i++];
              -
              319 }
              -
              320 if (j >= count_dst)
              -
              321 throw buffer_overrun;
              -
              322 dst[j] = 0;
              -
              323 return j;
              +
              219 static const std::invalid_argument buffer_overrun("buffer overrun");
              +
              220 const bool
              +
              221 skip_quot = (skip & sgml_quot) == 0,
              +
              222 skip_apos = (skip & sgml_apos) == 0,
              +
              223 skip_amp = (skip & sgml_amp) == 0,
              +
              224 skip_lt_gt = (skip & sgml_lt_gt) == 0,
              +
              225 skip_bsol = (skip & sgml_bsol) == 0,
              +
              226 skip_dollar = (skip & sgml_dollar) == 0,
              +
              227 skip_percnt = (skip & sgml_percnt) == 0,
              +
              228 skip_commat = (skip & sgml_commat) == 0,
              +
              229 skip_num = (skip & sgml_num) == 0,
              +
              230 skip_lpar_rpar = (skip & sgml_lpar_rpar) == 0,
              +
              231 skip_lcub_rcub = (skip & sgml_lcub_rcub) == 0,
              +
              232 skip_lsqb_rsqb = (skip & sgml_lsqb_rsqb) == 0;
              +
              233
              +
              234 size_t j = wcsnlen(dst, count_dst);
              +
              235 count_src = strnlen(src, count_src);
              +
              236 for (size_t i = 0; i < count_src;) {
              +
              237 if (src[i] == '&') {
              +
              238 auto end = sgmlend(src + i + 1, count_src - i - 1);
              +
              239 if (end) {
              +
              240 const wchar_t* entity_w;
              +
              241 wchar_t chr[3];
              +
              242 size_t n = end - src - i - 1;
              +
              243 if (n >= 2 && src[i + 1] == '#') {
              +
              244 uint32_t unicode;
              +
              245 if (src[i + 2] == 'x' || src[i + 2] == 'X')
              +
              246 unicode = strtou32(src + i + 3, n - 2, nullptr, 16);
              +
              247 else
              +
              248 unicode = strtou32(src + i + 2, n - 1, nullptr, 10);
              +
              249#ifdef _WIN32
              +
              250 if (unicode < 0x10000) {
              +
              251 chr[0] = (wchar_t)unicode;
              +
              252 chr[1] = 0;
              +
              253 }
              +
              254 else {
              +
              255 ucs4_to_surrogate_pair(chr, unicode);
              +
              256 chr[2] = 0;
              +
              257 }
              +
              258#else
              +
              259 chr[0] = (wchar_t)unicode;
              +
              260 chr[1] = 0;
              +
              261#endif
              +
              262 entity_w = chr;
              +
              263 }
              +
              264 else
              +
              265 entity_w = sgml2uni(src + i + 1, n);
              +
              266
              +
              267 if (entity_w &&
              +
              268 (skip_quot || (entity_w[0] != L'"')) &&
              +
              269 (skip_apos || (entity_w[0] != L'\'')) &&
              +
              270 (skip_amp || (entity_w[0] != L'&')) &&
              +
              271 (skip_lt_gt || (entity_w[0] != L'<' && entity_w[0] != L'>')) &&
              +
              272 (skip_bsol || (entity_w[0] != L'\\')) &&
              +
              273 (skip_dollar || (entity_w[0] != L'$')) &&
              +
              274 (skip_percnt || (entity_w[0] != L'%')) &&
              +
              275 (skip_commat || (entity_w[0] != L'@')) &&
              +
              276 (skip_num || (entity_w[0] != L'#')) &&
              +
              277 (skip_lpar_rpar || (entity_w[0] != L'(' && entity_w[0] != L')')) &&
              +
              278 (skip_lcub_rcub || (entity_w[0] != L'{' && entity_w[0] != L'}')) &&
              +
              279 (skip_lsqb_rsqb || (entity_w[0] != L'[' && entity_w[0] != L']')))
              +
              280 {
              +
              281 if (map) map->push_back(mapping<size_t>(offset.from + i, offset.to + j));
              +
              282 size_t m = wcslen(entity_w);
              +
              283 if (j + m >= count_dst)
              +
              284 throw buffer_overrun;
              +
              285 memcpy(dst + j, entity_w, m * sizeof(wchar_t)); j += m;
              +
              286 i = end - src + 1;
              +
              287 if (map) map->push_back(mapping<size_t>(offset.from + i, offset.to + j));
              +
              288 continue;
              +
              289 }
              +
              290 }
              +
              291 }
              +
              292 if (j + 1 >= count_dst)
              +
              293 throw buffer_overrun;
              +
              294 dst[j++] = src[i++];
              +
              295 }
              +
              296 if (j >= count_dst)
              +
              297 throw buffer_overrun;
              +
              298 dst[j] = 0;
              +
              299 return j;
              +
              300 }
              +
              301
              +
              312 template <class T>
              +
              313 inline void sgml2strcpy(
              +
              314 _Inout_ std::wstring& dst,
              +
              315 _In_reads_or_z_opt_(count_src) const T* src, _In_ size_t count_src,
              +
              316 _In_ int skip = 0,
              +
              317 _In_ const mapping<size_t>& offset = mapping<size_t>(0, 0),
              +
              318 _Inout_opt_ mapping_vector<size_t>* map = nullptr)
              +
              319 {
              +
              320 dst.clear();
              +
              321 if (map)
              +
              322 map->clear();
              +
              323 sgml2strcat(dst, src, count_src, skip, offset, map);
              324 }
              325
              -
              326 template <class T>
              -
              327 _Deprecated_("Use stdex::sgml2wstrcat")
              -
              328 inline size_t sgml2wstr(
              -
              329 _Inout_cap_(count_dst) wchar_t* dst, _In_ size_t count_dst,
              -
              330 _In_reads_or_z_opt_(count_src) const T* src, _In_ size_t count_src,
              -
              331 _In_ int skip = 0,
              -
              332 _In_ const mapping<size_t>& offset = mapping<size_t>(0, 0),
              -
              333 _Inout_opt_ mapping_vector<size_t>* map = nullptr)
              -
              334 {
              -
              335 return sgml2wstrcat(dst, count_dst, src, count_src, skip, offset, map);
              -
              336 }
              -
              337
              -
              348 template <class T>
              -
              349 inline void sgml2wstrcpy(
              -
              350 _Inout_ std::wstring& dst,
              -
              351 _In_reads_or_z_opt_(count_src) const T* src, _In_ size_t count_src,
              -
              352 _In_ int skip = 0,
              -
              353 _In_ const mapping<size_t>& offset = mapping<size_t>(0, 0),
              -
              354 _Inout_opt_ mapping_vector<size_t>* map = nullptr)
              -
              355 {
              -
              356 dst.clear();
              -
              357 if (map)
              -
              358 map->clear();
              -
              359 sgml2wstrcat(dst, src, count_src, skip, offset, map);
              -
              360 }
              -
              361
              -
              371 template<class _Elem, class _Traits, class _Ax>
              -
              372 inline void sgml2wstrcpy(
              -
              373 _Inout_ std::wstring& dst,
              -
              374 _In_ const std::basic_string<_Elem, _Traits, _Ax>& src,
              -
              375 _In_ int skip = 0,
              -
              376 _In_ const mapping<size_t>& offset = mapping<size_t>(0, 0),
              -
              377 _Inout_opt_ mapping_vector<size_t>* map = nullptr)
              -
              378 {
              -
              379 sgml2wstrcpy(dst, src.data(), src.size(), skip, offset, map);
              -
              380 }
              -
              381
              -
              395 template <class T>
              -
              396 inline size_t sgml2wstrcpy(
              -
              397 _Inout_cap_(count_dst) wchar_t* dst, _In_ size_t count_dst,
              -
              398 _In_reads_or_z_opt_(count_src) const T* src, _In_ size_t count_src,
              -
              399 _In_ int skip = 0,
              -
              400 _In_ const mapping<size_t>& offset = mapping<size_t>(0, 0),
              -
              401 _Inout_opt_ mapping_vector<size_t>* map = nullptr)
              -
              402 {
              -
              403 _Assume_(dst || !count_dst);
              -
              404 if (count_dst)
              -
              405 dst[0] = 0;
              -
              406 if (map)
              -
              407 map->clear();
              -
              408 return sgml2wstrcat(dst, count_dst, src, count_src, skip, offset, map);
              -
              409 }
              -
              410
              -
              422 template <class T>
              -
              423 inline std::wstring sgml2wstr(
              -
              424 _In_reads_or_z_opt_(count_src) const T* src, _In_ size_t count_src,
              -
              425 _In_ int skip = 0,
              -
              426 _In_ const mapping<size_t>& offset = mapping<size_t>(0, 0),
              -
              427 _Inout_opt_ mapping_vector<size_t>* map = nullptr)
              -
              428 {
              -
              429 std::wstring dst;
              -
              430 sgml2wstrcat(dst, src, count_src, skip, offset, map);
              -
              431 return dst;
              -
              432 }
              -
              433
              -
              444 template <class T>
              -
              445 inline std::wstring sgml2wstr(
              -
              446 _In_ const std::basic_string<T>& src,
              -
              447 _In_ int skip = 0,
              -
              448 _In_ const mapping<size_t>& offset = mapping<size_t>(0, 0),
              -
              449 _Inout_opt_ mapping_vector<size_t>* map = nullptr)
              -
              450 {
              -
              451 return sgml2wstr(src.c_str(), src.size(), skip, offset, map);
              -
              452 }
              -
              453
              -
              455 inline const char* chr2sgml(_In_reads_or_z_(count) const wchar_t* entity, _In_ size_t count)
              -
              456 {
              -
              457 _Assume_(entity && count);
              -
              458
              -
              459 const wchar_t e2 = entity[0];
              -
              460 for (size_t i = 0, j = _countof(unicode_sgml); i < j; ) {
              -
              461 size_t m = (i + j) / 2;
              -
              462 wchar_t e1 = sgml_unicode[unicode_sgml[m]].unicode[0];
              -
              463 if (e1 < e2)
              -
              464 i = m + 1;
              -
              465 else if (e1 > e2)
              -
              466 j = m;
              -
              467 else {
              -
              468 auto r = strncmp(sgml_unicode[unicode_sgml[m]].unicode + 1, _countof(sgml_unicode[0].unicode) - 1, entity + 1, count - 1);
              -
              469 if (r < 0)
              -
              470 i = m + 1;
              -
              471 else if (r > 0)
              -
              472 j = m;
              -
              473 else {
              -
              474 for (; i < m && sgml_unicode[unicode_sgml[m - 1]].unicode[0] == e2 && strncmp(sgml_unicode[unicode_sgml[m - 1]].unicode + 1, _countof(sgml_unicode[0].unicode) - 1, entity + 1, count - 1) == 0; m--);
              -
              475 return sgml_unicode[unicode_sgml[m]].sgml;
              -
              476 }
              -
              477 }
              -
              478 }
              -
              479 return nullptr;
              -
              480 }
              -
              482
              -
              491 inline void wstr2sgmlcat(
              -
              492 _Inout_ std::string& dst,
              -
              493 _In_reads_or_z_opt_(count_src) const wchar_t* src, _In_ size_t count_src,
              -
              494 _In_ size_t what = 0)
              -
              495 {
              -
              496 _Assume_(src || !count_src);
              -
              497
              -
              498 const bool
              -
              499 do_ascii = (what & sgml_full) == 0,
              -
              500 do_quot = (what & sgml_quot) == 0,
              -
              501 do_apos = (what & sgml_apos) == 0,
              -
              502 do_lt_gt = (what & sgml_lt_gt) == 0,
              -
              503 do_bsol = (what & sgml_bsol) == 0,
              -
              504 do_dollar = (what & sgml_dollar) == 0,
              -
              505 do_percnt = (what & sgml_percnt) == 0,
              -
              506 do_commat = (what & sgml_commat) == 0,
              -
              507 do_num = (what & sgml_num) == 0,
              -
              508 do_lpar_rpar = (what & sgml_lpar_rpar) == 0,
              -
              509 do_lcub_rcub = (what & sgml_lcub_rcub) == 0,
              -
              510 do_lsqb_rsqb = (what & sgml_lsqb_rsqb) == 0;
              -
              511
              -
              512 count_src = wcsnlen(src, count_src);
              -
              513 dst.reserve(dst.size() + count_src);
              -
              514 for (size_t i = 0; i < count_src;) {
              -
              515 size_t n = glyphlen(src + i, count_src - i);
              -
              516 if (n == 1 &&
              -
              517 do_ascii && (unsigned int)src[i] < 128 &&
              -
              518 src[i] != L'&' &&
              -
              519 (do_quot || (src[i] != L'"')) &&
              -
              520 (do_apos || (src[i] != L'\'')) &&
              -
              521 (do_lt_gt || (src[i] != L'<' && src[i] != L'>')) &&
              -
              522 (do_bsol || (src[i] != L'\\')) &&
              -
              523 (do_dollar || (src[i] != L'$')) &&
              -
              524 (do_percnt || (src[i] != L'%')) &&
              -
              525 (do_commat || (src[i] != L'@')) &&
              -
              526 (do_num || (src[i] != L'#')) &&
              -
              527 (do_lpar_rpar || (src[i] != L'(' && src[i] != L')')) &&
              -
              528 (do_lcub_rcub || (src[i] != L'{' && src[i] != L'}')) &&
              -
              529 (do_lsqb_rsqb || (src[i] != L'[' && src[i] != L']')))
              -
              530 {
              -
              531 // 7-bit ASCII and no desire to encode it as an SGML entity.
              -
              532 dst.append(1, static_cast<char>(src[i++]));
              -
              533 }
              -
              534 else {
              -
              535 const char* entity = chr2sgml(src + i, n);
              -
              536 if (entity) {
              -
              537 dst.append(1, '&');
              -
              538 dst.append(entity);
              -
              539 dst.append(1, ';');
              -
              540 i += n;
              -
              541 }
              -
              542 else if (n == 1) {
              -
              543 // Trivial character (1 code unit, 1 glyph), no entity available.
              -
              544 if ((unsigned int)src[i] < 128)
              -
              545 dst.append(1, static_cast<char>(src[i++]));
              -
              546 else {
              -
              547 char tmp[3 + 8 + 1 + 1];
              -
              548 snprintf(tmp, _countof(tmp), "&#x%x;", src[i++]);
              -
              549 dst.append(tmp);
              -
              550 }
              -
              551 }
              -
              552 else {
              -
              553 // Non-trivial character. Decompose.
              -
              554 const size_t end = i + n;
              -
              555 while (i < end) {
              -
              556 if ((entity = chr2sgml(src + i, 1)) != nullptr) {
              -
              557 dst.append(1, '&');
              -
              558 dst.append(entity);
              -
              559 dst.append(1, ';');
              -
              560 i++;
              -
              561 }
              -
              562 else if ((unsigned int)src[i] < 128)
              -
              563 dst.append(1, static_cast<char>(src[i++]));
              -
              564 else {
              -
              565 uint32_t unicode;
              -
              566#ifdef _WIN32
              -
              567 if (i + 1 < end && is_surrogate_pair(src + i)) {
              -
              568 unicode = surrogate_pair_to_ucs4(src + i);
              -
              569 i += 2;
              -
              570 }
              -
              571 else
              -
              572#endif
              -
              573 {
              -
              574 unicode = src[i++];
              -
              575 }
              -
              576 char tmp[3 + 8 + 1 + 1];
              -
              577 snprintf(tmp, _countof(tmp), "&#x%x;", unicode);
              -
              578 dst.append(tmp);
              -
              579 }
              -
              580 }
              -
              581 }
              -
              582 }
              -
              583 }
              -
              584 }
              -
              585
              -
              586 _Deprecated_("Use stdex::wstr2sgmlcat")
              -
              587 inline void wstr2sgml(
              -
              588 _Inout_ std::string& dst,
              -
              589 _In_reads_or_z_opt_(count_src) const wchar_t* src, _In_ size_t count_src,
              -
              590 _In_ size_t what = 0)
              -
              591 {
              -
              592 wstr2sgmlcat(dst, src, count_src, what);
              -
              593 }
              -
              594
              -
              602 inline void wstr2sgmlcat(
              -
              603 _Inout_ std::string& dst,
              -
              604 _In_ const std::wstring& src,
              -
              605 _In_ size_t what = 0)
              -
              606 {
              -
              607 wstr2sgmlcat(dst, src.c_str(), src.size(), what);
              -
              608 }
              -
              609
              -
              610 _Deprecated_("Use stdex::wstr2sgmlcat")
              -
              611 inline void wstr2sgml(
              -
              612 _Inout_ std::string& dst,
              -
              613 _In_ const std::wstring& src,
              -
              614 _In_ size_t what = 0)
              -
              615 {
              -
              616 wstr2sgmlcat(dst, src, what);
              -
              617 }
              -
              618
              -
              630 inline size_t wstr2sgmlcat(
              -
              631 _Inout_cap_(count_dst) char* dst, _In_ size_t count_dst,
              -
              632 _In_reads_or_z_opt_(count_src) const wchar_t* src, _In_ size_t count_src,
              -
              633 _In_ size_t what = 0)
              -
              634 {
              -
              635 _Assume_(dst || !count_dst);
              -
              636 _Assume_(src || !count_src);
              -
              637
              -
              638 static const std::invalid_argument buffer_overrun("buffer overrun");
              -
              639 const bool
              -
              640 do_ascii = (what & sgml_full) == 0,
              -
              641 do_quot = (what & sgml_quot) == 0,
              -
              642 do_apos = (what & sgml_apos) == 0,
              -
              643 do_lt_gt = (what & sgml_lt_gt) == 0,
              -
              644 do_bsol = (what & sgml_bsol) == 0,
              -
              645 do_dollar = (what & sgml_dollar) == 0,
              -
              646 do_percnt = (what & sgml_percnt) == 0,
              -
              647 do_commat = (what & sgml_commat) == 0,
              -
              648 do_num = (what & sgml_num) == 0,
              -
              649 do_lpar_rpar = (what & sgml_lpar_rpar) == 0,
              -
              650 do_lcub_rcub = (what & sgml_lcub_rcub) == 0,
              -
              651 do_lsqb_rsqb = (what & sgml_lsqb_rsqb) == 0;
              -
              652
              -
              653 size_t j = strnlen(dst, count_dst);
              -
              654 count_src = wcsnlen(src, count_src);
              -
              655 for (size_t i = 0; i < count_src;) {
              -
              656 size_t n = glyphlen(src + i, count_src - i);
              -
              657 if (n == 1 &&
              -
              658 do_ascii && (unsigned int)src[i] < 128 &&
              -
              659 src[i] != L'&' &&
              -
              660 (do_quot || (src[i] != L'"')) &&
              -
              661 (do_apos || (src[i] != L'\'')) &&
              -
              662 (do_lt_gt || (src[i] != L'<' && src[i] != L'>')) &&
              -
              663 (do_bsol || (src[i] != L'\\')) &&
              -
              664 (do_dollar || (src[i] != L'$')) &&
              -
              665 (do_percnt || (src[i] != L'%')) &&
              -
              666 (do_commat || (src[i] != L'@')) &&
              -
              667 (do_num || (src[i] != L'#')) &&
              -
              668 (do_lpar_rpar || (src[i] != L'(' && src[i] != L')')) &&
              -
              669 (do_lcub_rcub || (src[i] != L'{' && src[i] != L'}')) &&
              -
              670 (do_lsqb_rsqb || (src[i] != L'[' && src[i] != L']')))
              -
              671 {
              -
              672 // 7-bit ASCII and no desire to encode it as an SGML entity.
              -
              673 if (j + 1 >= count_dst)
              -
              674 throw buffer_overrun;
              -
              675 dst[j++] = static_cast<char>(src[i++]);
              -
              676 }
              -
              677 else {
              -
              678 const char* entity = chr2sgml(src + i, n);
              -
              679 if (entity) {
              -
              680 size_t m = strlen(entity);
              -
              681 if (j + m + 2 >= count_dst)
              -
              682 throw buffer_overrun;
              -
              683 dst[j++] = '&';
              -
              684 memcpy(dst + j, entity, m * sizeof(char)); j += m;
              -
              685 dst[j++] = ';';
              -
              686 i += n;
              -
              687 }
              -
              688 else if (n == 1) {
              -
              689 // Trivial character (1 code unit, 1 glyph), no entity available.
              -
              690 if ((unsigned int)src[i] < 128) {
              -
              691 if (j + 1 >= count_dst)
              -
              692 throw buffer_overrun;
              -
              693 dst[j++] = static_cast<char>(src[i++]);
              -
              694 }
              -
              695 else {
              -
              696 char tmp[3 + 8 + 1 + 1];
              -
              697 int m = snprintf(tmp, _countof(tmp), "&#x%x;", src[i++]);
              -
              698 _Assume_(m >= 0);
              -
              699 if (static_cast<size_t>(m) >= count_dst)
              -
              700 throw buffer_overrun;
              -
              701 memcpy(dst + j, tmp, m * sizeof(char)); j += m;
              -
              702 }
              -
              703 }
              -
              704 else {
              -
              705 // Non-trivial character. Decompose.
              -
              706 const size_t end = i + n;
              -
              707 while (i < end) {
              -
              708 if ((entity = chr2sgml(src + i, 1)) != nullptr) {
              -
              709 size_t m = strlen(entity);
              -
              710 if (j + m + 2 >= count_dst)
              -
              711 throw buffer_overrun;
              -
              712 dst[j++] = '&';
              -
              713 memcpy(dst + j, entity, m * sizeof(char)); j += m;
              -
              714 dst[j++] = ';';
              -
              715 i++;
              -
              716 }
              -
              717 else if ((unsigned int)src[i] < 128) {
              -
              718 if (j + 1 >= count_dst)
              -
              719 throw buffer_overrun;
              -
              720 dst[j++] = static_cast<char>(src[i++]);
              -
              721 }
              -
              722 else {
              -
              723 uint32_t unicode;
              -
              724#ifdef _WIN32
              -
              725 if (i + 1 < end && is_surrogate_pair(src + i)) {
              -
              726 unicode = surrogate_pair_to_ucs4(src + i);
              -
              727 i += 2;
              -
              728 }
              -
              729 else
              -
              730#endif
              -
              731 {
              -
              732 unicode = src[i++];
              -
              733 }
              -
              734 char tmp[3 + 8 + 1 + 1];
              -
              735 int m = snprintf(tmp, _countof(tmp), "&#x%x;", unicode);
              -
              736 _Assume_(m >= 0);
              -
              737 if (static_cast<size_t>(m) >= count_dst)
              -
              738 throw buffer_overrun;
              -
              739 memcpy(dst + j, tmp, m * sizeof(char)); j += m;
              -
              740 }
              -
              741 }
              -
              742 }
              -
              743 }
              -
              744 }
              -
              745 if (j >= count_dst)
              -
              746 throw buffer_overrun;
              -
              747 dst[j] = 0;
              -
              748 return j;
              +
              335 template<class _Elem, class _Traits, class _Ax>
              +
              336 inline void sgml2strcpy(
              +
              337 _Inout_ std::wstring& dst,
              +
              338 _In_ const std::basic_string<_Elem, _Traits, _Ax>& src,
              +
              339 _In_ int skip = 0,
              +
              340 _In_ const mapping<size_t>& offset = mapping<size_t>(0, 0),
              +
              341 _Inout_opt_ mapping_vector<size_t>* map = nullptr)
              +
              342 {
              +
              343 sgml2strcpy(dst, src.data(), src.size(), skip, offset, map);
              +
              344 }
              +
              345
              +
              359 template <class T>
              +
              360 inline size_t sgml2strcpy(
              +
              361 _Inout_cap_(count_dst) wchar_t* dst, _In_ size_t count_dst,
              +
              362 _In_reads_or_z_opt_(count_src) const T* src, _In_ size_t count_src,
              +
              363 _In_ int skip = 0,
              +
              364 _In_ const mapping<size_t>& offset = mapping<size_t>(0, 0),
              +
              365 _Inout_opt_ mapping_vector<size_t>* map = nullptr)
              +
              366 {
              +
              367 _Assume_(dst || !count_dst);
              +
              368 if (count_dst)
              +
              369 dst[0] = 0;
              +
              370 if (map)
              +
              371 map->clear();
              +
              372 return sgml2strcat(dst, count_dst, src, count_src, skip, offset, map);
              +
              373 }
              +
              374
              +
              386 template <class T>
              +
              387 inline std::wstring sgml2str(
              +
              388 _In_reads_or_z_opt_(count_src) const T* src, _In_ size_t count_src,
              +
              389 _In_ int skip = 0,
              +
              390 _In_ const mapping<size_t>& offset = mapping<size_t>(0, 0),
              +
              391 _Inout_opt_ mapping_vector<size_t>* map = nullptr)
              +
              392 {
              +
              393 std::wstring dst;
              +
              394 sgml2strcat(dst, src, count_src, skip, offset, map);
              +
              395 return dst;
              +
              396 }
              +
              397
              +
              408 template <class T>
              +
              409 inline std::wstring sgml2str(
              +
              410 _In_ const std::basic_string<T>& src,
              +
              411 _In_ int skip = 0,
              +
              412 _In_ const mapping<size_t>& offset = mapping<size_t>(0, 0),
              +
              413 _Inout_opt_ mapping_vector<size_t>* map = nullptr)
              +
              414 {
              +
              415 return sgml2str(src.c_str(), src.size(), skip, offset, map);
              +
              416 }
              +
              417
              +
              419 inline const char* chr2sgml(_In_reads_or_z_(count) const wchar_t* entity, _In_ size_t count)
              +
              420 {
              +
              421 _Assume_(entity && count);
              +
              422
              +
              423 const wchar_t e2 = entity[0];
              +
              424 for (size_t i = 0, j = _countof(unicode_sgml); i < j; ) {
              +
              425 size_t m = (i + j) / 2;
              +
              426 wchar_t e1 = sgml_unicode[unicode_sgml[m]].unicode[0];
              +
              427 if (e1 < e2)
              +
              428 i = m + 1;
              +
              429 else if (e1 > e2)
              +
              430 j = m;
              +
              431 else {
              +
              432 auto r = strncmp(sgml_unicode[unicode_sgml[m]].unicode + 1, _countof(sgml_unicode[0].unicode) - 1, entity + 1, count - 1);
              +
              433 if (r < 0)
              +
              434 i = m + 1;
              +
              435 else if (r > 0)
              +
              436 j = m;
              +
              437 else {
              +
              438 for (; i < m && sgml_unicode[unicode_sgml[m - 1]].unicode[0] == e2 && strncmp(sgml_unicode[unicode_sgml[m - 1]].unicode + 1, _countof(sgml_unicode[0].unicode) - 1, entity + 1, count - 1) == 0; m--);
              +
              439 return sgml_unicode[unicode_sgml[m]].sgml;
              +
              440 }
              +
              441 }
              +
              442 }
              +
              443 return nullptr;
              +
              444 }
              +
              446
              +
              455 inline void str2sgmlcat(
              +
              456 _Inout_ std::string& dst,
              +
              457 _In_reads_or_z_opt_(count_src) const wchar_t* src, _In_ size_t count_src,
              +
              458 _In_ size_t what = 0)
              +
              459 {
              +
              460 _Assume_(src || !count_src);
              +
              461
              +
              462 const bool
              +
              463 do_ascii = (what & sgml_full) == 0,
              +
              464 do_quot = (what & sgml_quot) == 0,
              +
              465 do_apos = (what & sgml_apos) == 0,
              +
              466 do_lt_gt = (what & sgml_lt_gt) == 0,
              +
              467 do_bsol = (what & sgml_bsol) == 0,
              +
              468 do_dollar = (what & sgml_dollar) == 0,
              +
              469 do_percnt = (what & sgml_percnt) == 0,
              +
              470 do_commat = (what & sgml_commat) == 0,
              +
              471 do_num = (what & sgml_num) == 0,
              +
              472 do_lpar_rpar = (what & sgml_lpar_rpar) == 0,
              +
              473 do_lcub_rcub = (what & sgml_lcub_rcub) == 0,
              +
              474 do_lsqb_rsqb = (what & sgml_lsqb_rsqb) == 0;
              +
              475
              +
              476 count_src = wcsnlen(src, count_src);
              +
              477 dst.reserve(dst.size() + count_src);
              +
              478 for (size_t i = 0; i < count_src;) {
              +
              479 size_t n = glyphlen(src + i, count_src - i);
              +
              480 if (n == 1 &&
              +
              481 do_ascii && (unsigned int)src[i] < 128 &&
              +
              482 src[i] != L'&' &&
              +
              483 (do_quot || (src[i] != L'"')) &&
              +
              484 (do_apos || (src[i] != L'\'')) &&
              +
              485 (do_lt_gt || (src[i] != L'<' && src[i] != L'>')) &&
              +
              486 (do_bsol || (src[i] != L'\\')) &&
              +
              487 (do_dollar || (src[i] != L'$')) &&
              +
              488 (do_percnt || (src[i] != L'%')) &&
              +
              489 (do_commat || (src[i] != L'@')) &&
              +
              490 (do_num || (src[i] != L'#')) &&
              +
              491 (do_lpar_rpar || (src[i] != L'(' && src[i] != L')')) &&
              +
              492 (do_lcub_rcub || (src[i] != L'{' && src[i] != L'}')) &&
              +
              493 (do_lsqb_rsqb || (src[i] != L'[' && src[i] != L']')))
              +
              494 {
              +
              495 // 7-bit ASCII and no desire to encode it as an SGML entity.
              +
              496 dst.append(1, static_cast<char>(src[i++]));
              +
              497 }
              +
              498 else {
              +
              499 const char* entity = chr2sgml(src + i, n);
              +
              500 if (entity) {
              +
              501 dst.append(1, '&');
              +
              502 dst.append(entity);
              +
              503 dst.append(1, ';');
              +
              504 i += n;
              +
              505 }
              +
              506 else if (n == 1) {
              +
              507 // Trivial character (1 code unit, 1 glyph), no entity available.
              +
              508 if ((unsigned int)src[i] < 128)
              +
              509 dst.append(1, static_cast<char>(src[i++]));
              +
              510 else {
              +
              511 char tmp[3 + 8 + 1 + 1];
              +
              512 snprintf(tmp, _countof(tmp), "&#x%x;", src[i++]);
              +
              513 dst.append(tmp);
              +
              514 }
              +
              515 }
              +
              516 else {
              +
              517 // Non-trivial character. Decompose.
              +
              518 const size_t end = i + n;
              +
              519 while (i < end) {
              +
              520 if ((entity = chr2sgml(src + i, 1)) != nullptr) {
              +
              521 dst.append(1, '&');
              +
              522 dst.append(entity);
              +
              523 dst.append(1, ';');
              +
              524 i++;
              +
              525 }
              +
              526 else if ((unsigned int)src[i] < 128)
              +
              527 dst.append(1, static_cast<char>(src[i++]));
              +
              528 else {
              +
              529 uint32_t unicode;
              +
              530#ifdef _WIN32
              +
              531 if (i + 1 < end && is_surrogate_pair(src + i)) {
              +
              532 unicode = surrogate_pair_to_ucs4(src + i);
              +
              533 i += 2;
              +
              534 }
              +
              535 else
              +
              536#endif
              +
              537 {
              +
              538 unicode = src[i++];
              +
              539 }
              +
              540 char tmp[3 + 8 + 1 + 1];
              +
              541 snprintf(tmp, _countof(tmp), "&#x%x;", unicode);
              +
              542 dst.append(tmp);
              +
              543 }
              +
              544 }
              +
              545 }
              +
              546 }
              +
              547 }
              +
              548 }
              +
              549
              +
              557 inline void str2sgmlcat(
              +
              558 _Inout_ std::string& dst,
              +
              559 _In_ const std::wstring& src,
              +
              560 _In_ size_t what = 0)
              +
              561 {
              +
              562 str2sgmlcat(dst, src.c_str(), src.size(), what);
              +
              563 }
              +
              564
              +
              576 inline size_t str2sgmlcat(
              +
              577 _Inout_cap_(count_dst) char* dst, _In_ size_t count_dst,
              +
              578 _In_reads_or_z_opt_(count_src) const wchar_t* src, _In_ size_t count_src,
              +
              579 _In_ size_t what = 0)
              +
              580 {
              +
              581 _Assume_(dst || !count_dst);
              +
              582 _Assume_(src || !count_src);
              +
              583
              +
              584 static const std::invalid_argument buffer_overrun("buffer overrun");
              +
              585 const bool
              +
              586 do_ascii = (what & sgml_full) == 0,
              +
              587 do_quot = (what & sgml_quot) == 0,
              +
              588 do_apos = (what & sgml_apos) == 0,
              +
              589 do_lt_gt = (what & sgml_lt_gt) == 0,
              +
              590 do_bsol = (what & sgml_bsol) == 0,
              +
              591 do_dollar = (what & sgml_dollar) == 0,
              +
              592 do_percnt = (what & sgml_percnt) == 0,
              +
              593 do_commat = (what & sgml_commat) == 0,
              +
              594 do_num = (what & sgml_num) == 0,
              +
              595 do_lpar_rpar = (what & sgml_lpar_rpar) == 0,
              +
              596 do_lcub_rcub = (what & sgml_lcub_rcub) == 0,
              +
              597 do_lsqb_rsqb = (what & sgml_lsqb_rsqb) == 0;
              +
              598
              +
              599 size_t j = strnlen(dst, count_dst);
              +
              600 count_src = wcsnlen(src, count_src);
              +
              601 for (size_t i = 0; i < count_src;) {
              +
              602 size_t n = glyphlen(src + i, count_src - i);
              +
              603 if (n == 1 &&
              +
              604 do_ascii && (unsigned int)src[i] < 128 &&
              +
              605 src[i] != L'&' &&
              +
              606 (do_quot || (src[i] != L'"')) &&
              +
              607 (do_apos || (src[i] != L'\'')) &&
              +
              608 (do_lt_gt || (src[i] != L'<' && src[i] != L'>')) &&
              +
              609 (do_bsol || (src[i] != L'\\')) &&
              +
              610 (do_dollar || (src[i] != L'$')) &&
              +
              611 (do_percnt || (src[i] != L'%')) &&
              +
              612 (do_commat || (src[i] != L'@')) &&
              +
              613 (do_num || (src[i] != L'#')) &&
              +
              614 (do_lpar_rpar || (src[i] != L'(' && src[i] != L')')) &&
              +
              615 (do_lcub_rcub || (src[i] != L'{' && src[i] != L'}')) &&
              +
              616 (do_lsqb_rsqb || (src[i] != L'[' && src[i] != L']')))
              +
              617 {
              +
              618 // 7-bit ASCII and no desire to encode it as an SGML entity.
              +
              619 if (j + 1 >= count_dst)
              +
              620 throw buffer_overrun;
              +
              621 dst[j++] = static_cast<char>(src[i++]);
              +
              622 }
              +
              623 else {
              +
              624 const char* entity = chr2sgml(src + i, n);
              +
              625 if (entity) {
              +
              626 size_t m = strlen(entity);
              +
              627 if (j + m + 2 >= count_dst)
              +
              628 throw buffer_overrun;
              +
              629 dst[j++] = '&';
              +
              630 memcpy(dst + j, entity, m * sizeof(char)); j += m;
              +
              631 dst[j++] = ';';
              +
              632 i += n;
              +
              633 }
              +
              634 else if (n == 1) {
              +
              635 // Trivial character (1 code unit, 1 glyph), no entity available.
              +
              636 if ((unsigned int)src[i] < 128) {
              +
              637 if (j + 1 >= count_dst)
              +
              638 throw buffer_overrun;
              +
              639 dst[j++] = static_cast<char>(src[i++]);
              +
              640 }
              +
              641 else {
              +
              642 char tmp[3 + 8 + 1 + 1];
              +
              643 int m = snprintf(tmp, _countof(tmp), "&#x%x;", src[i++]);
              +
              644 _Assume_(m >= 0);
              +
              645 if (static_cast<size_t>(m) >= count_dst)
              +
              646 throw buffer_overrun;
              +
              647 memcpy(dst + j, tmp, m * sizeof(char)); j += m;
              +
              648 }
              +
              649 }
              +
              650 else {
              +
              651 // Non-trivial character. Decompose.
              +
              652 const size_t end = i + n;
              +
              653 while (i < end) {
              +
              654 if ((entity = chr2sgml(src + i, 1)) != nullptr) {
              +
              655 size_t m = strlen(entity);
              +
              656 if (j + m + 2 >= count_dst)
              +
              657 throw buffer_overrun;
              +
              658 dst[j++] = '&';
              +
              659 memcpy(dst + j, entity, m * sizeof(char)); j += m;
              +
              660 dst[j++] = ';';
              +
              661 i++;
              +
              662 }
              +
              663 else if ((unsigned int)src[i] < 128) {
              +
              664 if (j + 1 >= count_dst)
              +
              665 throw buffer_overrun;
              +
              666 dst[j++] = static_cast<char>(src[i++]);
              +
              667 }
              +
              668 else {
              +
              669 uint32_t unicode;
              +
              670#ifdef _WIN32
              +
              671 if (i + 1 < end && is_surrogate_pair(src + i)) {
              +
              672 unicode = surrogate_pair_to_ucs4(src + i);
              +
              673 i += 2;
              +
              674 }
              +
              675 else
              +
              676#endif
              +
              677 {
              +
              678 unicode = src[i++];
              +
              679 }
              +
              680 char tmp[3 + 8 + 1 + 1];
              +
              681 int m = snprintf(tmp, _countof(tmp), "&#x%x;", unicode);
              +
              682 _Assume_(m >= 0);
              +
              683 if (static_cast<size_t>(m) >= count_dst)
              +
              684 throw buffer_overrun;
              +
              685 memcpy(dst + j, tmp, m * sizeof(char)); j += m;
              +
              686 }
              +
              687 }
              +
              688 }
              +
              689 }
              +
              690 }
              +
              691 if (j >= count_dst)
              +
              692 throw buffer_overrun;
              +
              693 dst[j] = 0;
              +
              694 return j;
              +
              695 }
              +
              696
              +
              705 inline void str2sgmlcpy(
              +
              706 _Inout_ std::string& dst,
              +
              707 _In_reads_or_z_opt_(count_src) const wchar_t* src, _In_ size_t count_src,
              +
              708 _In_ size_t what = 0)
              +
              709 {
              +
              710 dst.clear();
              +
              711 str2sgmlcat(dst, src, count_src, what);
              +
              712 }
              +
              713
              +
              721 inline void str2sgmlcpy(
              +
              722 _Inout_ std::string& dst,
              +
              723 _In_ const std::wstring& src,
              +
              724 _In_ size_t what = 0)
              +
              725 {
              +
              726 str2sgmlcpy(dst, src.data(), src.size(), what);
              +
              727 }
              +
              728
              +
              740 inline size_t str2sgmlcpy(
              +
              741 _Inout_cap_(count_dst) char* dst, _In_ size_t count_dst,
              +
              742 _In_reads_or_z_opt_(count_src) const wchar_t* src, _In_ size_t count_src,
              +
              743 _In_ size_t what = 0)
              +
              744 {
              +
              745 _Assume_(dst || !count_dst);
              +
              746 if (count_dst)
              +
              747 dst[0] = 0;
              +
              748 return str2sgmlcat(dst, count_dst, src, count_src, what);
              749 }
              750
              -
              751 _Deprecated_("Use stdex::wstr2sgmlcat")
              -
              752 inline size_t wstr2sgml(
              -
              753 _Inout_cap_(count_dst) char* dst, _In_ size_t count_dst,
              -
              754 _In_reads_or_z_opt_(count_src) const wchar_t* src, _In_ size_t count_src,
              -
              755 _In_ size_t what = 0)
              -
              756 {
              -
              757 return wstr2sgmlcat(dst, count_dst, src, count_src, what);
              -
              758 }
              -
              759
              -
              768 inline void wstr2sgmlcpy(
              -
              769 _Inout_ std::string& dst,
              -
              770 _In_reads_or_z_opt_(count_src) const wchar_t* src, _In_ size_t count_src,
              -
              771 _In_ size_t what = 0)
              -
              772 {
              -
              773 dst.clear();
              -
              774 wstr2sgmlcat(dst, src, count_src, what);
              -
              775 }
              -
              776
              -
              784 inline void wstr2sgmlcpy(
              -
              785 _Inout_ std::string& dst,
              -
              786 _In_ const std::wstring& src,
              -
              787 _In_ size_t what = 0)
              -
              788 {
              -
              789 wstr2sgmlcpy(dst, src.data(), src.size(), what);
              -
              790 }
              -
              791
              -
              803 inline size_t wstr2sgmlcpy(
              -
              804 _Inout_cap_(count_dst) char* dst, _In_ size_t count_dst,
              -
              805 _In_reads_or_z_opt_(count_src) const wchar_t* src, _In_ size_t count_src,
              -
              806 _In_ size_t what = 0)
              -
              807 {
              -
              808 _Assume_(dst || !count_dst);
              -
              809 if (count_dst)
              -
              810 dst[0] = 0;
              -
              811 return wstr2sgmlcat(dst, count_dst, src, count_src, what);
              -
              812 }
              -
              813
              -
              823 inline std::string wstr2sgml(
              -
              824 _In_reads_or_z_opt_(count_src) const wchar_t* src, _In_ size_t count_src,
              -
              825 _In_ size_t what = 0)
              -
              826 {
              -
              827 std::string dst;
              -
              828 wstr2sgmlcat(dst, src, count_src, what);
              -
              829 return dst;
              -
              830 }
              -
              831
              -
              840 inline std::string wstr2sgml(
              -
              841 _In_ const std::wstring& src,
              -
              842 _In_ size_t what = 0)
              -
              843 {
              -
              844 return wstr2sgml(src.c_str(), src.size(), what);
              -
              845 }
              -
              846}
              +
              760 inline std::string str2sgml(
              +
              761 _In_reads_or_z_opt_(count_src) const wchar_t* src, _In_ size_t count_src,
              +
              762 _In_ size_t what = 0)
              +
              763 {
              +
              764 std::string dst;
              +
              765 str2sgmlcat(dst, src, count_src, what);
              +
              766 return dst;
              +
              767 }
              +
              768
              +
              777 inline std::string str2sgml(
              +
              778 _In_ const std::wstring& src,
              +
              779 _In_ size_t what = 0)
              +
              780 {
              +
              781 return str2sgml(src.c_str(), src.size(), what);
              +
              782 }
              +
              783}
              diff --git a/sgml__unicode_8hpp_source.html b/sgml__unicode_8hpp_source.html index ea3742c69..739a00930 100644 --- a/sgml__unicode_8hpp_source.html +++ b/sgml__unicode_8hpp_source.html @@ -3175,7 +3175,7 @@ $(document).ready(function() { init_codefold(0); });
              diff --git a/socket_8hpp_source.html b/socket_8hpp_source.html index e24f773a3..f277a6e20 100644 --- a/socket_8hpp_source.html +++ b/socket_8hpp_source.html @@ -113,7 +113,7 @@ $(document).ready(function() { init_codefold(0); });
              diff --git a/spinlock_8hpp_source.html b/spinlock_8hpp_source.html index 80a3880fe..788471e30 100644 --- a/spinlock_8hpp_source.html +++ b/spinlock_8hpp_source.html @@ -157,7 +157,7 @@ $(document).ready(function() { init_codefold(0); });
              diff --git a/stream_8cpp_source.html b/stream_8cpp_source.html index e9d63920d..924298b69 100644 --- a/stream_8cpp_source.html +++ b/stream_8cpp_source.html @@ -257,7 +257,7 @@ $(document).ready(function() { init_codefold(0); });
              diff --git a/stream_8hpp_source.html b/stream_8hpp_source.html index 86a1b7f98..88d141b37 100644 --- a/stream_8hpp_source.html +++ b/stream_8hpp_source.html @@ -4010,7 +4010,7 @@ $(document).ready(function() { init_codefold(0); });
              4187 }
              4188}
              -
              Encoding converter context.
              Definition unicode.hpp:70
              +
              Encoding converter context.
              Definition unicode.hpp:117
              Provides read-ahead stream capability.
              Definition stream.hpp:1256
              virtual size_t read(_Out_writes_bytes_to_opt_(length, return) void *data, size_t length)
              Reads block of data from the stream.
              Definition stream.hpp:1270
              Provides write-back stream capability.
              Definition stream.hpp:1323
              @@ -4225,7 +4225,7 @@ $(document).ready(function() { init_codefold(0); });
              diff --git a/string_8hpp_source.html b/string_8hpp_source.html index ab8c5e350..25613e32a 100644 --- a/string_8hpp_source.html +++ b/string_8hpp_source.html @@ -240,928 +240,945 @@ $(document).ready(function() { init_codefold(0); });
              247 return z;
              248 }
              249
              -
              259 template <class T>
              -
              260 inline size_t strnichr(
              -
              261 _In_reads_or_z_opt_(count) const T* str,
              -
              262 _In_ size_t count,
              -
              263 _In_ T chr,
              -
              264 _In_ const std::locale& locale)
              -
              265 {
              -
              266 _Assume_(str || !count);
              -
              267 const auto& ctype = std::use_facet<std::ctype<T>>(locale);
              -
              268 chr = ctype.tolower(chr);
              -
              269 for (size_t i = 0; i < count && str[i]; ++i)
              -
              270 if (ctype.tolower(str[i]) == chr) return i;
              -
              271 return npos;
              -
              272 }
              -
              273
              -
              283 template <class T>
              -
              284 inline size_t strrnichr(
              -
              285 _In_reads_or_z_opt_(count) const T* str,
              -
              286 _In_ size_t count,
              -
              287 _In_ T chr,
              -
              288 _In_ const std::locale& locale)
              -
              289 {
              -
              290 _Assume_(str || !count);
              -
              291 const auto& ctype = std::use_facet<std::ctype<T>>(locale);
              -
              292 chr = ctype.tolower(chr);
              -
              293 size_t z = npos;
              -
              294 for (size_t i = 0; i < count && str[i]; ++i)
              -
              295 if (ctype.tolower(str[i]) == chr) z = i;
              -
              296 return z;
              -
              297 }
              -
              298
              -
              307 template <class T1, class T2>
              -
              308 inline int strcmp(const T1* str1, const T2* str2)
              -
              309 {
              -
              310 _Assume_(str1 && str2);
              -
              311 T1 a; T2 b;
              -
              312 for (size_t i = 0; (a = str1[i]) | (b = str2[i]); ++i) {
              -
              313 if (a > b) return +1;
              -
              314 if (a < b) return -1;
              -
              315 }
              -
              316 return 0;
              -
              317 }
              -
              318
              -
              329 template <class T1, class T2>
              -
              330 inline int strncmp(
              -
              331 _In_reads_or_z_opt_(count1) const T1* str1, _In_ size_t count1,
              -
              332 _In_reads_or_z_opt_(count2) const T2* str2, _In_ size_t count2)
              -
              333 {
              -
              334 _Assume_(str1 || !count1);
              -
              335 _Assume_(str2 || !count2);
              -
              336 size_t i; T1 a; T2 b;
              -
              337 for (i = 0; i < count1 && i < count2 && ((a = str1[i]) | (b = str2[i])); ++i) {
              -
              338 if (a > b) return +1;
              -
              339 if (a < b) return -1;
              -
              340 }
              -
              341 if (i < count1 && str1[i]) return +1;
              -
              342 if (i < count2 && str2[i]) return -1;
              +
              253 const inline std::locale std_locale_C("C");
              +
              254
              +
              263 template <class T>
              +
              264 inline bool isblank(
              +
              265 _In_reads_or_z_opt_(count) const T* str,
              +
              266 _In_ size_t count,
              +
              267 _In_ const std::locale& locale)
              +
              268 {
              +
              269 _Assume_(str || !count);
              +
              270 const auto& ctype = std::use_facet<std::ctype<T>>(locale);
              +
              271 for (size_t i = 0; i < count && str[i]; ++i)
              +
              272 if (!ctype.is(ctype.space, str[i]))
              +
              273 return false;
              +
              274 return true;
              +
              275 }
              +
              276
              +
              286 template <class T>
              +
              287 inline size_t strnichr(
              +
              288 _In_reads_or_z_opt_(count) const T* str,
              +
              289 _In_ size_t count,
              +
              290 _In_ T chr,
              +
              291 _In_ const std::locale& locale)
              +
              292 {
              +
              293 _Assume_(str || !count);
              +
              294 const auto& ctype = std::use_facet<std::ctype<T>>(locale);
              +
              295 chr = ctype.tolower(chr);
              +
              296 for (size_t i = 0; i < count && str[i]; ++i)
              +
              297 if (ctype.tolower(str[i]) == chr) return i;
              +
              298 return npos;
              +
              299 }
              +
              300
              +
              310 template <class T>
              +
              311 inline size_t strrnichr(
              +
              312 _In_reads_or_z_opt_(count) const T* str,
              +
              313 _In_ size_t count,
              +
              314 _In_ T chr,
              +
              315 _In_ const std::locale& locale)
              +
              316 {
              +
              317 _Assume_(str || !count);
              +
              318 const auto& ctype = std::use_facet<std::ctype<T>>(locale);
              +
              319 chr = ctype.tolower(chr);
              +
              320 size_t z = npos;
              +
              321 for (size_t i = 0; i < count && str[i]; ++i)
              +
              322 if (ctype.tolower(str[i]) == chr) z = i;
              +
              323 return z;
              +
              324 }
              +
              325
              +
              334 template <class T1, class T2>
              +
              335 inline int strcmp(const T1* str1, const T2* str2)
              +
              336 {
              +
              337 _Assume_(str1 && str2);
              +
              338 T1 a; T2 b;
              +
              339 for (size_t i = 0; (a = str1[i]) | (b = str2[i]); ++i) {
              +
              340 if (a > b) return +1;
              +
              341 if (a < b) return -1;
              +
              342 }
              343 return 0;
              344 }
              345
              -
              355 template <class T1, class T2>
              -
              356 inline int strncmp(_In_reads_or_z_opt_(count) const T1* str1, _In_reads_or_z_opt_(count) const T2* str2, _In_ size_t count)
              -
              357 {
              -
              358 _Assume_((str1 && str2) || !count);
              -
              359 size_t i; T1 a; T2 b;
              -
              360 for (i = 0; i < count && ((a = str1[i]) | (b = str2[i])); ++i) {
              -
              361 if (a > b) return +1;
              -
              362 if (a < b) return -1;
              -
              363 }
              -
              364 if (i < count && str1[i]) return +1;
              -
              365 if (i < count && str2[i]) return -1;
              -
              366 return 0;
              -
              367 }
              -
              368
              -
              379 template <class T>
              -
              380 inline int strncoll(
              -
              381 _In_reads_or_z_opt_(count1) const T* str1, _In_ size_t count1,
              -
              382 _In_reads_or_z_opt_(count2) const T* str2, _In_ size_t count2,
              -
              383 _In_ const std::locale& locale)
              +
              356 template <class T1, class T2>
              +
              357 inline int strncmp(
              +
              358 _In_reads_or_z_opt_(count1) const T1* str1, _In_ size_t count1,
              +
              359 _In_reads_or_z_opt_(count2) const T2* str2, _In_ size_t count2)
              +
              360 {
              +
              361 _Assume_(str1 || !count1);
              +
              362 _Assume_(str2 || !count2);
              +
              363 size_t i; T1 a; T2 b;
              +
              364 for (i = 0; i < count1 && i < count2 && ((a = str1[i]) | (b = str2[i])); ++i) {
              +
              365 if (a > b) return +1;
              +
              366 if (a < b) return -1;
              +
              367 }
              +
              368 if (i < count1 && str1[i]) return +1;
              +
              369 if (i < count2 && str2[i]) return -1;
              +
              370 return 0;
              +
              371 }
              +
              372
              +
              382 template <class T1, class T2>
              +
              383 inline int strncmp(_In_reads_or_z_opt_(count) const T1* str1, _In_reads_or_z_opt_(count) const T2* str2, _In_ size_t count)
              384 {
              -
              385 _Assume_(str1 || !count1);
              -
              386 _Assume_(str2 || !count2);
              -
              387 auto& collate = std::use_facet<std::collate<T>>(locale);
              -
              388 return collate.compare(str1, str1 + count1, str2, str2 + count2);
              -
              389 }
              -
              390
              -
              399 template <class T1, class T2>
              -
              400 inline int stricmp(_In_z_ const T1* str1, _In_z_ const T2* str2, _In_ const std::locale& locale)
              -
              401 {
              -
              402 _Assume_(str1);
              -
              403 _Assume_(str2);
              -
              404 size_t i; T1 a; T2 b;
              -
              405 const auto& ctype1 = std::use_facet<std::ctype<T1>>(locale);
              -
              406 const auto& ctype2 = std::use_facet<std::ctype<T2>>(locale);
              -
              407 for (i = 0; (a = ctype1.tolower(str1[i])) | (b = ctype2.tolower(str2[i])); i++) {
              -
              408 if (a > b) return +1;
              -
              409 if (a < b) return -1;
              -
              410 }
              -
              411 if (str1[i]) return +1;
              -
              412 if (str2[i]) return -1;
              -
              413 return 0;
              -
              414 }
              -
              415
              -
              425 template <class T1, class T2>
              -
              426 inline int strnicmp(_In_reads_or_z_opt_(count) const T1* str1, _In_reads_or_z_opt_(count) const T2* str2, _In_ size_t count, _In_ const std::locale& locale)
              -
              427 {
              -
              428 _Assume_(str1 || !count);
              -
              429 _Assume_(str2 || !count);
              -
              430 size_t i; T1 a; T2 b;
              -
              431 const auto& ctype1 = std::use_facet<std::ctype<T1>>(locale);
              -
              432 const auto& ctype2 = std::use_facet<std::ctype<T2>>(locale);
              -
              433 for (i = 0; i < count && ((a = ctype1.tolower(str1[i])) | (b = ctype2.tolower(str2[i]))); i++) {
              -
              434 if (a > b) return +1;
              -
              435 if (a < b) return -1;
              -
              436 }
              -
              437 if (i < count && str1[i]) return +1;
              -
              438 if (i < count && str2[i]) return -1;
              -
              439 return 0;
              -
              440 }
              -
              441
              +
              385 _Assume_((str1 && str2) || !count);
              +
              386 size_t i; T1 a; T2 b;
              +
              387 for (i = 0; i < count && ((a = str1[i]) | (b = str2[i])); ++i) {
              +
              388 if (a > b) return +1;
              +
              389 if (a < b) return -1;
              +
              390 }
              +
              391 if (i < count && str1[i]) return +1;
              +
              392 if (i < count && str2[i]) return -1;
              +
              393 return 0;
              +
              394 }
              +
              395
              +
              406 template <class T>
              +
              407 inline int strncoll(
              +
              408 _In_reads_or_z_opt_(count1) const T* str1, _In_ size_t count1,
              +
              409 _In_reads_or_z_opt_(count2) const T* str2, _In_ size_t count2,
              +
              410 _In_ const std::locale& locale)
              +
              411 {
              +
              412 _Assume_(str1 || !count1);
              +
              413 _Assume_(str2 || !count2);
              +
              414 auto& collate = std::use_facet<std::collate<T>>(locale);
              +
              415 return collate.compare(str1, str1 + count1, str2, str2 + count2);
              +
              416 }
              +
              417
              +
              426 template <class T1, class T2>
              +
              427 inline int stricmp(_In_z_ const T1* str1, _In_z_ const T2* str2, _In_ const std::locale& locale)
              +
              428 {
              +
              429 _Assume_(str1);
              +
              430 _Assume_(str2);
              +
              431 size_t i; T1 a; T2 b;
              +
              432 const auto& ctype1 = std::use_facet<std::ctype<T1>>(locale);
              +
              433 const auto& ctype2 = std::use_facet<std::ctype<T2>>(locale);
              +
              434 for (i = 0; (a = ctype1.tolower(str1[i])) | (b = ctype2.tolower(str2[i])); i++) {
              +
              435 if (a > b) return +1;
              +
              436 if (a < b) return -1;
              +
              437 }
              +
              438 if (str1[i]) return +1;
              +
              439 if (str2[i]) return -1;
              +
              440 return 0;
              +
              441 }
              +
              442
              452 template <class T1, class T2>
              -
              453 inline int strnicmp(
              -
              454 _In_reads_or_z_opt_(count1) const T1* str1, _In_ size_t count1,
              -
              455 _In_reads_or_z_opt_(count2) const T2* str2, _In_ size_t count2,
              -
              456 _In_ const std::locale& locale)
              -
              457 {
              -
              458 _Assume_(str1 || !count1);
              -
              459 _Assume_(str2 || !count2);
              -
              460 size_t i; T1 a; T2 b;
              -
              461 const auto& ctype1 = std::use_facet<std::ctype<T1>>(locale);
              -
              462 const auto& ctype2 = std::use_facet<std::ctype<T2>>(locale);
              -
              463 for (i = 0; i < count1 && i < count2 && ((a = ctype1.tolower(str1[i])) | (b = ctype2.tolower(str2[i]))); i++) {
              -
              464 if (a > b) return +1;
              -
              465 if (a < b) return -1;
              -
              466 }
              -
              467 if (i < count1 && str1[i]) return +1;
              -
              468 if (i < count2 && str2[i]) return -1;
              -
              469 return 0;
              -
              470 }
              -
              471
              -
              480 template <class T1, class T2>
              -
              481 inline size_t strstr(
              -
              482 _In_z_ const T1* str,
              -
              483 _In_z_ const T2* sample)
              +
              453 inline int strnicmp(_In_reads_or_z_opt_(count) const T1* str1, _In_reads_or_z_opt_(count) const T2* str2, _In_ size_t count, _In_ const std::locale& locale)
              +
              454 {
              +
              455 _Assume_(str1 || !count);
              +
              456 _Assume_(str2 || !count);
              +
              457 size_t i; T1 a; T2 b;
              +
              458 const auto& ctype1 = std::use_facet<std::ctype<T1>>(locale);
              +
              459 const auto& ctype2 = std::use_facet<std::ctype<T2>>(locale);
              +
              460 for (i = 0; i < count && ((a = ctype1.tolower(str1[i])) | (b = ctype2.tolower(str2[i]))); i++) {
              +
              461 if (a > b) return +1;
              +
              462 if (a < b) return -1;
              +
              463 }
              +
              464 if (i < count && str1[i]) return +1;
              +
              465 if (i < count && str2[i]) return -1;
              +
              466 return 0;
              +
              467 }
              +
              468
              +
              479 template <class T1, class T2>
              +
              480 inline int strnicmp(
              +
              481 _In_reads_or_z_opt_(count1) const T1* str1, _In_ size_t count1,
              +
              482 _In_reads_or_z_opt_(count2) const T2* str2, _In_ size_t count2,
              +
              483 _In_ const std::locale& locale)
              484 {
              -
              485 _Assume_(str);
              -
              486 _Assume_(sample);
              -
              487 for (size_t offset = 0;; ++offset) {
              -
              488 for (size_t i = offset, j = 0;; ++i, ++j) {
              -
              489 if (!sample[j])
              -
              490 return offset;
              -
              491 if (!str[i])
              -
              492 return npos;
              -
              493 if (str[i] != sample[j])
              -
              494 break;
              -
              495 }
              -
              496 }
              +
              485 _Assume_(str1 || !count1);
              +
              486 _Assume_(str2 || !count2);
              +
              487 size_t i; T1 a; T2 b;
              +
              488 const auto& ctype1 = std::use_facet<std::ctype<T1>>(locale);
              +
              489 const auto& ctype2 = std::use_facet<std::ctype<T2>>(locale);
              +
              490 for (i = 0; i < count1 && i < count2 && ((a = ctype1.tolower(str1[i])) | (b = ctype2.tolower(str2[i]))); i++) {
              +
              491 if (a > b) return +1;
              +
              492 if (a < b) return -1;
              +
              493 }
              +
              494 if (i < count1 && str1[i]) return +1;
              +
              495 if (i < count2 && str2[i]) return -1;
              +
              496 return 0;
              497 }
              498
              -
              508 template <class T1, class T2>
              -
              509 inline size_t strnstr(
              -
              510 _In_reads_or_z_opt_(count) const T1* str,
              -
              511 _In_ size_t count,
              -
              512 _In_z_ const T2* sample)
              -
              513 {
              -
              514 _Assume_(str || !count);
              -
              515 _Assume_(sample);
              -
              516 for (size_t offset = 0;; ++offset) {
              -
              517 for (size_t i = offset, j = 0;; ++i, ++j) {
              -
              518 if (!sample[j])
              -
              519 return offset;
              -
              520 if (i >= count || !str[i])
              -
              521 return npos;
              -
              522 if (str[i] != sample[j])
              -
              523 break;
              -
              524 }
              -
              525 }
              -
              526 }
              -
              527
              -
              536 template <class T1, class T2>
              -
              537 inline size_t stristr(
              -
              538 _In_z_ const T1* str,
              -
              539 _In_z_ const T2* sample,
              -
              540 _In_ const std::locale& locale)
              -
              541 {
              -
              542 _Assume_(str);
              -
              543 _Assume_(sample);
              -
              544 const auto& ctype1 = std::use_facet<std::ctype<T1>>(locale);
              -
              545 const auto& ctype2 = std::use_facet<std::ctype<T2>>(locale);
              -
              546 for (size_t offset = 0;; ++offset) {
              -
              547 for (size_t i = offset, j = 0;; ++i, ++j) {
              -
              548 if (!sample[j])
              -
              549 return offset;
              -
              550 if (!str[i])
              -
              551 return npos;
              -
              552 if (ctype1.tolower(str[i]) != ctype2.tolower(sample[j]))
              -
              553 break;
              -
              554 }
              -
              555 }
              -
              556 }
              -
              557
              -
              567 template <class T1, class T2>
              -
              568 inline size_t strnistr(
              -
              569 _In_reads_or_z_opt_(count) const T1* str,
              -
              570 _In_ size_t count,
              -
              571 _In_z_ const T2* sample,
              -
              572 _In_ const std::locale& locale)
              -
              573 {
              -
              574 _Assume_(str || !count);
              -
              575 _Assume_(sample);
              -
              576 const auto& ctype1 = std::use_facet<std::ctype<T1>>(locale);
              -
              577 const auto& ctype2 = std::use_facet<std::ctype<T2>>(locale);
              -
              578 for (size_t offset = 0;; ++offset) {
              -
              579 for (size_t i = offset, j = 0;; ++i, ++j) {
              -
              580 if (!sample[j])
              -
              581 return offset;
              -
              582 if (i >= count || !str[i])
              -
              583 return npos;
              -
              584 if (ctype1.tolower(str[i]) != ctype2.tolower(sample[j]))
              -
              585 break;
              -
              586 }
              -
              587 }
              -
              588 }
              -
              589
              -
              598 template <class T1, class T2>
              -
              599 inline size_t strcpy(
              -
              600 _Out_writes_z_(_String_length_(src) + 1) T1* dst,
              -
              601 _In_z_ const T2* src)
              -
              602 {
              -
              603 _Assume_(dst && src);
              -
              604 for (size_t i = 0; ; ++i) {
              -
              605 if ((dst[i] = src[i]) == 0)
              -
              606 return i;
              -
              607 }
              -
              608 }
              -
              609
              -
              619 template <class T1, class T2>
              -
              620 inline size_t strncpy(
              -
              621 _Out_writes_(count) _Post_maybez_ T1* dst,
              -
              622 _In_reads_or_z_opt_(count) const T2* src, _In_ size_t count)
              -
              623 {
              -
              624 _Assume_(dst && src || !count);
              -
              625 for (size_t i = 0; ; ++i) {
              -
              626 if (i >= count)
              -
              627 return i;
              -
              628 if ((dst[i] = src[i]) == 0)
              -
              629 return i;
              -
              630 }
              -
              631 }
              -
              632
              -
              643 template <class T1, class T2>
              -
              644 inline size_t strncpy(
              -
              645 _Out_writes_(count_dst) _Post_maybez_ T1* dst, _In_ size_t count_dst,
              -
              646 _In_reads_or_z_opt_(count_src) const T2* src, _In_ size_t count_src)
              -
              647 {
              -
              648 _Assume_(dst || !count_dst);
              -
              649 _Assume_(src || !count_src);
              -
              650 for (size_t i = 0; ; ++i)
              -
              651 {
              -
              652 if (i >= count_dst)
              -
              653 return i;
              -
              654 if (i >= count_src) {
              -
              655 dst[i] = 0;
              +
              507 template <class T1, class T2>
              +
              508 inline size_t strstr(
              +
              509 _In_z_ const T1* str,
              +
              510 _In_z_ const T2* sample)
              +
              511 {
              +
              512 _Assume_(str);
              +
              513 _Assume_(sample);
              +
              514 for (size_t offset = 0;; ++offset) {
              +
              515 for (size_t i = offset, j = 0;; ++i, ++j) {
              +
              516 if (!sample[j])
              +
              517 return offset;
              +
              518 if (!str[i])
              +
              519 return npos;
              +
              520 if (str[i] != sample[j])
              +
              521 break;
              +
              522 }
              +
              523 }
              +
              524 }
              +
              525
              +
              535 template <class T1, class T2>
              +
              536 inline size_t strnstr(
              +
              537 _In_reads_or_z_opt_(count) const T1* str,
              +
              538 _In_ size_t count,
              +
              539 _In_z_ const T2* sample)
              +
              540 {
              +
              541 _Assume_(str || !count);
              +
              542 _Assume_(sample);
              +
              543 for (size_t offset = 0;; ++offset) {
              +
              544 for (size_t i = offset, j = 0;; ++i, ++j) {
              +
              545 if (!sample[j])
              +
              546 return offset;
              +
              547 if (i >= count || !str[i])
              +
              548 return npos;
              +
              549 if (str[i] != sample[j])
              +
              550 break;
              +
              551 }
              +
              552 }
              +
              553 }
              +
              554
              +
              563 template <class T1, class T2>
              +
              564 inline size_t stristr(
              +
              565 _In_z_ const T1* str,
              +
              566 _In_z_ const T2* sample,
              +
              567 _In_ const std::locale& locale)
              +
              568 {
              +
              569 _Assume_(str);
              +
              570 _Assume_(sample);
              +
              571 const auto& ctype1 = std::use_facet<std::ctype<T1>>(locale);
              +
              572 const auto& ctype2 = std::use_facet<std::ctype<T2>>(locale);
              +
              573 for (size_t offset = 0;; ++offset) {
              +
              574 for (size_t i = offset, j = 0;; ++i, ++j) {
              +
              575 if (!sample[j])
              +
              576 return offset;
              +
              577 if (!str[i])
              +
              578 return npos;
              +
              579 if (ctype1.tolower(str[i]) != ctype2.tolower(sample[j]))
              +
              580 break;
              +
              581 }
              +
              582 }
              +
              583 }
              +
              584
              +
              594 template <class T1, class T2>
              +
              595 inline size_t strnistr(
              +
              596 _In_reads_or_z_opt_(count) const T1* str,
              +
              597 _In_ size_t count,
              +
              598 _In_z_ const T2* sample,
              +
              599 _In_ const std::locale& locale)
              +
              600 {
              +
              601 _Assume_(str || !count);
              +
              602 _Assume_(sample);
              +
              603 const auto& ctype1 = std::use_facet<std::ctype<T1>>(locale);
              +
              604 const auto& ctype2 = std::use_facet<std::ctype<T2>>(locale);
              +
              605 for (size_t offset = 0;; ++offset) {
              +
              606 for (size_t i = offset, j = 0;; ++i, ++j) {
              +
              607 if (!sample[j])
              +
              608 return offset;
              +
              609 if (i >= count || !str[i])
              +
              610 return npos;
              +
              611 if (ctype1.tolower(str[i]) != ctype2.tolower(sample[j]))
              +
              612 break;
              +
              613 }
              +
              614 }
              +
              615 }
              +
              616
              +
              625 template <class T1, class T2>
              +
              626 inline size_t strcpy(
              +
              627 _Out_writes_z_(_String_length_(src) + 1) T1* dst,
              +
              628 _In_z_ const T2* src)
              +
              629 {
              +
              630 _Assume_(dst && src);
              +
              631 for (size_t i = 0; ; ++i) {
              +
              632 if ((dst[i] = src[i]) == 0)
              +
              633 return i;
              +
              634 }
              +
              635 }
              +
              636
              +
              646 template <class T1, class T2>
              +
              647 inline size_t strncpy(
              +
              648 _Out_writes_(count) _Post_maybez_ T1* dst,
              +
              649 _In_reads_or_z_opt_(count) const T2* src, _In_ size_t count)
              +
              650 {
              +
              651 _Assume_(dst && src || !count);
              +
              652 for (size_t i = 0; ; ++i) {
              +
              653 if (i >= count)
              +
              654 return i;
              +
              655 if ((dst[i] = src[i]) == 0)
              656 return i;
              -
              657 }
              -
              658 if ((dst[i] = src[i]) == 0)
              -
              659 return i;
              -
              660 }
              -
              661 }
              -
              662
              -
              671 template <class T1, class T2>
              -
              672 inline size_t strcat(
              -
              673 _In_z_ _Out_writes_z_(_String_length_(dst) + _String_length_(src) + 1) T1* dst,
              -
              674 _In_z_ const T2* src)
              -
              675 {
              -
              676 _Assume_(dst && src);
              -
              677 for (size_t i = 0, j = stdex::strlen<T1>(dst); ; ++i, ++j) {
              -
              678 if ((dst[j] = src[i]) == 0)
              -
              679 return j;
              -
              680 }
              -
              681 }
              -
              682
              -
              692 template <class T1, class T2>
              -
              693 inline size_t strncat(
              -
              694 _Inout_z_ T1* dst,
              -
              695 _In_reads_or_z_opt_(count) const T2* src, _In_ size_t count)
              -
              696 {
              -
              697 _Assume_(dst && src || !count);
              -
              698 for (size_t i = 0, j = stdex::strlen<T1>(dst); ; ++i, ++j) {
              -
              699 if (i >= count)
              -
              700 return j;
              -
              701 if ((dst[j] = src[i]) == 0)
              -
              702 return j;
              -
              703 }
              -
              704 }
              -
              705
              -
              716 template <class T1, class T2>
              -
              717 inline size_t strncat(
              -
              718 _Out_writes_(count_dst) _Post_maybez_ T1* dst, _In_ size_t count_dst,
              -
              719 _In_reads_or_z_opt_(count_src) const T2* src, _In_ size_t count_src)
              -
              720 {
              -
              721 _Assume_(dst || !count_dst);
              -
              722 _Assume_(src || !count_src);
              -
              723 for (size_t i = 0, j = stdex::strnlen<T1>(dst, count_dst); ; ++i, ++j)
              -
              724 {
              -
              725 if (j >= count_dst)
              -
              726 return j;
              -
              727 if (i >= count_src) {
              -
              728 dst[j] = 0;
              +
              657 }
              +
              658 }
              +
              659
              +
              670 template <class T1, class T2>
              +
              671 inline size_t strncpy(
              +
              672 _Out_writes_(count_dst) _Post_maybez_ T1* dst, _In_ size_t count_dst,
              +
              673 _In_reads_or_z_opt_(count_src) const T2* src, _In_ size_t count_src)
              +
              674 {
              +
              675 _Assume_(dst || !count_dst);
              +
              676 _Assume_(src || !count_src);
              +
              677 for (size_t i = 0; ; ++i)
              +
              678 {
              +
              679 if (i >= count_dst)
              +
              680 return i;
              +
              681 if (i >= count_src) {
              +
              682 dst[i] = 0;
              +
              683 return i;
              +
              684 }
              +
              685 if ((dst[i] = src[i]) == 0)
              +
              686 return i;
              +
              687 }
              +
              688 }
              +
              689
              +
              698 template <class T1, class T2>
              +
              699 inline size_t strcat(
              +
              700 _In_z_ _Out_writes_z_(_String_length_(dst) + _String_length_(src) + 1) T1* dst,
              +
              701 _In_z_ const T2* src)
              +
              702 {
              +
              703 _Assume_(dst && src);
              +
              704 for (size_t i = 0, j = stdex::strlen<T1>(dst); ; ++i, ++j) {
              +
              705 if ((dst[j] = src[i]) == 0)
              +
              706 return j;
              +
              707 }
              +
              708 }
              +
              709
              +
              719 template <class T1, class T2>
              +
              720 inline size_t strncat(
              +
              721 _Inout_z_ T1* dst,
              +
              722 _In_reads_or_z_opt_(count) const T2* src, _In_ size_t count)
              +
              723 {
              +
              724 _Assume_(dst && src || !count);
              +
              725 for (size_t i = 0, j = stdex::strlen<T1>(dst); ; ++i, ++j) {
              +
              726 if (i >= count)
              +
              727 return j;
              +
              728 if ((dst[j] = src[i]) == 0)
              729 return j;
              -
              730 }
              -
              731 if ((dst[j] = src[i]) == 0)
              -
              732 return j;
              -
              733 }
              -
              734 }
              -
              735
              -
              746 template <class T>
              -
              747 inline _Check_return_ _Ret_maybenull_z_ T* strdup(_In_opt_z_ const T* str)
              -
              748 {
              -
              749 if (!str) _Unlikely_
              -
              750 return nullptr;
              -
              751 size_t count = strlen(str) + 1;
              -
              752 T* dst = new T[count];
              -
              753 strncpy(dst, count, str, SIZE_MAX);
              -
              754 return dst;
              -
              755 }
              -
              756
              -
              768 template <class T>
              -
              769 inline _Ret_z_ T* strndup(
              -
              770 _In_reads_or_z_opt_(count) const T* str,
              -
              771 _In_ size_t count)
              -
              772 {
              -
              773 T* dst = new T[count];
              -
              774 strncpy(dst, count, str, SIZE_MAX);
              -
              775 return dst;
              -
              776 }
              -
              777
              -
              787 template <class T>
              -
              788 inline size_t crlf2nl(_Out_writes_z_(strlen(src)) T* dst, _In_z_ const T* src)
              -
              789 {
              -
              790 _Assume_(dst);
              -
              791 _Assume_(src);
              -
              792 size_t i, j;
              -
              793 for (i = j = 0; src[j];) {
              -
              794 if (src[j] != '\r' || src[j + 1] != '\n')
              -
              795 dst[i++] = src[j++];
              -
              796 else {
              -
              797 dst[i++] = '\n';
              -
              798 j += 2;
              -
              799 }
              -
              800 }
              -
              801 dst[i] = 0;
              -
              802 return i;
              +
              730 }
              +
              731 }
              +
              732
              +
              743 template <class T1, class T2>
              +
              744 inline size_t strncat(
              +
              745 _Out_writes_(count_dst) _Post_maybez_ T1* dst, _In_ size_t count_dst,
              +
              746 _In_reads_or_z_opt_(count_src) const T2* src, _In_ size_t count_src)
              +
              747 {
              +
              748 _Assume_(dst || !count_dst);
              +
              749 _Assume_(src || !count_src);
              +
              750 for (size_t i = 0, j = stdex::strnlen<T1>(dst, count_dst); ; ++i, ++j)
              +
              751 {
              +
              752 if (j >= count_dst)
              +
              753 return j;
              +
              754 if (i >= count_src) {
              +
              755 dst[j] = 0;
              +
              756 return j;
              +
              757 }
              +
              758 if ((dst[j] = src[i]) == 0)
              +
              759 return j;
              +
              760 }
              +
              761 }
              +
              762
              +
              773 template <class T>
              +
              774 inline _Check_return_ _Ret_maybenull_z_ T* strdup(_In_opt_z_ const T* str)
              +
              775 {
              +
              776 if (!str) _Unlikely_
              +
              777 return nullptr;
              +
              778 size_t count = strlen(str) + 1;
              +
              779 T* dst = new T[count];
              +
              780 strncpy(dst, count, str, SIZE_MAX);
              +
              781 return dst;
              +
              782 }
              +
              783
              +
              795 template <class T>
              +
              796 inline _Ret_z_ T* strndup(
              +
              797 _In_reads_or_z_opt_(count) const T* str,
              +
              798 _In_ size_t count)
              +
              799 {
              +
              800 T* dst = new T[count];
              +
              801 strncpy(dst, count, str, SIZE_MAX);
              +
              802 return dst;
              803 }
              804
              -
              811 template<class _Elem, class _Traits = std::char_traits<_Elem>, class _Ax = std::allocator<_Elem>>
              -
              812 inline void crlf2nl(_Inout_ std::basic_string<_Elem, _Traits, _Ax> &dst, _In_z_ const _Elem* src)
              -
              813 {
              -
              814 _Assume_(src);
              -
              815 _Assume_(src != dst.c_str());
              -
              816 dst.clear();
              -
              817 dst.reserve(strlen(src));
              -
              818 for (size_t j = 0; src[j];) {
              -
              819 if (src[j] != '\r' || src[j + 1] != '\n')
              -
              820 dst += src[j++];
              -
              821 else {
              -
              822 dst += '\n';
              -
              823 j += 2;
              -
              824 }
              -
              825 }
              -
              826 }
              -
              827
              -
              833 template<class _Elem, class _Traits = std::char_traits<_Elem>, class _Ax = std::allocator<_Elem>>
              -
              834 inline void crlf2nl(_Inout_ std::basic_string<_Elem, _Traits, _Ax>& str)
              -
              835 {
              -
              836 size_t i, j, n;
              -
              837 for (i = j = 0, n = str.size(); j < n;) {
              -
              838 if (str[j] != '\r' || str[j + 1] != '\n')
              -
              839 str[i++] = str[j++];
              -
              840 else {
              -
              841 str[i++] = '\n';
              -
              842 j += 2;
              -
              843 }
              -
              844 }
              -
              845 str.resize(i);
              -
              846 }
              -
              847
              -
              849 template <class T, class T_bin>
              -
              850 inline T_bin strtoint(
              -
              851 _In_reads_or_z_opt_(count) const T* str, _In_ size_t count,
              -
              852 _Out_opt_ size_t* end,
              -
              853 _In_ int radix,
              -
              854 _Out_ uint8_t& flags)
              -
              855 {
              -
              856 _Assume_(str || !count);
              -
              857 _Assume_(radix == 0 || 2 <= radix && radix <= 36);
              -
              858
              -
              859 size_t i = 0;
              -
              860 T_bin value = 0, digit,
              -
              861 max_ui = (T_bin)-1,
              -
              862 max_ui_pre1, max_ui_pre2;
              -
              863
              -
              864 flags = 0;
              -
              865
              -
              866 // Skip leading spaces.
              -
              867 for (;; ++i) {
              -
              868 if (i >= count || !str[i]) goto error;
              -
              869 if (!isspace(str[i])) break;
              -
              870 }
              -
              871
              -
              872 // Read the sign.
              -
              873 if (str[i] == '+') {
              -
              874 flags &= ~0x01;
              -
              875 ++i;
              -
              876 if (i >= count || !str[i]) goto error;
              -
              877 }
              -
              878 else if (str[i] == '-') {
              -
              879 flags |= 0x01;
              -
              880 ++i;
              -
              881 if (i >= count || !str[i]) goto error;
              -
              882 }
              -
              883
              -
              884 if (radix == 16) {
              -
              885 // On hexadecimal, allow leading 0x.
              -
              886 if (str[i] == '0' && i + 1 < count && (str[i + 1] == 'x' || str[i + 1] == 'X')) {
              -
              887 i += 2;
              -
              888 if (i >= count || !str[i]) goto error;
              -
              889 }
              -
              890 }
              -
              891 else if (!radix) {
              -
              892 // Autodetect radix.
              -
              893 if (str[i] == '0') {
              -
              894 ++i;
              -
              895 if (i >= count || !str[i]) goto error;
              -
              896 if (str[i] == 'x' || str[i] == 'X') {
              -
              897 radix = 16;
              -
              898 ++i;
              -
              899 if (i >= count || !str[i]) goto error;
              -
              900 }
              -
              901 else
              -
              902 radix = 8;
              -
              903 }
              -
              904 else
              -
              905 radix = 10;
              -
              906 }
              -
              907
              -
              908 // We have the radix.
              -
              909 max_ui_pre1 = max_ui / (T_bin)radix;
              -
              910 max_ui_pre2 = max_ui % (T_bin)radix;
              -
              911 for (;;) {
              -
              912 if ('0' <= str[i] && str[i] <= '9')
              -
              913 digit = (T_bin)str[i] - '0';
              -
              914 else if ('A' <= str[i] && str[i] <= 'Z')
              -
              915 digit = (T_bin)str[i] - 'A' + '\x0a';
              -
              916 else if ('a' <= str[i] && str[i] <= 'z')
              -
              917 digit = (T_bin)str[i] - 'a' + '\x0a';
              -
              918 else
              -
              919 goto error;
              -
              920 if (digit >= (T_bin)radix)
              -
              921 goto error;
              -
              922
              -
              923 if (value < max_ui_pre1 || // Multiplication nor addition will not overflow.
              -
              924 (value == max_ui_pre1 && digit <= max_ui_pre2)) // Small digits will not overflow.
              -
              925 value = value * (T_bin)radix + digit;
              -
              926 else {
              -
              927 // Overflow!
              -
              928 flags |= 0x02;
              -
              929 }
              -
              930
              -
              931 ++i;
              -
              932 if (i >= count || !str[i])
              -
              933 goto error;
              -
              934 }
              -
              935
              -
              936 error:
              -
              937 if (end) *end = i;
              -
              938 return value;
              -
              939 }
              -
              941
              -
              952 template <class T, class T_bin>
              -
              953 T_bin strtoint(
              -
              954 _In_reads_or_z_opt_(count) const T* str, _In_ size_t count,
              -
              955 _Out_opt_ size_t* end,
              -
              956 _In_ int radix)
              -
              957 {
              -
              958 uint8_t flags;
              -
              959 T_bin value;
              -
              960
              -
              961 switch (sizeof(T_bin)) {
              -
              962 case 1:
              -
              963 value = (T_bin)strtoint<T, uint8_t>(str, count, end, radix, flags);
              -
              964 if ((flags & 0x01) && (value & 0x80)) {
              -
              965 // Sign bit is 1 => overflow.
              -
              966 flags |= 0x02;
              -
              967 }
              -
              968 return (flags & 0x02) ?
              -
              969 (flags & 0x01) ? (T_bin)0x80 : (T_bin)0x7f :
              -
              970 (flags & 0x01) ? -value : value;
              -
              971
              -
              972 case 2:
              -
              973 value = (T_bin)strtoint<T, uint16_t>(str, count, end, radix, flags);
              -
              974 if ((flags & 0x01) && (value & 0x8000)) {
              -
              975 // Sign bit is 1 => overflow.
              -
              976 flags |= 0x02;
              -
              977 }
              -
              978 return (flags & 0x02) ?
              -
              979 (flags & 0x01) ? (T_bin)0x8000 : (T_bin)0x7fff :
              -
              980 (flags & 0x01) ? -value : value;
              -
              981
              -
              982 case 4:
              -
              983 value = (T_bin)strtoint<T, uint32_t>(str, count, end, radix, flags);
              -
              984 if ((flags & 0x01) && (value & 0x80000000)) {
              -
              985 // Sign bit is 1 => overflow.
              -
              986 flags |= 0x02;
              -
              987 }
              -
              988 return (flags & 0x02) ?
              -
              989 (flags & 0x01) ? (T_bin)0x80000000 : (T_bin)0x7fffffff :
              -
              990 (flags & 0x01) ? -value : value;
              -
              991
              -
              992 case 8:
              -
              993 value = (T_bin)strtoint<T, uint64_t>(str, count, end, radix, flags);
              -
              994 if ((flags & 0x01) && (value & 0x8000000000000000)) {
              -
              995 // Sign bit is 1 => overflow.
              -
              996 flags |= 0x02;
              -
              997 }
              -
              998 return (flags & 0x02) ?
              -
              999 (flags & 0x01) ? (T_bin)0x8000000000000000 : (T_bin)0x7fffffffffffffff :
              -
              1000 (flags & 0x01) ? -value : value;
              -
              1001
              -
              1002 default:
              -
              1003 throw std::invalid_argument("Unsupported bit length");
              -
              1004 }
              -
              1005 }
              -
              1006
              -
              1017 template <class T, class T_bin>
              -
              1018 inline T_bin strtouint(
              -
              1019 _In_reads_or_z_opt_(count) const T* str,
              -
              1020 _In_ size_t count,
              -
              1021 _Out_opt_ size_t* end,
              -
              1022 _In_ int radix)
              -
              1023 {
              -
              1024 uint8_t flags;
              -
              1025 T_bin value;
              -
              1026
              -
              1027 switch (sizeof(T_bin)) {
              -
              1028 case 1: value = (T_bin)strtoint<T, uint8_t>(str, count, end, radix, flags); break;
              -
              1029 case 2: value = (T_bin)strtoint<T, uint16_t>(str, count, end, radix, flags); break;
              -
              1030 case 4: value = (T_bin)strtoint<T, uint32_t>(str, count, end, radix, flags); break;
              -
              1031 case 8: value = (T_bin)strtoint<T, uint64_t>(str, count, end, radix, flags); break;
              -
              1032 default: throw std::invalid_argument("Unsupported bit length");
              -
              1033 }
              -
              1034
              -
              1035 return (flags & 0x02) ?
              -
              1036 (flags & 0x01) ? (T_bin)0 : (T_bin)-1 :
              -
              1037 (flags & 0x01) ? ~value : value;
              -
              1038 }
              -
              1039
              -
              1050 template <class T>
              -
              1051 inline int32_t strto32(
              -
              1052 _In_reads_or_z_opt_(count) const T* str, _In_ size_t count,
              -
              1053 _Out_opt_ size_t* end,
              -
              1054 _In_ int radix)
              -
              1055 {
              -
              1056 return strtoint<T, int32_t>(str, count, end, radix);
              -
              1057 }
              -
              1058
              -
              1069 template <class T>
              -
              1070 inline int64_t strto64(
              -
              1071 _In_reads_or_z_opt_(count) const T* str, _In_ size_t count,
              -
              1072 _Out_opt_ size_t* end,
              -
              1073 _In_ int radix)
              -
              1074 {
              -
              1075 return strtoint<T, int64_t>(str, count, end, radix);
              -
              1076 }
              -
              1077
              -
              1089 template <class T>
              -
              1090 inline intptr_t strtoi(
              -
              1091 _In_reads_or_z_opt_(count) const T* str, _In_ size_t count,
              -
              1092 _Out_opt_ size_t* end,
              -
              1093 _In_ int radix)
              -
              1094 {
              -
              1095#if defined(_WIN64) || defined(__LP64__)
              -
              1096 return (intptr_t)strto64(str, count, end, radix);
              -
              1097#else
              -
              1098 return (intptr_t)strto32(str, count, end, radix);
              -
              1099#endif
              -
              1100 }
              -
              1101
              -
              1112 template <class T>
              -
              1113 inline uint32_t strtou32(
              -
              1114 _In_reads_or_z_opt_(count) const T* str, _In_ size_t count,
              -
              1115 _Out_opt_ size_t* end,
              -
              1116 _In_ int radix)
              -
              1117 {
              -
              1118 return strtouint<T, uint32_t>(str, count, end, radix);
              -
              1119 }
              -
              1120
              -
              1131 template <class T>
              -
              1132 inline uint64_t strtou64(
              -
              1133 _In_reads_or_z_opt_(count) const T* str, _In_ size_t count,
              -
              1134 _Out_opt_ size_t* end,
              -
              1135 _In_ int radix)
              -
              1136 {
              -
              1137 return strtouint<T, uint64_t>(str, count, end, radix);
              -
              1138 }
              -
              1139
              -
              1151 template <class T>
              -
              1152 inline size_t strtoui(
              -
              1153 _In_reads_or_z_opt_(count) const T* str, _In_ size_t count,
              -
              1154 _Out_opt_ size_t* end,
              -
              1155 _In_ int radix)
              -
              1156 {
              -
              1157#if defined(_WIN64) || defined(__LP64__)
              -
              1158 return (size_t)strtou64(str, count, end, radix);
              -
              1159#else
              -
              1160 return (size_t)strtou32(str, count, end, radix);
              -
              1161#endif
              -
              1162 }
              -
              1163
              -
              1165 inline int vsnprintf(_Out_z_cap_(capacity) char *str, _In_ size_t capacity, _In_z_ _Printf_format_string_params_(2) const char *format, _In_opt_ locale_t locale, _In_ va_list arg)
              -
              1166 {
              -
              1167 int r;
              -
              1168#ifdef _WIN32
              -
              1169 // Don't use _vsnprintf_s(). It terminates the string even if we want to print to the edge of the buffer.
              -
              1170#pragma warning(suppress: 4996)
              -
              1171 r = _vsnprintf_l(str, capacity, format, locale, arg);
              -
              1172#else
              -
              1173 r = ::vsnprintf(str, capacity, format, arg);
              -
              1174#endif
              -
              1175 if (r == -1 && strnlen(str, capacity) == capacity) {
              -
              1176 // Buffer overrun. Estimate buffer size for the next iteration.
              -
              1177 capacity += std::max<size_t>(capacity / 8, 0x80);
              -
              1178 if (capacity > INT_MAX)
              -
              1179 throw std::invalid_argument("string too big");
              -
              1180 return (int)capacity;
              -
              1181 }
              -
              1182 return r;
              -
              1183 }
              -
              1184
              -
              1185 inline int vsnprintf(_Out_z_cap_(capacity) wchar_t *str, _In_ size_t capacity, _In_z_ _Printf_format_string_params_(2) const wchar_t *format, _In_opt_ locale_t locale, _In_ va_list arg)
              -
              1186 {
              -
              1187 int r;
              -
              1188#ifdef _WIN32
              -
              1189 // Don't use _vsnwprintf_s(). It terminates the string even if we want to print to the edge of the buffer.
              -
              1190#pragma warning(suppress: 4996)
              -
              1191 r = _vsnwprintf_l(str, capacity, format, locale, arg);
              -
              1192#else
              -
              1193 r = vswprintf(str, capacity, format, arg);
              -
              1194#endif
              -
              1195 if (r == -1 && strnlen(str, capacity) == capacity) {
              -
              1196 // Buffer overrun. Estimate buffer size for the next iteration.
              -
              1197 capacity += std::max<size_t>(capacity / 8, 0x80);
              -
              1198 if (capacity > INT_MAX)
              -
              1199 throw std::invalid_argument("string too big");
              -
              1200 return (int)capacity;
              -
              1201 }
              -
              1202 return r;
              -
              1203 }
              -
              1205
              -
              1214 template<class _Elem, class _Traits, class _Ax>
              -
              1215 inline void vappendf(_Inout_ std::basic_string<_Elem, _Traits, _Ax> &str, _In_z_ _Printf_format_string_params_(2) const _Elem *format, _In_opt_ locale_t locale, _In_ va_list arg)
              -
              1216 {
              -
              1217 _Elem buf[1024/sizeof(_Elem)];
              -
              1218
              -
              1219 // Try with stack buffer first.
              -
              1220 int count = vsnprintf(buf, _countof(buf) - 1, format, locale, arg);
              -
              1221 if (count >= 0) {
              -
              1222 // Copy from stack.
              -
              1223 str.append(buf, count);
              -
              1224 } else {
              -
              1225 for (size_t capacity = 2*1024/sizeof(_Elem);; capacity *= 2) {
              -
              1226 // Allocate on heap and retry.
              -
              1227 auto buf_dyn = std::make_unique<_Elem[]>(capacity);
              -
              1228 count = vsnprintf(buf_dyn.get(), capacity - 1, format, locale, arg);
              -
              1229 if (count >= 0) {
              -
              1230 str.append(buf_dyn.get(), count);
              -
              1231 break;
              -
              1232 }
              -
              1233 }
              -
              1234 }
              -
              1235 }
              -
              1236
              -
              1244 template<class _Elem, class _Traits, class _Ax>
              -
              1245 inline void appendf(_Inout_ std::basic_string<_Elem, _Traits, _Ax> &str, _In_z_ _Printf_format_string_params_(2) const _Elem *format, _In_opt_ locale_t locale, ...)
              -
              1246 {
              -
              1247 va_list arg;
              -
              1248 va_start(arg, locale);
              -
              1249 vappendf(str, format, locale, arg);
              -
              1250 va_end(arg);
              -
              1251 }
              -
              1252
              -
              1261 template<class _Elem, class _Traits, class _Ax>
              -
              1262 inline void vsprintf(_Inout_ std::basic_string<_Elem, _Traits, _Ax> &str, _In_z_ _Printf_format_string_params_(2) const _Elem *format, _In_opt_ locale_t locale, _In_ va_list arg)
              -
              1263 {
              -
              1264 str.clear();
              -
              1265 vappendf(str, format, locale, arg);
              -
              1266 }
              -
              1267
              +
              814 template <class T>
              +
              815 inline size_t crlf2nl(_Out_writes_z_(strlen(src)) T* dst, _In_z_ const T* src)
              +
              816 {
              +
              817 _Assume_(dst);
              +
              818 _Assume_(src);
              +
              819 size_t i, j;
              +
              820 for (i = j = 0; src[j];) {
              +
              821 if (src[j] != '\r' || src[j + 1] != '\n')
              +
              822 dst[i++] = src[j++];
              +
              823 else {
              +
              824 dst[i++] = '\n';
              +
              825 j += 2;
              +
              826 }
              +
              827 }
              +
              828 dst[i] = 0;
              +
              829 return i;
              +
              830 }
              +
              831
              +
              838 template<class _Elem, class _Traits = std::char_traits<_Elem>, class _Ax = std::allocator<_Elem>>
              +
              839 inline void crlf2nl(_Inout_ std::basic_string<_Elem, _Traits, _Ax> &dst, _In_z_ const _Elem* src)
              +
              840 {
              +
              841 _Assume_(src);
              +
              842 _Assume_(src != dst.c_str());
              +
              843 dst.clear();
              +
              844 dst.reserve(strlen(src));
              +
              845 for (size_t j = 0; src[j];) {
              +
              846 if (src[j] != '\r' || src[j + 1] != '\n')
              +
              847 dst += src[j++];
              +
              848 else {
              +
              849 dst += '\n';
              +
              850 j += 2;
              +
              851 }
              +
              852 }
              +
              853 }
              +
              854
              +
              860 template<class _Elem, class _Traits = std::char_traits<_Elem>, class _Ax = std::allocator<_Elem>>
              +
              861 inline void crlf2nl(_Inout_ std::basic_string<_Elem, _Traits, _Ax>& str)
              +
              862 {
              +
              863 size_t i, j, n;
              +
              864 for (i = j = 0, n = str.size(); j < n;) {
              +
              865 if (str[j] != '\r' || str[j + 1] != '\n')
              +
              866 str[i++] = str[j++];
              +
              867 else {
              +
              868 str[i++] = '\n';
              +
              869 j += 2;
              +
              870 }
              +
              871 }
              +
              872 str.resize(i);
              +
              873 }
              +
              874
              +
              876 template <class T, class T_bin>
              +
              877 inline T_bin strtoint(
              +
              878 _In_reads_or_z_opt_(count) const T* str, _In_ size_t count,
              +
              879 _Out_opt_ size_t* end,
              +
              880 _In_ int radix,
              +
              881 _Out_ uint8_t& flags)
              +
              882 {
              +
              883 _Assume_(str || !count);
              +
              884 _Assume_(radix == 0 || 2 <= radix && radix <= 36);
              +
              885
              +
              886 size_t i = 0;
              +
              887 T_bin value = 0, digit,
              +
              888 max_ui = (T_bin)-1,
              +
              889 max_ui_pre1, max_ui_pre2;
              +
              890
              +
              891 flags = 0;
              +
              892
              +
              893 // Skip leading spaces.
              +
              894 for (;; ++i) {
              +
              895 if (i >= count || !str[i]) goto error;
              +
              896 if (!isspace(str[i])) break;
              +
              897 }
              +
              898
              +
              899 // Read the sign.
              +
              900 if (str[i] == '+') {
              +
              901 flags &= ~0x01;
              +
              902 ++i;
              +
              903 if (i >= count || !str[i]) goto error;
              +
              904 }
              +
              905 else if (str[i] == '-') {
              +
              906 flags |= 0x01;
              +
              907 ++i;
              +
              908 if (i >= count || !str[i]) goto error;
              +
              909 }
              +
              910
              +
              911 if (radix == 16) {
              +
              912 // On hexadecimal, allow leading 0x.
              +
              913 if (str[i] == '0' && i + 1 < count && (str[i + 1] == 'x' || str[i + 1] == 'X')) {
              +
              914 i += 2;
              +
              915 if (i >= count || !str[i]) goto error;
              +
              916 }
              +
              917 }
              +
              918 else if (!radix) {
              +
              919 // Autodetect radix.
              +
              920 if (str[i] == '0') {
              +
              921 ++i;
              +
              922 if (i >= count || !str[i]) goto error;
              +
              923 if (str[i] == 'x' || str[i] == 'X') {
              +
              924 radix = 16;
              +
              925 ++i;
              +
              926 if (i >= count || !str[i]) goto error;
              +
              927 }
              +
              928 else
              +
              929 radix = 8;
              +
              930 }
              +
              931 else
              +
              932 radix = 10;
              +
              933 }
              +
              934
              +
              935 // We have the radix.
              +
              936 max_ui_pre1 = max_ui / (T_bin)radix;
              +
              937 max_ui_pre2 = max_ui % (T_bin)radix;
              +
              938 for (;;) {
              +
              939 if ('0' <= str[i] && str[i] <= '9')
              +
              940 digit = (T_bin)str[i] - '0';
              +
              941 else if ('A' <= str[i] && str[i] <= 'Z')
              +
              942 digit = (T_bin)str[i] - 'A' + '\x0a';
              +
              943 else if ('a' <= str[i] && str[i] <= 'z')
              +
              944 digit = (T_bin)str[i] - 'a' + '\x0a';
              +
              945 else
              +
              946 goto error;
              +
              947 if (digit >= (T_bin)radix)
              +
              948 goto error;
              +
              949
              +
              950 if (value < max_ui_pre1 || // Multiplication nor addition will not overflow.
              +
              951 (value == max_ui_pre1 && digit <= max_ui_pre2)) // Small digits will not overflow.
              +
              952 value = value * (T_bin)radix + digit;
              +
              953 else {
              +
              954 // Overflow!
              +
              955 flags |= 0x02;
              +
              956 }
              +
              957
              +
              958 ++i;
              +
              959 if (i >= count || !str[i])
              +
              960 goto error;
              +
              961 }
              +
              962
              +
              963 error:
              +
              964 if (end) *end = i;
              +
              965 return value;
              +
              966 }
              +
              968
              +
              979 template <class T, class T_bin>
              +
              980 T_bin strtoint(
              +
              981 _In_reads_or_z_opt_(count) const T* str, _In_ size_t count,
              +
              982 _Out_opt_ size_t* end,
              +
              983 _In_ int radix)
              +
              984 {
              +
              985 uint8_t flags;
              +
              986 T_bin value;
              +
              987
              +
              988 switch (sizeof(T_bin)) {
              +
              989 case 1:
              +
              990 value = (T_bin)strtoint<T, uint8_t>(str, count, end, radix, flags);
              +
              991 if ((flags & 0x01) && (value & 0x80)) {
              +
              992 // Sign bit is 1 => overflow.
              +
              993 flags |= 0x02;
              +
              994 }
              +
              995 return (flags & 0x02) ?
              +
              996 (flags & 0x01) ? (T_bin)0x80 : (T_bin)0x7f :
              +
              997 (flags & 0x01) ? -value : value;
              +
              998
              +
              999 case 2:
              +
              1000 value = (T_bin)strtoint<T, uint16_t>(str, count, end, radix, flags);
              +
              1001 if ((flags & 0x01) && (value & 0x8000)) {
              +
              1002 // Sign bit is 1 => overflow.
              +
              1003 flags |= 0x02;
              +
              1004 }
              +
              1005 return (flags & 0x02) ?
              +
              1006 (flags & 0x01) ? (T_bin)0x8000 : (T_bin)0x7fff :
              +
              1007 (flags & 0x01) ? -value : value;
              +
              1008
              +
              1009 case 4:
              +
              1010 value = (T_bin)strtoint<T, uint32_t>(str, count, end, radix, flags);
              +
              1011 if ((flags & 0x01) && (value & 0x80000000)) {
              +
              1012 // Sign bit is 1 => overflow.
              +
              1013 flags |= 0x02;
              +
              1014 }
              +
              1015 return (flags & 0x02) ?
              +
              1016 (flags & 0x01) ? (T_bin)0x80000000 : (T_bin)0x7fffffff :
              +
              1017 (flags & 0x01) ? -value : value;
              +
              1018
              +
              1019 case 8:
              +
              1020 value = (T_bin)strtoint<T, uint64_t>(str, count, end, radix, flags);
              +
              1021 if ((flags & 0x01) && (value & 0x8000000000000000)) {
              +
              1022 // Sign bit is 1 => overflow.
              +
              1023 flags |= 0x02;
              +
              1024 }
              +
              1025 return (flags & 0x02) ?
              +
              1026 (flags & 0x01) ? (T_bin)0x8000000000000000 : (T_bin)0x7fffffffffffffff :
              +
              1027 (flags & 0x01) ? -value : value;
              +
              1028
              +
              1029 default:
              +
              1030 throw std::invalid_argument("Unsupported bit length");
              +
              1031 }
              +
              1032 }
              +
              1033
              +
              1044 template <class T, class T_bin>
              +
              1045 inline T_bin strtouint(
              +
              1046 _In_reads_or_z_opt_(count) const T* str,
              +
              1047 _In_ size_t count,
              +
              1048 _Out_opt_ size_t* end,
              +
              1049 _In_ int radix)
              +
              1050 {
              +
              1051 uint8_t flags;
              +
              1052 T_bin value;
              +
              1053
              +
              1054 switch (sizeof(T_bin)) {
              +
              1055 case 1: value = (T_bin)strtoint<T, uint8_t>(str, count, end, radix, flags); break;
              +
              1056 case 2: value = (T_bin)strtoint<T, uint16_t>(str, count, end, radix, flags); break;
              +
              1057 case 4: value = (T_bin)strtoint<T, uint32_t>(str, count, end, radix, flags); break;
              +
              1058 case 8: value = (T_bin)strtoint<T, uint64_t>(str, count, end, radix, flags); break;
              +
              1059 default: throw std::invalid_argument("Unsupported bit length");
              +
              1060 }
              +
              1061
              +
              1062 return (flags & 0x02) ?
              +
              1063 (flags & 0x01) ? (T_bin)0 : (T_bin)-1 :
              +
              1064 (flags & 0x01) ? ~value : value;
              +
              1065 }
              +
              1066
              +
              1077 template <class T>
              +
              1078 inline int32_t strto32(
              +
              1079 _In_reads_or_z_opt_(count) const T* str, _In_ size_t count,
              +
              1080 _Out_opt_ size_t* end,
              +
              1081 _In_ int radix)
              +
              1082 {
              +
              1083 return strtoint<T, int32_t>(str, count, end, radix);
              +
              1084 }
              +
              1085
              +
              1096 template <class T>
              +
              1097 inline int64_t strto64(
              +
              1098 _In_reads_or_z_opt_(count) const T* str, _In_ size_t count,
              +
              1099 _Out_opt_ size_t* end,
              +
              1100 _In_ int radix)
              +
              1101 {
              +
              1102 return strtoint<T, int64_t>(str, count, end, radix);
              +
              1103 }
              +
              1104
              +
              1116 template <class T>
              +
              1117 inline intptr_t strtoi(
              +
              1118 _In_reads_or_z_opt_(count) const T* str, _In_ size_t count,
              +
              1119 _Out_opt_ size_t* end,
              +
              1120 _In_ int radix)
              +
              1121 {
              +
              1122#if defined(_WIN64) || defined(__LP64__)
              +
              1123 return (intptr_t)strto64(str, count, end, radix);
              +
              1124#else
              +
              1125 return (intptr_t)strto32(str, count, end, radix);
              +
              1126#endif
              +
              1127 }
              +
              1128
              +
              1139 template <class T>
              +
              1140 inline uint32_t strtou32(
              +
              1141 _In_reads_or_z_opt_(count) const T* str, _In_ size_t count,
              +
              1142 _Out_opt_ size_t* end,
              +
              1143 _In_ int radix)
              +
              1144 {
              +
              1145 return strtouint<T, uint32_t>(str, count, end, radix);
              +
              1146 }
              +
              1147
              +
              1158 template <class T>
              +
              1159 inline uint64_t strtou64(
              +
              1160 _In_reads_or_z_opt_(count) const T* str, _In_ size_t count,
              +
              1161 _Out_opt_ size_t* end,
              +
              1162 _In_ int radix)
              +
              1163 {
              +
              1164 return strtouint<T, uint64_t>(str, count, end, radix);
              +
              1165 }
              +
              1166
              +
              1178 template <class T>
              +
              1179 inline size_t strtoui(
              +
              1180 _In_reads_or_z_opt_(count) const T* str, _In_ size_t count,
              +
              1181 _Out_opt_ size_t* end,
              +
              1182 _In_ int radix)
              +
              1183 {
              +
              1184#if defined(_WIN64) || defined(__LP64__)
              +
              1185 return (size_t)strtou64(str, count, end, radix);
              +
              1186#else
              +
              1187 return (size_t)strtou32(str, count, end, radix);
              +
              1188#endif
              +
              1189 }
              +
              1190
              +
              1192 inline int vsnprintf(_Out_z_cap_(capacity) char *str, _In_ size_t capacity, _In_z_ _Printf_format_string_params_(2) const char *format, _In_opt_ locale_t locale, _In_ va_list arg)
              +
              1193 {
              +
              1194 int r;
              +
              1195#ifdef _WIN32
              +
              1196 // Don't use _vsnprintf_s(). It terminates the string even if we want to print to the edge of the buffer.
              +
              1197#pragma warning(suppress: 4996)
              +
              1198 r = _vsnprintf_l(str, capacity, format, locale, arg);
              +
              1199#else
              +
              1200 r = ::vsnprintf(str, capacity, format, arg);
              +
              1201#endif
              +
              1202 if (r == -1 && strnlen(str, capacity) == capacity) {
              +
              1203 // Buffer overrun. Estimate buffer size for the next iteration.
              +
              1204 capacity += std::max<size_t>(capacity / 8, 0x80);
              +
              1205 if (capacity > INT_MAX)
              +
              1206 throw std::invalid_argument("string too big");
              +
              1207 return (int)capacity;
              +
              1208 }
              +
              1209 return r;
              +
              1210 }
              +
              1211
              +
              1212 inline int vsnprintf(_Out_z_cap_(capacity) wchar_t *str, _In_ size_t capacity, _In_z_ _Printf_format_string_params_(2) const wchar_t *format, _In_opt_ locale_t locale, _In_ va_list arg)
              +
              1213 {
              +
              1214 int r;
              +
              1215#ifdef _WIN32
              +
              1216 // Don't use _vsnwprintf_s(). It terminates the string even if we want to print to the edge of the buffer.
              +
              1217#pragma warning(suppress: 4996)
              +
              1218 r = _vsnwprintf_l(str, capacity, format, locale, arg);
              +
              1219#else
              +
              1220 r = vswprintf(str, capacity, format, arg);
              +
              1221#endif
              +
              1222 if (r == -1 && strnlen(str, capacity) == capacity) {
              +
              1223 // Buffer overrun. Estimate buffer size for the next iteration.
              +
              1224 capacity += std::max<size_t>(capacity / 8, 0x80);
              +
              1225 if (capacity > INT_MAX)
              +
              1226 throw std::invalid_argument("string too big");
              +
              1227 return (int)capacity;
              +
              1228 }
              +
              1229 return r;
              +
              1230 }
              +
              1232
              +
              1243 template<class _Elem, class _Traits, class _Ax>
              +
              1244 inline size_t vappendf(_Inout_ std::basic_string<_Elem, _Traits, _Ax> &str, _In_z_ _Printf_format_string_params_(2) const _Elem *format, _In_opt_ locale_t locale, _In_ va_list arg)
              +
              1245 {
              +
              1246 _Elem buf[1024/sizeof(_Elem)];
              +
              1247
              +
              1248 // Try with stack buffer first.
              +
              1249 int count = vsnprintf(buf, _countof(buf) - 1, format, locale, arg);
              +
              1250 if (count >= 0) {
              +
              1251 // Copy from stack.
              +
              1252 str.append(buf, count);
              +
              1253 return count;
              +
              1254 }
              +
              1255 for (size_t capacity = 2*1024/sizeof(_Elem);; capacity *= 2) {
              +
              1256 // Allocate on heap and retry.
              +
              1257 auto buf_dyn = std::make_unique<_Elem[]>(capacity);
              +
              1258 count = vsnprintf(buf_dyn.get(), capacity - 1, format, locale, arg);
              +
              1259 if (count >= 0) {
              +
              1260 str.append(buf_dyn.get(), count);
              +
              1261 return count;
              +
              1262 }
              +
              1263 }
              +
              1264 }
              +
              1265
              1275 template<class _Elem, class _Traits, class _Ax>
              -
              1276 inline void sprintf(_Inout_ std::basic_string<_Elem, _Traits, _Ax> &str, _In_z_ _Printf_format_string_params_(2) const _Elem *format, _In_opt_ locale_t locale, ...)
              +
              1276 inline size_t appendf(_Inout_ std::basic_string<_Elem, _Traits, _Ax> &str, _In_z_ _Printf_format_string_params_(2) const _Elem *format, _In_opt_ locale_t locale, ...)
              1277 {
              1278 va_list arg;
              1279 va_start(arg, locale);
              -
              1280 vsprintf(str, format, locale, arg);
              +
              1280 size_t n = vappendf(str, format, locale, arg);
              1281 va_end(arg);
              -
              1282 }
              -
              1283
              -
              1293 template<class _Elem, class _Traits = std::char_traits<_Elem>, class _Ax = std::allocator<_Elem>>
              -
              1294 inline std::basic_string<_Elem, _Traits, _Ax> vsprintf(_In_z_ _Printf_format_string_params_(2) const _Elem *format, _In_opt_ locale_t locale, _In_ va_list arg)
              +
              1282 return n;
              +
              1283 }
              +
              1284
              +
              1293 template<class _Elem, class _Traits, class _Ax>
              +
              1294 inline void vsprintf(_Inout_ std::basic_string<_Elem, _Traits, _Ax> &str, _In_z_ _Printf_format_string_params_(2) const _Elem *format, _In_opt_ locale_t locale, _In_ va_list arg)
              1295 {
              -
              1296 std::basic_string<_Elem, _Traits, _Ax> str;
              +
              1296 str.clear();
              1297 vappendf(str, format, locale, arg);
              -
              1298 return str;
              -
              1299 }
              -
              1300
              -
              1309 template<class _Elem, class _Traits = std::char_traits<_Elem>, class _Ax = std::allocator<_Elem>>
              -
              1310 inline std::basic_string<_Elem, _Traits, _Ax> sprintf(_In_z_ _Printf_format_string_params_(2) const _Elem *format, _In_opt_ locale_t locale, ...)
              -
              1311 {
              -
              1312 va_list arg;
              -
              1313 va_start(arg, locale);
              -
              1314 auto str = vsprintf(format, locale, arg);
              -
              1315 va_end(arg);
              -
              1316 return str;
              -
              1317 }
              -
              1318
              -
              1320 inline size_t strftime(_Out_z_cap_(capacity) char *str, _In_ size_t capacity, _In_z_ _Printf_format_string_ const char *format, _In_ const struct tm* time, _In_opt_ locale_t locale)
              -
              1321 {
              -
              1322#ifdef _WIN32
              -
              1323 return _strftime_l(str, capacity, format, time, locale);
              -
              1324#else
              -
              1325 return strftime_l(str, capacity, format, time, locale);
              -
              1326#endif
              -
              1327 }
              -
              1328
              -
              1329 inline size_t strftime(_Out_z_cap_(capacity) wchar_t *str, _In_ size_t capacity, _In_z_ _Printf_format_string_ const wchar_t *format, _In_ const struct tm* time, _In_opt_ locale_t locale)
              -
              1330 {
              -
              1331#ifdef _WIN32
              -
              1332 return _wcsftime_l(str, capacity, format, time, locale);
              -
              1333#else
              -
              1334 return wcsftime_l(str, capacity, format, time, locale);
              -
              1335#endif
              -
              1336 }
              -
              1338
              -
              1347 template<class _Elem, class _Traits, class _Ax>
              -
              1348 inline void strcatftime(_Inout_ std::basic_string<_Elem, _Traits, _Ax> &str, _In_z_ _Printf_format_string_ const _Elem *format, _In_ const struct tm* time, _In_opt_ locale_t locale)
              -
              1349 {
              -
              1350 _Elem buf[1024/sizeof(_Elem)];
              -
              1351
              -
              1352 // Try with stack buffer first.
              -
              1353 size_t count = strftime(buf, _countof(buf), format, time, locale);
              -
              1354 if (count) {
              -
              1355 // Copy from stack.
              -
              1356 str.append(buf, count);
              -
              1357 } else {
              -
              1358 for (size_t capacity = 2*1024/sizeof(_Elem);; capacity *= 2) {
              -
              1359 // Allocate on heap and retry.
              -
              1360 auto buf_dyn = std::make_unique<_Elem[]>(capacity);
              -
              1361 count = strftime(buf_dyn.get(), capacity, format, time, locale);
              -
              1362 if (count) {
              -
              1363 str.append(buf_dyn.get(), count);
              -
              1364 break;
              -
              1365 }
              -
              1366 }
              -
              1367 }
              +
              1298 }
              +
              1299
              +
              1307 template<class _Elem, class _Traits, class _Ax>
              +
              1308 inline void sprintf(_Inout_ std::basic_string<_Elem, _Traits, _Ax> &str, _In_z_ _Printf_format_string_params_(2) const _Elem *format, _In_opt_ locale_t locale, ...)
              +
              1309 {
              +
              1310 va_list arg;
              +
              1311 va_start(arg, locale);
              +
              1312 vsprintf(str, format, locale, arg);
              +
              1313 va_end(arg);
              +
              1314 }
              +
              1315
              +
              1325 template<class _Elem, class _Traits = std::char_traits<_Elem>, class _Ax = std::allocator<_Elem>>
              +
              1326 inline std::basic_string<_Elem, _Traits, _Ax> vsprintf(_In_z_ _Printf_format_string_params_(2) const _Elem *format, _In_opt_ locale_t locale, _In_ va_list arg)
              +
              1327 {
              +
              1328 std::basic_string<_Elem, _Traits, _Ax> str;
              +
              1329 vappendf(str, format, locale, arg);
              +
              1330 return str;
              +
              1331 }
              +
              1332
              +
              1341 template<class _Elem, class _Traits = std::char_traits<_Elem>, class _Ax = std::allocator<_Elem>>
              +
              1342 inline std::basic_string<_Elem, _Traits, _Ax> sprintf(_In_z_ _Printf_format_string_params_(2) const _Elem *format, _In_opt_ locale_t locale, ...)
              +
              1343 {
              +
              1344 va_list arg;
              +
              1345 va_start(arg, locale);
              +
              1346 auto str = vsprintf(format, locale, arg);
              +
              1347 va_end(arg);
              +
              1348 return str;
              +
              1349 }
              +
              1350
              +
              1352 inline size_t strftime(_Out_z_cap_(capacity) char *str, _In_ size_t capacity, _In_z_ _Printf_format_string_ const char *format, _In_ const struct tm* time, _In_opt_ locale_t locale)
              +
              1353 {
              +
              1354#ifdef _WIN32
              +
              1355 return _strftime_l(str, capacity, format, time, locale);
              +
              1356#else
              +
              1357 return strftime_l(str, capacity, format, time, locale);
              +
              1358#endif
              +
              1359 }
              +
              1360
              +
              1361 inline size_t strftime(_Out_z_cap_(capacity) wchar_t *str, _In_ size_t capacity, _In_z_ _Printf_format_string_ const wchar_t *format, _In_ const struct tm* time, _In_opt_ locale_t locale)
              +
              1362 {
              +
              1363#ifdef _WIN32
              +
              1364 return _wcsftime_l(str, capacity, format, time, locale);
              +
              1365#else
              +
              1366 return wcsftime_l(str, capacity, format, time, locale);
              +
              1367#endif
              1368 }
              -
              1369
              -
              1378 template<class _Elem, class _Traits, class _Ax>
              -
              1379 inline void strftime(_Inout_ std::basic_string<_Elem, _Traits, _Ax> &str, _In_z_ _Printf_format_string_ const _Elem *format, _In_ const struct tm* time, _In_opt_ locale_t locale)
              -
              1380 {
              -
              1381 str.clear();
              -
              1382 strcatftime(str, format, time, locale);
              -
              1383 }
              -
              1384
              -
              1395 template<class _Elem, class _Traits = std::char_traits<_Elem>, class _Ax = std::allocator<_Elem>>
              -
              1396 inline std::basic_string<_Elem, _Traits, _Ax> strftime(_In_z_ _Printf_format_string_ const _Elem *format, _In_ const struct tm* time, _In_opt_ locale_t locale)
              -
              1397 {
              -
              1398 std::basic_string<_Elem, _Traits, _Ax> str;
              -
              1399 strcatftime(str, format, time, locale);
              -
              1400 return str;
              -
              1401 }
              -
              1402
              -
              1410 template<class T>
              -
              1411 inline void strlwr(_Inout_z_ T* str, _In_ const std::locale& locale)
              +
              1370
              +
              1379 template<class _Elem, class _Traits, class _Ax>
              +
              1380 inline void strcatftime(_Inout_ std::basic_string<_Elem, _Traits, _Ax> &str, _In_z_ _Printf_format_string_ const _Elem *format, _In_ const struct tm* time, _In_opt_ locale_t locale)
              +
              1381 {
              +
              1382 _Elem buf[1024/sizeof(_Elem)];
              +
              1383
              +
              1384 // Try with stack buffer first.
              +
              1385 size_t count = strftime(buf, _countof(buf), format, time, locale);
              +
              1386 if (count) {
              +
              1387 // Copy from stack.
              +
              1388 str.append(buf, count);
              +
              1389 } else {
              +
              1390 for (size_t capacity = 2*1024/sizeof(_Elem);; capacity *= 2) {
              +
              1391 // Allocate on heap and retry.
              +
              1392 auto buf_dyn = std::make_unique<_Elem[]>(capacity);
              +
              1393 count = strftime(buf_dyn.get(), capacity, format, time, locale);
              +
              1394 if (count) {
              +
              1395 str.append(buf_dyn.get(), count);
              +
              1396 break;
              +
              1397 }
              +
              1398 }
              +
              1399 }
              +
              1400 }
              +
              1401
              +
              1410 template<class _Elem, class _Traits, class _Ax>
              +
              1411 inline void strftime(_Inout_ std::basic_string<_Elem, _Traits, _Ax> &str, _In_z_ _Printf_format_string_ const _Elem *format, _In_ const struct tm* time, _In_opt_ locale_t locale)
              1412 {
              -
              1413 _Assume_(str);
              -
              1414 const auto& ctype = std::use_facet<std::ctype<T>>(locale);
              -
              1415 for (size_t i = 0; str[i]; ++i)
              -
              1416 str[i] = ctype.tolower(str[i]);
              -
              1417 }
              -
              1418
              -
              1427 template<class T>
              -
              1428 inline void strlwr(_Inout_updates_z_(count) T* str, _In_ size_t count, _In_ const std::locale& locale)
              +
              1413 str.clear();
              +
              1414 strcatftime(str, format, time, locale);
              +
              1415 }
              +
              1416
              +
              1427 template<class _Elem, class _Traits = std::char_traits<_Elem>, class _Ax = std::allocator<_Elem>>
              +
              1428 inline std::basic_string<_Elem, _Traits, _Ax> strftime(_In_z_ _Printf_format_string_ const _Elem *format, _In_ const struct tm* time, _In_opt_ locale_t locale)
              1429 {
              -
              1430 _Assume_(str || !count);
              -
              1431 const auto& ctype = std::use_facet<std::ctype<T>>(locale);
              -
              1432 for (size_t i = 0; i < count && str[i]; ++i)
              -
              1433 str[i] = ctype.tolower(str[i]);
              -
              1434 }
              -
              1435
              -
              1443 template<class T>
              -
              1444 inline void strupr(_Inout_z_ T* str, _In_ const std::locale& locale)
              -
              1445 {
              -
              1446 _Assume_(str);
              -
              1447 const auto& ctype = std::use_facet<std::ctype<T>>(locale);
              -
              1448 for (size_t i = 0; str[i]; ++i)
              -
              1449 str[i] = ctype.toupper(str[i]);
              -
              1450 }
              -
              1451
              -
              1460 template<class T>
              -
              1461 inline void strupr(_Inout_updates_z_(count) T* str, _In_ size_t count, _In_ const std::locale& locale)
              -
              1462 {
              -
              1463 _Assume_(str || !count);
              -
              1464 const auto& ctype = std::use_facet<std::ctype<T>>(locale);
              -
              1465 for (size_t i = 0; i < count && str[i]; ++i)
              -
              1466 str[i] = ctype.toupper(str[i]);
              -
              1467 }
              -
              1468
              -
              1476 template<class _Elem, class _Traits = std::char_traits<_Elem>, class _Ax = std::allocator<_Elem>>
              -
              1477 inline void strupr(_Inout_ std::basic_string<_Elem, _Traits, _Ax>& str, _In_ const std::locale& locale)
              -
              1478 {
              -
              1479 const auto& ctype = std::use_facet<std::ctype<_Elem>>(locale);
              -
              1480 for (size_t i = 0; i < str.size(); ++i)
              +
              1430 std::basic_string<_Elem, _Traits, _Ax> str;
              +
              1431 strcatftime(str, format, time, locale);
              +
              1432 return str;
              +
              1433 }
              +
              1434
              +
              1442 template<class T>
              +
              1443 inline void strlwr(_Inout_z_ T* str, _In_ const std::locale& locale)
              +
              1444 {
              +
              1445 _Assume_(str);
              +
              1446 const auto& ctype = std::use_facet<std::ctype<T>>(locale);
              +
              1447 for (size_t i = 0; str[i]; ++i)
              +
              1448 str[i] = ctype.tolower(str[i]);
              +
              1449 }
              +
              1450
              +
              1459 template<class T>
              +
              1460 inline void strlwr(_Inout_updates_z_(count) T* str, _In_ size_t count, _In_ const std::locale& locale)
              +
              1461 {
              +
              1462 _Assume_(str || !count);
              +
              1463 const auto& ctype = std::use_facet<std::ctype<T>>(locale);
              +
              1464 for (size_t i = 0; i < count && str[i]; ++i)
              +
              1465 str[i] = ctype.tolower(str[i]);
              +
              1466 }
              +
              1467
              +
              1475 template<class T>
              +
              1476 inline void strupr(_Inout_z_ T* str, _In_ const std::locale& locale)
              +
              1477 {
              +
              1478 _Assume_(str);
              +
              1479 const auto& ctype = std::use_facet<std::ctype<T>>(locale);
              +
              1480 for (size_t i = 0; str[i]; ++i)
              1481 str[i] = ctype.toupper(str[i]);
              1482 }
              1483
              1492 template<class T>
              -
              1493 inline size_t ltrim(
              -
              1494 _Inout_z_count_(count) T* str, _In_ size_t count,
              -
              1495 _In_ const std::locale& locale)
              -
              1496 {
              -
              1497 const auto& ctype = std::use_facet<std::ctype<T>>(locale);
              -
              1498 for (size_t i = 0;; ++i) {
              -
              1499 if (i >= count) {
              -
              1500 if (count) str[0] = 0;
              -
              1501 return 0;
              -
              1502 }
              -
              1503 if (!str[i]) {
              -
              1504 str[0] = 0;
              -
              1505 return 0;
              -
              1506 }
              -
              1507 if (!ctype.is(ctype.space, str[i])) {
              -
              1508 if (!i)
              -
              1509 return strnlen(str, count);
              -
              1510 size_t n = count != SIZE_MAX ? strncpy(str, str + i, count - i) : strcpy(str, str + i);
              -
              1511 str[n] = 0;
              -
              1512 return n;
              -
              1513 }
              -
              1514 }
              -
              1515 }
              -
              1516
              -
              1522 template<class _Elem, class _Traits = std::char_traits<_Elem>, class _Ax = std::allocator<_Elem>>
              -
              1523 inline void ltrim(_Inout_ std::basic_string<_Elem, _Traits, _Ax> &s, _In_ const std::locale& locale)
              -
              1524 {
              -
              1525 const auto& ctype = std::use_facet<std::ctype<_Elem>>(locale);
              -
              1526 s.erase(
              -
              1527 s.begin(),
              -
              1528 std::find_if(
              -
              1529 s.begin(),
              -
              1530 s.end(),
              -
              1531 [&](_Elem ch) { return !ctype.is(ctype.space, ch); }));
              -
              1532 }
              -
              1533
              -
              1542 template<class T>
              -
              1543 inline size_t rtrim(
              -
              1544 _Inout_z_count_(count) T* str, _In_ size_t count,
              -
              1545 _In_ const std::locale& locale)
              -
              1546 {
              -
              1547 const auto& ctype = std::use_facet<std::ctype<T>>(locale);
              -
              1548 for (size_t i = 0, j = 0;;) {
              -
              1549 if (i >= count || !str[i]) {
              -
              1550 if (j < count) str[j] = 0;
              -
              1551 return j;
              -
              1552 }
              -
              1553 if (!ctype.is(ctype.space, str[i]))
              -
              1554 j = ++i;
              -
              1555 else
              -
              1556 ++i;
              -
              1557 }
              -
              1558 }
              -
              1559
              -
              1565 template<class _Elem, class _Traits = std::char_traits<_Elem>, class _Ax = std::allocator<_Elem>>
              -
              1566 static inline void rtrim(_Inout_ std::basic_string<_Elem, _Traits, _Ax> &s, _In_ const std::locale& locale)
              -
              1567 {
              -
              1568 const auto& ctype = std::use_facet<std::ctype<_Elem>>(locale);
              -
              1569 s.erase(
              -
              1570 std::find_if(
              -
              1571 s.rbegin(),
              -
              1572 s.rend(),
              -
              1573 [&](_Elem ch) { return !ctype.is(ctype.space, ch); }).base(),
              -
              1574 s.end());
              -
              1575 }
              -
              1576
              -
              1585 template<class T>
              -
              1586 inline size_t trim(
              -
              1587 _Inout_z_count_(count) T* str, _In_ size_t count,
              -
              1588 _In_ const std::locale& locale)
              -
              1589 {
              -
              1590 return ltrim(str, rtrim(str, count, locale), locale);
              -
              1591 }
              -
              1592
              -
              1598 template<class _Elem, class _Traits = std::char_traits<_Elem>, class _Ax = std::allocator<_Elem>>
              -
              1599 static inline void trim(_Inout_ std::basic_string<_Elem, _Traits, _Ax> &s, _In_ const std::locale& locale)
              -
              1600 {
              -
              1601 const auto& ctype = std::use_facet<std::ctype<_Elem>>(locale);
              -
              1602 s.erase(
              -
              1603 s.begin(),
              -
              1604 std::find_if(
              -
              1605 s.begin(),
              -
              1606 s.end(),
              -
              1607 [&](_Elem ch) { return !ctype.is(ctype.space, ch); }));
              -
              1608 s.erase(
              -
              1609 std::find_if(
              -
              1610 s.rbegin(),
              -
              1611 s.rend(),
              -
              1612 [&](_Elem ch) { return !ctype.is(ctype.space, ch); }).base(),
              -
              1613 s.end());
              -
              1614 }
              -
              1615}
              +
              1493 inline void strupr(_Inout_updates_z_(count) T* str, _In_ size_t count, _In_ const std::locale& locale)
              +
              1494 {
              +
              1495 _Assume_(str || !count);
              +
              1496 const auto& ctype = std::use_facet<std::ctype<T>>(locale);
              +
              1497 for (size_t i = 0; i < count && str[i]; ++i)
              +
              1498 str[i] = ctype.toupper(str[i]);
              +
              1499 }
              +
              1500
              +
              1508 template<class _Elem, class _Traits = std::char_traits<_Elem>, class _Ax = std::allocator<_Elem>>
              +
              1509 inline void strupr(_Inout_ std::basic_string<_Elem, _Traits, _Ax>& str, _In_ const std::locale& locale)
              +
              1510 {
              +
              1511 const auto& ctype = std::use_facet<std::ctype<_Elem>>(locale);
              +
              1512 for (size_t i = 0; i < str.size(); ++i)
              +
              1513 str[i] = ctype.toupper(str[i]);
              +
              1514 }
              +
              1515
              +
              1524 template<class T>
              +
              1525 inline size_t ltrim(
              +
              1526 _Inout_z_count_(count) T* str, _In_ size_t count,
              +
              1527 _In_ const std::locale& locale)
              +
              1528 {
              +
              1529 const auto& ctype = std::use_facet<std::ctype<T>>(locale);
              +
              1530 for (size_t i = 0;; ++i) {
              +
              1531 if (i >= count) {
              +
              1532 if (count) str[0] = 0;
              +
              1533 return 0;
              +
              1534 }
              +
              1535 if (!str[i]) {
              +
              1536 str[0] = 0;
              +
              1537 return 0;
              +
              1538 }
              +
              1539 if (!ctype.is(ctype.space, str[i])) {
              +
              1540 if (!i)
              +
              1541 return strnlen(str, count);
              +
              1542 size_t n = count != SIZE_MAX ? strncpy(str, str + i, count - i) : strcpy(str, str + i);
              +
              1543 str[n] = 0;
              +
              1544 return n;
              +
              1545 }
              +
              1546 }
              +
              1547 }
              +
              1548
              +
              1554 template<class _Elem, class _Traits = std::char_traits<_Elem>, class _Ax = std::allocator<_Elem>>
              +
              1555 inline void ltrim(_Inout_ std::basic_string<_Elem, _Traits, _Ax> &s, _In_ const std::locale& locale)
              +
              1556 {
              +
              1557 const auto& ctype = std::use_facet<std::ctype<_Elem>>(locale);
              +
              1558 s.erase(
              +
              1559 s.begin(),
              +
              1560 std::find_if(
              +
              1561 s.begin(),
              +
              1562 s.end(),
              +
              1563 [&](_Elem ch) { return !ctype.is(ctype.space, ch); }));
              +
              1564 }
              +
              1565
              +
              1574 template<class T>
              +
              1575 inline size_t rtrim(
              +
              1576 _Inout_z_count_(count) T* str, _In_ size_t count,
              +
              1577 _In_ const std::locale& locale)
              +
              1578 {
              +
              1579 const auto& ctype = std::use_facet<std::ctype<T>>(locale);
              +
              1580 for (size_t i = 0, j = 0;;) {
              +
              1581 if (i >= count || !str[i]) {
              +
              1582 if (j < count) str[j] = 0;
              +
              1583 return j;
              +
              1584 }
              +
              1585 if (!ctype.is(ctype.space, str[i]))
              +
              1586 j = ++i;
              +
              1587 else
              +
              1588 ++i;
              +
              1589 }
              +
              1590 }
              +
              1591
              +
              1597 template<class _Elem, class _Traits = std::char_traits<_Elem>, class _Ax = std::allocator<_Elem>>
              +
              1598 static inline void rtrim(_Inout_ std::basic_string<_Elem, _Traits, _Ax> &s, _In_ const std::locale& locale)
              +
              1599 {
              +
              1600 const auto& ctype = std::use_facet<std::ctype<_Elem>>(locale);
              +
              1601 s.erase(
              +
              1602 std::find_if(
              +
              1603 s.rbegin(),
              +
              1604 s.rend(),
              +
              1605 [&](_Elem ch) { return !ctype.is(ctype.space, ch); }).base(),
              +
              1606 s.end());
              +
              1607 }
              +
              1608
              +
              1617 template<class T>
              +
              1618 inline size_t trim(
              +
              1619 _Inout_z_count_(count) T* str, _In_ size_t count,
              +
              1620 _In_ const std::locale& locale)
              +
              1621 {
              +
              1622 return ltrim(str, rtrim(str, count, locale), locale);
              +
              1623 }
              +
              1624
              +
              1630 template<class _Elem, class _Traits = std::char_traits<_Elem>, class _Ax = std::allocator<_Elem>>
              +
              1631 static inline void trim(_Inout_ std::basic_string<_Elem, _Traits, _Ax> &s, _In_ const std::locale& locale)
              +
              1632 {
              +
              1633 const auto& ctype = std::use_facet<std::ctype<_Elem>>(locale);
              +
              1634 s.erase(
              +
              1635 s.begin(),
              +
              1636 std::find_if(
              +
              1637 s.begin(),
              +
              1638 s.end(),
              +
              1639 [&](_Elem ch) { return !ctype.is(ctype.space, ch); }));
              +
              1640 s.erase(
              +
              1641 std::find_if(
              +
              1642 s.rbegin(),
              +
              1643 s.rend(),
              +
              1644 [&](_Elem ch) { return !ctype.is(ctype.space, ch); }).base(),
              +
              1645 s.end());
              +
              1646 }
              +
              1647}
              diff --git a/structstdex_1_1chrono_1_1aosn__date-members.html b/structstdex_1_1chrono_1_1aosn__date-members.html index 1122a8b2a..132d05c3c 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 352ed3272..b260c430d 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 9d5ebcf59..ab629db56 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 f7b3abc1c..502dcbdcd 100644 --- a/structstdex_1_1chrono_1_1aosn__timestamp.html +++ b/structstdex_1_1chrono_1_1aosn__timestamp.html @@ -197,7 +197,7 @@ static constexpr rep one_w
              diff --git a/structstdex_1_1free__locale__delete-members.html b/structstdex_1_1free__locale__delete-members.html index bb01d8f90..75b841017 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 f9c9d2fae..12abfdfb9 100644 --- a/structstdex_1_1free__locale__delete.html +++ b/structstdex_1_1free__locale__delete.html @@ -101,7 +101,7 @@ void operator() (local
              diff --git a/structstdex_1_1html_1_1element__traits-members.html b/structstdex_1_1html_1_1element__traits-members.html new file mode 100644 index 000000000..79f1c23c2 --- /dev/null +++ b/structstdex_1_1html_1_1element__traits-members.html @@ -0,0 +1,108 @@ + + + + + + + +stdex: Member List + + + + + + + + + +
              +
              + + + + + + +
              +
              stdex +
              +
              Additional custom or not Standard C++ covered algorithms
              +
              +
              + + + + + + + + +
              +
              + + +
              +
              +
              +
              +
              +
              Loading...
              +
              Searching...
              +
              No Matches
              +
              +
              +
              +
              + + +
              +
              +
              stdex::html::element_traits Member List
              +
              +
              + +

              This is the complete list of members for stdex::html::element_traits, including all inherited members.

              + + + + + + + + + + + + + + + + + + + + +
              is_block(element_t code)stdex::html::element_traitsinlinestatic
              is_flow(element_t code)stdex::html::element_traitsinlinestatic
              is_fontstyle(element_t code)stdex::html::element_traitsinlinestatic
              is_formctrl(element_t code)stdex::html::element_traitsinlinestatic
              is_group(element_t code)stdex::html::element_traitsinlinestatic
              is_head_content(element_t code)stdex::html::element_traitsinlinestatic
              is_head_misc(element_t code)stdex::html::element_traitsinlinestatic
              is_heading(element_t code)stdex::html::element_traitsinlinestatic
              is_html_content(element_t code)stdex::html::element_traitsinlinestatic
              is_inline(element_t code)stdex::html::element_traitsinlinestatic
              is_list(element_t code)stdex::html::element_traitsinlinestatic
              is_localizable(element_t code, const T *attr_name, size_t num_chars)stdex::html::element_traitsinlinestatic
              is_phrase(element_t code)stdex::html::element_traitsinlinestatic
              is_pre_exclusion(element_t code)stdex::html::element_traitsinlinestatic
              is_preformatted(element_t code)stdex::html::element_traitsinlinestatic
              is_special(element_t code)stdex::html::element_traitsinlinestatic
              is_uri(element_t code, _In_reads_or_z_opt_(num_chars) const T *attr_name, size_t num_chars)stdex::html::element_traitsinlinestatic
              may_contain(element_t parent, element_t child)stdex::html::element_traitsinlinestatic
              span(element_t code)stdex::html::element_traitsinlinestatic
              + + + + diff --git a/structstdex_1_1html_1_1element__traits.html b/structstdex_1_1html_1_1element__traits.html new file mode 100644 index 000000000..de8dd9300 --- /dev/null +++ b/structstdex_1_1html_1_1element__traits.html @@ -0,0 +1,864 @@ + + + + + + + +stdex: stdex::html::element_traits Struct Reference + + + + + + + + + +
              +
              + + + + + + +
              +
              stdex +
              +
              Additional custom or not Standard C++ covered algorithms
              +
              +
              + + + + + + + + +
              +
              + + +
              +
              +
              +
              +
              +
              Loading...
              +
              Searching...
              +
              No Matches
              +
              +
              +
              +
              + + +
              +
              + +
              stdex::html::element_traits Struct Reference
              +
              +
              + +

              Describes attributes associated with a HTML element. + More...

              + +

              #include <stdex/html.hpp>

              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

              +Static Public Member Functions

              static element_span_t span (element_t code)
               Returns expected element span in HTML code.
               
              static bool is_fontstyle (element_t code)
               Does element represent font styling?
               
              static bool is_phrase (element_t code)
               Does element represent a phrase-of-speech?
               
              static bool is_special (element_t code)
               Does element represent non-textual item in the document?
               
              static bool is_formctrl (element_t code)
               Does element represent a form control?
               
              static bool is_inline (element_t code)
               Is element typically displayed inline with text?
               
              static bool is_heading (element_t code)
               Does element represent a heading?
               
              static bool is_list (element_t code)
               Does element represent a list of items?
               
              static bool is_preformatted (element_t code)
               Does element represent preformatted text, source code etc.?
               
              static bool is_block (element_t code)
               Is element typically displayed as a stand-alone section of text?
               
              static bool is_flow (element_t code)
               Does element typically represent text?
               
              static bool is_head_content (element_t code)
               Is element part of the document head?
               
              static bool is_head_misc (element_t code)
               May element be a part of document head?
               
              static bool is_pre_exclusion (element_t code)
               May element be a part of.
               
              static bool is_html_content (element_t code)
               Does element represent the document body?
               
              static bool is_group (element_t code)
               Does element represent a separate part of text?
               
              static bool may_contain (element_t parent, element_t child)
               Checks if one element may nest inside another.
               
              template<class T >
              static bool is_uri (element_t code, _In_reads_or_z_opt_(num_chars) const T *attr_name, size_t num_chars)
               Checks if expected element attribute value is URI.
               
              template<class T >
              static bool is_localizable (element_t code, const T *attr_name, size_t num_chars)
               Checks if expected element attribute value is localizable.
               
              +

              Detailed Description

              +

              Describes attributes associated with a HTML element.

              +

              Member Function Documentation

              + +

              ◆ is_block()

              + +
              +
              + + + + + +
              + + + + + + + + +
              static bool stdex::html::element_traits::is_block (element_t code)
              +
              +inlinestatic
              +
              + +

              Is element typically displayed as a stand-alone section of text?

              +
              Parameters
              + + +
              [in]codeElement code
              +
              +
              + +
              +
              + +

              ◆ is_flow()

              + +
              +
              + + + + + +
              + + + + + + + + +
              static bool stdex::html::element_traits::is_flow (element_t code)
              +
              +inlinestatic
              +
              + +

              Does element typically represent text?

              +
              Parameters
              + + +
              [in]codeElement code
              +
              +
              + +
              +
              + +

              ◆ is_fontstyle()

              + +
              +
              + + + + + +
              + + + + + + + + +
              static bool stdex::html::element_traits::is_fontstyle (element_t code)
              +
              +inlinestatic
              +
              + +

              Does element represent font styling?

              +
              Parameters
              + + +
              [in]codeElement code
              +
              +
              + +
              +
              + +

              ◆ is_formctrl()

              + +
              +
              + + + + + +
              + + + + + + + + +
              static bool stdex::html::element_traits::is_formctrl (element_t code)
              +
              +inlinestatic
              +
              + +

              Does element represent a form control?

              +
              Parameters
              + + +
              [in]codeElement code
              +
              +
              + +
              +
              + +

              ◆ is_group()

              + +
              +
              + + + + + +
              + + + + + + + + +
              static bool stdex::html::element_traits::is_group (element_t code)
              +
              +inlinestatic
              +
              + +

              Does element represent a separate part of text?

              +
              Parameters
              + + +
              [in]codeElement code
              +
              +
              + +
              +
              + +

              ◆ is_head_content()

              + +
              +
              + + + + + +
              + + + + + + + + +
              static bool stdex::html::element_traits::is_head_content (element_t code)
              +
              +inlinestatic
              +
              + +

              Is element part of the document head?

              +
              Parameters
              + + +
              [in]codeElement code
              +
              +
              + +
              +
              + +

              ◆ is_head_misc()

              + +
              +
              + + + + + +
              + + + + + + + + +
              static bool stdex::html::element_traits::is_head_misc (element_t code)
              +
              +inlinestatic
              +
              + +

              May element be a part of document head?

              +
              Parameters
              + + +
              [in]codeElement code
              +
              +
              + +
              +
              + +

              ◆ is_heading()

              + +
              +
              + + + + + +
              + + + + + + + + +
              static bool stdex::html::element_traits::is_heading (element_t code)
              +
              +inlinestatic
              +
              + +

              Does element represent a heading?

              +
              Parameters
              + + +
              [in]codeElement code
              +
              +
              + +
              +
              + +

              ◆ is_html_content()

              + +
              +
              + + + + + +
              + + + + + + + + +
              static bool stdex::html::element_traits::is_html_content (element_t code)
              +
              +inlinestatic
              +
              + +

              Does element represent the document body?

              +
              Parameters
              + + +
              [in]codeElement code
              +
              +
              + +
              +
              + +

              ◆ is_inline()

              + +
              +
              + + + + + +
              + + + + + + + + +
              static bool stdex::html::element_traits::is_inline (element_t code)
              +
              +inlinestatic
              +
              + +

              Is element typically displayed inline with text?

              +
              Parameters
              + + +
              [in]codeElement code
              +
              +
              + +
              +
              + +

              ◆ is_list()

              + +
              +
              + + + + + +
              + + + + + + + + +
              static bool stdex::html::element_traits::is_list (element_t code)
              +
              +inlinestatic
              +
              + +

              Does element represent a list of items?

              +
              Parameters
              + + +
              [in]codeElement code
              +
              +
              + +
              +
              + +

              ◆ is_localizable()

              + +
              +
              +
              +template<class T >
              + + + + + +
              + + + + + + + + + + + + + + + + + + + + + + + + +
              static bool stdex::html::element_traits::is_localizable (element_t code,
              const T * attr_name,
              size_t num_chars 
              )
              +
              +inlinestatic
              +
              + +

              Checks if expected element attribute value is localizable.

              +
              Parameters
              + + + + +
              [in]codeElement code
              [in]attr_nameAttribute name
              [in]num_charsCode unit limit in attr_name
              +
              +
              + +
              +
              + +

              ◆ is_phrase()

              + +
              +
              + + + + + +
              + + + + + + + + +
              static bool stdex::html::element_traits::is_phrase (element_t code)
              +
              +inlinestatic
              +
              + +

              Does element represent a phrase-of-speech?

              +
              Parameters
              + + +
              [in]codeElement code
              +
              +
              + +
              +
              + +

              ◆ is_pre_exclusion()

              + +
              +
              + + + + + +
              + + + + + + + + +
              static bool stdex::html::element_traits::is_pre_exclusion (element_t code)
              +
              +inlinestatic
              +
              + +

              May element be a part of.

              +
              ?
              +
              +
              Parameters
              + + +
              [in]code Element code +
              +
              +
              +
              +
              +
              + +

              ◆ is_preformatted()

              + +
              +
              + + + + + +
              + + + + + + + + +
              static bool stdex::html::element_traits::is_preformatted (element_t code)
              +
              +inlinestatic
              +
              + +

              Does element represent preformatted text, source code etc.?

              +
              Parameters
              + + +
              [in]codeElement code
              +
              +
              + +
              +
              + +

              ◆ is_special()

              + +
              +
              + + + + + +
              + + + + + + + + +
              static bool stdex::html::element_traits::is_special (element_t code)
              +
              +inlinestatic
              +
              + +

              Does element represent non-textual item in the document?

              +
              Parameters
              + + +
              [in]codeElement code
              +
              +
              + +
              +
              + +

              ◆ is_uri()

              + +
              +
              +
              +template<class T >
              + + + + + +
              + + + + + + + + + + + + + + + + + + + + + + + + +
              static bool stdex::html::element_traits::is_uri (element_t code,
              _In_reads_or_z_opt_(num_chars) const T * attr_name,
              size_t num_chars 
              )
              +
              +inlinestatic
              +
              + +

              Checks if expected element attribute value is URI.

              +
              Parameters
              + + + + +
              [in]codeElement code
              [in]attr_nameAttribute name
              [in]num_charsCode unit limit in attr_name
              +
              +
              + +
              +
              + +

              ◆ may_contain()

              + +
              +
              + + + + + +
              + + + + + + + + + + + + + + + + + + +
              static bool stdex::html::element_traits::may_contain (element_t parent,
              element_t child 
              )
              +
              +inlinestatic
              +
              + +

              Checks if one element may nest inside another.

              +
              Parameters
              + + + +
              [in]parentParent element code
              [in]childChild element code
              +
              +
              +
              Returns
              true if child may nest in parent; false otherwise
              + +
              +
              + +

              ◆ span()

              + +
              +
              + + + + + +
              + + + + + + + + +
              static element_span_t stdex::html::element_traits::span (element_t code)
              +
              +inlinestatic
              +
              + +

              Returns expected element span in HTML code.

              +
              Parameters
              + + +
              [in]codeElement code
              +
              +
              + +
              +
              +
              The documentation for this struct was generated from the following file: +
              + + + + diff --git a/structstdex_1_1html_1_1entity-members.html b/structstdex_1_1html_1_1entity-members.html new file mode 100644 index 000000000..64f195041 --- /dev/null +++ b/structstdex_1_1html_1_1entity-members.html @@ -0,0 +1,91 @@ + + + + + + + +stdex: Member List + + + + + + + + + +
              +
              + + + + + + +
              +
              stdex +
              +
              Additional custom or not Standard C++ covered algorithms
              +
              +
              + + + + + + + + +
              +
              + + +
              +
              +
              +
              +
              +
              Loading...
              +
              Searching...
              +
              No Matches
              +
              +
              +
              +
              + + +
              +
              +
              stdex::html::entity< _Elem, _Traits, _Alloc > Member List
              +
              + + + + + diff --git a/structstdex_1_1html_1_1entity.html b/structstdex_1_1html_1_1entity.html new file mode 100644 index 000000000..23b8b428b --- /dev/null +++ b/structstdex_1_1html_1_1entity.html @@ -0,0 +1,112 @@ + + + + + + + +stdex: stdex::html::entity< _Elem, _Traits, _Alloc > Struct Template Reference + + + + + + + + + +
              +
              + + + + + + +
              +
              stdex +
              +
              Additional custom or not Standard C++ covered algorithms
              +
              +
              + + + + + + + + +
              +
              + + +
              +
              +
              +
              +
              +
              Loading...
              +
              Searching...
              +
              No Matches
              +
              +
              +
              +
              + + +
              +
              + +
              stdex::html::entity< _Elem, _Traits, _Alloc > Struct Template Reference
              +
              +
              + +

              HTML entity. + More...

              + +

              #include <stdex/html.hpp>

              + + + + + + + + +

              +Public Attributes

              +stdex::interval< size_t > name
               Name position in source.
               
              +std::basic_string< _Elem, _Traits, _Alloc > value
               Entity value.
               
              +

              Detailed Description

              +
              template<class _Elem, class _Traits = std::char_traits<_Elem>, class _Alloc = std::allocator<_Elem>>
              +struct stdex::html::entity< _Elem, _Traits, _Alloc >

              HTML entity.

              +

              The documentation for this struct was generated from the following file: +
              + + + + diff --git a/structstdex_1_1html_1_1inserted__token-members.html b/structstdex_1_1html_1_1inserted__token-members.html new file mode 100644 index 000000000..1e82d92c9 --- /dev/null +++ b/structstdex_1_1html_1_1inserted__token-members.html @@ -0,0 +1,93 @@ + + + + + + + +stdex: Member List + + + + + + + + + +
              +
              + + + + + + +
              +
              stdex +
              +
              Additional custom or not Standard C++ covered algorithms
              +
              +
              + + + + + + + + +
              +
              + + +
              +
              +
              +
              +
              +
              Loading...
              +
              Searching...
              +
              No Matches
              +
              +
              +
              +
              + + +
              +
              +
              stdex::html::inserted_token Member List
              +
              + + + + + diff --git a/structstdex_1_1html_1_1inserted__token.html b/structstdex_1_1html_1_1inserted__token.html new file mode 100644 index 000000000..33c2c7100 --- /dev/null +++ b/structstdex_1_1html_1_1inserted__token.html @@ -0,0 +1,119 @@ + + + + + + + +stdex: stdex::html::inserted_token Struct Reference + + + + + + + + + +
              +
              + + + + + + +
              +
              stdex +
              +
              Additional custom or not Standard C++ covered algorithms
              +
              +
              + + + + + + + + +
              +
              + + +
              +
              +
              +
              +
              +
              Loading...
              +
              Searching...
              +
              No Matches
              +
              +
              +
              +
              + + +
              +
              + +
              stdex::html::inserted_token Struct Reference
              +
              +
              + +

              Inserted HTML token. + More...

              + +

              #include <stdex/html.hpp>

              + + + + + + + + + + + + + + +

              +Public Attributes

              +tokentoken
               Points to the token.
               
              +std::list< stdex::html::token * > active_tokens
               List of started tokens at inserted token.
               
              +size_t word_index
               Index of the word, token is anchored to.
               
              +bool after_word
               true if token is anchored after the word; false if anchored before the word
               
              +

              Detailed Description

              +

              Inserted HTML token.

              +

              The documentation for this struct was generated from the following file: +
              + + + + diff --git a/structstdex_1_1interval-members.html b/structstdex_1_1interval-members.html index 13b7667db..2d9c9877e 100644 --- a/structstdex_1_1interval-members.html +++ b/structstdex_1_1interval-members.html @@ -103,7 +103,7 @@ $(function() {
              diff --git a/structstdex_1_1interval.html b/structstdex_1_1interval.html index 7b9e7824e..84024fab9 100644 --- a/structstdex_1_1interval.html +++ b/structstdex_1_1interval.html @@ -722,7 +722,7 @@ template<class T >
              diff --git a/structstdex_1_1mapping-members.html b/structstdex_1_1mapping-members.html index 808b5c822..39f85f957 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 71d7dc459..af3fbc51e 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 8bed43608..798492975 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 459922b61..c514bf0a2 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 4bb2e6bf6..6d02a3e46 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 1f77d72ff..1243159e8 100644 --- a/structstdex_1_1no__delete_3_01_t_0f_0e_4.html +++ b/structstdex_1_1no__delete_3_01_t_0f_0e_4.html @@ -106,7 +106,7 @@ struct stdex::no_delete< T[]>

              Noop array deleter.

              diff --git a/structstdex_1_1parser_1_1html__attribute-members.html b/structstdex_1_1parser_1_1html__attribute-members.html new file mode 100644 index 000000000..ba4383310 --- /dev/null +++ b/structstdex_1_1parser_1_1html__attribute-members.html @@ -0,0 +1,91 @@ + + + + + + + +stdex: Member List + + + + + + + + + +
              +
              + + + + + + +
              +
              stdex +
              +
              Additional custom or not Standard C++ covered algorithms
              +
              +
              + + + + + + + + +
              +
              + + +
              +
              +
              +
              +
              +
              Loading...
              +
              Searching...
              +
              No Matches
              +
              +
              +
              +
              + + +
              +
              +
              stdex::parser::html_attribute Member List
              +
              +
              + +

              This is the complete list of members for stdex::parser::html_attribute, including all inherited members.

              + + + +
              namestdex::parser::html_attribute
              valuestdex::parser::html_attribute
              + + + + diff --git a/structstdex_1_1parser_1_1html__attribute.html b/structstdex_1_1parser_1_1html__attribute.html new file mode 100644 index 000000000..c9da4948b --- /dev/null +++ b/structstdex_1_1parser_1_1html__attribute.html @@ -0,0 +1,111 @@ + + + + + + + +stdex: stdex::parser::html_attribute Struct Reference + + + + + + + + + +
              +
              + + + + + + +
              +
              stdex +
              +
              Additional custom or not Standard C++ covered algorithms
              +
              +
              + + + + + + + + +
              +
              + + +
              +
              +
              +
              +
              +
              Loading...
              +
              Searching...
              +
              No Matches
              +
              +
              +
              +
              + + +
              +
              + +
              stdex::parser::html_attribute Struct Reference
              +
              +
              + +

              Tag attribute. + More...

              + +

              #include <stdex/parser.hpp>

              + + + + + + + + +

              +Public Attributes

              +stdex::interval< size_tname
               attribute name position in source
               
              +stdex::interval< size_tvalue
               attribute value position in source
               
              +

              Detailed Description

              +

              Tag attribute.

              +

              The documentation for this struct was generated from the following file: +
              + + + + diff --git a/structstdex_1_1parser_1_1http__factor__more-members.html b/structstdex_1_1parser_1_1http__factor__more-members.html index 6a50b601c..cb2aef389 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 1d9e9ba1b..50c5ac975 100644 --- a/structstdex_1_1parser_1_1http__factor__more.html +++ b/structstdex_1_1parser_1_1http__factor__more.html @@ -84,7 +84,7 @@ $(function() {

              Public Member Functions

              -constexpr bool operator() (const T &a, const T &b) const noexcept +constexpr bool operator() (const T &a, const T &b) const noexcept  
              The documentation for this struct was generated from the following file:
                @@ -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 38181fc7f..ef71640f5 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 84c412f98..100011fd0 100644 --- a/structstdex_1_1stream_1_1buffer_1_1buffer__t.html +++ b/structstdex_1_1stream_1_1buffer_1_1buffer__t.html @@ -109,7 +109,7 @@ size_t capacity diff --git a/structstdex_1_1stream_1_1fifo_1_1node__t-members.html b/structstdex_1_1stream_1_1fifo_1_1node__t-members.html index a5e6addbe..36f108ff9 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 8a73019c2..2c667bf2b 100644 --- a/structstdex_1_1stream_1_1fifo_1_1node__t.html +++ b/structstdex_1_1stream_1_1fifo_1_1node__t.html @@ -99,7 +99,7 @@ uint8_t data [0]<
              diff --git a/structstdex_1_1sys__info__t-members.html b/structstdex_1_1sys__info__t-members.html index 16f404726..903d34e04 100644 --- a/structstdex_1_1sys__info__t-members.html +++ b/structstdex_1_1sys__info__t-members.html @@ -89,7 +89,7 @@ $(function() {
              diff --git a/structstdex_1_1sys__info__t.html b/structstdex_1_1sys__info__t.html index b06136d7d..82ac98a53 100644 --- a/structstdex_1_1sys__info__t.html +++ b/structstdex_1_1sys__info__t.html @@ -137,7 +137,7 @@ struct utsname m_utsn<
              diff --git a/sys__info_8hpp_source.html b/sys__info_8hpp_source.html index 8fb8163ce..6d41969bb 100644 --- a/sys__info_8hpp_source.html +++ b/sys__info_8hpp_source.html @@ -285,7 +285,7 @@ $(document).ready(function() { init_codefold(0); });
              diff --git a/system_8hpp_source.html b/system_8hpp_source.html index 25c26a0c5..b851d8400 100644 --- a/system_8hpp_source.html +++ b/system_8hpp_source.html @@ -289,7 +289,7 @@ $(document).ready(function() { init_codefold(0); });
              diff --git a/unicode_8cpp_source.html b/unicode_8cpp_source.html index 41a5cab3f..203f3d155 100644 --- a/unicode_8cpp_source.html +++ b/unicode_8cpp_source.html @@ -177,11 +177,11 @@ $(document).ready(function() { init_codefold(0); });
              93#ifndef _WIN32
              94#pragma GCC diagnostic pop
              95#endif
              -
              Encoding converter context.
              Definition unicode.hpp:70
              +
              Encoding converter context.
              Definition unicode.hpp:117
              diff --git a/unicode_8hpp_source.html b/unicode_8hpp_source.html index 3246068f6..bd6aa0576 100644 --- a/unicode_8hpp_source.html +++ b/unicode_8hpp_source.html @@ -146,560 +146,570 @@ $(document).ready(function() { init_codefold(0); });
              62 constexpr charset_id system_charset = charset_id::system;
              63#endif
              64
              -
              68 template <typename T_from, typename T_to>
              -
              - -
              70 {
              -
              71 protected:
              -
              72 charset_id m_from, m_to;
              -
              73
              -
              74 public:
              -
              75 charset_encoder(_In_ charset_id from, _In_ charset_id to) :
              -
              76 m_from(from),
              -
              77 m_to(to)
              -
              78 {
              -
              79#ifdef _WIN32
              -
              80 m_from_wincp = to_encoding(from);
              -
              81 m_to_wincp = to_encoding(to);
              -
              82#else
              -
              83 m_handle = iconv_open(to_encoding(to), to_encoding(from));
              -
              84 if (m_handle == (iconv_t)-1)
              -
              85 throw std::system_error(errno, std::system_category(), "iconv_open failed");
              +
              65 inline charset_id charset_from_name(_In_z_ const char* name)
              +
              66 {
              +
              67 struct charset_less {
              +
              68 inline bool operator()(_In_z_ const char* a, _In_z_ const char* b) const
              +
              69 {
              +
              70 return stdex::stricmp(a, b, stdex::std_locale_C) < 0;
              +
              71 }
              +
              72 };
              +
              73 static const std::map<const char*, charset_id, charset_less> charsets = {
              +
              74 { "UNICODE-1-1-UTF-7", charset_id::utf7 },
              +
              75 { "UTF-7", charset_id::utf7 },
              +
              76 { "CSUNICODE11UTF7", charset_id::utf7 },
              +
              77
              +
              78 { "UTF-8", charset_id::utf8 },
              +
              79 { "UTF8", charset_id::utf8 },
              +
              80
              +
              81 { "UTF-16", charset_id::utf16 },
              +
              82#if BYTE_ORDER == BIG_ENDIAN
              +
              83 { "UTF-16BE", charset_id::utf16 },
              +
              84#else
              +
              85 { "UTF-16LE", charset_id::utf16 },
              86#endif
              -
              87 }
              -
              88
              -
              89#ifndef _WIN32
              - -
              91 {
              -
              92 iconv_close(m_handle);
              -
              93 }
              -
              94#endif
              -
              95
              -
              96 inline charset_id from_encoding() const { return m_from; }
              -
              97 inline charset_id to_encoding() const { return m_to; }
              +
              87
              +
              88 { "UTF-32", charset_id::utf32 },
              +
              89#if BYTE_ORDER == BIG_ENDIAN
              +
              90 { "UTF-32BE", charset_id::utf32 },
              +
              91#else
              +
              92 { "UTF-32LE", charset_id::utf32 },
              +
              93#endif
              +
              94
              +
              95 { "CP1250", charset_id::windows1250 },
              +
              96 { "MS-EE", charset_id::windows1250 },
              +
              97 { "WINDOWS-1250", charset_id::windows1250 },
              98
              -
              106 template <class _Traits_to = std::char_traits<T_to>, class _Alloc_to = std::allocator<T_to>>
              -
              -
              107 void strcat(
              -
              108 _Inout_ std::basic_string<T_to, _Traits_to, _Alloc_to> &dst,
              -
              109 _In_reads_or_z_opt_(count_src) const T_from* src, _In_ size_t count_src)
              -
              110 {
              -
              111 _Assume_(src || !count_src);
              -
              112 count_src = stdex::strnlen<T_from>(src, count_src);
              -
              113 if (!count_src) _Unlikely_
              -
              114 return;
              -
              115
              -
              116#ifdef _WIN32
              -
              117 constexpr DWORD dwFlagsMBWC = MB_PRECOMPOSED;
              -
              118 constexpr DWORD dwFlagsWCMB = 0;
              -
              119 constexpr LPCCH lpDefaultChar = NULL;
              +
              99 { "CP1251", charset_id::windows1251 },
              +
              100 { "MS-CYRL", charset_id::windows1251 },
              +
              101 { "WINDOWS-1251", charset_id::windows1251 },
              +
              102
              +
              103 { "CP1252", charset_id::windows1252 },
              +
              104 { "MS-ANSI", charset_id::windows1252 },
              +
              105 { "WINDOWS-1252", charset_id::windows1252 },
              +
              106 };
              +
              107 if (auto el = charsets.find(name); el != charsets.end())
              +
              108 return el->second;
              +
              109 return charset_id::system;
              +
              110 }
              +
              111
              +
              115 template <typename T_from, typename T_to>
              +
              + +
              117 {
              +
              118 protected:
              +
              119 charset_id m_from, m_to;
              120
              -
              121 _Assume_(src);
              -
              122 if (m_from_wincp == m_to_wincp) _Unlikely_{
              -
              123 dst.append(reinterpret_cast<const T_to*>(src), count_src);
              -
              124 return;
              -
              125 }
              -
              126
              -
              127#pragma warning(suppress: 4127)
              -
              128 if constexpr (sizeof(T_from) == sizeof(char) && sizeof(T_to) == sizeof(wchar_t)) {
              -
              129 _Assume_(count_src < INT_MAX || count_src == SIZE_MAX);
              -
              130
              -
              131 // Try to convert to stack buffer first.
              -
              132 WCHAR szStackBuffer[1024 / sizeof(WCHAR)];
              -
              133#pragma warning(suppress: 6387) // Testing indicates src may be NULL when count_src is also 0. Is SAL of the lpMultiByteStr parameter wrong?
              -
              134 int cch = MultiByteToWideChar(static_cast<UINT>(m_from_wincp), dwFlagsMBWC, reinterpret_cast<LPCCH>(src), static_cast<int>(count_src), szStackBuffer, _countof(szStackBuffer));
              -
              135 if (cch) {
              -
              136 // Append from stack.
              -
              137 dst.append(reinterpret_cast<const T_to*>(szStackBuffer), count_src != SIZE_MAX ? wcsnlen(szStackBuffer, cch) : static_cast<size_t>(cch) - 1);
              -
              138 return;
              -
              139 }
              -
              140 if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) {
              -
              141 // Query the required output size. Allocate buffer. Then convert again.
              -
              142 cch = MultiByteToWideChar(static_cast<UINT>(m_from_wincp), dwFlagsMBWC, reinterpret_cast<LPCCH>(src), static_cast<int>(count_src), NULL, 0);
              -
              143 std::unique_ptr<WCHAR[]> szBuffer(new WCHAR[cch]);
              -
              144 cch = MultiByteToWideChar(static_cast<UINT>(m_from_wincp), dwFlagsMBWC, reinterpret_cast<LPCCH>(src), static_cast<int>(count_src), szBuffer.get(), cch);
              -
              145 dst.append(reinterpret_cast<const T_to*>(szBuffer.get()), count_src != SIZE_MAX ? wcsnlen(szBuffer.get(), cch) : static_cast<size_t>(cch) - 1);
              -
              146 return;
              -
              147 }
              -
              148 throw std::system_error(GetLastError(), std::system_category(), "MultiByteToWideChar failed");
              -
              149 }
              -
              150
              -
              151#pragma warning(suppress: 4127)
              -
              152 if constexpr (sizeof(T_from) == sizeof(wchar_t) && sizeof(T_to) == sizeof(char)) {
              -
              153 _Assume_(count_src < INT_MAX || count_src == SIZE_MAX);
              -
              154
              -
              155 // Try to convert to stack buffer first.
              -
              156 CHAR szStackBuffer[1024 / sizeof(CHAR)];
              -
              157#pragma warning(suppress: 6387) // Testing indicates src may be NULL when count_src is also 0. Is SAL of the lpWideCharStr parameter wrong?
              -
              158 int cch = WideCharToMultiByte(static_cast<UINT>(m_to_wincp), dwFlagsWCMB, reinterpret_cast<LPCWCH>(src), static_cast<int>(count_src), szStackBuffer, _countof(szStackBuffer), lpDefaultChar, NULL);
              -
              159 if (cch) {
              -
              160 // Copy from stack. Be careful not to include zero terminator.
              -
              161 dst.append(reinterpret_cast<const T_to*>(szStackBuffer), count_src != SIZE_MAX ? strnlen(szStackBuffer, cch) : static_cast<size_t>(cch) - 1);
              -
              162 return;
              -
              163 }
              -
              164 if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) {
              -
              165 // Query the required output size. Allocate buffer. Then convert again.
              -
              166 cch = WideCharToMultiByte(static_cast<UINT>(m_to_wincp), dwFlagsWCMB, reinterpret_cast<LPCWCH>(src), static_cast<int>(count_src), NULL, 0, lpDefaultChar, NULL);
              -
              167 std::unique_ptr<CHAR[]> szBuffer(new CHAR[cch]);
              -
              168 cch = WideCharToMultiByte(static_cast<UINT>(m_to_wincp), dwFlagsWCMB, reinterpret_cast<LPCWCH>(src), static_cast<int>(count_src), szBuffer.get(), cch, lpDefaultChar, NULL);
              -
              169 dst.append(reinterpret_cast<const T_to*>(szBuffer.get()), count_src != SIZE_MAX ? strnlen(szBuffer.get(), cch) : static_cast<size_t>(cch) - 1);
              -
              170 return;
              -
              171 }
              -
              172 throw std::system_error(GetLastError(), std::system_category(), "WideCharToMultiByte failed");
              -
              173 }
              -
              174
              -
              175#pragma warning(suppress: 4127)
              -
              176 if constexpr (sizeof(T_from) == sizeof(char) && sizeof(T_to) == sizeof(char)) {
              -
              177 _Assume_(count_src < INT_MAX || count_src == SIZE_MAX);
              -
              178
              -
              179 // Try to convert to stack buffer first.
              -
              180 WCHAR szStackBufferMBWC[512 / sizeof(WCHAR)];
              -
              181#pragma warning(suppress: 6387) // Testing indicates src may be NULL when count_src is also 0. Is SAL of the lpMultiByteStr parameter wrong?
              -
              182 int cch = MultiByteToWideChar(static_cast<UINT>(m_from_wincp), dwFlagsMBWC, reinterpret_cast<LPCCH>(src), static_cast<int>(count_src), szStackBufferMBWC, _countof(szStackBufferMBWC));
              -
              183 if (cch) {
              -
              184 // Append from stack.
              -
              185 size_t count_inter = count_src != SIZE_MAX ? wcsnlen(szStackBufferMBWC, cch) : static_cast<size_t>(cch) - 1;
              -
              186 _Assume_(count_inter < INT_MAX);
              -
              187
              -
              188 // Try to convert to stack buffer first.
              -
              189 CHAR szStackBufferWCMB[512 / sizeof(CHAR)];
              -
              190#pragma warning(suppress: 6387) // Testing indicates szStackBufferMBWC may be NULL when count_inter is also 0. Is SAL of the lpWideCharStr parameter wrong?
              -
              191 cch = WideCharToMultiByte(static_cast<UINT>(m_to_wincp), dwFlagsWCMB, szStackBufferMBWC, static_cast<int>(count_inter), szStackBufferWCMB, _countof(szStackBufferWCMB), lpDefaultChar, NULL);
              -
              192 if (cch) {
              -
              193 // Copy from stack. Be careful not to include zero terminator.
              -
              194 dst.append(reinterpret_cast<const T_to*>(szStackBufferWCMB), strnlen(szStackBufferWCMB, cch));
              -
              195 return;
              -
              196 }
              -
              197 if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) {
              -
              198 // Query the required output size. Allocate buffer. Then convert again.
              -
              199 cch = WideCharToMultiByte(static_cast<UINT>(m_to_wincp), dwFlagsWCMB, szStackBufferMBWC, static_cast<int>(count_inter), NULL, 0, lpDefaultChar, NULL);
              -
              200 std::unique_ptr<CHAR[]> szBufferWCMB(new CHAR[cch]);
              -
              201 cch = WideCharToMultiByte(static_cast<UINT>(m_to_wincp), dwFlagsWCMB, szStackBufferMBWC, static_cast<int>(count_inter), szBufferWCMB.get(), cch, lpDefaultChar, NULL);
              -
              202 dst.append(reinterpret_cast<const T_to*>(szBufferWCMB.get()), strnlen(szBufferWCMB.get(), cch));
              -
              203 return;
              -
              204 }
              -
              205 throw std::system_error(GetLastError(), std::system_category(), "WideCharToMultiByte failed");
              -
              206 }
              -
              207 if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) {
              -
              208 // Query the required output size. Allocate buffer. Then convert again.
              -
              209 cch = MultiByteToWideChar(static_cast<UINT>(m_from_wincp), dwFlagsMBWC, reinterpret_cast<LPCCH>(src), static_cast<int>(count_src), NULL, 0);
              -
              210 std::unique_ptr<WCHAR[]> szBufferMBWC(new WCHAR[cch]);
              -
              211 cch = MultiByteToWideChar(static_cast<UINT>(m_from_wincp), dwFlagsMBWC, reinterpret_cast<LPCCH>(src), static_cast<int>(count_src), szBufferMBWC.get(), cch);
              -
              212 size_t count_inter = count_src != SIZE_MAX ? wcsnlen(szBufferMBWC.get(), cch) : static_cast<size_t>(cch) - 1;
              -
              213
              -
              214 // Query the required output size. Allocate buffer. Then convert again.
              -
              215 cch = WideCharToMultiByte(static_cast<UINT>(m_to_wincp), dwFlagsWCMB, szBufferMBWC.get(), static_cast<int>(count_inter), NULL, 0, lpDefaultChar, NULL);
              -
              216 std::unique_ptr<CHAR[]> szBufferWCMB(new CHAR[cch]);
              -
              217 cch = WideCharToMultiByte(static_cast<UINT>(m_to_wincp), dwFlagsWCMB, szBufferMBWC.get(), static_cast<int>(count_inter), szBufferWCMB.get(), cch, lpDefaultChar, NULL);
              -
              218 dst.append(reinterpret_cast<const T_to*>(szBufferWCMB.get()), strnlen(szBufferWCMB.get(), cch));
              -
              219 return;
              -
              220 }
              -
              221 throw std::system_error(GetLastError(), std::system_category(), "MultiByteToWideChar failed");
              -
              222 }
              -
              223#else
              -
              224 dst.reserve(dst.size() + count_src);
              -
              225 T_to buf[1024 / sizeof(T_to)];
              -
              226 size_t src_size = stdex::mul(sizeof(T_from), count_src);
              -
              227 for (;;) {
              -
              228 T_to* output = &buf[0];
              -
              229 size_t output_size = sizeof(buf);
              -
              230 errno = 0;
              -
              231 iconv(m_handle, const_cast<char**>(reinterpret_cast<const char**>(&src)), &src_size, reinterpret_cast<char**>(&output), &output_size);
              -
              232 dst.append(buf, reinterpret_cast<T_to*>(reinterpret_cast<char*>(buf) + sizeof(buf) - output_size));
              -
              233 if (!errno)
              -
              234 break;
              -
              235 if (errno == E2BIG)
              -
              236 continue;
              -
              237 throw std::system_error(errno, std::system_category(), "iconv failed");
              -
              238 }
              -
              239#endif
              -
              240 }
              +
              121 public:
              +
              122 charset_encoder(_In_ charset_id from, _In_ charset_id to) :
              +
              123 m_from(from),
              +
              124 m_to(to)
              +
              125 {
              +
              126#ifdef _WIN32
              +
              127 m_from_wincp = to_encoding(from);
              +
              128 m_to_wincp = to_encoding(to);
              +
              129#else
              +
              130 m_handle = iconv_open(to_encoding(to), to_encoding(from));
              +
              131 if (m_handle == (iconv_t)-1)
              +
              132 throw std::system_error(errno, std::system_category(), "iconv_open failed");
              +
              133#endif
              +
              134 }
              +
              135
              +
              136#ifndef _WIN32
              + +
              138 {
              +
              139 iconv_close(m_handle);
              +
              140 }
              +
              141#endif
              +
              142
              +
              143 inline charset_id from_encoding() const { return m_from; }
              +
              144 inline charset_id to_encoding() const { return m_to; }
              +
              145
              +
              153 template <class _Traits_to = std::char_traits<T_to>, class _Alloc_to = std::allocator<T_to>>
              +
              +
              154 void strcat(
              +
              155 _Inout_ std::basic_string<T_to, _Traits_to, _Alloc_to>& dst,
              +
              156 _In_reads_or_z_opt_(count_src) const T_from* src, _In_ size_t count_src)
              +
              157 {
              +
              158 _Assume_(src || !count_src);
              +
              159 count_src = stdex::strnlen<T_from>(src, count_src);
              +
              160 if (!count_src) _Unlikely_
              +
              161 return;
              +
              162
              +
              163#ifdef _WIN32
              +
              164 constexpr DWORD dwFlagsMBWC = MB_PRECOMPOSED;
              +
              165 constexpr DWORD dwFlagsWCMB = 0;
              +
              166 constexpr LPCCH lpDefaultChar = NULL;
              +
              167
              +
              168 _Assume_(src);
              +
              169 if (m_from_wincp == m_to_wincp) _Unlikely_{
              +
              170 dst.append(reinterpret_cast<const T_to*>(src), count_src);
              +
              171 return;
              +
              172 }
              +
              173
              +
              174#pragma warning(suppress: 4127)
              +
              175 if constexpr (sizeof(T_from) == sizeof(char) && sizeof(T_to) == sizeof(wchar_t)) {
              +
              176 _Assume_(count_src < INT_MAX || count_src == SIZE_MAX);
              +
              177
              +
              178 // Try to convert to stack buffer first.
              +
              179 WCHAR szStackBuffer[1024 / sizeof(WCHAR)];
              +
              180#pragma warning(suppress: 6387) // Testing indicates src may be NULL when count_src is also 0. Is SAL of the lpMultiByteStr parameter wrong?
              +
              181 int cch = MultiByteToWideChar(static_cast<UINT>(m_from_wincp), dwFlagsMBWC, reinterpret_cast<LPCCH>(src), static_cast<int>(count_src), szStackBuffer, _countof(szStackBuffer));
              +
              182 if (cch) {
              +
              183 // Append from stack.
              +
              184 dst.append(reinterpret_cast<const T_to*>(szStackBuffer), count_src != SIZE_MAX ? wcsnlen(szStackBuffer, cch) : static_cast<size_t>(cch) - 1);
              +
              185 return;
              +
              186 }
              +
              187 if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) {
              +
              188 // Query the required output size. Allocate buffer. Then convert again.
              +
              189 cch = MultiByteToWideChar(static_cast<UINT>(m_from_wincp), dwFlagsMBWC, reinterpret_cast<LPCCH>(src), static_cast<int>(count_src), NULL, 0);
              +
              190 std::unique_ptr<WCHAR[]> szBuffer(new WCHAR[cch]);
              +
              191 cch = MultiByteToWideChar(static_cast<UINT>(m_from_wincp), dwFlagsMBWC, reinterpret_cast<LPCCH>(src), static_cast<int>(count_src), szBuffer.get(), cch);
              +
              192 dst.append(reinterpret_cast<const T_to*>(szBuffer.get()), count_src != SIZE_MAX ? wcsnlen(szBuffer.get(), cch) : static_cast<size_t>(cch) - 1);
              +
              193 return;
              +
              194 }
              +
              195 throw std::system_error(GetLastError(), std::system_category(), "MultiByteToWideChar failed");
              +
              196 }
              +
              197
              +
              198#pragma warning(suppress: 4127)
              +
              199 if constexpr (sizeof(T_from) == sizeof(wchar_t) && sizeof(T_to) == sizeof(char)) {
              +
              200 _Assume_(count_src < INT_MAX || count_src == SIZE_MAX);
              +
              201
              +
              202 // Try to convert to stack buffer first.
              +
              203 CHAR szStackBuffer[1024 / sizeof(CHAR)];
              +
              204#pragma warning(suppress: 6387) // Testing indicates src may be NULL when count_src is also 0. Is SAL of the lpWideCharStr parameter wrong?
              +
              205 int cch = WideCharToMultiByte(static_cast<UINT>(m_to_wincp), dwFlagsWCMB, reinterpret_cast<LPCWCH>(src), static_cast<int>(count_src), szStackBuffer, _countof(szStackBuffer), lpDefaultChar, NULL);
              +
              206 if (cch) {
              +
              207 // Copy from stack. Be careful not to include zero terminator.
              +
              208 dst.append(reinterpret_cast<const T_to*>(szStackBuffer), count_src != SIZE_MAX ? strnlen(szStackBuffer, cch) : static_cast<size_t>(cch) - 1);
              +
              209 return;
              +
              210 }
              +
              211 if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) {
              +
              212 // Query the required output size. Allocate buffer. Then convert again.
              +
              213 cch = WideCharToMultiByte(static_cast<UINT>(m_to_wincp), dwFlagsWCMB, reinterpret_cast<LPCWCH>(src), static_cast<int>(count_src), NULL, 0, lpDefaultChar, NULL);
              +
              214 std::unique_ptr<CHAR[]> szBuffer(new CHAR[cch]);
              +
              215 cch = WideCharToMultiByte(static_cast<UINT>(m_to_wincp), dwFlagsWCMB, reinterpret_cast<LPCWCH>(src), static_cast<int>(count_src), szBuffer.get(), cch, lpDefaultChar, NULL);
              +
              216 dst.append(reinterpret_cast<const T_to*>(szBuffer.get()), count_src != SIZE_MAX ? strnlen(szBuffer.get(), cch) : static_cast<size_t>(cch) - 1);
              +
              217 return;
              +
              218 }
              +
              219 throw std::system_error(GetLastError(), std::system_category(), "WideCharToMultiByte failed");
              +
              220 }
              +
              221
              +
              222#pragma warning(suppress: 4127)
              +
              223 if constexpr (sizeof(T_from) == sizeof(char) && sizeof(T_to) == sizeof(char)) {
              +
              224 _Assume_(count_src < INT_MAX || count_src == SIZE_MAX);
              +
              225
              +
              226 // Try to convert to stack buffer first.
              +
              227 WCHAR szStackBufferMBWC[512 / sizeof(WCHAR)];
              +
              228#pragma warning(suppress: 6387) // Testing indicates src may be NULL when count_src is also 0. Is SAL of the lpMultiByteStr parameter wrong?
              +
              229 int cch = MultiByteToWideChar(static_cast<UINT>(m_from_wincp), dwFlagsMBWC, reinterpret_cast<LPCCH>(src), static_cast<int>(count_src), szStackBufferMBWC, _countof(szStackBufferMBWC));
              +
              230 if (cch) {
              +
              231 // Append from stack.
              +
              232 size_t count_inter = count_src != SIZE_MAX ? wcsnlen(szStackBufferMBWC, cch) : static_cast<size_t>(cch) - 1;
              +
              233 _Assume_(count_inter < INT_MAX);
              +
              234
              +
              235 // Try to convert to stack buffer first.
              +
              236 CHAR szStackBufferWCMB[512 / sizeof(CHAR)];
              +
              237#pragma warning(suppress: 6387) // Testing indicates szStackBufferMBWC may be NULL when count_inter is also 0. Is SAL of the lpWideCharStr parameter wrong?
              +
              238 cch = WideCharToMultiByte(static_cast<UINT>(m_to_wincp), dwFlagsWCMB, szStackBufferMBWC, static_cast<int>(count_inter), szStackBufferWCMB, _countof(szStackBufferWCMB), lpDefaultChar, NULL);
              +
              239 if (cch) {
              +
              240 // Copy from stack. Be careful not to include zero terminator.
              +
              241 dst.append(reinterpret_cast<const T_to*>(szStackBufferWCMB), strnlen(szStackBufferWCMB, cch));
              +
              242 return;
              +
              243 }
              +
              244 if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) {
              +
              245 // Query the required output size. Allocate buffer. Then convert again.
              +
              246 cch = WideCharToMultiByte(static_cast<UINT>(m_to_wincp), dwFlagsWCMB, szStackBufferMBWC, static_cast<int>(count_inter), NULL, 0, lpDefaultChar, NULL);
              +
              247 std::unique_ptr<CHAR[]> szBufferWCMB(new CHAR[cch]);
              +
              248 cch = WideCharToMultiByte(static_cast<UINT>(m_to_wincp), dwFlagsWCMB, szStackBufferMBWC, static_cast<int>(count_inter), szBufferWCMB.get(), cch, lpDefaultChar, NULL);
              +
              249 dst.append(reinterpret_cast<const T_to*>(szBufferWCMB.get()), strnlen(szBufferWCMB.get(), cch));
              +
              250 return;
              +
              251 }
              +
              252 throw std::system_error(GetLastError(), std::system_category(), "WideCharToMultiByte failed");
              +
              253 }
              +
              254 if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) {
              +
              255 // Query the required output size. Allocate buffer. Then convert again.
              +
              256 cch = MultiByteToWideChar(static_cast<UINT>(m_from_wincp), dwFlagsMBWC, reinterpret_cast<LPCCH>(src), static_cast<int>(count_src), NULL, 0);
              +
              257 std::unique_ptr<WCHAR[]> szBufferMBWC(new WCHAR[cch]);
              +
              258 cch = MultiByteToWideChar(static_cast<UINT>(m_from_wincp), dwFlagsMBWC, reinterpret_cast<LPCCH>(src), static_cast<int>(count_src), szBufferMBWC.get(), cch);
              +
              259 size_t count_inter = count_src != SIZE_MAX ? wcsnlen(szBufferMBWC.get(), cch) : static_cast<size_t>(cch) - 1;
              +
              260
              +
              261 // Query the required output size. Allocate buffer. Then convert again.
              +
              262 cch = WideCharToMultiByte(static_cast<UINT>(m_to_wincp), dwFlagsWCMB, szBufferMBWC.get(), static_cast<int>(count_inter), NULL, 0, lpDefaultChar, NULL);
              +
              263 std::unique_ptr<CHAR[]> szBufferWCMB(new CHAR[cch]);
              +
              264 cch = WideCharToMultiByte(static_cast<UINT>(m_to_wincp), dwFlagsWCMB, szBufferMBWC.get(), static_cast<int>(count_inter), szBufferWCMB.get(), cch, lpDefaultChar, NULL);
              +
              265 dst.append(reinterpret_cast<const T_to*>(szBufferWCMB.get()), strnlen(szBufferWCMB.get(), cch));
              +
              266 return;
              +
              267 }
              +
              268 throw std::system_error(GetLastError(), std::system_category(), "MultiByteToWideChar failed");
              +
              269 }
              +
              270#else
              +
              271 dst.reserve(dst.size() + count_src);
              +
              272 T_to buf[1024 / sizeof(T_to)];
              +
              273 size_t src_size = stdex::mul(sizeof(T_from), count_src);
              +
              274 for (;;) {
              +
              275 T_to* output = &buf[0];
              +
              276 size_t output_size = sizeof(buf);
              +
              277 errno = 0;
              +
              278 iconv(m_handle, const_cast<char**>(reinterpret_cast<const char**>(&src)), &src_size, reinterpret_cast<char**>(&output), &output_size);
              +
              279 dst.append(buf, reinterpret_cast<T_to*>(reinterpret_cast<char*>(buf) + sizeof(buf) - output_size));
              +
              280 if (!errno)
              +
              281 break;
              +
              282 if (errno == E2BIG)
              +
              283 continue;
              +
              284 throw std::system_error(errno, std::system_category(), "iconv failed");
              +
              285 }
              +
              286#endif
              +
              287 }
              -
              241
              -
              248 template <class _Traits_to = std::char_traits<T_to>, class _Alloc_to = std::allocator<T_to>>
              -
              -
              249 inline void strcat(
              -
              250 _Inout_ std::basic_string<T_to, _Traits_to, _Alloc_to>& dst,
              -
              251 _In_z_ const T_from* src)
              -
              252 {
              -
              253 strcat(dst, src, SIZE_MAX);
              -
              254 }
              +
              288
              +
              295 template <class _Traits_to = std::char_traits<T_to>, class _Alloc_to = std::allocator<T_to>>
              +
              +
              296 inline void strcat(
              +
              297 _Inout_ std::basic_string<T_to, _Traits_to, _Alloc_to>& dst,
              +
              298 _In_z_ const T_from* src)
              +
              299 {
              +
              300 strcat(dst, src, SIZE_MAX);
              +
              301 }
              -
              255
              -
              262 template <class _Traits_to = std::char_traits<T_to>, class _Alloc_to = std::allocator<T_to>, class _Traits_from = std::char_traits<T_from>, class _Alloc_from = std::allocator<T_from>>
              -
              -
              263 inline void strcat(
              -
              264 _Inout_ std::basic_string<T_to, _Traits_to, _Alloc_to>& dst,
              -
              265 _In_ const std::basic_string<T_from, _Traits_from, _Alloc_from>& src)
              -
              266 {
              -
              267 strcat(dst, src.data(), src.size());
              -
              268 }
              +
              302
              +
              309 template <class _Traits_to = std::char_traits<T_to>, class _Alloc_to = std::allocator<T_to>, class _Traits_from = std::char_traits<T_from>, class _Alloc_from = std::allocator<T_from>>
              +
              +
              310 inline void strcat(
              +
              311 _Inout_ std::basic_string<T_to, _Traits_to, _Alloc_to>& dst,
              +
              312 _In_ const std::basic_string<T_from, _Traits_from, _Alloc_from>& src)
              +
              313 {
              +
              314 strcat(dst, src.data(), src.size());
              +
              315 }
              -
              269
              -
              277 template <class _Traits_to = std::char_traits<T_to>, class _Alloc_to = std::allocator<T_to>>
              -
              -
              278 inline void strcpy(
              -
              279 _Inout_ std::basic_string<T_to, _Traits_to, _Alloc_to>& dst,
              -
              280 _In_reads_or_z_opt_(count_src) const T_from* src, _In_ size_t count_src)
              -
              281 {
              -
              282 dst.clear();
              -
              283 strcat(dst, src, count_src);
              -
              284 }
              +
              316
              +
              324 template <class _Traits_to = std::char_traits<T_to>, class _Alloc_to = std::allocator<T_to>>
              +
              +
              325 inline void strcpy(
              +
              326 _Inout_ std::basic_string<T_to, _Traits_to, _Alloc_to>& dst,
              +
              327 _In_reads_or_z_opt_(count_src) const T_from* src, _In_ size_t count_src)
              +
              328 {
              +
              329 dst.clear();
              +
              330 strcat(dst, src, count_src);
              +
              331 }
              -
              285
              -
              292 template <class _Traits_to = std::char_traits<T_to>, class _Alloc_to = std::allocator<T_to>>
              -
              -
              293 inline void strcpy(
              -
              294 _Inout_ std::basic_string<T_to, _Traits_to, _Alloc_to>& dst,
              -
              295 _In_z_ const T_from* src)
              -
              296 {
              -
              297 strcpy(dst, src, SIZE_MAX);
              -
              298 }
              +
              332
              +
              339 template <class _Traits_to = std::char_traits<T_to>, class _Alloc_to = std::allocator<T_to>>
              +
              +
              340 inline void strcpy(
              +
              341 _Inout_ std::basic_string<T_to, _Traits_to, _Alloc_to>& dst,
              +
              342 _In_z_ const T_from* src)
              +
              343 {
              +
              344 strcpy(dst, src, SIZE_MAX);
              +
              345 }
              -
              299
              -
              306 template <class _Traits_to = std::char_traits<T_to>, class _Alloc_to = std::allocator<T_to>, class _Traits_from = std::char_traits<T_from>, class _Alloc_from = std::allocator<T_from>>
              -
              -
              307 inline void strcpy(
              -
              308 _Inout_ std::basic_string<T_to, _Traits_to, _Alloc_to>& dst,
              -
              309 _In_ const std::basic_string<T_from, _Traits_from, _Alloc_from>& src)
              -
              310 {
              -
              311 strcpy(dst, src.data(), src.size());
              -
              312 }
              +
              346
              +
              353 template <class _Traits_to = std::char_traits<T_to>, class _Alloc_to = std::allocator<T_to>, class _Traits_from = std::char_traits<T_from>, class _Alloc_from = std::allocator<T_from>>
              +
              +
              354 inline void strcpy(
              +
              355 _Inout_ std::basic_string<T_to, _Traits_to, _Alloc_to>& dst,
              +
              356 _In_ const std::basic_string<T_from, _Traits_from, _Alloc_from>& src)
              +
              357 {
              +
              358 strcpy(dst, src.data(), src.size());
              +
              359 }
              -
              313
              -
              320 template <class _Traits_to = std::char_traits<T_to>, class _Alloc_to = std::allocator<T_to>>
              -
              -
              321 inline std::basic_string<T_to, _Traits_to, _Alloc_to> convert(_In_reads_or_z_opt_(count_src) const T_from* src, _In_ size_t count_src)
              -
              322 {
              -
              323 std::basic_string<T_to, _Traits_to, _Alloc_to> dst;
              -
              324 strcat(dst, src, count_src);
              -
              325 return dst;
              -
              326 }
              +
              360
              +
              367 template <class _Traits_to = std::char_traits<T_to>, class _Alloc_to = std::allocator<T_to>>
              +
              +
              368 inline std::basic_string<T_to, _Traits_to, _Alloc_to> convert(_In_reads_or_z_opt_(count_src) const T_from* src, _In_ size_t count_src)
              +
              369 {
              +
              370 std::basic_string<T_to, _Traits_to, _Alloc_to> dst;
              +
              371 strcat(dst, src, count_src);
              +
              372 return dst;
              +
              373 }
              -
              327
              -
              333 template <class _Traits_to = std::char_traits<T_to>, class _Alloc_to = std::allocator<T_to>>
              -
              -
              334 inline std::basic_string<T_to, _Traits_to, _Alloc_to> convert(_In_z_ const T_from* src)
              -
              335 {
              -
              336 return convert(src, SIZE_MAX);
              -
              337 }
              +
              374
              +
              380 template <class _Traits_to = std::char_traits<T_to>, class _Alloc_to = std::allocator<T_to>>
              +
              +
              381 inline std::basic_string<T_to, _Traits_to, _Alloc_to> convert(_In_z_ const T_from* src)
              +
              382 {
              +
              383 return convert(src, SIZE_MAX);
              +
              384 }
              -
              338
              -
              344 template <class _Traits_to = std::char_traits<T_to>, class _Alloc_to = std::allocator<T_to>, class _Traits_from = std::char_traits<T_from>, class _Alloc_from = std::allocator<T_from>>
              -
              -
              345 inline std::basic_string<T_to, _Traits_to, _Alloc_to> convert(_In_ const std::basic_string<T_from, _Traits_from, _Alloc_from>& src)
              -
              346 {
              -
              347 return convert(src.data(), src.size());
              -
              348 }
              +
              385
              +
              391 template <class _Traits_to = std::char_traits<T_to>, class _Alloc_to = std::allocator<T_to>, class _Traits_from = std::char_traits<T_from>, class _Alloc_from = std::allocator<T_from>>
              +
              +
              392 inline std::basic_string<T_to, _Traits_to, _Alloc_to> convert(_In_ const std::basic_string<T_from, _Traits_from, _Alloc_from>& src)
              +
              393 {
              +
              394 return convert(src.data(), src.size());
              +
              395 }
              -
              349
              -
              350 inline void clear()
              -
              351 {
              -
              352#ifndef _WIN32
              -
              353 iconv(m_handle, NULL, NULL, NULL, NULL);
              -
              354#endif
              -
              355 }
              -
              356
              -
              357 static charset_id system_charset()
              -
              358 {
              -
              359#ifdef _WIN32
              -
              360 return static_cast<charset_id>(GetACP());
              -
              361#else
              -
              362 static const std::map<const char*, charset_id> charsets = {
              -
              363 { "UNICODE-1-1-UTF-7", charset_id::utf7 },
              -
              364 { "UTF-7", charset_id::utf7 },
              -
              365 { "CSUNICODE11UTF7", charset_id::utf7 },
              -
              366
              -
              367 { "UTF-8", charset_id::utf8 },
              -
              368 { "UTF8", charset_id::utf8 },
              -
              369
              -
              370 { "UTF-16", charset_id::utf16 },
              -
              371#if BYTE_ORDER == BIG_ENDIAN
              -
              372 { "UTF-16BE", charset_id::utf16 },
              -
              373#else
              -
              374 { "UTF-16LE", charset_id::utf16 },
              -
              375#endif
              -
              376
              -
              377 { "UTF-32", charset_id::utf32 },
              -
              378#if BYTE_ORDER == BIG_ENDIAN
              -
              379 { "UTF-32BE", charset_id::utf32 },
              -
              380#else
              -
              381 { "UTF-32LE", charset_id::utf32 },
              -
              382#endif
              -
              383
              -
              384 { "CP1250", charset_id::windows1250 },
              -
              385 { "MS-EE", charset_id::windows1250 },
              -
              386 { "WINDOWS-1250", charset_id::windows1250 },
              -
              387
              -
              388 { "CP1251", charset_id::windows1251 },
              -
              389 { "MS-CYRL", charset_id::windows1251 },
              -
              390 { "WINDOWS-1251", charset_id::windows1251 },
              -
              391
              -
              392 { "CP1252", charset_id::windows1252 },
              -
              393 { "MS-ANSI", charset_id::windows1252 },
              -
              394 { "WINDOWS-1252", charset_id::windows1252 },
              -
              395 };
              -
              396 const char* lctype = nl_langinfo(CODESET);
              -
              397 if (auto el = charsets.find(lctype); el != charsets.end())
              -
              398 return el->second;
              -
              399 return charset_id::system;
              -
              400#endif
              -
              401 }
              -
              402
              -
              403#ifdef _WIN32
              -
              404 protected:
              -
              405 static UINT to_encoding(_In_ charset_id charset)
              -
              406 {
              -
              407 return
              -
              408 charset == charset_id::system ? GetACP() :
              -
              409 charset == charset_id::oem ? GetOEMCP() :
              -
              410 static_cast<UINT>(charset);
              +
              396
              +
              397 inline void clear()
              +
              398 {
              +
              399#ifndef _WIN32
              +
              400 iconv(m_handle, NULL, NULL, NULL, NULL);
              +
              401#endif
              +
              402 }
              +
              403
              +
              404 static charset_id system_charset()
              +
              405 {
              +
              406#ifdef _WIN32
              +
              407 return static_cast<charset_id>(GetACP());
              +
              408#else
              +
              409 return charset_from_name(nl_langinfo(CODESET));
              +
              410#endif
              411 }
              412
              -
              413 protected:
              -
              414 UINT m_from_wincp, m_to_wincp;
              -
              415#else
              -
              416 protected:
              -
              417 static const char* to_encoding(_In_ charset_id charset)
              -
              418 {
              -
              419 static const char* const encodings[static_cast<std::underlying_type_t<charset_id>>(charset_id::_max)] = {
              -
              420 "", // system
              -
              421 "UTF-7", // utf7
              -
              422 "UTF-8", // utf8
              -
              423#if BYTE_ORDER == BIG_ENDIAN
              -
              424 "UTF-16BE", // utf16
              -
              425 "UTF-32BE", // utf32
              -
              426#else
              -
              427 "UTF-16LE", // utf16
              -
              428 "UTF-32LE", // utf32
              -
              429#endif
              -
              430 "CP1250", // windows1250
              -
              431 "CP1251", // windows1251
              -
              432 "CP1252", // windows1252
              -
              433 };
              -
              434 return
              -
              435 charset == charset_id::system ? nl_langinfo(CODESET) :
              -
              436 encodings[static_cast<std::underlying_type_t<charset_id>>(charset)];
              -
              437 }
              -
              438
              -
              439 protected:
              -
              440 iconv_t m_handle;
              -
              441#endif
              -
              442 };
              +
              413#ifdef _WIN32
              +
              414 protected:
              +
              415 static UINT to_encoding(_In_ charset_id charset)
              +
              416 {
              +
              417 return
              +
              418 charset == charset_id::system ? GetACP() :
              +
              419 charset == charset_id::oem ? GetOEMCP() :
              +
              420 static_cast<UINT>(charset);
              +
              421 }
              +
              422
              +
              423 protected:
              +
              424 UINT m_from_wincp, m_to_wincp;
              +
              425#else
              +
              426 protected:
              +
              427 static const char* to_encoding(_In_ charset_id charset)
              +
              428 {
              +
              429 static const char* const encodings[static_cast<std::underlying_type_t<charset_id>>(charset_id::_max)] = {
              +
              430 "", // system
              +
              431 "UTF-7", // utf7
              +
              432 "UTF-8", // utf8
              +
              433#if BYTE_ORDER == BIG_ENDIAN
              +
              434 "UTF-16BE", // utf16
              +
              435 "UTF-32BE", // utf32
              +
              436#else
              +
              437 "UTF-16LE", // utf16
              +
              438 "UTF-32LE", // utf32
              +
              439#endif
              +
              440 "CP1250", // windows1250
              +
              441 "CP1251", // windows1251
              +
              442 "CP1252", // windows1252
              +
              443 };
              +
              444 return
              +
              445 charset == charset_id::system ? nl_langinfo(CODESET) :
              +
              446 encodings[static_cast<std::underlying_type_t<charset_id>>(charset)];
              +
              447 }
              +
              448
              +
              449 protected:
              +
              450 iconv_t m_handle;
              +
              451#endif
              +
              452 };
              -
              443
              -
              454#ifndef _WIN32
              -
              455 _Deprecated_("For better performance, consider a reusable charset_encoder")
              -
              456#endif
              -
              457 inline void strcat(
              -
              458 _Inout_ std::wstring& dst,
              -
              459 _In_reads_or_z_opt_(count_src) const char* src, _In_ size_t count_src,
              -
              460 _In_ charset_id charset = charset_id::system)
              -
              461 {
              -
              462 charset_encoder<char, wchar_t>(charset, wchar_t_charset).strcat(dst, src, count_src);
              -
              463 }
              -
              464
              -
              465 _Deprecated_("Use stdex::strcat")
              -
              466 inline void str2wstr(
              -
              467 _Inout_ std::wstring& dst,
              -
              468 _In_reads_or_z_opt_(count_src) const char* src, _In_ size_t count_src,
              -
              469 _In_ charset_id charset = charset_id::system)
              -
              470 {
              -
              471 strcat(dst, src, count_src, charset);
              -
              472 }
              -
              473
              -
              483#ifndef _WIN32
              -
              484 _Deprecated_("For better performance, consider a reusable charset_encoder")
              -
              485#endif
              -
              486 inline void strcat(
              -
              487 _Inout_ std::wstring& dst,
              -
              488 _In_ const std::string& src,
              -
              489 _In_ charset_id charset = charset_id::system)
              -
              490 {
              -
              491 strcat(dst, src.data(), src.size(), charset);
              -
              492 }
              -
              493
              -
              494 _Deprecated_("Use stdex::strcat")
              -
              495 inline void str2wstr(
              -
              496 _Inout_ std::wstring& dst,
              -
              497 _In_ const std::string& src,
              -
              498 _In_ charset_id charset = charset_id::system)
              -
              499 {
              -
              500 strcat(dst, src, charset);
              -
              501 }
              -
              502
              -
              513#ifndef _WIN32
              -
              514 _Deprecated_("For better performance, consider a reusable charset_encoder")
              -
              515#endif
              -
              516 inline void strcpy(
              -
              517 _Inout_ std::wstring& dst,
              -
              518 _In_reads_or_z_opt_(count_src) const char* src, _In_ size_t count_src,
              -
              519 _In_ charset_id charset = charset_id::system)
              -
              520 {
              -
              521 dst.clear();
              -
              522 strcat(dst, src, count_src, charset);
              -
              523 }
              -
              524
              -
              534#ifndef _WIN32
              -
              535 _Deprecated_("For better performance, consider a reusable charset_encoder")
              -
              536#endif
              -
              537 inline void strcpy(
              -
              538 _Inout_ std::wstring& dst,
              -
              539 _In_ const std::string& src,
              -
              540 _In_ charset_id charset = charset_id::system)
              -
              541 {
              -
              542 strcpy(dst, src.data(), src.size(), charset);
              -
              543 }
              -
              544
              -
              555#ifndef _WIN32
              -
              556 _Deprecated_("For better performance, consider a reusable charset_encoder")
              -
              557#endif
              -
              558 inline std::wstring str2wstr(
              -
              559 _In_z_ const char* src,
              -
              560 _In_ charset_id charset = charset_id::system)
              -
              561 {
              -
              562 std::wstring dst;
              -
              563 strcat(dst, src, SIZE_MAX, charset);
              -
              564 return dst;
              -
              565 }
              -
              566
              -
              578#ifndef _WIN32
              -
              579 _Deprecated_("For better performance, consider a reusable charset_encoder")
              -
              580#endif
              -
              581 inline std::wstring str2wstr(
              -
              582 _In_reads_or_z_opt_(count_src) const char* src, _In_ size_t count_src,
              -
              583 _In_ charset_id charset = charset_id::system)
              -
              584 {
              -
              585 std::wstring dst;
              -
              586 strcat(dst, src, count_src, charset);
              -
              587 return dst;
              -
              588 }
              -
              589
              -
              600#ifndef _WIN32
              -
              601 _Deprecated_("For better performance, consider a reusable charset_encoder")
              -
              602#endif
              -
              603 inline std::wstring str2wstr(
              -
              604 _In_ const std::string& src,
              -
              605 _In_ charset_id charset = charset_id::system)
              -
              606 {
              -
              607 return str2wstr(src.c_str(), src.size(), charset);
              -
              608 }
              -
              609
              -
              620#ifndef _WIN32
              -
              621 _Deprecated_("For better performance, consider a reusable charset_encoder")
              -
              622#endif
              -
              623 inline void strcat(
              -
              624 _Inout_ std::string& dst,
              -
              625 _In_reads_or_z_opt_(count_src) const wchar_t* src, _In_ size_t count_src,
              -
              626 _In_ charset_id charset = charset_id::system)
              -
              627 {
              -
              628 charset_encoder<wchar_t, char>(wchar_t_charset, charset).strcat(dst, src, count_src);
              -
              629 }
              -
              630
              -
              631 _Deprecated_("Use stdex::strcat")
              -
              632 inline void wstr2str(
              -
              633 _Inout_ std::string& dst,
              -
              634 _In_reads_or_z_opt_(count_src) const wchar_t* src, _In_ size_t count_src,
              -
              635 _In_ charset_id charset = charset_id::system)
              -
              636 {
              -
              637 strcat(dst, src, count_src, charset);
              -
              638 }
              -
              639
              -
              649#ifndef _WIN32
              -
              650 _Deprecated_("For better performance, consider a reusable charset_encoder")
              -
              651#endif
              -
              652 inline void strcat(
              -
              653 _Inout_ std::string& dst,
              -
              654 _In_ const std::wstring& src,
              -
              655 _In_ charset_id charset = charset_id::system)
              -
              656 {
              -
              657 strcat(dst, src.c_str(), src.size(), charset);
              -
              658 }
              -
              659
              -
              660 _Deprecated_("Use stdex::strcat")
              -
              661 inline void wstr2str(
              -
              662 _Inout_ std::string& dst,
              -
              663 _In_ const std::wstring& src,
              -
              664 _In_ charset_id charset = charset_id::system)
              -
              665 {
              -
              666 strcat(dst, src, charset);
              -
              667 }
              -
              668
              -
              679#ifndef _WIN32
              -
              680 _Deprecated_("For better performance, consider a reusable charset_encoder")
              -
              681#endif
              -
              682 inline void strcpy(
              -
              683 _Inout_ std::string& dst,
              -
              684 _In_reads_or_z_opt_(count_src) const wchar_t* src, _In_ size_t count_src,
              -
              685 _In_ charset_id charset = charset_id::system)
              -
              686 {
              -
              687 dst.clear();
              -
              688 strcat(dst, src, count_src, charset);
              -
              689 }
              -
              690
              -
              700#ifndef _WIN32
              -
              701 _Deprecated_("For better performance, consider a reusable charset_encoder")
              -
              702#endif
              -
              703 inline void strcpy(
              -
              704 _Inout_ std::string& dst,
              -
              705 _In_ const std::wstring& src,
              -
              706 _In_ charset_id charset = charset_id::system)
              -
              707 {
              -
              708 strcpy(dst, src.data(), src.size(), charset);
              -
              709 }
              -
              710
              -
              721#ifndef _WIN32
              -
              722 _Deprecated_("For better performance, consider a reusable charset_encoder")
              -
              723#endif
              -
              724 inline std::string wstr2str(
              -
              725 _In_z_ const wchar_t* src,
              -
              726 _In_ charset_id charset = charset_id::system)
              -
              727 {
              -
              728 std::string dst;
              -
              729 strcat(dst, src, SIZE_MAX, charset);
              -
              730 return dst;
              -
              731 }
              -
              732
              -
              744#ifndef _WIN32
              -
              745 _Deprecated_("For better performance, consider a reusable charset_encoder")
              -
              746#endif
              -
              747 inline std::string wstr2str(
              -
              748 _In_reads_or_z_opt_(count_src) const wchar_t* src, _In_ size_t count_src,
              -
              749 _In_ charset_id charset = charset_id::system)
              -
              750 {
              -
              751 std::string dst;
              -
              752 strcat(dst, src, count_src, charset);
              -
              753 return dst;
              -
              754 }
              -
              755
              -
              766#ifndef _WIN32
              -
              767 _Deprecated_("For better performance, consider a reusable charset_encoder")
              -
              768#endif
              -
              769 inline std::string wstr2str(
              -
              770 _In_ const std::wstring& src,
              -
              771 _In_ charset_id charset = charset_id::system)
              -
              772 {
              -
              773 return wstr2str(src.c_str(), src.size(), charset);
              -
              774 }
              -
              775}
              -
              776
              -
              777#ifndef _WIN32
              -
              778#pragma GCC diagnostic pop
              -
              779#endif
              -
              Encoding converter context.
              Definition unicode.hpp:70
              -
              void strcpy(std::basic_string< T_to, _Traits_to, _Alloc_to > &dst, const std::basic_string< T_from, _Traits_from, _Alloc_from > &src)
              Convert string.
              Definition unicode.hpp:307
              -
              std::basic_string< T_to, _Traits_to, _Alloc_to > convert(const std::basic_string< T_from, _Traits_from, _Alloc_from > &src)
              Return converted string.
              Definition unicode.hpp:345
              -
              std::basic_string< T_to, _Traits_to, _Alloc_to > convert(const T_from *src)
              Return converted string.
              Definition unicode.hpp:334
              -
              void strcat(std::basic_string< T_to, _Traits_to, _Alloc_to > &dst, const std::basic_string< T_from, _Traits_from, _Alloc_from > &src)
              Convert string and append to string.
              Definition unicode.hpp:263
              -
              void strcpy(std::basic_string< T_to, _Traits_to, _Alloc_to > &dst, const T_from *src)
              Convert string.
              Definition unicode.hpp:293
              -
              void strcat(std::basic_string< T_to, _Traits_to, _Alloc_to > &dst, _In_reads_or_z_opt_(count_src) const T_from *src, size_t count_src)
              Convert string and append to string.
              Definition unicode.hpp:107
              -
              void strcat(std::basic_string< T_to, _Traits_to, _Alloc_to > &dst, const T_from *src)
              Convert string and append to string.
              Definition unicode.hpp:249
              -
              void strcpy(std::basic_string< T_to, _Traits_to, _Alloc_to > &dst, _In_reads_or_z_opt_(count_src) const T_from *src, size_t count_src)
              Convert string.
              Definition unicode.hpp:278
              -
              std::basic_string< T_to, _Traits_to, _Alloc_to > convert(_In_reads_or_z_opt_(count_src) const T_from *src, size_t count_src)
              Return converted string.
              Definition unicode.hpp:321
              +
              453
              +
              464#ifndef _WIN32
              +
              465 _Deprecated_("For better performance, consider a reusable charset_encoder")
              +
              466#endif
              +
              467 inline void strcat(
              +
              468 _Inout_ std::wstring& dst,
              +
              469 _In_reads_or_z_opt_(count_src) const char* src, _In_ size_t count_src,
              +
              470 _In_ charset_id charset = charset_id::system)
              +
              471 {
              +
              472 charset_encoder<char, wchar_t>(charset, wchar_t_charset).strcat(dst, src, count_src);
              +
              473 }
              +
              474
              +
              475 _Deprecated_("Use stdex::strcat")
              +
              476 inline void str2wstr(
              +
              477 _Inout_ std::wstring& dst,
              +
              478 _In_reads_or_z_opt_(count_src) const char* src, _In_ size_t count_src,
              +
              479 _In_ charset_id charset = charset_id::system)
              +
              480 {
              +
              481 strcat(dst, src, count_src, charset);
              +
              482 }
              +
              483
              +
              493#ifndef _WIN32
              +
              494 _Deprecated_("For better performance, consider a reusable charset_encoder")
              +
              495#endif
              +
              496 inline void strcat(
              +
              497 _Inout_ std::wstring& dst,
              +
              498 _In_ const std::string& src,
              +
              499 _In_ charset_id charset = charset_id::system)
              +
              500 {
              +
              501 strcat(dst, src.data(), src.size(), charset);
              +
              502 }
              +
              503
              +
              504 _Deprecated_("Use stdex::strcat")
              +
              505 inline void str2wstr(
              +
              506 _Inout_ std::wstring& dst,
              +
              507 _In_ const std::string& src,
              +
              508 _In_ charset_id charset = charset_id::system)
              +
              509 {
              +
              510 strcat(dst, src, charset);
              +
              511 }
              +
              512
              +
              523#ifndef _WIN32
              +
              524 _Deprecated_("For better performance, consider a reusable charset_encoder")
              +
              525#endif
              +
              526 inline void strcpy(
              +
              527 _Inout_ std::wstring& dst,
              +
              528 _In_reads_or_z_opt_(count_src) const char* src, _In_ size_t count_src,
              +
              529 _In_ charset_id charset = charset_id::system)
              +
              530 {
              +
              531 dst.clear();
              +
              532 strcat(dst, src, count_src, charset);
              +
              533 }
              +
              534
              +
              544#ifndef _WIN32
              +
              545 _Deprecated_("For better performance, consider a reusable charset_encoder")
              +
              546#endif
              +
              547 inline void strcpy(
              +
              548 _Inout_ std::wstring& dst,
              +
              549 _In_ const std::string& src,
              +
              550 _In_ charset_id charset = charset_id::system)
              +
              551 {
              +
              552 strcpy(dst, src.data(), src.size(), charset);
              +
              553 }
              +
              554
              +
              565#ifndef _WIN32
              +
              566 _Deprecated_("For better performance, consider a reusable charset_encoder")
              +
              567#endif
              +
              568 inline std::wstring str2wstr(
              +
              569 _In_z_ const char* src,
              +
              570 _In_ charset_id charset = charset_id::system)
              +
              571 {
              +
              572 std::wstring dst;
              +
              573 strcat(dst, src, SIZE_MAX, charset);
              +
              574 return dst;
              +
              575 }
              +
              576
              +
              588#ifndef _WIN32
              +
              589 _Deprecated_("For better performance, consider a reusable charset_encoder")
              +
              590#endif
              +
              591 inline std::wstring str2wstr(
              +
              592 _In_reads_or_z_opt_(count_src) const char* src, _In_ size_t count_src,
              +
              593 _In_ charset_id charset = charset_id::system)
              +
              594 {
              +
              595 std::wstring dst;
              +
              596 strcat(dst, src, count_src, charset);
              +
              597 return dst;
              +
              598 }
              +
              599
              +
              610#ifndef _WIN32
              +
              611 _Deprecated_("For better performance, consider a reusable charset_encoder")
              +
              612#endif
              +
              613 inline std::wstring str2wstr(
              +
              614 _In_ const std::string& src,
              +
              615 _In_ charset_id charset = charset_id::system)
              +
              616 {
              +
              617 return str2wstr(src.c_str(), src.size(), charset);
              +
              618 }
              +
              619
              +
              630#ifndef _WIN32
              +
              631 _Deprecated_("For better performance, consider a reusable charset_encoder")
              +
              632#endif
              +
              633 inline void strcat(
              +
              634 _Inout_ std::string& dst,
              +
              635 _In_reads_or_z_opt_(count_src) const wchar_t* src, _In_ size_t count_src,
              +
              636 _In_ charset_id charset = charset_id::system)
              +
              637 {
              +
              638 charset_encoder<wchar_t, char>(wchar_t_charset, charset).strcat(dst, src, count_src);
              +
              639 }
              +
              640
              +
              641 _Deprecated_("Use stdex::strcat")
              +
              642 inline void wstr2str(
              +
              643 _Inout_ std::string& dst,
              +
              644 _In_reads_or_z_opt_(count_src) const wchar_t* src, _In_ size_t count_src,
              +
              645 _In_ charset_id charset = charset_id::system)
              +
              646 {
              +
              647 strcat(dst, src, count_src, charset);
              +
              648 }
              +
              649
              +
              659#ifndef _WIN32
              +
              660 _Deprecated_("For better performance, consider a reusable charset_encoder")
              +
              661#endif
              +
              662 inline void strcat(
              +
              663 _Inout_ std::string& dst,
              +
              664 _In_ const std::wstring& src,
              +
              665 _In_ charset_id charset = charset_id::system)
              +
              666 {
              +
              667 strcat(dst, src.c_str(), src.size(), charset);
              +
              668 }
              +
              669
              +
              670 _Deprecated_("Use stdex::strcat")
              +
              671 inline void wstr2str(
              +
              672 _Inout_ std::string& dst,
              +
              673 _In_ const std::wstring& src,
              +
              674 _In_ charset_id charset = charset_id::system)
              +
              675 {
              +
              676 strcat(dst, src, charset);
              +
              677 }
              +
              678
              +
              689#ifndef _WIN32
              +
              690 _Deprecated_("For better performance, consider a reusable charset_encoder")
              +
              691#endif
              +
              692 inline void strcpy(
              +
              693 _Inout_ std::string& dst,
              +
              694 _In_reads_or_z_opt_(count_src) const wchar_t* src, _In_ size_t count_src,
              +
              695 _In_ charset_id charset = charset_id::system)
              +
              696 {
              +
              697 dst.clear();
              +
              698 strcat(dst, src, count_src, charset);
              +
              699 }
              +
              700
              +
              710#ifndef _WIN32
              +
              711 _Deprecated_("For better performance, consider a reusable charset_encoder")
              +
              712#endif
              +
              713 inline void strcpy(
              +
              714 _Inout_ std::string& dst,
              +
              715 _In_ const std::wstring& src,
              +
              716 _In_ charset_id charset = charset_id::system)
              +
              717 {
              +
              718 strcpy(dst, src.data(), src.size(), charset);
              +
              719 }
              +
              720
              +
              731#ifndef _WIN32
              +
              732 _Deprecated_("For better performance, consider a reusable charset_encoder")
              +
              733#endif
              +
              734 inline std::string wstr2str(
              +
              735 _In_z_ const wchar_t* src,
              +
              736 _In_ charset_id charset = charset_id::system)
              +
              737 {
              +
              738 std::string dst;
              +
              739 strcat(dst, src, SIZE_MAX, charset);
              +
              740 return dst;
              +
              741 }
              +
              742
              +
              754#ifndef _WIN32
              +
              755 _Deprecated_("For better performance, consider a reusable charset_encoder")
              +
              756#endif
              +
              757 inline std::string wstr2str(
              +
              758 _In_reads_or_z_opt_(count_src) const wchar_t* src, _In_ size_t count_src,
              +
              759 _In_ charset_id charset = charset_id::system)
              +
              760 {
              +
              761 std::string dst;
              +
              762 strcat(dst, src, count_src, charset);
              +
              763 return dst;
              +
              764 }
              +
              765
              +
              776#ifndef _WIN32
              +
              777 _Deprecated_("For better performance, consider a reusable charset_encoder")
              +
              778#endif
              +
              779 inline std::string wstr2str(
              +
              780 _In_ const std::wstring& src,
              +
              781 _In_ charset_id charset = charset_id::system)
              +
              782 {
              +
              783 return wstr2str(src.c_str(), src.size(), charset);
              +
              784 }
              +
              785}
              +
              786
              +
              787#ifndef _WIN32
              +
              788#pragma GCC diagnostic pop
              +
              789#endif
              +
              Encoding converter context.
              Definition unicode.hpp:117
              +
              void strcpy(std::basic_string< T_to, _Traits_to, _Alloc_to > &dst, const std::basic_string< T_from, _Traits_from, _Alloc_from > &src)
              Convert string.
              Definition unicode.hpp:354
              +
              std::basic_string< T_to, _Traits_to, _Alloc_to > convert(const std::basic_string< T_from, _Traits_from, _Alloc_from > &src)
              Return converted string.
              Definition unicode.hpp:392
              +
              std::basic_string< T_to, _Traits_to, _Alloc_to > convert(const T_from *src)
              Return converted string.
              Definition unicode.hpp:381
              +
              void strcat(std::basic_string< T_to, _Traits_to, _Alloc_to > &dst, const std::basic_string< T_from, _Traits_from, _Alloc_from > &src)
              Convert string and append to string.
              Definition unicode.hpp:310
              +
              void strcpy(std::basic_string< T_to, _Traits_to, _Alloc_to > &dst, const T_from *src)
              Convert string.
              Definition unicode.hpp:340
              +
              void strcat(std::basic_string< T_to, _Traits_to, _Alloc_to > &dst, _In_reads_or_z_opt_(count_src) const T_from *src, size_t count_src)
              Convert string and append to string.
              Definition unicode.hpp:154
              +
              void strcat(std::basic_string< T_to, _Traits_to, _Alloc_to > &dst, const T_from *src)
              Convert string and append to string.
              Definition unicode.hpp:296
              +
              void strcpy(std::basic_string< T_to, _Traits_to, _Alloc_to > &dst, _In_reads_or_z_opt_(count_src) const T_from *src, size_t count_src)
              Convert string.
              Definition unicode.hpp:325
              +
              std::basic_string< T_to, _Traits_to, _Alloc_to > convert(_In_reads_or_z_opt_(count_src) const T_from *src, size_t count_src)
              Return converted string.
              Definition unicode.hpp:368
              diff --git a/unionstdex_1_1md2__t-members.html b/unionstdex_1_1md2__t-members.html index 394cef66d..a2e59516a 100644 --- a/unionstdex_1_1md2__t-members.html +++ b/unionstdex_1_1md2__t-members.html @@ -89,7 +89,7 @@ $(function() {
              diff --git a/unionstdex_1_1md2__t.html b/unionstdex_1_1md2__t.html index efc20fdb3..ea7e21f3f 100644 --- a/unionstdex_1_1md2__t.html +++ b/unionstdex_1_1md2__t.html @@ -123,7 +123,7 @@ Friends
              diff --git a/unionstdex_1_1sha256__t-members.html b/unionstdex_1_1sha256__t-members.html index 2d1b5ac82..5935ba5d0 100644 --- a/unionstdex_1_1sha256__t-members.html +++ b/unionstdex_1_1sha256__t-members.html @@ -89,7 +89,7 @@ $(function() {
              diff --git a/unionstdex_1_1sha256__t.html b/unionstdex_1_1sha256__t.html index e607701ec..0c9031c64 100644 --- a/unionstdex_1_1sha256__t.html +++ b/unionstdex_1_1sha256__t.html @@ -123,7 +123,7 @@ Friends
              diff --git a/unionstdex_1_1sha__t-members.html b/unionstdex_1_1sha__t-members.html index bfefe630f..b68836067 100644 --- a/unionstdex_1_1sha__t-members.html +++ b/unionstdex_1_1sha__t-members.html @@ -89,7 +89,7 @@ $(function() {
              diff --git a/unionstdex_1_1sha__t.html b/unionstdex_1_1sha__t.html index bcac10ea8..546fa3b7a 100644 --- a/unionstdex_1_1sha__t.html +++ b/unionstdex_1_1sha__t.html @@ -123,7 +123,7 @@ Friends
              diff --git a/uuid_8hpp_source.html b/uuid_8hpp_source.html index 1c22fd5d3..b22204bb8 100644 --- a/uuid_8hpp_source.html +++ b/uuid_8hpp_source.html @@ -145,7 +145,7 @@ $(document).ready(function() { init_codefold(0); });
              diff --git a/vector__queue_8hpp_source.html b/vector__queue_8hpp_source.html index 1442ad749..05582f143 100644 --- a/vector__queue_8hpp_source.html +++ b/vector__queue_8hpp_source.html @@ -453,7 +453,7 @@ $(document).ready(function() { init_codefold(0); });
              diff --git a/watchdog_8cpp_source.html b/watchdog_8cpp_source.html index 179dcfb73..f9d6461f9 100644 --- a/watchdog_8cpp_source.html +++ b/watchdog_8cpp_source.html @@ -118,7 +118,7 @@ $(document).ready(function() { init_codefold(0); });
              diff --git a/watchdog_8hpp_source.html b/watchdog_8hpp_source.html index 069353657..73c7cf1e6 100644 --- a/watchdog_8hpp_source.html +++ b/watchdog_8hpp_source.html @@ -176,7 +176,7 @@ $(document).ready(function() { init_codefold(0); });
              diff --git a/windows_8h_source.html b/windows_8h_source.html index 7e2eb338d..3babd94c8 100644 --- a/windows_8h_source.html +++ b/windows_8h_source.html @@ -109,7 +109,7 @@ $(document).ready(function() { init_codefold(0); });